[jboss-cvs] JBossAS SVN: r109770 - in projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3: stateful and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Dec 8 05:14:36 EST 2010


Author: wolfc
Date: 2010-12-08 05:14:36 -0500 (Wed, 08 Dec 2010)
New Revision: 109770

Modified:
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java
Log:
EJBTHREE-2213: implemented stateful timeout

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java	2010-12-08 08:38:19 UTC (rev 109769)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java	2010-12-08 10:14:36 UTC (rev 109770)
@@ -21,17 +21,6 @@
  */
 package org.jboss.ejb3.cache.simple;
 
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Map.Entry;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import javax.ejb.EJBException;
-import javax.ejb.NoSuchEJBException;
-
 import org.jboss.aop.Advisor;
 import org.jboss.ejb3.EJBContainer;
 import org.jboss.ejb3.annotation.CacheConfig;
@@ -39,10 +28,22 @@
 import org.jboss.ejb3.cache.StatefulCache;
 import org.jboss.ejb3.cache.persistence.PersistenceManagerFactory;
 import org.jboss.ejb3.cache.persistence.PersistenceManagerFactoryRegistry;
+import org.jboss.ejb3.effigy.SessionBeanEffigy;
+import org.jboss.ejb3.effigy.StatefulTimeoutEffigy;
 import org.jboss.ejb3.stateful.StatefulBeanContext;
 import org.jboss.ejb3.stateful.StatefulContainer;
 import org.jboss.logging.Logger;
 
+import javax.ejb.EJBException;
+import javax.ejb.NoSuchEJBException;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Queue;
+import java.util.concurrent.LinkedBlockingQueue;
+
 /**
  * Comment
  *
@@ -83,7 +84,7 @@
       }
 
       @Override
-      public boolean removeEldestEntry(Entry<Object, StatefulBeanContext> entry)
+      public boolean removeEldestEntry(Map.Entry<Object, StatefulBeanContext> entry)
       {
          boolean removeIt = size() > maxSize;
          if (removeIt)
@@ -123,7 +124,7 @@
       
       protected void block() throws InterruptedException
       {
-         Thread.sleep(removalTimeout * 1000);
+         Thread.sleep(removalTimeout);
       }
       
       protected void preRemoval()
@@ -165,7 +166,7 @@
                   {
                      Entry<Object, StatefulBeanContext> entry = it.next();
                      StatefulBeanContext centry = entry.getValue();
-                     if (now - centry.lastUsed >= removalTimeout * 1000)
+                     if (now - centry.lastUsed >= removalTimeout)
                      {
                         synchronized (centry)
                         {                                                                    
@@ -180,7 +181,7 @@
                while (it.hasNext())
                {       
                   StatefulBeanContext centry = it.next();
-                  if (now - centry.lastUsed >= removalTimeout * 1000)
+                  if (now - centry.lastUsed >= removalTimeout)
                   {
                      get(centry.getId(), false);
                      remove(centry.getId());
@@ -328,7 +329,21 @@
       CacheConfig config = (CacheConfig) advisor.resolveAnnotation(CacheConfig.class);
       maxSize = config.maxSize();
       sessionTimeout = config.idleTimeoutSeconds();
-      removalTimeout = config.removalTimeoutSeconds();
+      removalTimeout = config.removalTimeoutSeconds() * 1000;
+      SessionBeanEffigy effigy = this.container.getEffigy();
+      if(effigy != null)
+      {
+         StatefulTimeoutEffigy statefulTimeout = effigy.getStatefulTimeout();
+         if(statefulTimeout != null)
+         {
+            removalTimeout = statefulTimeout.getUnit().toMillis(statefulTimeout.getTimeout());
+            // the legacy meaning of 0 means no removal
+            // EJB 3.1 FR 4.3.12 states however that the instance becomes immediately eligible for removal
+            // so we have this work-around to simulate this.
+            if(removalTimeout == 0)
+               removalTimeout = 1;
+         }
+      }
       log = Logger.getLogger(getClass().getName() + "." + container.getEjbName());
       log.debug("Initializing SimpleStatefulCache with maxSize: " +maxSize + " timeout: " +sessionTimeout +
               " for " +container.getObjectName().getCanonicalName() );

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java	2010-12-08 08:38:19 UTC (rev 109769)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java	2010-12-08 10:14:36 UTC (rev 109770)
@@ -227,7 +227,7 @@
       }
    }
 
-   protected SessionBeanEffigy getEffigy()
+   public SessionBeanEffigy getEffigy()
    {
       return (SessionBeanEffigy) super.getEffigy();
    }



More information about the jboss-cvs-commits mailing list