[jboss-cvs] JBossAS SVN: r87565 - trunk/server/src/main/org/jboss/ejb/txtimer.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Apr 20 06:33:49 EDT 2009


Author: galder.zamarreno at jboss.com
Date: 2009-04-20 06:33:48 -0400 (Mon, 20 Apr 2009)
New Revision: 87565

Modified:
   trunk/server/src/main/org/jboss/ejb/txtimer/EJBTimerServiceImpl.java
   trunk/server/src/main/org/jboss/ejb/txtimer/TimerServiceImpl.java
Log:
[JBAS-6677] After cancellation or expiration of single action timer, timedObjectId to TimerServiceImpl mapping is cleaned up to avoid leaks leading from entities not being removed via the EJB container.

Modified: trunk/server/src/main/org/jboss/ejb/txtimer/EJBTimerServiceImpl.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/txtimer/EJBTimerServiceImpl.java	2009-04-20 09:53:51 UTC (rev 87564)
+++ trunk/server/src/main/org/jboss/ejb/txtimer/EJBTimerServiceImpl.java	2009-04-20 10:33:48 UTC (rev 87565)
@@ -52,6 +52,7 @@
  *
  * @author Thomas.Diesler at jboss.org
  * @author Dimitris.Andreadis at jboss.org
+ * @author Galder Zamarreño
  * @version $Revision$
  * @since 07-Apr-2004
  */
@@ -316,7 +317,7 @@
       if (timerService == null)
       {
          timerService = new TimerServiceImpl(timedObjectId, invoker,
-               transactionManager, persistencePolicy, retryPolicy, timerIdGenerator);
+               transactionManager, persistencePolicy, retryPolicy, timerIdGenerator, this);
          log.debug("createTimerService: " + timerService);
          timerServiceMap.put(timedObjectId, timerService);
       }
@@ -518,5 +519,15 @@
          }
       }
       return retBuffer.toString();
-   } 
+   }
+   
+   void noMoreTimers(TimedObjectId timedObjectId)
+   {
+      if (log.isTraceEnabled())
+      {
+         log.trace("No active timers available for " + timedObjectId.getContainerId() + " and primary key " + timedObjectId.getInstancePk());
+      }
+      
+      timerServiceMap.remove(timedObjectId);
+   }
 }

Modified: trunk/server/src/main/org/jboss/ejb/txtimer/TimerServiceImpl.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/txtimer/TimerServiceImpl.java	2009-04-20 09:53:51 UTC (rev 87564)
+++ trunk/server/src/main/org/jboss/ejb/txtimer/TimerServiceImpl.java	2009-04-20 10:33:48 UTC (rev 87565)
@@ -49,6 +49,7 @@
  *
  * @author Thomas.Diesler at jboss.org
  * @author Dimitris.Andreadis at jboss.org
+ * @author Galder Zamarreño
  * @version $Revision$
  * @since 07-Apr-2004
  */
@@ -74,6 +75,8 @@
    // Map<TimerHandleImpl,TimerImpl>
    private Map timers = new HashMap();
 
+   private EJBTimerServiceImpl ejbTimerService;
+
    // Constructors --------------------------------------------------
    
    /**
@@ -84,14 +87,16 @@
    public TimerServiceImpl(
          TimedObjectId timedObjectId, TimedObjectInvoker timedObjectInvoker,
          TransactionManager transactionManager, PersistencePolicy persistencePolicy,
-         RetryPolicy retryPolicy, TimerIdGenerator timerIdGenerator)
+         RetryPolicy retryPolicy, TimerIdGenerator timerIdGenerator, 
+         EJBTimerServiceImpl ejbTimerService)
    {
       this.timedObjectId = timedObjectId;
       this.timedObjectInvoker = timedObjectInvoker;
       this.transactionManager = transactionManager;
       this.persistencePolicy = persistencePolicy;
       this.timerIdGenerator = timerIdGenerator;
-      this.retryPolicy = retryPolicy;      
+      this.retryPolicy = retryPolicy;
+      this.ejbTimerService = ejbTimerService;
    }
 
    // Public --------------------------------------------------------
@@ -326,6 +331,10 @@
       {
          persistencePolicy.deleteTimer(txtimer.getTimerId(), txtimer.getTimedObjectId());
          timers.remove(new TimerHandleImpl(txtimer));
+         if (timers.isEmpty())
+         {
+            ejbTimerService.noMoreTimers(timedObjectId);
+         }
       }
    }
    




More information about the jboss-cvs-commits mailing list