[jboss-cvs] JBossAS SVN: r61257 - branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Mar 10 19:20:56 EST 2007


Author: bstansberry at jboss.com
Date: 2007-03-10 19:20:55 -0500 (Sat, 10 Mar 2007)
New Revision: 61257

Modified:
   branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/StatefulSessionInstanceInterceptor.java
Log:
In afterCompletion, cut reference links from Synchronization to interceptor, as TM may hold ref to Synchronization for a while. Avoids spurious failures in classloader leak tests.

Modified: branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/StatefulSessionInstanceInterceptor.java
===================================================================
--- branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/StatefulSessionInstanceInterceptor.java	2007-03-11 00:18:32 UTC (rev 61256)
+++ branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/StatefulSessionInstanceInterceptor.java	2007-03-11 00:20:55 UTC (rev 61257)
@@ -163,7 +163,7 @@
    protected void register(EnterpriseContext ctx, Transaction tx, BeanLock lock)
    {
       // Create a new synchronization
-      InstanceSynchronization synch = new InstanceSynchronization(ctx, lock);
+      InstanceSynchronization synch = new InstanceSynchronization(ctx, lock, container, log);
       
       try
       {
@@ -410,13 +410,14 @@
    
    // Inner classes -------------------------------------------------
    
-   private class InstanceSynchronization
+   private static class InstanceSynchronization
    implements Synchronization
    {
       /**
        *  The context we manage.
        */
       private EnterpriseContext ctx;
+      private Container container;
       
       // a utility boolean for session sync
       private boolean notifySession = false;
@@ -428,14 +429,19 @@
       private BeanLock lock;
       private boolean beforeCompletionInvoked = false;
       
+      // Shared log with the interceptor
+      private Logger log;
+      
       /**
        *  Create a new instance synchronization instance.
        */
-      InstanceSynchronization(EnterpriseContext ctx, BeanLock lock)
+      InstanceSynchronization(EnterpriseContext ctx, BeanLock lock, Container container, Logger log)
       {
          this.ctx = ctx;
          this.lock = lock;
          this.lock.addRef();
+         this.log = log;
+         this.container = ctx.getContainer();
          
          // Let's compute it now, to speed things up we could
          notifySession = (ctx.getInstance() instanceof javax.ejb.SessionSynchronization);
@@ -549,6 +555,12 @@
          {
             lock.releaseSync();
             container.getLockManager().removeLockRef(lock.getId());
+            // Clear refs that could lead to application classes, as the 
+            // transaction manager may hold a ref to this Synchronization 
+            // for a while
+            lock = null;
+            ctx = null;
+            container = null;
          }
       }
    }




More information about the jboss-cvs-commits mailing list