[jboss-cvs] JBossAS SVN: r75898 - trunk/testsuite/src/main/org/jboss/test/jca/adapter.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jul 16 06:50:24 EDT 2008


Author: jhalliday
Date: 2008-07-16 06:50:23 -0400 (Wed, 16 Jul 2008)
New Revision: 75898

Modified:
   trunk/testsuite/src/main/org/jboss/test/jca/adapter/TestManagedConnection.java
Log:
Fixed XAException error codes.  JBAS-5714


Modified: trunk/testsuite/src/main/org/jboss/test/jca/adapter/TestManagedConnection.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/jca/adapter/TestManagedConnection.java	2008-07-16 10:48:17 UTC (rev 75897)
+++ trunk/testsuite/src/main/org/jboss/test/jca/adapter/TestManagedConnection.java	2008-07-16 10:50:23 UTC (rev 75898)
@@ -19,7 +19,7 @@
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
-package org.jboss.test.jca.adapter; 
+package org.jboss.test.jca.adapter;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -50,12 +50,11 @@
 /**
  * TestManagedConnection.java
  *
- * TODO fix all the XAExceptions to throw the correct error code
  * @author <a href="mailto:d_jencks at users.sourceforge.net">David Jencks</a>
  * @author <a href="mailto:adrian at jboss.com">Adrian Brock</a>
  * @version <tt>$Revision$</tt>
  */
-public class TestManagedConnection  implements ManagedConnection, XAResource, LocalTransaction 
+public class TestManagedConnection  implements ManagedConnection, XAResource, LocalTransaction
 {
    public static final String STARTED = "STARTED";
    public static final String SUSPENDED = "SUSPENDED";
@@ -66,9 +65,9 @@
    public static final String LOCAL_TRANSACTION = "LOCAL_TRANSACTION";
    public static final String LOCAL_COMMITTED = "LOCAL_COMMITTED";
    public static final String LOCAL_ROLLEDBACK = "LOCAL_ROLLEDBACK";
-   
+
    private final int id;
-   
+
    private Logger log = Logger.getLogger(getClass());
    private TestManagedConnectionFactory mcf;
    private HashSet handles = new HashSet();
@@ -82,11 +81,11 @@
    private boolean failInCommit = false;
    private static boolean failInStart = false;
    private static boolean failInEnd = false;
-   
+
    private static int xaCode;
-   
+
    private String localState = LOCAL_NONE;
-   
+
    public static void setFailInStart(boolean fis, int xa)
    {
       failInStart = fis;
@@ -96,15 +95,15 @@
    {
      failInEnd = fie;
      xaCode = xa;
-     
+
    }
-   
+
    public TestManagedConnection (final TestManagedConnectionFactory mcf, final Subject subject, final TestConnectionRequestInfo cri, final int id)
    {
       this.mcf = mcf;
       this.id = id;
    }
-   
+
    void setFailInPrepare(final boolean fail, final int xaCode)
    {
       this.failInPrepare = fail;
@@ -132,7 +131,7 @@
    public synchronized void cleanup() throws ResourceException
    {
       log.info("cleanup: " + this +" handles=" + handles);
-      
+
       checkDestroyedResourceException();
       for (Iterator i = handles.iterator(); i.hasNext(); )
       {
@@ -145,7 +144,7 @@
    public synchronized Object getConnection(Subject param1, ConnectionRequestInfo param2) throws ResourceException
    {
       log.info("getConnection " + this);
-      
+
       checkDestroyedResourceException();
 
       if (param2 != null && ((TestConnectionRequestInfo) param2).failure.equals("getConnectionResource"))
@@ -163,14 +162,14 @@
 
       checkDestroyedResourceException();
 
-      if (p instanceof TestConnection) 
+      if (p instanceof TestConnection)
       {
          ((TestConnection)p).setMc(this);
          handles.add(p);
       }
       else
       {
-         throw new ResourceException("wrong kind of Connection " + p);         
+         throw new ResourceException("wrong kind of Connection " + p);
       }
    }
 
@@ -191,7 +190,7 @@
       checkDestroyedResourceException();
       return this;
    }
-   
+
    public LocalTransaction getLocalTransaction() throws ResourceException
    {
       return this;
@@ -212,34 +211,35 @@
    }
 
    // implementation of javax.transaction.xa.XAResource interface
-   
+
    public List getListeners()
    {
       List result = null;
-      
+
       synchronized (listeners)
       {
          result = new ArrayList(listeners);
       }
-      
+
       return result;
-      
+
    }
    public void start(Xid xid, int flags) throws XAException
    {
       long sleepInStart = mcf.getSleepInStart();
       if (flags == TMNOFLAGS && sleepInStart != 0)
          doSleep(sleepInStart);
-      
+
       synchronized (this)
       {
          if(failInStart)
          {
             XAException xaex = new XAException(xaCode + "for" + this);
+            xaex.errorCode = xaCode;
             broadcastConnectionError(xaex);
-            throw new XAException(xaCode + "for" + this);
+            throw xaex;
          }
-         
+
          GlobalXID gid = new GlobalXID(xid);
          String flagString = TxUtils.getXAResourceFlagsAsString(flags);
          log.info("start with xid=" + gid + " flags=" + flagString + " for " + this);
@@ -248,15 +248,28 @@
          synchronized (xids)
          {
             String state = (String) xids.get(gid);
-            if (state == null && flags != TMNOFLAGS) 
-               throw new XAException("Invalid start state=" + state + " xid=" + gid + " flags=" + flagString + " for " + this);
-            if (state != null && state != SUSPENDED && state != ENDED 
+            if (state == null && flags != TMNOFLAGS)
+            {
+                XAException xaex = new XAException("Invalid start state=" + state + " xid=" + gid + " flags=" + flagString + " for " + this);
+                xaex.errorCode = XAException.XAER_RMERR;
+                throw xaex;
+            }
+            if (state != null && state != SUSPENDED && state != ENDED
                   && (state != STARTED || ((flags & TMJOIN) == 0))
                   && (state != STARTED || ((flags & TMRESUME) == 0))
                )
-               throw new XAException("Invalid start state=" + state + " xid=" + gid + " flags=" + flagString + " for " + this);
+            {
+                XAException xaex = new XAException("Invalid start state=" + state + " xid=" + gid + " flags=" + flagString + " for " + this);
+                xaex.errorCode = XAException.XAER_RMERR;
+                throw xaex;
+            }
+
             if ((flags & TMJOIN) != 0 && mcf.failJoin)
-               throw new XAException("Join is not allowed " + state + " xid=" + gid + " flags=" + flagString + " for " + this);
+            {
+                XAException xaex = new XAException("Join is not allowed " + state + " xid=" + gid + " flags=" + flagString + " for " + this);
+                xaex.errorCode = XAException.XAER_RMERR;
+                throw xaex;
+            }
             xids.put(gid, STARTED);
          }
 
@@ -266,18 +279,19 @@
 
    public void end(final Xid xid, final int flags) throws XAException
    {
-      
+
       if(failInEnd)
       {
-         XAException xaex = new XAException(xaCode + "for" + this);
-         broadcastConnectionError(xaex);
-         throw new XAException(xaCode + "for" + this);
+          XAException xaex = new XAException(xaCode + "for" + this);
+          xaex.errorCode = xaCode;
+          broadcastConnectionError(xaex);
+          throw xaex;
       }
-      
+
       long sleepInEnd = mcf.getSleepInEnd();
       if (flags != TMSUCCESS && sleepInEnd != 0)
          doSleep(sleepInEnd);
-      
+
       synchronized (this)
       {
          GlobalXID gid = new GlobalXID(xid);
@@ -289,7 +303,11 @@
          {
             String state = (String) xids.get(gid);
             if (state != STARTED && state != SUSPENDED && state != ENDED)
-               throw new XAException("Invalid end state=" + state + " xid=" + gid + " " + this);
+            {
+                XAException xaex = new XAException("Invalid end state=" + state + " xid=" + gid + " " + this);
+                xaex.errorCode = XAException.XAER_RMERR;
+                throw xaex;
+            }
             if ((flags & TMSUSPEND) == 0)
                xids.put(gid, ENDED);
             else
@@ -305,8 +323,12 @@
       GlobalXID gid = new GlobalXID(xid);
       log.info("commit with xid=" + gid + " onePhase=" + onePhase + " for " + this);
       checkDestroyedXAException();
-      if (failInCommit) 
-         throw new XAException(xaCode + " for " + this);
+      if (failInCommit)
+      {
+          XAException xaex = new XAException(xaCode + " for " + this);
+          xaex.errorCode = xaCode;
+          throw xaex;
+      }
       Map xids = getXids();
       synchronized (xids)
       {
@@ -314,12 +336,20 @@
          if (onePhase)
          {
             if (state != SUSPENDED && state != ENDED)
-               throw new XAException("Invalid one phase commit state=" + state + " xid=" + gid + " " + this);
+            {
+               XAException xaex = new XAException("Invalid one phase commit state=" + state + " xid=" + gid + " " + this);
+               xaex.errorCode = XAException.XAER_RMERR;
+               throw xaex;
+            }
          }
          else
          {
             if (state != PREPARED)
-               throw new XAException("Invalid two phase commit state=" + state + " xid=" + gid + " " + this);
+            {
+               XAException xaex = new XAException("Invalid two phase commit state=" + state + " xid=" + gid + " " + this);
+               xaex.errorCode = XAException.XAER_RMERR;
+               throw xaex;
+            }
          }
          xids.remove(gid);
       }
@@ -335,7 +365,11 @@
       {
          String state = (String) xids.get(gid);
          if (state != SUSPENDED && state != ENDED && state != PREPARED)
-            throw new XAException("Invalid rollback state=" + state + " xid=" + gid + " " + this);
+         {
+            XAException xaex = new XAException("Invalid rollback state=" + state + " xid=" + gid + " " + this);
+            xaex.errorCode = XAException.XAER_RMERR;
+            throw xaex;
+         }
          xids.remove(gid);
       }
    }
@@ -349,9 +383,12 @@
       synchronized (xids)
       {
          String state = (String) xids.get(gid);
-         if (state != SUSPENDED && state != ENDED)
-            throw new XAException("Invalid prepare state=" + state + " xid=" + gid + " " + this);
-         if (failInPrepare) 
+         if (state != SUSPENDED && state != ENDED) {
+            XAException xaex = new XAException("Invalid prepare state=" + state + " xid=" + gid + " " + this);
+            xaex.errorCode = XAException.XAER_RMERR;
+            throw xaex;
+         }
+         if (failInPrepare)
          {
             XAException xae = new XAException(xaCode + " for " + this);
             xae.errorCode = xaCode;
@@ -401,12 +438,12 @@
    {
       return localState;
    }
-   
+
    public void begin() throws ResourceException
    {
       localState = LOCAL_TRANSACTION;
    }
-   
+
    public void sendBegin() throws ResourceException
    {
       begin();
@@ -430,11 +467,11 @@
    {
       localState = LOCAL_COMMITTED;
    }
-      
+
    public void sendCommit() throws ResourceException
    {
       commit();
-      
+
       ConnectionEvent event = new ConnectionEvent(this, ConnectionEvent.LOCAL_TRANSACTION_COMMITTED);
       Collection copy = new ArrayList(listeners);
       for (Iterator i = copy.iterator(); i.hasNext(); )
@@ -455,11 +492,11 @@
    {
       localState = LOCAL_ROLLEDBACK;
    }
-    
+
    public void sendRollback() throws ResourceException
    {
       rollback();
-      
+
       ConnectionEvent event = new ConnectionEvent(this, ConnectionEvent.LOCAL_TRANSACTION_ROLLEDBACK);
       Collection copy = new ArrayList(listeners);
       for (Iterator i = copy.iterator(); i.hasNext(); )
@@ -486,12 +523,12 @@
    {
       return mcf.getXids();
    }
-   
+
    void connectionClosed(TestConnection handle)
    {
       if (destroyed.get())
          return;
-      
+
       log.info("Connetion closed handle=" + handle + " for " + this);
 
       ConnectionEvent ce = new ConnectionEvent(this ,ConnectionEvent.CONNECTION_CLOSED);
@@ -520,7 +557,7 @@
    {
       if(destroyed.get())
          return;
-      
+
       Exception ex = null;
       if (e instanceof Exception)
          ex = (Exception) e;
@@ -549,9 +586,9 @@
    {
       if (destroyed.get())
          return;
-      
+
       log.info("Connetion error handle=" + handle + " for " + this, e);
-      
+
       ConnectionEvent ce = new ConnectionEvent(this, ConnectionEvent.CONNECTION_ERROR_OCCURRED, e);
       ce.setConnectionHandle(handle);
       Collection copy = new ArrayList(listeners);
@@ -576,10 +613,13 @@
 
    void checkDestroyedXAException() throws XAException
    {
-      if (destroyed.get())
-         throw new XAException("Already destroyed " + this);
+      if (destroyed.get()) {
+          XAException xaex = new XAException("Already destroyed " + this);
+          xaex.errorCode = XAException.XAER_RMERR;
+          throw xaex;
+      }
    }
-   
+
    public synchronized String toString()
    {
       StringBuffer buffer = new StringBuffer();
@@ -605,13 +645,13 @@
       if (interrupted)
          Thread.currentThread().interrupt();
    }
-   
+
    public class GlobalXID
    {
       byte[] gid;
       int hashCode;
       String toString;
-      
+
       public GlobalXID(Xid xid)
       {
          gid = xid.getGlobalTransactionId();
@@ -620,17 +660,17 @@
             hashCode += 37 * gid[i];
          toString = new String(gid).trim();
       }
-      
+
       public int hashCode()
       {
          return hashCode;
       }
-      
+
       public String toString()
       {
          return toString;
       }
-      
+
       public boolean equals(Object obj)
       {
          if (obj == null || obj instanceof GlobalXID == false)




More information about the jboss-cvs-commits mailing list