Package org.apache.commons.dbcp2.managed
Class LocalXAConnectionFactory.LocalXAResource
java.lang.Object
org.apache.commons.dbcp2.managed.LocalXAConnectionFactory.LocalXAResource
- All Implemented Interfaces:
XAResource
- Enclosing class:
LocalXAConnectionFactory
protected static class LocalXAConnectionFactory.LocalXAResource
extends Object
implements XAResource
LocalXAResource 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
-
Field Summary
Fields inherited from interface javax.transaction.xa.XAResource
TMENDRSCAN, TMFAIL, TMJOIN, TMNOFLAGS, TMONEPHASE, TMRESUME, TMSTARTRSCAN, TMSUCCESS, TMSUSPEND, XA_OK, XA_RDONLY -
Constructor Summary
ConstructorsConstructorDescriptionLocalXAResource(Connection localTransaction) Constructs a new instance for a given connection. -
Method Summary
Modifier and TypeMethodDescriptionvoidCommits the transaction and restores the original auto commit setting.voidThis method does nothing.voidClears the currently associated transaction if it is the specified xid.intAlways returns 0 since we have no way to set a transaction timeout on a JDBC connection.getXid()Gets the current xid of the transaction branch associated with this XAResource.booleanisSameRM(XAResource xaResource) Returns true if the specified XAResource == this XAResource.intThis method does nothing since the LocalXAConnection does not support two-phase-commit.Xid[]recover(int flag) Always returns a zero length Xid array.voidRolls 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.voidSignals that a connection has been enrolled in a transaction.
-
Constructor Details
-
LocalXAResource
Constructs a new instance for a given connection.- Parameters:
localTransaction- A connection.
-
-
Method Details
-
commit
Commits the transaction and restores the original auto commit setting.- Specified by:
commitin interfaceXAResource- Parameters:
xid- the id of the transaction branch for this connectionflag- ignored- Throws:
XAException- if connection.commit() throws an SQLException
-
end
This method does nothing.- Specified by:
endin interfaceXAResource- Parameters:
xid- the id of the transaction branch for this connectionflag- ignored- Throws:
XAException- if the connection is already enlisted in another transaction
-
forget
Clears the currently associated transaction if it is the specified xid.- Specified by:
forgetin interfaceXAResource- Parameters:
xid- the id of the transaction to forget
-
getTransactionTimeout
Always returns 0 since we have no way to set a transaction timeout on a JDBC connection.- Specified by:
getTransactionTimeoutin interfaceXAResource- Returns:
- always 0
-
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
Returns true if the specified XAResource == this XAResource.- Specified by:
isSameRMin interfaceXAResource- Parameters:
xaResource- the XAResource to test- Returns:
- true if the specified XAResource == this XAResource; false otherwise
-
prepare
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 interfaceXAResource- Parameters:
xid- the id of the transaction branch for this connection- Returns:
- XAResource.XA_RDONLY if the connection.isReadOnly(); XAResource.XA_OK otherwise
-
recover
Always returns a zero length Xid array. The LocalXAConnectionFactory cannot support recovery, so no xids will ever be found.- Specified by:
recoverin interfaceXAResource- Parameters:
flag- ignored since recovery is not supported- Returns:
- always a zero length Xid array.
-
rollback
Rolls back the transaction and restores the original auto commit setting.- Specified by:
rollbackin interfaceXAResource- Parameters:
xid- the id of the transaction branch for this connection- Throws:
XAException- if connection.rollback() throws an SQLException
-
setTransactionTimeout
Always returns false since we have no way to set a transaction timeout on a JDBC connection.- Specified by:
setTransactionTimeoutin interfaceXAResource- Parameters:
transactionTimeout- ignored since we have no way to set a transaction timeout on a JDBC connection- Returns:
- always false
-
start
Signals that a 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 interfaceXAResource- Parameters:
xid- the id of the transaction branch for this connectionflag- either XAResource.TMNOFLAGS or XAResource.TMRESUME- Throws:
XAException- if the connection is already enlisted in another transaction, or if auto-commit could not be disabled
-