org.apache.commons.dbcp.managed
Class LocalXAConnectionFactory.LocalXAResource

java.lang.Object
  extended by org.apache.commons.dbcp.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.


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
LocalXAConnectionFactory.LocalXAResource(Connection localTransaction)
           
 
Method Summary
 void commit(Xid xid, boolean flag)
          Commits the transaction and restores the original auto commit setting.
 void end(Xid xid, int flag)
          This method does nothing.
 void forget(Xid xid)
          Clears the currently associated transaction if it is the specified xid.
 int getTransactionTimeout()
          Always returns 0 since we have no way to set a transaction timeout on a JDBC connection.
 Xid 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 prepare(Xid xid)
          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 rollback(Xid xid)
          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 start(Xid xid, int flag)
          Signals that a the connection has been enrolled in a transaction.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LocalXAConnectionFactory.LocalXAResource

public LocalXAConnectionFactory.LocalXAResource(Connection localTransaction)
Method Detail

getXid

public 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.

start

public void start(Xid xid,
                  int flag)
           throws XAException
Signals 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:
start in interface XAResource
Parameters:
xid - the id of the transaction branch for this connection
flag - 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

end

public void end(Xid xid,
                int flag)
         throws XAException
This method does nothing.

Specified by:
end in interface XAResource
Parameters:
xid - the id of the transaction branch for this connection
flag - ignored
Throws:
XAException - if the connection is already enlisted in another transaction

prepare

public int prepare(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:
prepare in interface XAResource
Parameters:
xid - the id of the transaction branch for this connection
Returns:
XAResource.XA_RDONLY if the connection.isReadOnly(); XAResource.XA_OK otherwise

commit

public void commit(Xid xid,
                   boolean flag)
            throws XAException
Commits the transaction and restores the original auto commit setting.

Specified by:
commit in interface XAResource
Parameters:
xid - the id of the transaction branch for this connection
flag - ignored
Throws:
XAException - if connection.commit() throws a SQLException

rollback

public void rollback(Xid xid)
              throws XAException
Rolls back the transaction and restores the original auto commit setting.

Specified by:
rollback in interface XAResource
Parameters:
xid - the id of the transaction branch for this connection
Throws:
XAException - if connection.rollback() throws a SQLException

isSameRM

public boolean isSameRM(XAResource xaResource)
Returns true if the specified XAResource == this XAResource.

Specified by:
isSameRM in interface XAResource
Parameters:
xaResource - the XAResource to test
Returns:
true if the specified XAResource == this XAResource; false otherwise

forget

public void forget(Xid xid)
Clears the currently associated transaction if it is the specified xid.

Specified by:
forget in interface XAResource
Parameters:
xid - the id of the transaction to forget

recover

public 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:
recover in interface XAResource
Parameters:
flag - ignored since recovery is not supported
Returns:
always a zero length Xid array.

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 interface XAResource
Returns:
always 0

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 interface XAResource
Parameters:
transactionTimeout - ignored since we have no way to set a transaction timeout on a JDBC connection
Returns:
always false


Copyright © 2001-2010 The Apache Software Foundation. All Rights Reserved.