下面列出了org.hibernate.resource.transaction.spi.TransactionStatus#NOT_ACTIVE 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void begin() {
try {
if ( getStatus() == TransactionStatus.NOT_ACTIVE ) {
log.trace( "Calling TransactionManager#begin" );
transactionManager.begin();
initiator = true;
log.trace( "Called TransactionManager#begin" );
}
else {
log.trace( "Skipping TransactionManager#begin due to already active transaction" );
}
}
catch (Exception e) {
throw new TransactionException( "JTA TransactionManager#begin failed", e );
}
}
@Override
public void begin() {
try {
if ( getStatus() == TransactionStatus.NOT_ACTIVE ) {
log.trace( "Calling UserTransaction#begin" );
userTransaction.begin();
initiator = true;
log.trace( "Called UserTransaction#begin" );
}
else {
log.trace( "Skipping TransactionManager#begin due to already active transaction" );
}
}
catch (Exception e) {
throw new TransactionException( "JTA UserTransaction#begin failed", e );
}
}
@Override
public void rollback() {
try {
TransactionStatus status = jdbcResourceTransaction.getStatus();
if ( ( rollbackOnly && status != TransactionStatus.NOT_ACTIVE ) || status == TransactionStatus.ACTIVE ) {
jdbcResourceTransaction.rollback();
JdbcResourceLocalTransactionCoordinatorImpl.this.afterCompletionCallback( false );
}
}
finally {
rollbackOnly = false;
}
// no-op otherwise.
}
public static TransactionStatus translate(int status) {
TransactionStatus transactionStatus = null;
switch ( status ) {
case Status.STATUS_ACTIVE:
transactionStatus = TransactionStatus.ACTIVE;
break;
case Status.STATUS_PREPARED:
transactionStatus = TransactionStatus.ACTIVE;
break;
case Status.STATUS_PREPARING:
transactionStatus = TransactionStatus.ACTIVE;
break;
case Status.STATUS_COMMITTING:
transactionStatus = TransactionStatus.COMMITTING;
break;
case Status.STATUS_ROLLING_BACK:
transactionStatus = TransactionStatus.ROLLING_BACK;
break;
case Status.STATUS_NO_TRANSACTION:
transactionStatus = TransactionStatus.NOT_ACTIVE;
break;
case Status.STATUS_COMMITTED:
transactionStatus = TransactionStatus.COMMITTED;
break;
case Status.STATUS_ROLLEDBACK:
transactionStatus = TransactionStatus.ROLLED_BACK;
break;
case Status.STATUS_MARKED_ROLLBACK:
transactionStatus = TransactionStatus.MARKED_ROLLBACK;
break;
default:
break;
}
if ( transactionStatus == null ) {
throw new TransactionException( "TransactionManager reported transaction status as unknwon" );
}
return transactionStatus;
}
protected void resetConnection(boolean initiallyAutoCommit) {
try {
if ( initiallyAutoCommit ) {
log.trace( "re-enabling auto-commit on JDBC Connection after completion of JDBC-based transaction" );
getConnectionForTransactionManagement().setAutoCommit( true );
status = TransactionStatus.NOT_ACTIVE;
}
}
catch ( Exception e ) {
log.debug(
"Could not re-enable auto-commit on JDBC Connection after completion of JDBC-based transaction : " + e
);
}
}
@Override
public void rollback() {
if ( !isActive() ) {
if ( jpaCompliance.isJpaTransactionComplianceEnabled() ) {
throw new IllegalStateException(
"JPA compliance dictates throwing IllegalStateException when #rollback " +
"is called on non-active transaction"
);
}
}
TransactionStatus status = getStatus();
if ( status == TransactionStatus.ROLLED_BACK || status == TransactionStatus.NOT_ACTIVE ) {
// Allow rollback() calls on completed transactions, just no-op.
LOG.debug( "rollback() called on an inactive transaction" );
return;
}
if ( !status.canRollback() ) {
throw new TransactionException( "Cannot rollback transaction in current status [" + status.name() + "]" );
}
LOG.debug( "rolling back" );
if ( status != TransactionStatus.FAILED_COMMIT || allowFailedCommitToPhysicallyRollback() ) {
internalGetTransactionDriverControl().rollback();
}
}
@Override
public TransactionStatus getStatus() {
if ( transactionDriverControl == null ) {
if ( session.isOpen() ) {
transactionDriverControl = transactionCoordinator.getTransactionDriverControl();
}
else {
return TransactionStatus.NOT_ACTIVE;
}
}
return transactionDriverControl.getStatus();
}