This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to tag REL8_1_410
in repository libpostgresql-jdbc-java.

commit bec89bf34f53ec540ef592d43ca289f558cc65ef
Author: Kris Jurka <[email protected]>
Date:   Wed Apr 25 19:36:53 2007 +0000

    Allow XAResource.start with TMJOIN in a limited set of circumstances
    to work with WebLogic.  We allow TMJOIN only if the resource was
    previously ended and the Xid is the same as the current Xid.
    
    http://archives.postgresql.org/pgsql-jdbc/2005-12/msg00038.php
    http://archives.postgresql.org/pgsql-jdbc/2006-11/msg00002.php
    
    Jan de Visser and Heikki Linnakangas
---
 org/postgresql/test/xa/XADataSourceTest.java | 10 ++++++++++
 org/postgresql/xa/PGXAConnection.java        | 22 +++++++++++++++++-----
 2 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/org/postgresql/test/xa/XADataSourceTest.java 
b/org/postgresql/test/xa/XADataSourceTest.java
index 2978207..ba2a4ca 100644
--- a/org/postgresql/test/xa/XADataSourceTest.java
+++ b/org/postgresql/test/xa/XADataSourceTest.java
@@ -248,6 +248,16 @@ public class XADataSourceTest extends TestCase {
         assertTrue(conn.getAutoCommit());
     }
 
+    public void testEndThenJoin() throws XAException {
+        Xid xid = new CustomXid(5);
+
+        xaRes.start(xid, XAResource.TMNOFLAGS);
+        xaRes.end(xid, XAResource.TMSUCCESS);
+        xaRes.start(xid, XAResource.TMJOIN);
+        xaRes.end(xid, XAResource.TMSUCCESS);
+        xaRes.commit(xid, true);
+    }
+
     /* We don't support transaction interleaving.
     public void testInterleaving1() throws Exception {
      Xid xid1 = new CustomXid(1);
diff --git a/org/postgresql/xa/PGXAConnection.java 
b/org/postgresql/xa/PGXAConnection.java
index a0f8c41..7c9c1c8 100644
--- a/org/postgresql/xa/PGXAConnection.java
+++ b/org/postgresql/xa/PGXAConnection.java
@@ -75,8 +75,11 @@ public class PGXAConnection extends PooledConnectionImpl 
implements XAConnection
      * 4. the TM hasn't seen the xid before
      *
      * Implementation deficiency preconditions:
-     * 1. flags must be TMNOFLAGS
-     * 2. Previous transaction using the connection must be committed or 
prepared or rolled back
+     * 1. TMRESUME not supported.
+     * 2. if flags is TMJOIN, we must be in ended state,
+     *    and xid must be the current transaction
+     * 3. unless flags is TMJOIN, previous transaction using the 
+     *    connection must be committed or prepared or rolled back
      * 
      * Postconditions:
      * 1. Connection is associated with the transaction
@@ -98,9 +101,18 @@ public class PGXAConnection extends PooledConnectionImpl 
implements XAConnection
         // We can't check precondition 4 easily, so we don't. Duplicate xid 
will be catched in prepare phase.
 
         // Check implementation deficiency preconditions
-        if (flags != TMNOFLAGS)
-            throw new PGXAException(GT.tr("suspend/resume and join not 
implemented"), XAException.XAER_RMERR);
-        if (state == STATE_ENDED)
+        if (flags == TMRESUME)
+            throw new PGXAException(GT.tr("suspend/resume not implemented"), 
XAException.XAER_RMERR);
+
+        // It's ok to join an ended transaction. WebLogic does that.
+        if (flags == TMJOIN)
+        {
+            if (state != STATE_ENDED)
+                throw new PGXAException(GT.tr("Transaction interleaving not 
implemented"), XAException.XAER_RMERR);
+
+            if (!xid.equals(currentXid))
+                throw new PGXAException(GT.tr("Transaction interleaving not 
implemented"), XAException.XAER_RMERR);
+        } else if(state == STATE_ENDED)
             throw new PGXAException(GT.tr("Transaction interleaving not 
implemented"), XAException.XAER_RMERR);
 
         try

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git

_______________________________________________
pkg-java-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to