Class DRDAXAProtocol

java.lang.Object
org.apache.derby.impl.drda.DRDAXAProtocol

class DRDAXAProtocol extends Object
This class translates DRDA XA protocol from an application requester to XA calls for Derby and then translates the results from Derby to DRDA for return to the application requester. This class requires the use of javax.transaction.xa classes from j2ee, so is separated from DRDAConnThread, because of the additional library requirements
  • Field Details

    • connThread

      private DRDAConnThread connThread
    • reader

      private DDMReader reader
    • writer

      private DDMWriter writer
    • xid

      private Xid xid
      Holds the Xid of the global transaction associated with the corresponding DRDAConnThread (and connection itself).
  • Constructor Details

  • Method Details

    • parseSYNCCTL

      protected void parseSYNCCTL() throws DRDAProtocolException
      Parse SYNCCTL - Parse SYNCCTL command for XAMGR lvl 7
      Throws:
      DRDAProtocolException
    • parseSYNCTYPE

      protected int parseSYNCTYPE() throws DRDAProtocolException
      parse SYNCTYPE for XAMGR lvl 7 return synctype value CodePoint.SYNCTYPE_NEW_UOW -> XAResource.start() CodePoint.SYNCTYPE_END_UOW -> XAResource.end() CodePoint.SYNCTYPE_PREPARE -> XAResource.prepare() CodePoint.SYNCTYPE_MIGRATE -> not supported //SYNCPT MGR LEVEL 5 CodePoint.SYNCTYPE_REQ_COMMIT -> not supported //SYNCPT MGR LEVEL 5 CodePoint.SYNCTYPE_COMMITTED -> XAResource.commit() or local commit for null XID CodePoint.SYNCTYPE_REQ_LOG -> not supported CodePoint.SYNCTYPE_REQ_FORGET -> XAResource.forget() CodePoint.SYNCTYPE_ROLLBACK -> XAResource.rollback() CodePoint.SYNCTYPE_MIGRATED -> not supported CodePoint.SYNCTYPE_INDOUBT -> XAResource.recover();
      Throws:
      DRDAProtocolException
    • parseXID

      private Xid parseXID() throws DRDAProtocolException
      Parse XID formatId -1 translates into a null XID and a local transaction
      Throws:
      DRDAProtocolException
    • parseXAFlags

      private int parseXAFlags() throws DRDAProtocolException
      parse XAFlags
      Returns:
      XAFlags value
      Throws:
      DRDAProtocolException
    • parseXATimeout

      private long parseXATimeout() throws DRDAProtocolException
      Parses a XA transaction timout value.
      Returns:
      A timeout value.
      Throws:
      DRDAProtocolException
    • startXATransaction

      private void startXATransaction(Xid xid, int xaflags, long xaTimeout) throws DRDAProtocolException
      Start the xa transaction. Send SYNCRRD response
      Parameters:
      xid - - XID (formatId = -1 for local transaction)
      xaflags - - xaflags
      xaTimeout - - The timeout for the global transaction in millis (or -1 if not specified)
      Throws:
      DRDAProtocolException
    • commitTransaction

      private void commitTransaction(Xid xid, int xaflags) throws DRDAProtocolException
      Commit the xa transaction. Send SYNCCRD response
      Parameters:
      xid - - XID (formatId = -1 for local transaction)
      xaflags - - xaflags
      Throws:
      DRDAProtocolException
    • commitLocalTransaction

      private void commitLocalTransaction() throws DRDAProtocolException
      Commit local transaction. Send SYNCCRD response.
      Throws:
      DRDAProtocolException
    • commitXATransaction

      private void commitXATransaction(Xid xid, int xaflags) throws DRDAProtocolException
      Commit the xa transaction. Send SYNCCRD response.
      Parameters:
      xid - - XID
      xaflags - - xaflags
      Throws:
      DRDAProtocolException
    • rollbackTransaction

      private void rollbackTransaction(Xid xid, boolean sendSYNCCRD) throws DRDAProtocolException
      Rollback transaction. Optionally send SYNCCRD response.
      Parameters:
      xid - Xid for rollback for global transaction. If xid formatid is -1 it represents a local transaction
      sendSYNCCRD - Indicates whether the function should send a SYNCCRD response
      Throws:
      DRDAProtocolException
    • rollbackLocalTransaction

      private void rollbackLocalTransaction(boolean sendSYNCCRD) throws DRDAProtocolException
      Rollback a local transaction. Optionally send SYNCCRD response.
      Parameters:
      sendSYNCCRD - Indicates whether the function should send a SYNCCRD response
      Throws:
      DRDAProtocolException
    • rollbackXATransaction

      private void rollbackXATransaction(Xid xid, boolean sendSYNCCRD) throws DRDAProtocolException
      Rollback the xa transaction. Optionally send SYNCCRD response.
      Parameters:
      xid - - XID
      sendSYNCCRD - Indicates whether the function should send a SYNCCRD response
      Throws:
      DRDAProtocolException
    • endXA

      private void endXA(Xid xid, int xaflags) throws DRDAProtocolException
      End the xa transaction. Send SYNCRRD response
      Parameters:
      xid - - XID
      xaflags - - xaflags
      Throws:
      DRDAProtocolException
    • prepareXATransaction

      private void prepareXATransaction(Xid xid) throws DRDAProtocolException
      Prepare the xa transaction. Send SYNCCRD response.
      Parameters:
      xid - - XID
      Throws:
      DRDAProtocolException
    • forgetXATransaction

      private void forgetXATransaction(Xid xid) throws DRDAProtocolException
      Forget the xa transaction. Send SYNCCRD response.
      Parameters:
      xid - - XID
      Throws:
      DRDAProtocolException
    • recoverXA

      private void recoverXA() throws DRDAProtocolException
      Throws:
      DRDAProtocolException
    • recoverXA

      private void recoverXA(int xaflags) throws DRDAProtocolException
      Call recover. Send SYNCCRD response with indoubt list
      Throws:
      DRDAProtocolException
    • writeSYNCCRD

      private void writeSYNCCRD(int synctype, int xaRetVal, Xid[] xids) throws DRDAProtocolException
      Write SYNCCRD (SYNCCTL response)
      Parameters:
      synctype - - XA Command to send response for see parseSYNCTYPE
      xaRetVal - - return value from XA command
      xids - - list of xids to return for recover. null for other commands
      Throws:
      DRDAProtocolException
    • writePRPHRCLST

      private void writePRPHRCLST(Xid[] xids) throws DRDAProtocolException
      write PRPHRCLST (indoubt list)
      Parameters:
      xids - - list of indoubt xa transactions obtained from recover
      Throws:
      DRDAProtocolException
    • writeXID

      private void writeXID(Xid xid) throws DRDAProtocolException
      write XID
      Parameters:
      xid - - XID to write
      Throws:
      DRDAProtocolException
    • getXAResource

      private XAResource getXAResource()
      get XAResource for the connection
      Returns:
      XAResource
    • syncTypeToString

      private String syncTypeToString(int syncType)
      printable syncType for debug output
      Parameters:
      syncType -
      Returns:
      - sync type meaning
    • xaflagsToString

      private String xaflagsToString(int xaflags)
      printable xaflags
      Parameters:
      xaflags -
      Returns:
      printable xaflags for debug output
    • processXAException

      private int processXAException(XAException xe)
      return xa exception errorCode. print to console for debug output.
      Parameters:
      xe - - XA Exception
    • getResourceAdapter

      ResourceAdapter getResourceAdapter()
      Returns:
      The ResourceAdapter instance for the underlying database.
    • rollbackCurrentTransaction

      void rollbackCurrentTransaction()
      This function rollbacks the current global transaction associated with the XAResource or a local transaction. The function should be called only in exceptional cases - like client socket is closed.