Class 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
    • Constructor Detail

      • LocalXAResource

        public LocalXAResource​(Connection localTransaction)
        Construct a new instance for a given connection.
        Parameters:
        localTransaction - A connection.
    • Method Detail

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