[jboss-cvs] JBossAS SVN: r63543 - in branches/Branch_4_2: tomcat/src/main/org/jboss/web/tomcat/service/jca and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jun 15 12:54:40 EDT 2007


Author: adrian at jboss.org
Date: 2007-06-15 12:54:40 -0400 (Fri, 15 Jun 2007)
New Revision: 63543

Modified:
   branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/AbstractTxInterceptorBMT.java
   branches/Branch_4_2/tomcat/src/main/org/jboss/web/tomcat/service/jca/CachedConnectionValve.java
Log:
[JBAS-4487] - Suspend any leftover transaction for BMT.

Modified: branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/AbstractTxInterceptorBMT.java
===================================================================
--- branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/AbstractTxInterceptorBMT.java	2007-06-15 15:13:52 UTC (rev 63542)
+++ branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/AbstractTxInterceptorBMT.java	2007-06-15 16:54:40 UTC (rev 63543)
@@ -215,29 +215,49 @@
          log.error("Failed to get status", ex);
       }
 
-      switch (status)
+      try
       {
-         case Status.STATUS_ACTIVE :
-         case Status.STATUS_COMMITTING :
-         case Status.STATUS_MARKED_ROLLBACK :
-         case Status.STATUS_PREPARING :
-         case Status.STATUS_ROLLING_BACK :
-            try
+         switch (status)
+         {
+            case Status.STATUS_ACTIVE :
+            case Status.STATUS_COMMITTING :
+            case Status.STATUS_MARKED_ROLLBACK :
+            case Status.STATUS_PREPARING :
+            case Status.STATUS_ROLLING_BACK :
+               try
+               {
+                  tm.rollback();
+               }
+               catch (Exception ex)
+               {
+                  log.error("Failed to rollback", ex);
+               }
+            // fall through...
+            case Status.STATUS_PREPARED :
+               String msg = "Application error: BMT stateless bean " + container.getBeanMetaData().getEjbName()
+                     + " should complete transactions before" + " returning (ejb1.1 spec, 11.6.1)";
+               log.error(msg);
+
+               // the instance interceptor will discard the instance
+               throw new RemoteException(msg);
+         }
+      }
+      finally
+      {
+         try
+         {
+            Transaction tx = tm.suspend();
+            if (tx != null)
             {
-               tm.rollback();
+               String msg = "Application error: BMT stateless bean " + container.getBeanMetaData().getEjbName()
+                      + " should complete transactions before " + " returning (ejb1.1 spec, 11.6.1), suspended tx=" + tx ;
+               log.error(msg);
             }
-            catch (Exception ex)
-            {
-               log.error("Failed to rollback", ex);
-            }
-         // fall through...
-         case Status.STATUS_PREPARED :
-            String msg = "Application error: BMT stateless bean " + container.getBeanMetaData().getEjbName()
-                  + " should complete transactions before" + " returning (ejb1.1 spec, 11.6.1)";
-            log.error(msg);
-
-            // the instance interceptor will discard the instance
-            throw new RemoteException(msg);
+         }
+         catch (SystemException ex)
+         {
+            log.error("Failed to suspend transaction", ex);
+         }
       }
    }
 

Modified: branches/Branch_4_2/tomcat/src/main/org/jboss/web/tomcat/service/jca/CachedConnectionValve.java
===================================================================
--- branches/Branch_4_2/tomcat/src/main/org/jboss/web/tomcat/service/jca/CachedConnectionValve.java	2007-06-15 15:13:52 UTC (rev 63542)
+++ branches/Branch_4_2/tomcat/src/main/org/jboss/web/tomcat/service/jca/CachedConnectionValve.java	2007-06-15 16:54:40 UTC (rev 63543)
@@ -31,6 +31,7 @@
 import javax.servlet.ServletException;
 import javax.transaction.Status;
 import javax.transaction.SystemException;
+import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
 
 import org.apache.catalina.Lifecycle;
@@ -225,40 +226,74 @@
          log.error("Failed to get status", ex);
       }
 
-      switch (status)
+      try
       {
-         case Status.STATUS_ACTIVE:
-         case Status.STATUS_COMMITTING:
-         case Status.STATUS_MARKED_ROLLBACK:
-         case Status.STATUS_PREPARING:
-         case Status.STATUS_ROLLING_BACK:
-            try
+         switch (status)
+         {
+            case Status.STATUS_ACTIVE:
+            case Status.STATUS_COMMITTING:
+            case Status.STATUS_MARKED_ROLLBACK:
+            case Status.STATUS_PREPARING:
+            case Status.STATUS_ROLLING_BACK:
+               try
+               {
+                  tm.rollback();
+               }
+               catch (Exception ex)
+               {
+                  log.error("Failed to rollback", ex);
+               }
+               // fall through...
+            case Status.STATUS_PREPARED:
+               String servletName = "<Unknown>";
+               try
+               {
+                  Wrapper servlet = request.getWrapper();
+                  if (servlet != null)
+                  {
+                     servletName = servlet.getName();
+                     if (servlet.getJspFile() != null)
+                        servletName = servlet.getJspFile();
+                  }
+               }
+               catch (Throwable ignored)
+               {
+               }
+
+               String msg = "Application error: " + servletName + " did not complete its transaction";
+               log.error(msg);
+         }
+      }
+      finally
+      {
+         try
+         {
+            Transaction tx = tm.suspend();
+            if (tx != null)
             {
-               tm.rollback();
-            }
-            catch (Exception ex)
-            {
-               log.error("Failed to rollback", ex);
-            }
-            // fall through...
-         case Status.STATUS_PREPARED:
-            String servletName = "<Unknown>";
-            try
-            {
-               Wrapper servlet = request.getWrapper();
-               if (servlet != null)
+               String servletName = "<Unknown>";
+               try
                {
-                  servletName = servlet.getName();
-                  if (servlet.getJspFile() != null)
-                     servletName = servlet.getJspFile();
+                  Wrapper servlet = request.getWrapper();
+                  if (servlet != null)
+                  {
+                     servletName = servlet.getName();
+                     if (servlet.getJspFile() != null)
+                        servletName = servlet.getJspFile();
+                  }
                }
+               catch (Throwable ignored)
+               {
+               }
+               String msg = "Application error: " + servletName +
+                      " did not complete its transaction suspended tx=" + tx ;
+               log.error(msg);
             }
-            catch (Throwable ignored)
-            {
-            }
-
-            String msg = "Application error: " + servletName + " did not complete its transaction";
-            log.error(msg);
+         }
+         catch (SystemException ex)
+         {
+            log.error("Failed to suspend transaction", ex);
+         }
       }
    }
 }




More information about the jboss-cvs-commits mailing list