Methods Summary |
---|
public void | begin()Start the current transaction. This can only be invoked if {@link #isActive()} returns
false .
if (isActive()){
throw new IllegalStateException(TransactionException.transactionIsActive().getMessage());
}
if (this.wrapper.getEntityManager().isExtended()){
// so we have a resource local extended em so get the PC from the entity manager
this.wrapper.localUOW = this.wrapper.getEntityManager().getActivePersistenceContext(null);
this.wrapper.localUOW.setShouldTerminateTransaction(false);
}else{
this.wrapper.localUOW = new RepeatableWriteUnitOfWork(this.wrapper.getEntityManager().getServerSession().acquireClientSession());
this.wrapper.localUOW.setShouldTerminateTransaction(false);
this.wrapper.localUOW.setShouldCascadeCloneToJoinedRelationship(true);
}
this.active = true;
|
public void | commit()Commit the current transaction, writing any un-flushed changes to the database.
This can only be invoked if {@link #isActive()} returns true .
if (!isActive()){
throw new IllegalStateException(TransactionException.transactionNotActive().getMessage());
}
try {
if (this.wrapper.localUOW != null){
this.wrapper.localUOW.setShouldTerminateTransaction(true);
if (! this.rollbackOnly){
if (this.wrapper.localUOW.shouldResumeUnitOfWorkOnTransactionCompletion()){
this.wrapper.localUOW.commitAndResume();
return;
}else{
this.wrapper.localUOW.commit();
// all change sets and are cleared, but the cache is kept
this.wrapper.localUOW.clearForClose(false);
}
} else {
throw new RollbackException(ExceptionLocalization.buildMessage("rollback_because_of_rollback_only"));
}
}
}catch (RuntimeException ex){
if (this.wrapper.localUOW != null){
wrapper.getEntityManager().removeExtendedPersistenceContext();
this.wrapper.localUOW.release();
this.wrapper.localUOW.getParent().release();
}
if(! this.rollbackOnly) {
throw new RollbackException(ex);
} else {
// it's a RollbackException
throw ex;
}
} finally {
this.active = false;
this.rollbackOnly = false;
wrapper.setLocalUnitOfWork(null);
}
|
protected void | finalize()Here incase a user does not commit or rollback an enityTransaction but just
throws it away. If we do not rollback the txn the connection will go
back into the pool.
try{
if (isActive())
this.rollback();
}finally{
super.finalize();
}
|
public boolean | getRollbackOnly()Determine whether the current transaction has been marked
for rollback.
if (!isActive()){
throw new IllegalStateException(TransactionException.transactionNotActive().getMessage());
}
return this.rollbackOnly;
|
public boolean | isActive()Check to see if the current transaction is in progress.
return this.active;
|
public void | rollback()Roll back the current transaction, discarding any changes that have happened
in this transaction. This can only be invoked if {@link #isActive()} returns
true .
if (!isActive()){
throw new IllegalStateException(TransactionException.transactionNotActive().getMessage());
}
try{
if (wrapper.getLocalUnitOfWork() != null){
this.wrapper.localUOW.setShouldTerminateTransaction(true);
this.wrapper.localUOW.release();
this.wrapper.localUOW.getParent().release();
}
}finally{
this.active = false;
this.rollbackOnly = false;
wrapper.getEntityManager().removeExtendedPersistenceContext();
wrapper.setLocalUnitOfWork(null);
}
|
public void | setRollbackOnly()Mark the current transaction so that the only possible
outcome of the transaction is for the transaction to be
rolled back.
if (!isActive()){
throw new IllegalStateException(TransactionException.transactionNotActive().getMessage());
}
this.rollbackOnly = true;
|