org.codehaus.groovy.grails.orm.hibernate.support
Class ClosureEventTriggeringInterceptor

java.lang.Object
  extended by org.hibernate.event.internal.AbstractReassociateEventListener
      extended by org.hibernate.event.internal.AbstractSaveEventListener
          extended by org.hibernate.event.internal.DefaultSaveOrUpdateEventListener
              extended by org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor
All Implemented Interfaces:
java.io.Serializable, org.hibernate.event.spi.PostDeleteEventListener, org.hibernate.event.spi.PostInsertEventListener, org.hibernate.event.spi.PostLoadEventListener, org.hibernate.event.spi.PostUpdateEventListener, org.hibernate.event.spi.PreDeleteEventListener, org.hibernate.event.spi.PreInsertEventListener, org.hibernate.event.spi.PreLoadEventListener, org.hibernate.event.spi.PreUpdateEventListener, org.hibernate.event.spi.SaveOrUpdateEventListener, org.springframework.beans.factory.Aware, org.springframework.context.ApplicationContextAware

public class ClosureEventTriggeringInterceptor
extends org.hibernate.event.internal.DefaultSaveOrUpdateEventListener
implements org.springframework.context.ApplicationContextAware, org.hibernate.event.spi.PreLoadEventListener, org.hibernate.event.spi.PostLoadEventListener, org.hibernate.event.spi.PostInsertEventListener, org.hibernate.event.spi.PostUpdateEventListener, org.hibernate.event.spi.PostDeleteEventListener, org.hibernate.event.spi.PreDeleteEventListener, org.hibernate.event.spi.PreUpdateEventListener, org.hibernate.event.spi.PreInsertEventListener

Listens for Hibernate events and publishes corresponding Datastore events.

Since:
1.0
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class org.hibernate.event.internal.AbstractSaveEventListener
org.hibernate.event.internal.AbstractSaveEventListener.EntityState
 
Field Summary
static java.lang.String AFTER_DELETE_EVENT
           
static java.lang.String AFTER_INSERT_EVENT
           
static java.lang.String AFTER_LOAD_EVENT
           
static java.lang.String AFTER_UPDATE_EVENT
           
static java.lang.String BEFORE_DELETE_EVENT
           
static java.lang.String BEFORE_INSERT_EVENT
           
static java.lang.String BEFORE_LOAD_EVENT
           
static java.lang.String BEFORE_UPDATE_EVENT
           
static java.util.Collection<java.lang.String> IGNORED
           
static java.lang.String ONLOAD_EVENT
           
static java.lang.String ONLOAD_SAVE
           
 
Constructor Summary
ClosureEventTriggeringInterceptor()
           
 
Method Summary
static void addNullabilityCheckerPreInsertEventListener(org.hibernate.event.service.spi.EventListenerRegistry listenerRegistry)
           
protected  java.lang.Boolean getAssumedUnsaved()
          Prevents hitting the database for an extra check if the row exists in the database.
static void markInsertActive()
          Called by org.codehaus.groovy.grails.orm.hibernate.metaclass.SavePersistentMethod's performInsert to set a ThreadLocal variable that determines the value for getAssumedUnsaved().
 void onPostDelete(org.hibernate.event.spi.PostDeleteEvent hibernateEvent)
           
 void onPostInsert(org.hibernate.event.spi.PostInsertEvent hibernateEvent)
           
 void onPostLoad(org.hibernate.event.spi.PostLoadEvent hibernateEvent)
           
 void onPostUpdate(org.hibernate.event.spi.PostUpdateEvent hibernateEvent)
           
 boolean onPreDelete(org.hibernate.event.spi.PreDeleteEvent hibernateEvent)
           
 boolean onPreInsert(org.hibernate.event.spi.PreInsertEvent hibernateEvent)
           
 void onPreLoad(org.hibernate.event.spi.PreLoadEvent hibernateEvent)
           
 boolean onPreUpdate(org.hibernate.event.spi.PreUpdateEvent hibernateEvent)
           
 void onSaveOrUpdate(org.hibernate.event.spi.SaveOrUpdateEvent hibernateEvent)
           
static void resetInsertActive()
          Clears the ThreadLocal variable set by markInsertActive().
 void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
           
 void setDatastores(java.util.Map<org.hibernate.SessionFactory,HibernateDatastore> datastores)
           
 
Methods inherited from class org.hibernate.event.internal.DefaultSaveOrUpdateEventListener
entityIsDetached, entityIsPersistent, entityIsTransient, getCascadeAction, getUpdateId, invokeUpdateLifecycle, performSaveOrUpdate, performUpdate, reassociateIfUninitializedProxy, saveWithGeneratedOrRequestedId
 
Methods inherited from class org.hibernate.event.internal.AbstractSaveEventListener
cascadeAfterSave, cascadeBeforeSave, getEntityState, getLoggableName, getMergeMap, invokeSaveLifecycle, isVersionIncrementDisabled, performSave, performSaveOrReplicate, saveWithGeneratedId, saveWithRequestedId, substituteValuesIfNecessary, visitCollectionsBeforeSave
 
Methods inherited from class org.hibernate.event.internal.AbstractReassociateEventListener
reassociate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

IGNORED

public static final java.util.Collection<java.lang.String> IGNORED

ONLOAD_EVENT

public static final java.lang.String ONLOAD_EVENT
See Also:
Constant Field Values

ONLOAD_SAVE

public static final java.lang.String ONLOAD_SAVE
See Also:
Constant Field Values

BEFORE_LOAD_EVENT

public static final java.lang.String BEFORE_LOAD_EVENT
See Also:
Constant Field Values

BEFORE_INSERT_EVENT

public static final java.lang.String BEFORE_INSERT_EVENT
See Also:
Constant Field Values

AFTER_INSERT_EVENT

public static final java.lang.String AFTER_INSERT_EVENT
See Also:
Constant Field Values

BEFORE_UPDATE_EVENT

public static final java.lang.String BEFORE_UPDATE_EVENT
See Also:
Constant Field Values

AFTER_UPDATE_EVENT

public static final java.lang.String AFTER_UPDATE_EVENT
See Also:
Constant Field Values

BEFORE_DELETE_EVENT

public static final java.lang.String BEFORE_DELETE_EVENT
See Also:
Constant Field Values

AFTER_DELETE_EVENT

public static final java.lang.String AFTER_DELETE_EVENT
See Also:
Constant Field Values

AFTER_LOAD_EVENT

public static final java.lang.String AFTER_LOAD_EVENT
See Also:
Constant Field Values
Constructor Detail

ClosureEventTriggeringInterceptor

public ClosureEventTriggeringInterceptor()
Method Detail

setDatastores

public void setDatastores(java.util.Map<org.hibernate.SessionFactory,HibernateDatastore> datastores)

onSaveOrUpdate

public void onSaveOrUpdate(org.hibernate.event.spi.SaveOrUpdateEvent hibernateEvent)
                    throws org.hibernate.HibernateException
Specified by:
onSaveOrUpdate in interface org.hibernate.event.spi.SaveOrUpdateEventListener
Overrides:
onSaveOrUpdate in class org.hibernate.event.internal.DefaultSaveOrUpdateEventListener
Throws:
org.hibernate.HibernateException

onPreLoad

public void onPreLoad(org.hibernate.event.spi.PreLoadEvent hibernateEvent)
Specified by:
onPreLoad in interface org.hibernate.event.spi.PreLoadEventListener

onPostLoad

public void onPostLoad(org.hibernate.event.spi.PostLoadEvent hibernateEvent)
Specified by:
onPostLoad in interface org.hibernate.event.spi.PostLoadEventListener

onPreInsert

public boolean onPreInsert(org.hibernate.event.spi.PreInsertEvent hibernateEvent)
Specified by:
onPreInsert in interface org.hibernate.event.spi.PreInsertEventListener

onPostInsert

public void onPostInsert(org.hibernate.event.spi.PostInsertEvent hibernateEvent)
Specified by:
onPostInsert in interface org.hibernate.event.spi.PostInsertEventListener

onPreUpdate

public boolean onPreUpdate(org.hibernate.event.spi.PreUpdateEvent hibernateEvent)
Specified by:
onPreUpdate in interface org.hibernate.event.spi.PreUpdateEventListener

onPostUpdate

public void onPostUpdate(org.hibernate.event.spi.PostUpdateEvent hibernateEvent)
Specified by:
onPostUpdate in interface org.hibernate.event.spi.PostUpdateEventListener

onPreDelete

public boolean onPreDelete(org.hibernate.event.spi.PreDeleteEvent hibernateEvent)
Specified by:
onPreDelete in interface org.hibernate.event.spi.PreDeleteEventListener

onPostDelete

public void onPostDelete(org.hibernate.event.spi.PostDeleteEvent hibernateEvent)
Specified by:
onPostDelete in interface org.hibernate.event.spi.PostDeleteEventListener

setApplicationContext

public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
Specified by:
setApplicationContext in interface org.springframework.context.ApplicationContextAware

addNullabilityCheckerPreInsertEventListener

public static final void addNullabilityCheckerPreInsertEventListener(org.hibernate.event.service.spi.EventListenerRegistry listenerRegistry)

getAssumedUnsaved

protected java.lang.Boolean getAssumedUnsaved()
Prevents hitting the database for an extra check if the row exists in the database. ThreadLocal is used to pass the "insert:true" information to Hibernate.

Overrides:
getAssumedUnsaved in class org.hibernate.event.internal.AbstractSaveEventListener
See Also:
org.hibernate.event.def.AbstractSaveEventListener#getAssumedUnsaved()

markInsertActive

public static void markInsertActive()
Called by org.codehaus.groovy.grails.orm.hibernate.metaclass.SavePersistentMethod's performInsert to set a ThreadLocal variable that determines the value for getAssumedUnsaved().


resetInsertActive

public static void resetInsertActive()
Clears the ThreadLocal variable set by markInsertActive().