Search in sources :

Example 6 with EventListenerRegistry

use of org.hibernate.event.service.spi.EventListenerRegistry in project hibernate-orm by hibernate.

the class MergeListPreAndPostPersistTest method addEntityListeners.

private void addEntityListeners(final Order order) {
    EventListenerRegistry registry = sessionFactory().getServiceRegistry().getService(EventListenerRegistry.class);
    registry.setListeners(EventType.PRE_INSERT, new PreInsertEventListener() {

        @Override
        public boolean onPreInsert(PreInsertEvent event) {
            if (Order.class.isInstance(event.getEntity())) {
                assertEquals(order, event.getEntity());
                assertEquals(order.items, ((Order) event.getEntity()).items);
            }
            return false;
        }
    });
    registry.setListeners(EventType.POST_INSERT, new PostInsertEventListener() {

        public void onPostInsert(PostInsertEvent event) {
            if (Order.class.isInstance(event.getEntity())) {
                assertEquals(order, event.getEntity());
                assertEquals(order.items, ((Order) event.getEntity()).items);
            }
        }

        public boolean requiresPostCommitHanding(EntityPersister persister) {
            return false;
        }
    });
}
Also used : EntityPersister(org.hibernate.persister.entity.EntityPersister) PostInsertEventListener(org.hibernate.event.spi.PostInsertEventListener) PreInsertEventListener(org.hibernate.event.spi.PreInsertEventListener) PreInsertEvent(org.hibernate.event.spi.PreInsertEvent) PostInsertEvent(org.hibernate.event.spi.PostInsertEvent) EventListenerRegistry(org.hibernate.event.service.spi.EventListenerRegistry)

Example 7 with EventListenerRegistry

use of org.hibernate.event.service.spi.EventListenerRegistry in project hibernate-orm by hibernate.

the class MergeListPreAndPostPersistWithIdentityTest method addEntityListeners.

private void addEntityListeners(final Order order) {
    EventListenerRegistry registry = sessionFactory().getServiceRegistry().getService(EventListenerRegistry.class);
    registry.setListeners(EventType.PRE_INSERT, new PreInsertEventListener() {

        @Override
        public boolean onPreInsert(PreInsertEvent event) {
            if (Order.class.isInstance(event.getEntity())) {
                assertEquals(order, event.getEntity());
                assertEquals(order.items, ((Order) event.getEntity()).items);
            }
            return false;
        }
    });
    registry.setListeners(EventType.POST_INSERT, new PostInsertEventListener() {

        public void onPostInsert(PostInsertEvent event) {
            if (Order.class.isInstance(event.getEntity())) {
                assertEquals(order, event.getEntity());
                assertEquals(order.items, ((Order) event.getEntity()).items);
            }
        }

        public boolean requiresPostCommitHanding(EntityPersister persister) {
            return false;
        }
    });
}
Also used : EntityPersister(org.hibernate.persister.entity.EntityPersister) PostInsertEventListener(org.hibernate.event.spi.PostInsertEventListener) PreInsertEventListener(org.hibernate.event.spi.PreInsertEventListener) PreInsertEvent(org.hibernate.event.spi.PreInsertEvent) PostInsertEvent(org.hibernate.event.spi.PostInsertEvent) EventListenerRegistry(org.hibernate.event.service.spi.EventListenerRegistry)

Example 8 with EventListenerRegistry

use of org.hibernate.event.service.spi.EventListenerRegistry in project hibernate-orm by hibernate.

the class JpaIntegrator method integrate.

/**
	 * Perform integration.
	 *
	 * @param metadata The "compiled" representation of the mapping information
	 * @param sessionFactory The session factory being created
	 * @param serviceRegistry The session factory's service registry
	 */
public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
    // first, register the JPA-specific persist cascade style
    try {
        oldPersistCascadeStyle = CascadeStyles.getCascadeStyle("persist");
    } catch (Exception e) {
    }
    CascadeStyles.registerCascadeStyle("persist", new PersistCascadeStyle());
    // then prepare listeners
    final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);
    eventListenerRegistry.addDuplicationStrategy(JPA_DUPLICATION_STRATEGY);
    // op listeners
    eventListenerRegistry.setListeners(EventType.AUTO_FLUSH, JpaAutoFlushEventListener.INSTANCE);
    eventListenerRegistry.setListeners(EventType.DELETE, new JpaDeleteEventListener());
    eventListenerRegistry.setListeners(EventType.FLUSH_ENTITY, new JpaFlushEntityEventListener());
    eventListenerRegistry.setListeners(EventType.FLUSH, JpaFlushEventListener.INSTANCE);
    eventListenerRegistry.setListeners(EventType.MERGE, new JpaMergeEventListener());
    eventListenerRegistry.setListeners(EventType.PERSIST, new JpaPersistEventListener());
    eventListenerRegistry.setListeners(EventType.PERSIST_ONFLUSH, new JpaPersistOnFlushEventListener());
    eventListenerRegistry.setListeners(EventType.SAVE, new JpaSaveEventListener());
    eventListenerRegistry.setListeners(EventType.SAVE_UPDATE, new JpaSaveOrUpdateEventListener());
    // post op listeners
    eventListenerRegistry.prependListeners(EventType.POST_DELETE, new JpaPostDeleteEventListener());
    eventListenerRegistry.prependListeners(EventType.POST_INSERT, new JpaPostInsertEventListener());
    eventListenerRegistry.prependListeners(EventType.POST_LOAD, new JpaPostLoadEventListener());
    eventListenerRegistry.prependListeners(EventType.POST_UPDATE, new JpaPostUpdateEventListener());
    final ConfigurationService cfgService = serviceRegistry.getService(ConfigurationService.class);
    for (Map.Entry entry : ((Map<?, ?>) cfgService.getSettings()).entrySet()) {
        if (!String.class.isInstance(entry.getKey())) {
            continue;
        }
        final String propertyName = (String) entry.getKey();
        if (!propertyName.startsWith(AvailableSettings.EVENT_LISTENER_PREFIX)) {
            continue;
        }
        final String eventTypeName = propertyName.substring(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, serviceRegistry));
        }
    }
    // handle JPA "entity listener classes"...
    final ReflectionManager reflectionManager = ((MetadataImpl) metadata).getMetadataBuildingOptions().getReflectionManager();
    this.callbackRegistry = new CallbackRegistryImpl();
    this.jpaListenerFactory = ListenerFactoryBuilder.buildListenerFactory(sessionFactory.getSessionFactoryOptions());
    this.callbackBuilder = new CallbackBuilderLegacyImpl(jpaListenerFactory, reflectionManager);
    for (PersistentClass persistentClass : metadata.getEntityBindings()) {
        if (persistentClass.getClassName() == null) {
            // we can have non java class persisted by hibernate
            continue;
        }
        callbackBuilder.buildCallbacksForEntity(persistentClass.getClassName(), callbackRegistry);
    }
    for (EventType eventType : EventType.values()) {
        final EventListenerGroup eventListenerGroup = eventListenerRegistry.getEventListenerGroup(eventType);
        for (Object listener : eventListenerGroup.listeners()) {
            if (CallbackRegistryConsumer.class.isInstance(listener)) {
                ((CallbackRegistryConsumer) listener).injectCallbackRegistry(callbackRegistry);
            }
        }
    }
}
Also used : JpaPersistEventListener(org.hibernate.jpa.event.internal.core.JpaPersistEventListener) EventType(org.hibernate.event.spi.EventType) JpaPostInsertEventListener(org.hibernate.jpa.event.internal.core.JpaPostInsertEventListener) CallbackRegistryConsumer(org.hibernate.jpa.event.spi.jpa.CallbackRegistryConsumer) CallbackBuilderLegacyImpl(org.hibernate.jpa.event.internal.jpa.CallbackBuilderLegacyImpl) JpaPostDeleteEventListener(org.hibernate.jpa.event.internal.core.JpaPostDeleteEventListener) JpaPostLoadEventListener(org.hibernate.jpa.event.internal.core.JpaPostLoadEventListener) ConfigurationService(org.hibernate.engine.config.spi.ConfigurationService) JpaSaveEventListener(org.hibernate.jpa.event.internal.core.JpaSaveEventListener) PersistentClass(org.hibernate.mapping.PersistentClass) EventListenerGroup(org.hibernate.event.service.spi.EventListenerGroup) ReflectionManager(org.hibernate.annotations.common.reflection.ReflectionManager) JpaDeleteEventListener(org.hibernate.jpa.event.internal.core.JpaDeleteEventListener) JpaSaveOrUpdateEventListener(org.hibernate.jpa.event.internal.core.JpaSaveOrUpdateEventListener) HibernateException(org.hibernate.HibernateException) EventListenerRegistry(org.hibernate.event.service.spi.EventListenerRegistry) JpaPersistOnFlushEventListener(org.hibernate.jpa.event.internal.core.JpaPersistOnFlushEventListener) CallbackRegistryImpl(org.hibernate.jpa.event.internal.jpa.CallbackRegistryImpl) JpaPostUpdateEventListener(org.hibernate.jpa.event.internal.core.JpaPostUpdateEventListener) JpaFlushEntityEventListener(org.hibernate.jpa.event.internal.core.JpaFlushEntityEventListener) JpaMergeEventListener(org.hibernate.jpa.event.internal.core.JpaMergeEventListener) Map(java.util.Map)

Example 9 with EventListenerRegistry

use of org.hibernate.event.service.spi.EventListenerRegistry in project hibernate-orm by hibernate.

the class TypeSafeActivator method applyCallbackListeners.

@SuppressWarnings({ "UnusedDeclaration" })
public static void applyCallbackListeners(ValidatorFactory validatorFactory, ActivationContext activationContext) {
    final Set<ValidationMode> modes = activationContext.getValidationModes();
    if (!(modes.contains(ValidationMode.CALLBACK) || modes.contains(ValidationMode.AUTO))) {
        return;
    }
    final ConfigurationService cfgService = activationContext.getServiceRegistry().getService(ConfigurationService.class);
    final ClassLoaderService classLoaderService = activationContext.getServiceRegistry().getService(ClassLoaderService.class);
    // asks for it
    if (cfgService.getSettings().get(Environment.CHECK_NULLABILITY) == null) {
        activationContext.getSessionFactory().getSessionFactoryOptions().setCheckNullability(false);
    }
    final BeanValidationEventListener listener = new BeanValidationEventListener(validatorFactory, cfgService.getSettings(), classLoaderService);
    final EventListenerRegistry listenerRegistry = activationContext.getServiceRegistry().getService(EventListenerRegistry.class);
    listenerRegistry.addDuplicationStrategy(DuplicationStrategyImpl.INSTANCE);
    listenerRegistry.appendListeners(EventType.PRE_INSERT, listener);
    listenerRegistry.appendListeners(EventType.PRE_UPDATE, listener);
    listenerRegistry.appendListeners(EventType.PRE_DELETE, listener);
    listener.initialize(cfgService.getSettings(), classLoaderService);
}
Also used : ConfigurationService(org.hibernate.engine.config.spi.ConfigurationService) ClassLoaderService(org.hibernate.boot.registry.classloading.spi.ClassLoaderService) EventListenerRegistry(org.hibernate.event.service.spi.EventListenerRegistry)

Example 10 with EventListenerRegistry

use of org.hibernate.event.service.spi.EventListenerRegistry in project hibernate-orm by hibernate.

the class JaccIntegrator method doIntegration.

private void doIntegration(Map properties, JaccPermissionDeclarations permissionDeclarations, SessionFactoryServiceRegistry serviceRegistry) {
    boolean isSecurityEnabled = properties.containsKey(AvailableSettings.JACC_ENABLED);
    if (!isSecurityEnabled) {
        log.debug("Skipping JACC integration as it was not enabled");
        return;
    }
    final String contextId = (String) properties.get(AvailableSettings.JACC_CONTEXT_ID);
    if (contextId == null) {
        throw new IntegrationException("JACC context id must be specified");
    }
    final JaccService jaccService = serviceRegistry.getService(JaccService.class);
    if (jaccService == null) {
        throw new IntegrationException("JaccService was not set up");
    }
    if (permissionDeclarations != null) {
        for (GrantedPermission declaration : permissionDeclarations.getPermissionDeclarations()) {
            jaccService.addPermission(declaration);
        }
    }
    final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);
    eventListenerRegistry.addDuplicationStrategy(DUPLICATION_STRATEGY);
    eventListenerRegistry.prependListeners(EventType.PRE_DELETE, new JaccPreDeleteEventListener());
    eventListenerRegistry.prependListeners(EventType.PRE_INSERT, new JaccPreInsertEventListener());
    eventListenerRegistry.prependListeners(EventType.PRE_UPDATE, new JaccPreUpdateEventListener());
    eventListenerRegistry.prependListeners(EventType.PRE_LOAD, new JaccPreLoadEventListener());
}
Also used : JaccPreDeleteEventListener(org.hibernate.secure.internal.JaccPreDeleteEventListener) JaccPreUpdateEventListener(org.hibernate.secure.internal.JaccPreUpdateEventListener) JaccPreLoadEventListener(org.hibernate.secure.internal.JaccPreLoadEventListener) JaccPreInsertEventListener(org.hibernate.secure.internal.JaccPreInsertEventListener) EventListenerRegistry(org.hibernate.event.service.spi.EventListenerRegistry)

Aggregations

EventListenerRegistry (org.hibernate.event.service.spi.EventListenerRegistry)14 HibernateException (org.hibernate.HibernateException)3 ConfigurationService (org.hibernate.engine.config.spi.ConfigurationService)3 PostInsertEvent (org.hibernate.event.spi.PostInsertEvent)3 PostInsertEventListener (org.hibernate.event.spi.PostInsertEventListener)3 EntityPersister (org.hibernate.persister.entity.EntityPersister)3 Test (org.junit.Test)3 HashMap (java.util.HashMap)2 Map (java.util.Map)2 EntityManager (javax.persistence.EntityManager)2 Session (org.hibernate.Session)2 ClassLoaderService (org.hibernate.boot.registry.classloading.spi.ClassLoaderService)2 EventListenerGroup (org.hibernate.event.service.spi.EventListenerGroup)2 EventType (org.hibernate.event.spi.EventType)2 PreInsertEvent (org.hibernate.event.spi.PreInsertEvent)2 PreInsertEventListener (org.hibernate.event.spi.PreInsertEventListener)2 TestForIssue (org.hibernate.testing.TestForIssue)2 File (java.io.File)1 IOException (java.io.IOException)1 InvalidObjectException (java.io.InvalidObjectException)1