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()); } }