com.atomikos.datasource.xa.session.BranchEndedStateHandler Maven / Gradle / Ivy
/**
* Copyright (C) 2000-2020 Atomikos
*
* LICENSE CONDITIONS
*
* See http://www.atomikos.com/Main/WhichLicenseApplies for details.
*/
package com.atomikos.datasource.xa.session;
import com.atomikos.datasource.xa.XAResourceTransaction;
import com.atomikos.datasource.xa.XATransactionalResource;
import com.atomikos.icatch.CompositeTransaction;
import com.atomikos.logging.Logger;
import com.atomikos.logging.LoggerFactory;
/**
*
*
* State handler for when delisted in an XA branch.
*
*/
class BranchEndedStateHandler
extends TransactionContextStateHandler
{
private static final Logger LOGGER = LoggerFactory.createLogger(BranchEndedStateHandler.class);
private CompositeTransaction ct;
BranchEndedStateHandler ( XATransactionalResource resource , XAResourceTransaction branch , CompositeTransaction ct )
{
super ( resource , null );
this.ct = ct;
branch.suspend();
}
TransactionContextStateHandler checkEnlistBeforeUse ( CompositeTransaction ct)
throws InvalidSessionHandleStateException
{
String msg = "Detected illegal attempt to use a closed XA session";
LOGGER.logError ( msg );
throw new InvalidSessionHandleStateException ( msg );
}
TransactionContextStateHandler sessionClosed()
{
//close can happen several times -> should be idempotent
return null;
}
TransactionContextStateHandler transactionTerminated ( CompositeTransaction tx )
{
TransactionContextStateHandler ret = null;
if ( ct.isSameTransaction ( tx ) ) ret = new TerminatedStateHandler ();
return ret;
}
boolean isInactiveInTransaction ( CompositeTransaction tx )
{
return ct.isSameTransaction ( tx );
}
}