Class LocalXAConnectionFactory.LocalXAResource
java.lang.Object
org.apache.tomcat.dbcp.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
ConstructorDescriptionLocalXAResource
(Connection localTransaction) Constructs a new instance for a given connection. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Commits the transaction and restores the original auto commit setting.void
This method does nothing.void
Clears the currently associated transaction if it is the specified xid.int
Always 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.boolean
isSameRM
(XAResource xaResource) Returns true if the specified XAResource == this XAResource.int
This method does nothing since the LocalXAConnection does not support two-phase-commit.Xid[]
recover
(int flag) Always returns a zero length Xid array.void
Rolls back the transaction and restores the original auto commit setting.boolean
setTransactionTimeout
(int transactionTimeout) Always returns false since we have no way to set a transaction timeout on a JDBC connection.void
Signals 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:
commit
in 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:
end
in 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:
forget
in interfaceXAResource
- 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:
getTransactionTimeout
in 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:
isSameRM
in 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:
prepare
in 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:
recover
in 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:
rollback
in interfaceXAResource
- Parameters:
xid
- the id of the transaction branch for this connection- Throws:
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:
setTransactionTimeout
in 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:
start
in 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
-