Class LocalXAConnectionFactory.LocalXAResource
- java.lang.Object
-
- org.apache.tomcat.dbcp.dbcp2.managed.LocalXAConnectionFactory.LocalXAResource
-
- All Implemented Interfaces:
javax.transaction.xa.XAResource
- Enclosing class:
- LocalXAConnectionFactory
protected static class LocalXAConnectionFactory.LocalXAResource extends java.lang.Object implements javax.transaction.xa.XAResourceLocalXAResource is a fake XAResource for non-XA connections. When a transaction is started the connection auto-commit is turned off. When the connection is committed or rolled back, the commit or rollback method is called on the connection and then the original auto-commit value is restored.The LocalXAResource also respects the connection read-only setting. If the connection is read-only the commit method will not be called, and the prepare method returns the XA_RDONLY.
It is assumed that the wrapper around a managed connection disables the setAutoCommit(), commit(), rollback() and setReadOnly() methods while a transaction is in progress.
- Since:
- 2.0
-
-
Constructor Summary
Constructors Constructor Description LocalXAResource(java.sql.Connection localTransaction)Construct a new instance for a given connection.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcommit(javax.transaction.xa.Xid xid, boolean flag)Commits the transaction and restores the original auto commit setting.voidend(javax.transaction.xa.Xid xid, int flag)This method does nothing.voidforget(javax.transaction.xa.Xid xid)Clears the currently associated transaction if it is the specified xid.intgetTransactionTimeout()Always returns 0 since we have no way to set a transaction timeout on a JDBC connection.javax.transaction.xa.XidgetXid()Gets the current xid of the transaction branch associated with this XAResource.booleanisSameRM(javax.transaction.xa.XAResource xaResource)Returns true if the specified XAResource == this XAResource.intprepare(javax.transaction.xa.Xid xid)This method does nothing since the LocalXAConnection does not support two-phase-commit.javax.transaction.xa.Xid[]recover(int flag)Always returns a zero length Xid array.voidrollback(javax.transaction.xa.Xid xid)Rolls back the transaction and restores the original auto commit setting.booleansetTransactionTimeout(int transactionTimeout)Always returns false since we have no way to set a transaction timeout on a JDBC connection.voidstart(javax.transaction.xa.Xid xid, int flag)Signals that a the connection has been enrolled in a transaction.
-
-
-
Method Detail
-
commit
public void commit(javax.transaction.xa.Xid xid, boolean flag) throws javax.transaction.xa.XAExceptionCommits the transaction and restores the original auto commit setting.- Specified by:
commitin interfacejavax.transaction.xa.XAResource- Parameters:
xid- the id of the transaction branch for this connectionflag- ignored- Throws:
javax.transaction.xa.XAException- if connection.commit() throws an SQLException
-
end
public void end(javax.transaction.xa.Xid xid, int flag) throws javax.transaction.xa.XAExceptionThis method does nothing.- Specified by:
endin interfacejavax.transaction.xa.XAResource- Parameters:
xid- the id of the transaction branch for this connectionflag- ignored- Throws:
javax.transaction.xa.XAException- if the connection is already enlisted in another transaction
-
forget
public void forget(javax.transaction.xa.Xid xid)
Clears the currently associated transaction if it is the specified xid.- Specified by:
forgetin interfacejavax.transaction.xa.XAResource- Parameters:
xid- the id of the transaction to forget
-
getTransactionTimeout
public int getTransactionTimeout()
Always returns 0 since we have no way to set a transaction timeout on a JDBC connection.- Specified by:
getTransactionTimeoutin interfacejavax.transaction.xa.XAResource- Returns:
- always 0
-
getXid
public javax.transaction.xa.Xid getXid()
Gets the current xid of the transaction branch associated with this XAResource.- Returns:
- the current xid of the transaction branch associated with this XAResource.
-
isSameRM
public boolean isSameRM(javax.transaction.xa.XAResource xaResource)
Returns true if the specified XAResource == this XAResource.- Specified by:
isSameRMin interfacejavax.transaction.xa.XAResource- Parameters:
xaResource- the XAResource to test- Returns:
- true if the specified XAResource == this XAResource; false otherwise
-
prepare
public int prepare(javax.transaction.xa.Xid xid)
This method does nothing since the LocalXAConnection does not support two-phase-commit. This method will return XAResource.XA_RDONLY if the connection isReadOnly(). This assumes that the physical connection is wrapped with a proxy that prevents an application from changing the read-only flag while enrolled in a transaction.- Specified by:
preparein interfacejavax.transaction.xa.XAResource- Parameters:
xid- the id of the transaction branch for this connection- Returns:
- XAResource.XA_RDONLY if the connection.isReadOnly(); XAResource.XA_OK otherwise
-
recover
public javax.transaction.xa.Xid[] recover(int flag)
Always returns a zero length Xid array. The LocalXAConnectionFactory can not support recovery, so no xids will ever be found.- Specified by:
recoverin interfacejavax.transaction.xa.XAResource- Parameters:
flag- ignored since recovery is not supported- Returns:
- always a zero length Xid array.
-
rollback
public void rollback(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAExceptionRolls back the transaction and restores the original auto commit setting.- Specified by:
rollbackin interfacejavax.transaction.xa.XAResource- Parameters:
xid- the id of the transaction branch for this connection- Throws:
javax.transaction.xa.XAException- if connection.rollback() throws an SQLException
-
setTransactionTimeout
public boolean setTransactionTimeout(int transactionTimeout)
Always returns false since we have no way to set a transaction timeout on a JDBC connection.- Specified by:
setTransactionTimeoutin interfacejavax.transaction.xa.XAResource- Parameters:
transactionTimeout- ignored since we have no way to set a transaction timeout on a JDBC connection- Returns:
- always false
-
start
public void start(javax.transaction.xa.Xid xid, int flag) throws javax.transaction.xa.XAExceptionSignals that a the connection has been enrolled in a transaction. This method saves off the current auto commit flag, and then disables auto commit. The original auto commit setting is restored when the transaction completes.- Specified by:
startin interfacejavax.transaction.xa.XAResource- Parameters:
xid- the id of the transaction branch for this connectionflag- either XAResource.TMNOFLAGS or XAResource.TMRESUME- Throws:
javax.transaction.xa.XAException- if the connection is already enlisted in another transaction, or if auto-commit could not be disabled
-
-