private void postUpdate() { final EventListenerGroup<PostUpdateEventListener> listenerGroup = listenerGroup( EventType.POST_UPDATE ); if ( listenerGroup.isEmpty() ) { return; } final PostUpdateEvent event = new PostUpdateEvent( getInstance(), getId(), state, previousState, dirtyFields, getPersister(), eventSource() ); for ( PostUpdateEventListener listener : listenerGroup.listeners() ) { listener.onPostUpdate( event ); } }
@PostConstruct public void registerListeners() { // TODO: This method of getting a reference to the SessionFactory (and thereforce the ServiceRegistry) is Deprecated. Find out the right Hibernate 5.2 way to do this. EventListenerRegistry registry = entityManagerFactory.getSessionFactory().getServiceRegistry().getService(EventListenerRegistry.class); if (preInsertEventListeners != null) { registry.appendListeners(EventType.PRE_INSERT, preInsertEventListeners.toArray(new PreInsertEventListener[preInsertEventListeners.size()])); } if (postInsertEventListeners != null) { registry.appendListeners(EventType.POST_INSERT, postInsertEventListeners.toArray(new PostInsertEventListener[postInsertEventListeners.size()])); } if (preUpdateEventListeners != null) { registry.appendListeners(EventType.PRE_UPDATE, preUpdateEventListeners.toArray(new PreUpdateEventListener[preUpdateEventListeners.size()])); } if (postUpdateEventListeners != null) { registry.appendListeners(EventType.POST_UPDATE, postUpdateEventListeners.toArray(new PostUpdateEventListener[postUpdateEventListeners.size()])); } if (preDeleteEventListeners != null) { registry.appendListeners(EventType.PRE_DELETE, preDeleteEventListeners.toArray(new PreDeleteEventListener[preDeleteEventListeners.size()])); } if (postDeleteEventListeners != null) { registry.appendListeners(EventType.POST_DELETE, postDeleteEventListeners.toArray(new PostDeleteEventListener[postDeleteEventListeners.size()])); } }
private void postCommitUpdate(boolean success) { final EventListenerGroup<PostUpdateEventListener> listenerGroup = listenerGroup( EventType.POST_COMMIT_UPDATE ); if ( listenerGroup.isEmpty() ) { return; } final PostUpdateEvent event = new PostUpdateEvent( getInstance(), getId(), state, previousState, dirtyFields, getPersister(), eventSource() ); for ( PostUpdateEventListener listener : listenerGroup.listeners() ) { if ( PostCommitUpdateEventListener.class.isInstance( listener ) ) { if ( success ) { listener.onPostUpdate( event ); } else { ((PostCommitUpdateEventListener) listener).onPostUpdateCommitFailed( event ); } } else { //default to the legacy implementation that always fires the event listener.onPostUpdate( event ); } } }
@Override protected boolean hasPostCommitEventListeners() { final EventListenerGroup<PostUpdateEventListener> group = listenerGroup( EventType.POST_COMMIT_UPDATE ); for ( PostUpdateEventListener listener : group.listeners() ) { if ( listener.requiresPostCommitHanding( getPersister() ) ) { return true; } } return false; }
@Override protected void configure() { bind(TestEventListener.class) .to(PostDeleteEventListener.class) .to(PreDeleteEventListener.class) .to(PreInsertEventListener.class) .to(PostInsertEventListener.class) .to(PreUpdateEventListener.class) .to(PostUpdateEventListener.class) .to(PostCommitInsertEventListener.class) .to(PostCommitUpdateEventListener.class) .to(PostCommitDeleteEventListener.class) .in(PerThread.class); }
/** * Test the application event injectors. */ @Test public void testEventInjection() { // Create a fake application. SessionFactory factoryFactory = locator .getService(SessionFactory.class); Assert.assertNotNull(factoryFactory); ServiceRegistry serviceRegistry = ((SessionFactoryImpl) factoryFactory) .getServiceRegistry(); EventListenerRegistry eventRegistry = serviceRegistry .getService(EventListenerRegistry.class); EventListenerGroup<PreInsertEventListener> priGroup = eventRegistry .getEventListenerGroup(EventType.PRE_INSERT); assertContainsListener(priGroup); EventListenerGroup<PostInsertEventListener> poiGroup = eventRegistry .getEventListenerGroup(EventType.POST_INSERT); assertContainsListener(poiGroup); EventListenerGroup<PreUpdateEventListener> pruGroup = eventRegistry .getEventListenerGroup(EventType.PRE_UPDATE); assertContainsListener(pruGroup); EventListenerGroup<PostUpdateEventListener> pouGroup = eventRegistry .getEventListenerGroup(EventType.POST_UPDATE); assertContainsListener(pouGroup); EventListenerGroup<PreDeleteEventListener> prdGroup = eventRegistry .getEventListenerGroup(EventType.PRE_DELETE); assertContainsListener(prdGroup); EventListenerGroup<PostDeleteEventListener> podGroup = eventRegistry .getEventListenerGroup(EventType.POST_DELETE); assertContainsListener(podGroup); EventListenerGroup<PostInsertEventListener> pciGroup = eventRegistry .getEventListenerGroup(EventType.POST_COMMIT_INSERT); assertContainsListener(pciGroup); EventListenerGroup<PostUpdateEventListener> pcuGroup = eventRegistry .getEventListenerGroup(EventType.POST_COMMIT_UPDATE); assertContainsListener(pcuGroup); EventListenerGroup<PostDeleteEventListener> pcdGroup = eventRegistry .getEventListenerGroup(EventType.POST_COMMIT_DELETE); assertContainsListener(pcdGroup); }