[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