package org.jboss.seam.transaction;
import static javax.transaction.Status.STATUS_ACTIVE;
import static javax.transaction.Status.STATUS_MARKED_ROLLBACK;
import static javax.transaction.Status.STATUS_ROLLEDBACK;
import static javax.transaction.Status.STATUS_COMMITTED;
import static javax.transaction.Status.STATUS_NO_TRANSACTION;
import javax.persistence.EntityManager;
import javax.transaction.Synchronization;
import javax.transaction.SystemException;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
/**
* Base implementation of UserTransaction
*
* @author Gavin King
*
*/
public abstract class AbstractUserTransaction implements UserTransaction
{
public boolean isActive() throws SystemException
{
return getStatus() == STATUS_ACTIVE;
}
public boolean isActiveOrMarkedRollback() throws SystemException
{
int status = getStatus();
return status == STATUS_ACTIVE || status == STATUS_MARKED_ROLLBACK;
}
public boolean isRolledBackOrMarkedRollback() throws SystemException
{
int status = getStatus();
return status == STATUS_ROLLEDBACK || status == STATUS_MARKED_ROLLBACK;
}
public boolean isMarkedRollback() throws SystemException
{
return getStatus() == STATUS_MARKED_ROLLBACK;
}
public boolean isNoTransaction() throws SystemException
{
return getStatus() == STATUS_NO_TRANSACTION;
}
public boolean isRolledBack() throws SystemException
{
return getStatus() == STATUS_ROLLEDBACK;
}
public boolean isCommitted() throws SystemException
{
return getStatus() == STATUS_COMMITTED;
}
public boolean isConversationContextRequired()
{
return false;
}
public abstract void registerSynchronization(Synchronization sync);
public void enlist(EntityManager entityManager) throws SystemException
{
if ( isActiveOrMarkedRollback() )
{
entityManager.joinTransaction();
}
}
public static Synchronizations getSynchronizations()
{
return (Synchronizations) Component.getInstance("org.jboss.seam.transaction.synchronizations", ScopeType.EVENT);
}
}