in grails-datastore-gorm-hibernate/src/main/groovy/org/grails/orm/hibernate/event/listener/HibernateEventListener.java [180:211]
protected ClosureEventListener findEventListener(Object entity, SessionFactoryImplementor factory) {
if (entity == null) return null;
Class<?> clazz = Hibernate.getClass(entity);
SoftKey<Class<?>> key = new SoftKey<Class<?>>(clazz);
ClosureEventListener eventListener = eventListeners.get(key);
if (eventListener != null) {
return eventListener;
}
Boolean shouldTrigger = cachedShouldTrigger.get(key);
if (shouldTrigger == null || shouldTrigger) {
synchronized(cachedShouldTrigger) {
eventListener = eventListeners.get(key);
if (eventListener == null) {
AbstractHibernateDatastore datastore = getDatastore();
boolean isValidSessionFactory = MultiTenant.class.isAssignableFrom(clazz) || factory == null || datastore.getSessionFactory().equals(factory);
PersistentEntity persistentEntity = datastore.getMappingContext().getPersistentEntity(clazz.getName());
shouldTrigger = (persistentEntity != null && isValidSessionFactory);
if (shouldTrigger) {
eventListener = new ClosureEventListener(persistentEntity, failOnError, failOnErrorPackages);
ClosureEventListener previous = eventListeners.putIfAbsent(key, eventListener);
if (previous != null) {
eventListener = previous;
}
}
cachedShouldTrigger.put(key, shouldTrigger);
}
}
}
return eventListener;
}