A transaction event handler can be registered to receive Neo4j transaction events.
Once it has been registered at a GraphDatabaseService
instance it receives events for transactions before they are committed.
Handlers get notified about transactions that have performed any write operation, and that will be committed.
If Transaction#success()
has not been called or the transaction has been marked as failed Transaction#failure()
it will be rolled back, and no events are sent to the Handler.
Before a transaction is committed the Handler’s beforeCommit
method is called with the entire diff of modifications made in the transaction.
At this point the transaction is still running, so changes can still be made.
The method may also throw an exception, which will prevent the transaction from being committed.
If the transaction is rolled back, a call to the handler’s afterRollback
method will follow.
Caution
The order in which handlers are executed is undefined — there is no guarantee that changes made by one handler will be seen by other handlers. |
If beforeCommit
is successfully executed in all registered handlers the transaction is committed and the afterCommit
method is called with the same transaction data.
This call also includes the object returned from beforeCommit
.
In afterCommit
the transaction has been closed and access to anything outside TransactionData
requires a new transaction to be opened.
A TransactionEventHandler
gets notified about transactions that have any changes accessible via TransactionData
so some indexing and schema changes will not be triggering these events.