Package org.apache.tomcat.dbcp.dbcp2.managed

# 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

  Constructors
  Constructor
  Description
  `LocalXAResource(Connection localTransaction)`
  Constructs a new instance for a given connection.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `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 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 Details

  - ### LocalXAResource

    public LocalXAResource(Connection localTransaction)
    Constructs a new instance for a given connection.
    Parameters:
      `localTransaction` - A connection.

- ## Method Details

  - ### 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 an SQLException

  - ### 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

  - ### 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

  - ### 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

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

  - ### 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

  - ### 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

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

  - ### 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 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 interface `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(Xid xid, int flag) throws XAException
    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 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