@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 boolean preDelete() { boolean veto = false; final EventListenerGroup<PreDeleteEventListener> listenerGroup = listenerGroup( EventType.PRE_DELETE ); if ( listenerGroup.isEmpty() ) { return veto; } final PreDeleteEvent event = new PreDeleteEvent( getInstance(), getId(), state, getPersister(), eventSource() ); for ( PreDeleteEventListener listener : listenerGroup.listeners() ) { veto |= listener.onPreDelete( event ); } return veto; }
@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); }