Author: rmannibucau
Date: Wed Oct  2 08:26:36 2013
New Revision: 1528361

URL: http://svn.apache.org/r1528361
Log:
starting @Scedule in BeanContext.start + ensuring it can be eagerly started if 
used in @PostContruct

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerService.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/MemoryTimerStore.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/NullEjbTimerServiceImpl.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerServiceWrapper.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java
 Wed Oct  2 08:26:36 2013
@@ -17,6 +17,7 @@
 package org.apache.openejb.core;
 
 import org.apache.openejb.BeanContext;
+import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.core.ivm.IntraVmArtifact;
 import org.apache.openejb.core.timer.EjbTimerService;
 import org.apache.openejb.core.timer.TimerServiceImpl;
@@ -178,12 +179,20 @@ public abstract class BaseContext implem
     public TimerService getTimerService() throws IllegalStateException {
         check(Call.getTimerService);
 
-        ThreadContext threadContext = ThreadContext.getThreadContext();
-        BeanContext beanContext = threadContext.getBeanContext();
-        EjbTimerService timerService = beanContext.getEjbTimerService();
+        final ThreadContext threadContext = ThreadContext.getThreadContext();
+        final BeanContext beanContext = threadContext.getBeanContext();
+        final EjbTimerService timerService = beanContext.getEjbTimerService();
         if (timerService == null) {
             throw new IllegalStateException("This ejb does not support timers 
" + beanContext.getDeploymentID());
         }
+
+        if (!timerService.isStarted()) {
+            try {
+                timerService.start();
+            } catch (final OpenEJBException e) {
+                throw new IllegalStateException(e);
+            }
+        }
         return new TimerServiceImpl(timerService, 
threadContext.getPrimaryKey(), beanContext.getEjbTimeout());
     }
 

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
 Wed Oct  2 08:26:36 2013
@@ -16,19 +16,26 @@
  */
 package org.apache.openejb.core.cmp;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.rmi.NoSuchObjectException;
-import java.rmi.RemoteException;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.Set;
+import org.apache.openejb.ApplicationException;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.ContainerType;
+import org.apache.openejb.InterfaceType;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.ProxyInfo;
+import org.apache.openejb.RpcContainer;
+import org.apache.openejb.core.ExceptionType;
+import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.entity.EntityContext;
+import org.apache.openejb.core.entity.EntrancyTracker;
+import org.apache.openejb.core.timer.EjbTimerService;
+import org.apache.openejb.core.timer.EjbTimerServiceImpl;
+import org.apache.openejb.core.transaction.TransactionPolicy;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.SecurityService;
+import org.apache.openejb.util.Enumerator;
+
+import javax.ejb.EJBAccessException;
 import javax.ejb.EJBContext;
 import javax.ejb.EJBException;
 import javax.ejb.EJBHome;
@@ -36,37 +43,31 @@ import javax.ejb.EJBLocalHome;
 import javax.ejb.EJBLocalObject;
 import javax.ejb.EJBObject;
 import javax.ejb.EntityBean;
+import javax.ejb.FinderException;
 import javax.ejb.ObjectNotFoundException;
 import javax.ejb.RemoveException;
 import javax.ejb.Timer;
-import javax.ejb.FinderException;
-import javax.ejb.EJBAccessException;
+import javax.transaction.Synchronization;
 import javax.transaction.TransactionManager;
 import javax.transaction.TransactionSynchronizationRegistry;
-import javax.transaction.Synchronization;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.rmi.NoSuchObjectException;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
-import org.apache.openejb.ApplicationException;
-import org.apache.openejb.BeanContext;
-import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.ProxyInfo;
-import org.apache.openejb.RpcContainer;
-import org.apache.openejb.ContainerType;
-import org.apache.openejb.InterfaceType;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.core.Operation;
-import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.core.ExceptionType;
-import org.apache.openejb.core.timer.EjbTimerService;
-import org.apache.openejb.core.timer.EjbTimerServiceImpl;
-import org.apache.openejb.core.entity.EntityContext;
-import org.apache.openejb.core.entity.EntrancyTracker;
-import org.apache.openejb.core.transaction.TransactionPolicy;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleApplicationException;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleSystemException;
 import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke;
 import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.createTransactionPolicy;
-import org.apache.openejb.spi.SecurityService;
-import org.apache.openejb.util.Enumerator;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleApplicationException;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleSystemException;
 
 /**
  * @org.apache.xbean.XBean element="cmpContainer"
@@ -172,15 +173,14 @@ public class CmpContainer implements Rpc
             beansByClass.put(beanContext.getCmpImplClass(), beanContext);
             beanContext.setContainer(this);
         }
+    }
 
-        EjbTimerService timerService = beanContext.getEjbTimerService();
+    public void start(final BeanContext beanContext) throws OpenEJBException {
+        final EjbTimerService timerService = beanContext.getEjbTimerService();
         if (timerService != null) {
             timerService.start();
         }
     }
-
-    public void start(BeanContext beanContext) throws OpenEJBException {
-    }
     
     public void stop(BeanContext beanContext) throws OpenEJBException {
         beanContext.stop();

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java
 Wed Oct  2 08:26:36 2013
@@ -16,42 +16,19 @@
  */
 package org.apache.openejb.core.entity;
 
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.rmi.NoSuchObjectException;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Vector;
-import javax.ejb.EJBAccessException;
-import javax.ejb.EJBHome;
-import javax.ejb.EJBLocalHome;
-import javax.ejb.EJBLocalObject;
-import javax.ejb.EJBObject;
-import javax.ejb.EntityBean;
-import javax.ejb.NoSuchEntityException;
-import javax.ejb.Timer;
-import javax.transaction.TransactionSynchronizationRegistry;
-
 import org.apache.openejb.ApplicationException;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.ContainerType;
+import org.apache.openejb.InterfaceType;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.ProxyInfo;
-import org.apache.openejb.SystemException;
 import org.apache.openejb.RpcContainer;
-import org.apache.openejb.InterfaceType;
+import org.apache.openejb.SystemException;
 import org.apache.openejb.core.ExceptionType;
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.core.timer.EjbTimerService;
 import org.apache.openejb.core.timer.EjbTimerServiceImpl;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleApplicationException;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleSystemException;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.createTransactionPolicy;
 import org.apache.openejb.core.transaction.TransactionPolicy;
 import org.apache.openejb.core.transaction.TransactionType;
 import org.apache.openejb.loader.SystemInstance;
@@ -59,6 +36,30 @@ import org.apache.openejb.spi.SecuritySe
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 
+import javax.ejb.EJBAccessException;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
+import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBObject;
+import javax.ejb.EntityBean;
+import javax.ejb.NoSuchEntityException;
+import javax.ejb.Timer;
+import javax.transaction.TransactionSynchronizationRegistry;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.rmi.NoSuchObjectException;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Vector;
+
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.createTransactionPolicy;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleApplicationException;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleSystemException;
+
 /**
  * @org.apache.xbean.XBean element="bmpContainer"
  */
@@ -109,15 +110,14 @@ public class EntityContainer implements 
             beanContext.setContainer(this);
         }
         instanceManager.deploy(beanContext);
+    }
 
-        EjbTimerService timerService = beanContext.getEjbTimerService();
+    public void start(final BeanContext info) throws OpenEJBException {
+        final EjbTimerService timerService = info.getEjbTimerService();
         if (timerService != null) {
             timerService.start();
         }
     }
-
-    public void start(BeanContext info) throws OpenEJBException {
-    }
     
     public void stop(BeanContext info) throws OpenEJBException {
         info.stop();

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
 Wed Oct  2 08:26:36 2013
@@ -16,59 +16,57 @@
  */
 package org.apache.openejb.core.mdb;
 
-import org.apache.openejb.BeanContext;
-import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.SystemException;
 import org.apache.openejb.ApplicationException;
+import org.apache.openejb.BeanContext;
 import org.apache.openejb.ContainerType;
-import org.apache.openejb.RpcContainer;
 import org.apache.openejb.InterfaceType;
-import org.apache.openejb.monitoring.LocalMBeanServer;
-import org.apache.openejb.monitoring.StatsInterceptor;
-import org.apache.openejb.monitoring.ObjectNameBuilder;
-import org.apache.openejb.monitoring.ManagedMBean;
-import org.apache.openejb.resource.XAResourceWrapper;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.loader.Options;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.RpcContainer;
+import org.apache.openejb.SystemException;
+import org.apache.openejb.core.ExceptionType;
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.core.ExceptionType;
-import org.apache.openejb.core.timer.EjbTimerService;
 import org.apache.openejb.core.interceptor.InterceptorData;
 import org.apache.openejb.core.interceptor.InterceptorStack;
+import org.apache.openejb.core.timer.EjbTimerService;
 import org.apache.openejb.core.transaction.TransactionPolicy;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleApplicationException;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleSystemException;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke;
-import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.createTransactionPolicy;
+import org.apache.openejb.loader.Options;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.monitoring.LocalMBeanServer;
+import org.apache.openejb.monitoring.ManagedMBean;
+import org.apache.openejb.monitoring.ObjectNameBuilder;
+import org.apache.openejb.monitoring.StatsInterceptor;
+import org.apache.openejb.resource.XAResourceWrapper;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
-
 import org.apache.xbean.recipe.ObjectRecipe;
 import org.apache.xbean.recipe.Option;
 
-import javax.transaction.xa.XAResource;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.UnavailableException;
-import javax.resource.ResourceException;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.naming.NamingException;
-import javax.validation.ConstraintViolation; 
-import javax.validation.ConstraintViolationException; 
-import javax.validation.Validator; 
-import java.lang.reflect.Method;
+import javax.resource.ResourceException;
+import javax.resource.spi.ActivationSpec;
+import javax.resource.spi.ResourceAdapter;
+import javax.resource.spi.UnavailableException;
+import javax.transaction.xa.XAResource;
+import javax.validation.ConstraintViolationException;
+import javax.validation.Validator;
 import java.lang.reflect.InvocationTargetException;
-import java.lang.management.ManagementFactory;
+import java.lang.reflect.Method;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
-import java.util.Arrays;
-import java.util.TreeSet;
 import java.util.Set;
-import java.util.concurrent.ConcurrentMap;
+import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.createTransactionPolicy;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleApplicationException;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleSystemException;
 
 public class MdbContainer implements RpcContainer {
     private static final Logger logger = 
Logger.getInstance(LogCategory.OPENEJB, "org.apache.openejb.util.resources");
@@ -190,12 +188,6 @@ public class MdbContainer implements Rpc
 
             throw new OpenEJBException(e);
         }
-
-        // start the timer service
-        EjbTimerService timerService = beanContext.getEjbTimerService();
-        if (timerService != null) {
-            timerService.start();
-        }
     }
 
     private ActivationSpec createActivationSpec(BeanContext beanContext)throws 
OpenEJBException {
@@ -252,7 +244,11 @@ public class MdbContainer implements Rpc
         }
     }
 
-    public void start(BeanContext info) throws OpenEJBException {
+    public void start(final BeanContext info) throws OpenEJBException {
+        final EjbTimerService timerService = info.getEjbTimerService();
+        if (timerService != null) {
+            timerService.start();
+        }
     }
     
     public void stop(BeanContext info) throws OpenEJBException {

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
 Wed Oct  2 08:26:36 2013
@@ -32,7 +32,6 @@ import org.apache.openejb.core.timer.Ejb
 import org.apache.openejb.core.transaction.TransactionPolicy;
 import org.apache.openejb.core.webservices.AddressingSupport;
 import org.apache.openejb.core.webservices.NoAddressingSupport;
-import org.apache.openejb.monitoring.StatsInterceptor;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.Duration;
 import org.apache.xbean.finder.ClassFinder;
@@ -45,13 +44,19 @@ import javax.ejb.EJBLocalObject;
 import javax.ejb.EJBObject;
 import javax.interceptor.AroundInvoke;
 import java.lang.reflect.Method;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.locks.Lock;
 
-import static org.apache.openejb.core.transaction.EjbTransactionUtil.*;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.createTransactionPolicy;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleApplicationException;
+import static 
org.apache.openejb.core.transaction.EjbTransactionUtil.handleSystemException;
 
 /**
  * @org.apache.xbean.XBean element="statelessContainer"
@@ -112,16 +117,16 @@ public class SingletonContainer implemen
             deploymentRegistry.put(id, beanContext);
             beanContext.setContainer(this);
         }
-
-        EjbTimerService timerService = beanContext.getEjbTimerService();
-        if (timerService != null) {
-            timerService.start();
-        }
     }
 
     @Override
-    public void start(BeanContext info) throws OpenEJBException {
+    public void start(final BeanContext info) throws OpenEJBException {
         instanceManager.start(info);
+
+        final EjbTimerService timerService = info.getEjbTimerService();
+        if (timerService != null) {
+            timerService.start();
+        }
     }
 
     @Override

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
 Wed Oct  2 08:26:36 2013
@@ -260,6 +260,7 @@ public class StatefulContainer implement
 
     @Override
     public void start(final BeanContext beanContext) throws OpenEJBException {
+        // no-op
     }
 
     @Override

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
 Wed Oct  2 08:26:36 2013
@@ -104,8 +104,12 @@ public class StatelessContainer implemen
             final StatsInterceptor stats = new 
StatsInterceptor(beanContext.getBeanClass());
             beanContext.addFirstSystemInterceptor(stats);
         }
+    }
+
+    @Override
+    public void start(final BeanContext beanContext) throws OpenEJBException {
+        this.instanceManager.deploy(beanContext);
 
-        // do it after the instance deployment
         final EjbTimerService timerService = beanContext.getEjbTimerService();
         if (timerService != null) {
             timerService.start();
@@ -113,12 +117,7 @@ public class StatelessContainer implemen
     }
 
     @Override
-    public void start(BeanContext beanContext) throws OpenEJBException {
-        this.instanceManager.deploy(beanContext);
-    }
-
-    @Override
-    public void stop(BeanContext beanContext) throws OpenEJBException {
+    public void stop(final BeanContext beanContext) throws OpenEJBException {
         beanContext.stop();
     }
 

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerService.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerService.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerService.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerService.java
 Wed Oct  2 08:26:36 2013
@@ -17,15 +17,14 @@
 
 package org.apache.openejb.core.timer;
 
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.Date;
+import org.apache.openejb.OpenEJBException;
 
 import javax.ejb.ScheduleExpression;
 import javax.ejb.Timer;
 import javax.ejb.TimerConfig;
-
-import org.apache.openejb.OpenEJBException;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Date;
 
 public interface EjbTimerService {
     Timer getTimer(long id);
@@ -47,4 +46,6 @@ public interface EjbTimerService {
     void stop();
 
     TimerStore getTimerStore();
+
+    boolean isStarted();
 }

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
 Wed Oct  2 08:26:36 2013
@@ -447,6 +447,10 @@ public class EjbTimerServiceImpl impleme
 
     @Override
     public void start() throws TimerStoreException {
+        if (isStarted()) {
+            return;
+        }
+
         scheduler = getDefaultScheduler(deployment);
 
         // load saved timers
@@ -685,6 +689,11 @@ public class EjbTimerServiceImpl impleme
         return timerStore;
     }
 
+    @Override
+    public boolean isStarted() {
+        return scheduler != null;
+    }
+
     public Scheduler getScheduler() {
         return scheduler;
     }

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/MemoryTimerStore.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/MemoryTimerStore.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/MemoryTimerStore.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/MemoryTimerStore.java
 Wed Oct  2 08:26:36 2013
@@ -34,6 +34,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
@@ -79,7 +80,13 @@ public class MemoryTimerStore implements
     @Override
     public Collection<TimerData> loadTimers(final EjbTimerServiceImpl 
timerService, final String deploymentId) throws TimerStoreException {
         final TimerDataView tasks = getTasks();
-        return new ArrayList<TimerData>(tasks.getTasks().values());
+        final Collection<TimerData> out = new LinkedList<TimerData>();
+        for (final TimerData data : tasks.getTasks().values()) {
+            if (deploymentId == null || 
deploymentId.equals(data.getDeploymentId())) {
+                out.add(data);
+            }
+        }
+        return out;
     }
 
     // used to re-register a TimerData, if a cancel() is rolledback...

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/NullEjbTimerServiceImpl.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/NullEjbTimerServiceImpl.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/NullEjbTimerServiceImpl.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/NullEjbTimerServiceImpl.java
 Wed Oct  2 08:26:36 2013
@@ -16,17 +16,16 @@
  */
 package org.apache.openejb.core.timer;
 
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.Date;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
 
 import javax.ejb.ScheduleExpression;
 import javax.ejb.Timer;
 import javax.ejb.TimerConfig;
-
-import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.util.LogCategory;
-import org.apache.openejb.util.Logger;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Date;
 
 /**
  * Idempotent EjbTimerServiceImplementation. Used if a Bean does not implement 
a timeout method or no auto-started timer is configured by annotation or 
deployment plan.
@@ -81,4 +80,9 @@ public class NullEjbTimerServiceImpl imp
     public TimerStore getTimerStore() {
         return null;
     }
+
+    @Override
+    public boolean isStarted() {
+        return true;
+    }
 }

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerServiceWrapper.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerServiceWrapper.java?rev=1528361&r1=1528360&r2=1528361&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerServiceWrapper.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerServiceWrapper.java
 Wed Oct  2 08:26:36 2013
@@ -16,25 +16,23 @@
  */
 package org.apache.openejb.core.timer;
 
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.Map;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.MethodContext;
+import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
 
 import javax.ejb.EJBException;
 import javax.ejb.ScheduleExpression;
 import javax.ejb.Timer;
 import javax.ejb.TimerConfig;
 import javax.ejb.TimerService;
-
-import org.apache.openejb.BeanContext;
-import org.apache.openejb.MethodContext;
-import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.core.transaction.TransactionType;
-import org.apache.openejb.util.LogCategory;
-import org.apache.openejb.util.Logger;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Map;
 
 public class TimerServiceWrapper implements TimerService {
     
@@ -88,18 +86,18 @@ public class TimerServiceWrapper impleme
     }
 
     private TimerService getTimerService() throws IllegalStateException {
-        ThreadContext threadContext = ThreadContext.getThreadContext();
-        BeanContext beanContext = threadContext.getBeanContext();
-        EjbTimerService timerService = beanContext.getEjbTimerService();
+        final ThreadContext threadContext = ThreadContext.getThreadContext();
+        final BeanContext beanContext = threadContext.getBeanContext();
+        final EjbTimerService timerService = beanContext.getEjbTimerService();
         if (timerService == null) {
             throw new IllegalStateException("This ejb does not support timers 
" + beanContext.getDeploymentID());
         } else if(beanContext.getEjbTimeout() == null) {
             
             boolean hasSchedules = false;
             
-            for (Iterator<Map.Entry<Method, MethodContext>> it = 
beanContext.iteratorMethodContext(); it.hasNext();) {
-                Map.Entry<Method, MethodContext> entry = it.next();
-                MethodContext methodContext = entry.getValue();
+            for (final Iterator<Map.Entry<Method, MethodContext>> it = 
beanContext.iteratorMethodContext(); it.hasNext();) {
+                final Map.Entry<Method, MethodContext> entry = it.next();
+                final MethodContext methodContext = entry.getValue();
                 if (methodContext.getSchedules().size() > 0) {
                     hasSchedules = true;
                 }
@@ -110,6 +108,7 @@ public class TimerServiceWrapper impleme
             }
             
         }
+
         return new TimerServiceImpl(timerService, 
threadContext.getPrimaryKey(), beanContext.getEjbTimeout());
     }
 }


Reply via email to