Package net.sf.basedb.core.log
Class LoggingInterceptor
- java.lang.Object
-
- org.hibernate.EmptyInterceptor
-
- net.sf.basedb.core.log.LoggingInterceptor
-
- All Implemented Interfaces:
Serializable
,Interceptor
public class LoggingInterceptor extends EmptyInterceptor
Interceptor that attaches to Hibernate sessions to provide logging of items that are updated/created/deleted. Do not attach this interceptor to aSessionFactory
since this class is not thread-safe.The interceptor uses
onSave
,onDelete
andonFlushDirty
to collect information about what has happened. TheLogManagerFactory
is asked to createEntityLogger
:s for each modified/created/deleted item. The actual logging takes place in thepostFlush
method that callsEntityLogger.logChanges(LogManager, EntityDetails)
on each entity logger.NOTE! For new items, the ID is not available until after the flush to the database has been done. Eg. new items has a 0 id when
LogManagerFactory.getEntityLogger(LogManager, Object)
is called.- Version:
- 2.13
- Author:
- Nicklas
- See Also:
- Serialized Form
- Last modified
- $Date: 2016-04-21 13:13:30 +0200 (to, 21 apr 2016) $
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
LoggingInterceptor.LogDetails
(package private) static class
LoggingInterceptor.LogManagerAndFactory
-
Field Summary
Fields Modifier and Type Field Description private List<LoggingInterceptor.LogDetails>
changes
private static Object[]
EMTPY_OBJECT_ARRAY
private static String[]
EMTPY_STRING_ARRAY
private static Type[]
EMTPY_TYPE_ARRAY
private LogControl
logControl
private List<LoggingInterceptor.LogManagerAndFactory>
logHandlers
private ExtensionsInvoker<LogManagerFactory>
logInvoker
private static long
serialVersionUID
-
Fields inherited from class org.hibernate.EmptyInterceptor
INSTANCE
-
-
Constructor Summary
Constructors Constructor Description LoggingInterceptor(LogControl logControl, ExtensionsInvoker<LogManagerFactory> logInvoker)
Creates a new interceptor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addChange(ChangeType action, Object entity, Object[] state, Object[] previousState, String[] propertyNames, Type[] types, boolean logImmediately)
If the log manager factory creates an entity logger, add information about the change to the internal list.void
addManualSingleChange(ChangeType action, Object entity)
Adds a manual non-Hibernate change to the log system.void
addManualSingleChange(ChangeType action, Object entity, Object newValue, Object oldValue, String property, Type type)
Adds a manual non-Hibernate change to the log system.void
afterTransactionCompletion(Transaction tx)
Signals successful commit or rollback to the log manager.void
beforeTransactionCompletion(Transaction tx)
Flush remaining changes in the log control.void
onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
Adds a DELETE event to the log.boolean
onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types)
Adds an UPDATE event to the log.boolean
onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
Adds a CREATE event to the log.void
postFlush(Iterator entities)
Collects all log events and sends them to the eachEntityLogger
.private void
readObject(ObjectInputStream ois)
private void
writeObject(ObjectOutputStream ois)
-
Methods inherited from class org.hibernate.EmptyInterceptor
afterTransactionBegin, findDirty, getEntity, getEntityName, instantiate, isTransient, onCollectionRecreate, onCollectionRemove, onCollectionUpdate, onLoad, onPrepareStatement, preFlush
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
EMTPY_OBJECT_ARRAY
private static final Object[] EMTPY_OBJECT_ARRAY
-
EMTPY_STRING_ARRAY
private static final String[] EMTPY_STRING_ARRAY
-
EMTPY_TYPE_ARRAY
private static final Type[] EMTPY_TYPE_ARRAY
-
logControl
private final LogControl logControl
-
logInvoker
private final ExtensionsInvoker<LogManagerFactory> logInvoker
-
logHandlers
private List<LoggingInterceptor.LogManagerAndFactory> logHandlers
-
changes
private List<LoggingInterceptor.LogDetails> changes
-
-
Constructor Detail
-
LoggingInterceptor
public LoggingInterceptor(LogControl logControl, ExtensionsInvoker<LogManagerFactory> logInvoker)
Creates a new interceptor.- Parameters:
logControl
- The LogControl that is managing the current transactionlogInvoker
- The extension invoker that create log manager factories
-
-
Method Detail
-
onSave
public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
Adds a CREATE event to the log.- Specified by:
onSave
in interfaceInterceptor
- Overrides:
onSave
in classEmptyInterceptor
- Returns:
- Always false, since the state is not modified
-
onFlushDirty
public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types)
Adds an UPDATE event to the log.- Specified by:
onFlushDirty
in interfaceInterceptor
- Overrides:
onFlushDirty
in classEmptyInterceptor
- Returns:
- Always false, since the state is not changed
-
onDelete
public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
Adds a DELETE event to the log.- Specified by:
onDelete
in interfaceInterceptor
- Overrides:
onDelete
in classEmptyInterceptor
-
postFlush
public void postFlush(Iterator entities)
Collects all log events and sends them to the eachEntityLogger
.- Specified by:
postFlush
in interfaceInterceptor
- Overrides:
postFlush
in classEmptyInterceptor
-
beforeTransactionCompletion
public void beforeTransactionCompletion(Transaction tx)
Flush remaining changes in the log control.- Specified by:
beforeTransactionCompletion
in interfaceInterceptor
- Overrides:
beforeTransactionCompletion
in classEmptyInterceptor
-
afterTransactionCompletion
public void afterTransactionCompletion(Transaction tx)
Signals successful commit or rollback to the log manager. Note that this happens after the transaction/connection has been closed and no communication with the database can take place here.- Specified by:
afterTransactionCompletion
in interfaceInterceptor
- Overrides:
afterTransactionCompletion
in classEmptyInterceptor
-
addManualSingleChange
public void addManualSingleChange(ChangeType action, Object entity, Object newValue, Object oldValue, String property, Type type)
Adds a manual non-Hibernate change to the log system. The change is forwarded to the log handlers immediately. The log handlers should not store the entity object for later use since instance may be reused for other changes in the future.- Since:
- 3.3
-
addManualSingleChange
public void addManualSingleChange(ChangeType action, Object entity)
Adds a manual non-Hibernate change to the log system. The entity should be a special object that doesn't rely on the state arrays to convey what has changed. The change is forwarded to the log handlers immediately. The log handlers should not store the entity object for later use since instance may be reused for other changes in the future.- Since:
- 3.8
-
addChange
private void addChange(ChangeType action, Object entity, Object[] state, Object[] previousState, String[] propertyNames, Type[] types, boolean logImmediately)
If the log manager factory creates an entity logger, add information about the change to the internal list. The list is processed in thepostFlush(Iterator)
method.
-
readObject
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException
- Throws:
ClassNotFoundException
IOException
-
writeObject
private void writeObject(ObjectOutputStream ois) throws IOException
- Throws:
IOException
-
-