private void prepareEventListeners(MetadataImplementor metadata) { final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService( EventListenerRegistry.class ); final ConfigurationService cfgService = serviceRegistry.getService( ConfigurationService.class ); final ClassLoaderService classLoaderService = serviceRegistry.getService( ClassLoaderService.class ); eventListenerRegistry.prepare( metadata ); for ( Map.Entry entry : ( (Map<?, ?>) cfgService.getSettings() ).entrySet() ) { if ( !String.class.isInstance( entry.getKey() ) ) { continue; } final String propertyName = (String) entry.getKey(); if ( !propertyName.startsWith( org.hibernate.jpa.AvailableSettings.EVENT_LISTENER_PREFIX ) ) { continue; } final String eventTypeName = propertyName.substring( org.hibernate.jpa.AvailableSettings.EVENT_LISTENER_PREFIX.length() + 1 ); final EventType eventType = EventType.resolveEventTypeByName( eventTypeName ); final EventListenerGroup eventListenerGroup = eventListenerRegistry.getEventListenerGroup( eventType ); for ( String listenerImpl : ( (String) entry.getValue() ).split( " ," ) ) { eventListenerGroup.appendListener( instantiate( listenerImpl, classLoaderService ) ); } } }
private void integrate(SessionFactoryServiceRegistry serviceRegistry) { serviceRegistry.getService( EventListenerRegistry.class ) .getEventListenerGroup( EventType.PRE_UPDATE ) .appendListener( InitializingPreUpdateEventListener.INSTANCE ); }
private void applyCfgXmlValues(LoadedConfig aggregatedConfig, SessionFactoryServiceRegistry serviceRegistry) { final JaccService jaccService = serviceRegistry.getService( JaccService.class ); if ( jaccService.getContextId() != null ) { final JaccPermissionDeclarations permissions = aggregatedConfig.getJaccPermissions( jaccService.getContextId() ); if ( permissions != null ) { for ( GrantedPermission grantedPermission : permissions.getPermissionDeclarations() ) { jaccService.addPermission( grantedPermission ); } } } if ( aggregatedConfig.getEventListenerMap() != null ) { final ClassLoaderService cls = serviceRegistry.getService( ClassLoaderService.class ); final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService( EventListenerRegistry.class ); for ( Map.Entry<EventType, Set<String>> entry : aggregatedConfig.getEventListenerMap().entrySet() ) { final EventListenerGroup group = eventListenerRegistry.getEventListenerGroup( entry.getKey() ); for ( String listenerClassName : entry.getValue() ) { try { group.appendListener( cls.classForName( listenerClassName ).newInstance() ); } catch (Exception e) { throw new ConfigurationException( "Unable to instantiate event listener class : " + listenerClassName, e ); } } } } }
@Test @TestForIssue(jiraKey = "HHH-7478") public void testTransactionProcessSynchronization() { final EventListenerRegistry registry = sessionFactory().getServiceRegistry() .getService( EventListenerRegistry.class ); final CountingPostInsertTransactionBoundaryListener listener = new CountingPostInsertTransactionBoundaryListener(); registry.getEventListenerGroup( EventType.POST_INSERT ).appendListener( listener ); Session session = openSession(); session.getTransaction().begin(); StrTestEntity entity = new StrTestEntity( "str1" ); session.save( entity ); session.getTransaction().commit(); session.close(); // Post insert listener invoked three times - before/after insertion of original data, // revision entity and audit row. Assert.assertEquals( 3, listener.getBeforeCount() ); Assert.assertEquals( 3, listener.getAfterCount() ); }
@PostConstruct public void registerListener() { EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry().getService( EventListenerRegistry.class); registry.getEventListenerGroup(EventType.POST_LOAD).appendListener(this); }
private <T> void register(EventType<T> eventType, T t) { EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry().getService(EventListenerRegistry.class); log.info("Registering {} listener on {} events", t.getClass(), eventType); registry.getEventListenerGroup(eventType).appendListener(t); }
/** * Appends the {@link LifecyclePostLoadEventListener}. * <p> * {@inheritDoc} */ @Override public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { serviceRegistry.getService(EventListenerRegistry.class) .getEventListenerGroup(EventType.POST_LOAD) .appendListener(postLoadListener); }
/** * Appends the {@link LifecyclePostLoadEventListener}. * <p> * {@inheritDoc} */ @Override public void integrate(MetadataImplementor metadata, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { serviceRegistry.getService(EventListenerRegistry.class) .getEventListenerGroup(EventType.POST_LOAD) .appendListener(postLoadListener); }
/** * Looks for hibernate event listeners and register all them. * * @param registry The event listener registry. */ @SuppressWarnings({"unchecked", "rawtypes" }) private void configure(final EventListenerRegistry registry) { Collection<EventType> values = EventType.values(); for (EventType eventType : values) { EventListenerGroup group = registry.getEventListenerGroup(eventType); Collection listeners = applicationContext.getBeansOfType(eventType.baseListenerInterface()) .values(); for (Object listener : listeners) { group.appendListener(listener); } } } }
@PostConstruct public void registerListeners() { if (entityManagerFactory instanceof HibernateEntityManagerFactory) { final HibernateEntityManagerFactory hibernateEntityManagerFactory = (HibernateEntityManagerFactory) entityManagerFactory; final SessionFactoryImpl sessionFactory = (SessionFactoryImpl) hibernateEntityManagerFactory.getSessionFactory(); final EventListenerRegistry registry = sessionFactory.getServiceRegistry() .getService(EventListenerRegistry.class); registry.getEventListenerGroup(EventType.PRE_INSERT) .appendListener(serviceInstanceIdEventListener); } } }
private void prepareEventListeners(Metamodel metamodel) { final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService( EventListenerRegistry.class ); final ConfigurationService cfgService = serviceRegistry.getService( ConfigurationService.class ); final ClassLoaderService classLoaderService = serviceRegistry.getService( ClassLoaderService.class ); eventListenerRegistry.prepare( metamodel ); for ( Map.Entry entry : ( (Map<?, ?>) cfgService.getSettings() ).entrySet() ) { if ( !String.class.isInstance( entry.getKey() ) ) { continue; } final String propertyName = (String) entry.getKey(); if ( !propertyName.startsWith( org.hibernate.jpa.AvailableSettings.EVENT_LISTENER_PREFIX ) ) { continue; } final String eventTypeName = propertyName.substring( org.hibernate.jpa.AvailableSettings.EVENT_LISTENER_PREFIX.length() + 1 ); final EventType eventType = EventType.resolveEventTypeByName( eventTypeName ); final EventListenerGroup eventListenerGroup = eventListenerRegistry.getEventListenerGroup( eventType ); for ( String listenerImpl : ( (String) entry.getValue() ).split( " ," ) ) { eventListenerGroup.appendListener( instantiate( listenerImpl, classLoaderService ) ); } } }
@Override public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService(EventListenerRegistry.class); final EventListenerGroup<MergeEventListener> mergeListeners = eventListenerRegistry.getEventListenerGroup(EventType.MERGE); mergeListeners.addDuplicationStrategy(USE_DERIVED); mergeListeners.appendListener(new IdTransferringMergeEventListener()); }
private void attachEventContextManagingListenersIfRequired(SessionFactoryServiceRegistry serviceRegistry) { if ( !EventContextManager.isEventContextRequired( serviceRegistry ) ) { return; } EventListenerRegistry eventListenerRegistry = serviceRegistry.getService( EventListenerRegistry.class ); EventContextManager stateManager = serviceRegistry.getService( EventContextManager.class ); eventListenerRegistry.addDuplicationStrategy( EventContextManagingAutoFlushEventListenerDuplicationStrategy.INSTANCE ); eventListenerRegistry.getEventListenerGroup( EventType.AUTO_FLUSH ).appendListener( new EventContextManagingAutoFlushEventListener( stateManager ) ); eventListenerRegistry.addDuplicationStrategy( EventContextManagingFlushEventListenerDuplicationStrategy.INSTANCE ); eventListenerRegistry.getEventListenerGroup( EventType.FLUSH ).appendListener( new EventContextManagingFlushEventListener( stateManager ) ); eventListenerRegistry.addDuplicationStrategy( EventContextManagingPersistEventListenerDuplicationStrategy.INSTANCE ); eventListenerRegistry.getEventListenerGroup( EventType.PERSIST ).appendListener( new EventContextManagingPersistEventListener( stateManager ) ); }
eventListenerRegistry.getEventListenerGroup(EventType.POST_INSERT).appendListener(listener); eventListenerRegistry.getEventListenerGroup(EventType.POST_UPDATE).appendListener(listener); eventListenerRegistry.getEventListenerGroup(EventType.POST_DELETE).appendListener(listener); eventListenerRegistry.getEventListenerGroup(EventType.PRE_COLLECTION_UPDATE).appendListener(listener); eventListenerRegistry.getEventListenerGroup(EventType.PERSIST).appendListener(new HibernatePersistListener()); eventListenerRegistry.getEventListenerGroup(EventType.PERSIST_ONFLUSH).addDuplicationStrategy(new OverrideWrapStrategy<PersistEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.PERSIST_ONFLUSH).appendListener(new HibernatePersistOnFlushListener()); eventListenerRegistry.getEventListenerGroup(EventType.SAVE_UPDATE).addDuplicationStrategy(new OverrideWrapStrategy<SaveOrUpdateEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.SAVE_UPDATE).appendListener(new HibernateSaveOrUpdateListener()); eventListenerRegistry.getEventListenerGroup(EventType.MERGE).addDuplicationStrategy(new OverrideWrapStrategy<MergeEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.MERGE).appendListener(new HibernateDataChangeMergeListener()); eventListenerRegistry.getEventListenerGroup(EventType.DELETE).addDuplicationStrategy(new OverrideWrapStrategy<DeleteEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.DELETE).appendListener(new HibernateDeleteListener()); eventListenerRegistry.getEventListenerGroup(EventType.LOCK).addDuplicationStrategy(new OverrideWrapStrategy<LockEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.LOCK).appendListener(new HibernateLockListener()); eventListenerRegistry.getEventListenerGroup(EventType.AUTO_FLUSH).addDuplicationStrategy(new OverrideWrapStrategy<AutoFlushEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.AUTO_FLUSH).appendListener(new HibernateAutoFlushListener()); eventListenerRegistry.getEventListenerGroup(EventType.FLUSH).addDuplicationStrategy(new OverrideWrapStrategy<FlushEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.FLUSH).appendListener(new HibernateFlushListener());
public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService(EventListenerRegistry.class); try { HibernateDataPublishListener listener = new HibernateDataPublishListener(); eventListenerRegistry.getEventListenerGroup(EventType.POST_INSERT).appendListener(listener); eventListenerRegistry.getEventListenerGroup(EventType.POST_UPDATE).appendListener(listener); eventListenerRegistry.getEventListenerGroup(EventType.POST_DELETE).appendListener(listener); eventListenerRegistry.getEventListenerGroup(EventType.PERSIST).addDuplicationStrategy(new OverrideWrapStrategy<PersistEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.PERSIST).appendListener(new HibernatePersistListener()); eventListenerRegistry.getEventListenerGroup(EventType.PERSIST_ONFLUSH).addDuplicationStrategy(new OverrideWrapStrategy<PersistEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.PERSIST_ONFLUSH).appendListener(new HibernatePersistOnFlushListener()); eventListenerRegistry.getEventListenerGroup(EventType.SAVE_UPDATE).addDuplicationStrategy(new OverrideWrapStrategy<SaveOrUpdateEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.SAVE_UPDATE).appendListener(new HibernateSaveOrUpdateListener()); eventListenerRegistry.getEventListenerGroup(EventType.MERGE).addDuplicationStrategy(new OverrideWrapStrategy<MergeEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.MERGE).appendListener(new HibernateMergeListener()); eventListenerRegistry.getEventListenerGroup(EventType.DELETE).addDuplicationStrategy(new OverrideWrapStrategy<DeleteEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.DELETE).appendListener(new HibernateDeleteListener()); eventListenerRegistry.getEventListenerGroup(EventType.LOCK).addDuplicationStrategy(new OverrideWrapStrategy<LockEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.LOCK).appendListener(new HibernateLockListener()); eventListenerRegistry.getEventListenerGroup(EventType.AUTO_FLUSH).addDuplicationStrategy(new OverrideWrapStrategy<AutoFlushEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.AUTO_FLUSH).appendListener(new HibernateAutoFlushListener()); eventListenerRegistry.getEventListenerGroup(EventType.FLUSH).addDuplicationStrategy(new OverrideWrapStrategy<FlushEventListener>()); eventListenerRegistry.getEventListenerGroup(EventType.FLUSH).appendListener(new HibernateFlushListener()); } catch (Exception e) { throw new RuntimeException("Could not setup Hibernate 4 listeners", e); } }
private void applyCfgXmlValues(LoadedConfig aggregatedConfig, SessionFactoryServiceRegistry serviceRegistry) { final JaccService jaccService = serviceRegistry.getService( JaccService.class ); if ( jaccService.getContextId() != null ) { final JaccPermissionDeclarations permissions = aggregatedConfig.getJaccPermissions( jaccService.getContextId() ); if ( permissions != null ) { for ( GrantedPermission grantedPermission : permissions.getPermissionDeclarations() ) { jaccService.addPermission( grantedPermission ); } } } if ( aggregatedConfig.getEventListenerMap() != null ) { final ClassLoaderService cls = serviceRegistry.getService( ClassLoaderService.class ); final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService( EventListenerRegistry.class ); for ( Map.Entry<EventType, Set<String>> entry : aggregatedConfig.getEventListenerMap().entrySet() ) { final EventListenerGroup group = eventListenerRegistry.getEventListenerGroup( entry.getKey() ); for ( String listenerClassName : entry.getValue() ) { try { group.appendListener( cls.classForName( listenerClassName ).newInstance() ); } catch (Exception e) { throw new ConfigurationException( "Unable to instantiate event listener class : " + listenerClassName, e ); } } } } }
final EventListenerGroup eventListenerGroup = eventListenerRegistry.getEventListenerGroup( eventType ); for ( String listenerImpl : ( (String) entry.getValue() ).split( " ," ) ) { eventListenerGroup.appendListener( instantiate( listenerImpl, serviceRegistry ) );
final EventListenerGroup eventListenerGroup = eventListenerRegistry.getEventListenerGroup( eventType ); for ( String listenerImpl : ( (String) entry.getValue() ).split( " ," ) ) { eventListenerGroup.appendListener( instantiate( listenerImpl, serviceRegistry ) );
MergeEventListener mergeEventListener = new ObjectModelMergeEventListener(mergeEventListenerGroup.listeners()); mergeEventListenerGroup.clear(); mergeEventListenerGroup.appendListener(mergeEventListener);
/** * Builds the sessionFactory as configured so far. */ public FullTextSessionBuilder build() { final Configuration hibConfiguration = buildBaseConfiguration(); for ( Class<?> annotatedClass : annotatedClasses ) { hibConfiguration.addAnnotatedClass( annotatedClass ); } hibConfiguration.getProperties().putAll( cfg ); StandardServiceRegistry serviceRegistry = buildServiceRegistry( cfg ); SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) hibConfiguration.buildSessionFactory( serviceRegistry ); ServiceRegistryImplementor serviceRegistryImplementor = sessionFactoryImpl.getServiceRegistry(); EventListenerRegistry registry = serviceRegistryImplementor.getService( EventListenerRegistry.class ); for ( LoadEventListener listener : additionalLoadEventListeners ) { registry.getEventListenerGroup( EventType.LOAD ).appendListener( listener ); } sessionFactory = sessionFactoryImpl; return this; }