[jboss-cvs] JBossAS SVN: r109110 - in projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3: mdb and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Nov 4 03:42:40 EDT 2010
Author: wolfc
Date: 2010-11-04 03:42:39 -0400 (Thu, 04 Nov 2010)
New Revision: 109110
Added:
projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/TimerServiceContainer.java
Modified:
projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java
projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/service/ServiceContainer.java
projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/session/SessionContainer.java
projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java
projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java
Log:
JBPAPP-3308: merged EJBTHREE-2107 (rev 105795) refactor timerservice management
Copied: projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/TimerServiceContainer.java (from rev 105795, projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/TimerServiceContainer.java)
===================================================================
--- projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/TimerServiceContainer.java (rev 0)
+++ projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/TimerServiceContainer.java 2010-11-04 07:42:39 UTC (rev 109110)
@@ -0,0 +1,252 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3;
+
+import java.util.Hashtable;
+
+import javax.ejb.Timeout;
+import javax.ejb.TimerService;
+
+import org.jboss.aop.Domain;
+import org.jboss.beans.metadata.api.annotations.Inject;
+import org.jboss.ejb3.timerservice.spi.TimedObjectInvoker;
+import org.jboss.ejb3.timerservice.spi.TimerServiceFactory;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+
+/**
+ * A {@link EJBContainer} which contains the common functionality around EJB3 timer service.
+ *
+ * <p>
+ * {@link TimerServiceContainer} is responsible for creating, restoring and suspending {@link TimerService}
+ * at the right time during {@link EJBContainer} lifecycle events. The {@link TimerServiceContainer} knows
+ * about EJB3 spec rules and takes care of <i>not</i> creating, restoring or suspending timer service for
+ * stateful session beans.
+ * </p>
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public abstract class TimerServiceContainer extends EJBContainer
+{
+
+ /**
+ * Logger
+ */
+ private static Logger logger = Logger.getLogger(TimerServiceContainer.class);
+
+ /**
+ * TimerService which will be created for this container
+ */
+ protected TimerService timerService;
+
+ /**
+ * {@link TimerServiceFactory} which will be used for interacting with the
+ * timer service
+ */
+ private TimerServiceFactory timerServiceFactory;
+
+ /**
+ * Constructor
+ *
+ * @param name Name of the container
+ * @param domain AOP domain for this container
+ * @param cl Classloader of this container
+ * @param beanClassName The fully qualified class name of the EJB
+ * @param ejbName The name of the EJB
+ * @param ctxProperties Naming context properties
+ * @param deployment Deployment, <i>can</i> be null
+ * @param beanMetaData Metadata of the EJB
+ * @throws ClassNotFoundException
+ */
+ protected TimerServiceContainer(String name, Domain domain, ClassLoader cl, String beanClassName, String ejbName,
+ Hashtable ctxProperties, Ejb3Deployment deployment, JBossEnterpriseBeanMetaData beanMetaData)
+ throws ClassNotFoundException
+ {
+ super(name, domain, cl, beanClassName, ejbName, ctxProperties, deployment, beanMetaData);
+
+ }
+
+ /**
+ * Creates a {@link TimerService} for this container.
+ * {@link TimerService} creation is skipped for stateful session beans, since
+ * stateful session beans do not support timerservice
+ *
+ * @see EJBContainer#lockedStart()
+ */
+ @Override
+ protected void lockedStart() throws Exception
+ {
+ try
+ {
+ super.lockedStart();
+ // for non-stateful beans, create timer service
+ if (this.isStatefulBean() == false)
+ {
+ // just create the timerservice. Restoring of
+ // any timers, will be done in afterStart(), once the container has fully started
+ // (to allow for timeout method invocations)
+ this.timerService = this.createTimerService();
+ }
+
+ }
+ catch (Exception e)
+ {
+ try
+ {
+ this.lockedStop();
+ }
+ catch (Exception ignore)
+ {
+ logger.debug("Failed to cleanup after start() failure", ignore);
+ }
+ throw e;
+ }
+ }
+
+ /**
+ * Restores the timers after this container has fully started, thus
+ * ensuring that any invocations on this container through the restored
+ * timers are handled successfully
+ * <p>
+ * This method skips timerservice restoration of stateful session beans
+ * </p>
+ *
+ * @see org.jboss.ejb3.EJBContainer#afterStart()
+ */
+ @Override
+ protected void afterStart()
+ {
+ super.afterStart();
+ // restore timerservice for non-stateful beans
+ if (this.isStatefulBean() == false)
+ {
+ this.timerServiceFactory.restoreTimerService(timerService);
+ }
+ }
+
+ /**
+ * Suspends the {@link TimerService} associated with this container.
+ * <p>
+ * This method skips timerservice suspension of stateful session beans
+ * </p>
+ *
+ * @see EJBContainer#lockedStop()
+ */
+ @Override
+ protected void lockedStop() throws Exception
+ {
+ if (this.timerService != null)
+ {
+ this.timerServiceFactory.suspendTimerService(timerService);
+ this.timerService = null;
+ }
+
+ super.lockedStop();
+ }
+
+ /**
+ * Returns the {@link TimerService} associated with this container.
+ *
+ * @throws UnsupportedOperationException If this container corresponds to a stateful session bean
+ */
+ @Override
+ public TimerService getTimerService()
+ {
+ if (this.isStatefulBean())
+ {
+ throw new UnsupportedOperationException("stateful bean doesn't support TimerService (EJB3 18.2#2)");
+ }
+ return this.timerService;
+ }
+
+ /**
+ * Returns the {@link TimerService} associated with this container.
+ *
+ * @throws UnsupportedOperationException If this container corresponds to a stateful session bean
+ */
+ // hmm, what exactly is this method for?
+ @Override
+ public TimerService getTimerService(Object pKey)
+ {
+ return this.getTimerService();
+ }
+
+ /**
+ * Set the {@link TimerServiceFactory}, which will be used for managing
+ * the {@link TimerService} associated with this container
+ *
+ * @param factory
+ */
+ @Inject
+ public void setTimerServiceFactory(TimerServiceFactory factory)
+ {
+ this.timerServiceFactory = factory;
+ }
+
+ /**
+ * Returns the {@link TimedObjectInvoker} which will be used by the
+ * timer implementations to invoke the timeout method (annotated with {@link Timeout}
+ * or specified in deployment descriptor) on the bean.
+ *
+ * @return
+ */
+ protected abstract TimedObjectInvoker getTimedObjectInvoker();
+
+ /**
+ * Returns true if this {@link TimerServiceContainer} belongs to a stateful bean.
+ * Else returns false
+ * @return
+ */
+ private boolean isStatefulBean()
+ {
+ JBossEnterpriseBeanMetaData enterpriseBeanMetaData = this.xml;
+ if (enterpriseBeanMetaData.isSession() == false)
+ {
+ return false;
+ }
+ JBossSessionBeanMetaData sessionBean = (JBossSessionBeanMetaData) enterpriseBeanMetaData;
+ return sessionBean.isStateful();
+ }
+
+ /**
+ * Creates and returns a {@link TimerService}. Uses the {@link #timerServiceFactory} for creating the
+ * timer service.
+ * @return
+ */
+ private TimerService createTimerService()
+ {
+ // get the TimedObjectInvoker
+ TimedObjectInvoker timedObjectInvoker = this.getTimedObjectInvoker();
+ // if there's no TimedObjectInvoker, we can't do anything, so just
+ // throw an exception
+ if (timedObjectInvoker == null)
+ {
+ throw new IllegalStateException("Cannot create timerservice for EJB " + this.getEjbName()
+ + " since there's no TimedObjectInvoker");
+ }
+ // create and return the timerservice
+ return this.timerServiceFactory.createTimerService(timedObjectInvoker);
+ }
+
+}
Modified: projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java
===================================================================
--- projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java 2010-11-04 05:19:06 UTC (rev 109109)
+++ projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java 2010-11-04 07:42:39 UTC (rev 109110)
@@ -21,53 +21,53 @@
*/
package org.jboss.ejb3.mdb;
+import java.lang.reflect.Method;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.ejb.ActivationConfigProperty;
+import javax.ejb.EJBException;
+import javax.ejb.Timer;
+import javax.jms.Destination;
+import javax.jms.Queue;
+import javax.jms.Topic;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.naming.Context;
+import javax.naming.NamingException;
+
import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
-import org.jboss.beans.metadata.api.annotations.Inject;
import org.jboss.deployers.spi.DeploymentException;
-import org.jboss.ejb3.*;
+import org.jboss.ejb3.BeanContext;
+import org.jboss.ejb3.EJBContainerInvocation;
+import org.jboss.ejb3.Ejb3Deployment;
+import org.jboss.ejb3.Ejb3Module;
+import org.jboss.ejb3.TimerServiceContainer;
import org.jboss.ejb3.annotation.ResourceAdapter;
import org.jboss.ejb3.jms.JMSDestinationFactory;
import org.jboss.ejb3.mdb.inflow.JBossMessageEndpointFactory;
import org.jboss.ejb3.proxy.factory.ProxyFactoryHelper;
import org.jboss.ejb3.timerservice.spi.TimedObjectInvoker;
-import org.jboss.ejb3.timerservice.spi.TimerServiceFactory;
import org.jboss.jms.jndi.JMSProviderAdapter;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
import org.jboss.metadata.ejb.spec.ActivationConfigPropertyMetaData;
import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
-import javax.ejb.ActivationConfigProperty;
-import javax.ejb.EJBException;
-import javax.ejb.Timer;
-import javax.ejb.TimerService;
-import javax.jms.Destination;
-import javax.jms.Queue;
-import javax.jms.Topic;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-import javax.naming.Context;
-import javax.naming.NamingException;
-import java.lang.reflect.Method;
-import java.util.Hashtable;
-import java.util.Map;
-
/**
* @version <tt>$Revision$</tt>
* @author <a href="mailto:bdecoste at jboss.com">William DeCoste</a>
*/
-public abstract class MessagingContainer extends EJBContainer implements TimedObjectInvoker
+public abstract class MessagingContainer extends TimerServiceContainer implements TimedObjectInvoker
{
private static final Logger log = Logger.getLogger(MessagingContainer.class);
- protected TimerService timerService;
private Method timeout;
protected ActivationSpec activationSpec = new ActivationSpec();
protected JBossMessageEndpointFactory messageEndpointFactory;
private MessagingDelegateWrapper mbean = new MessagingDelegateWrapper(this);
- private TimerServiceFactory timerServiceFactory;
/**
* Default destination type. Used when no message-driven-destination is given
@@ -166,11 +166,8 @@
innerStart();
- timerService = timerServiceFactory.createTimerService(this);
-
startProxies();
- timerServiceFactory.restoreTimerService(timerService);
}
protected void startDelivery()
@@ -283,16 +280,6 @@
}
}
- public TimerService getTimerService()
- {
- return timerService;
- }
-
- public TimerService getTimerService(Object pKey)
- {
- assert timerService != null : "Timer Service not yet initialized";
- return timerService;
- }
public void callTimeout(Timer timer) throws Exception
{
@@ -314,12 +301,6 @@
@Override
protected void lockedStop() throws Exception
{
- if (timerService != null)
- {
- timerServiceFactory.suspendTimerService(timerService);
- timerService = null;
- }
-
stopProxies();
super.lockedStop();
@@ -643,17 +624,19 @@
return 60000;
}
- /* (non-Javadoc)
+ /**
* @see org.jboss.ejb3.timerservice.spi.TimedObjectInvoker#getTimedObjectId()
*/
+ @Override
public String getTimedObjectId()
{
return getDeploymentQualifiedName();
}
- @Inject
- public void setTimerServiceFactory(TimerServiceFactory factory)
+ @Override
+ protected TimedObjectInvoker getTimedObjectInvoker()
{
- this.timerServiceFactory = factory;
+ return this;
}
+
}
\ No newline at end of file
Modified: projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/service/ServiceContainer.java
===================================================================
--- projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/service/ServiceContainer.java 2010-11-04 05:19:06 UTC (rev 109109)
+++ projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/service/ServiceContainer.java 2010-11-04 07:42:39 UTC (rev 109110)
@@ -32,7 +32,6 @@
import javax.ejb.EJBException;
import javax.ejb.Handle;
import javax.ejb.Timer;
-import javax.ejb.TimerService;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.AttributeNotFoundException;
@@ -51,7 +50,6 @@
import org.jboss.aop.joinpoint.InvocationResponse;
import org.jboss.aop.joinpoint.MethodInvocation;
import org.jboss.aop.util.MethodHashing;
-import org.jboss.beans.metadata.api.annotations.Inject;
import org.jboss.ejb.AllowedOperationsAssociation;
import org.jboss.ejb.AllowedOperationsFlags;
import org.jboss.ejb3.BeanContext;
@@ -68,8 +66,6 @@
import org.jboss.ejb3.session.SessionContainer;
import org.jboss.ejb3.stateful.StatefulContainerInvocation;
import org.jboss.ejb3.timerservice.spi.TimedObjectInvoker;
-import org.jboss.ejb3.timerservice.spi.TimerServiceFactory;
-import org.jboss.injection.Injector;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBossServiceBeanMetaData;
import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
@@ -92,14 +88,11 @@
ObjectName delegateObjectName;
- private TimerService timerService;
private Object mbean = new ServiceDelegateWrapper(this);
private Method timeoutMethod;
- private TimerServiceFactory timerServiceFactory;
-
@SuppressWarnings("unused")
private static final Logger log = Logger.getLogger(ServiceContainer.class);
@@ -256,11 +249,6 @@
{
initBeanContext();
- // make sure the timer service is there before injection takes place
- // Any suspended timers will be restored, through afterStart(),
- // once the containers are fully started and open for invocations
- timerService = timerServiceFactory.createTimerService(this);
-
injectDependencies(beanContext);
invokePostConstruct(beanContext);
@@ -281,30 +269,10 @@
}
}
- /**
- * Restores the timers after this container has fully started, thus
- * ensuring that any invocations on this container through the restored
- * timers are handled successfully
- *
- * @see org.jboss.ejb3.EJBContainer#afterStart()
- */
@Override
- protected void afterStart()
- {
- super.afterStart();
- this.timerServiceFactory.restoreTimerService(timerService);
- }
-
- @Override
protected void lockedStop() throws Exception
{
invokePreDestroy(beanContext);
-
- if (timerService != null)
- {
- timerServiceFactory.suspendTimerService(timerService);
- timerService = null;
- }
super.lockedStop();
@@ -331,17 +299,7 @@
resolveInjectors();
}
- public TimerService getTimerService()
- {
- return timerService;
- }
- public TimerService getTimerService(Object pKey)
- {
- assert timerService != null : "Timer Service not yet initialized";
- return timerService;
- }
-
private void setTcl(final ClassLoader cl)
{
AccessController.doPrivileged(new PrivilegedAction<Object>()
@@ -823,12 +781,6 @@
return (Exception) t;
}
- @Inject
- public void setTimerServiceFactory(TimerServiceFactory factory)
- {
- this.timerServiceFactory = factory;
- }
-
@Override
public void start() throws Exception
{
@@ -847,4 +799,10 @@
super.stop();
}
+
+ @Override
+ protected TimedObjectInvoker getTimedObjectInvoker()
+ {
+ return this;
+ }
}
Modified: projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/session/SessionContainer.java
===================================================================
--- projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/session/SessionContainer.java 2010-11-04 05:19:06 UTC (rev 109109)
+++ projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/session/SessionContainer.java 2010-11-04 07:42:39 UTC (rev 109110)
@@ -52,6 +52,7 @@
import org.jboss.ejb3.Ejb3Deployment;
import org.jboss.ejb3.Ejb3Module;
import org.jboss.ejb3.Ejb3Registry;
+import org.jboss.ejb3.TimerServiceContainer;
import org.jboss.ejb3.annotation.LocalBinding;
import org.jboss.ejb3.annotation.RemoteBinding;
import org.jboss.ejb3.annotation.RemoteBindings;
@@ -81,7 +82,7 @@
* @author <a href="mailto:bill at jboss.org">Bill Burke</a>
* @version $Revision$
*/
-public abstract class SessionContainer extends EJBContainer implements InvokableContext, Endpoint
+public abstract class SessionContainer extends TimerServiceContainer implements InvokableContext, Endpoint
{
@SuppressWarnings("unused")
private static final Logger log = Logger.getLogger(SessionContainer.class);
@@ -125,7 +126,7 @@
public SessionContainer(ClassLoader cl, String beanClassName, String ejbName, Domain domain,
Hashtable ctxProperties, JBossSessionBeanMetaData beanMetaData) throws ClassNotFoundException
{
- super(Ejb3Module.BASE_EJB3_JMX_NAME + ",name=" + ejbName, domain, cl, beanClassName, ejbName, ctxProperties, beanMetaData);
+ super(Ejb3Module.BASE_EJB3_JMX_NAME + ",name=" + ejbName, domain, cl, beanClassName, ejbName, ctxProperties, null, beanMetaData);
proxyDeployer = new ProxyDeployer(this);
}
Modified: projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java
===================================================================
--- projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java 2010-11-04 05:19:06 UTC (rev 109109)
+++ projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java 2010-11-04 07:42:39 UTC (rev 109110)
@@ -21,6 +21,28 @@
*/
package org.jboss.ejb3.stateful;
+import java.io.Serializable;
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.rmi.RemoteException;
+import java.util.Arrays;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBObject;
+import javax.ejb.Handle;
+import javax.ejb.Init;
+import javax.ejb.NoSuchEJBException;
+import javax.ejb.NoSuchObjectLocalException;
+import javax.ejb.PostActivate;
+import javax.ejb.PrePassivate;
+import javax.ejb.RemoteHome;
+import javax.ejb.RemoveException;
+
import org.jboss.aop.Advisor;
import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
@@ -33,7 +55,12 @@
import org.jboss.aop.util.PayloadKey;
import org.jboss.ejb3.BeanContext;
import org.jboss.ejb3.Ejb3Deployment;
-import org.jboss.ejb3.annotation.*;
+import org.jboss.ejb3.annotation.Cache;
+import org.jboss.ejb3.annotation.CacheConfig;
+import org.jboss.ejb3.annotation.Clustered;
+import org.jboss.ejb3.annotation.LocalBinding;
+import org.jboss.ejb3.annotation.RemoteBinding;
+import org.jboss.ejb3.annotation.RemoteHomeBinding;
import org.jboss.ejb3.cache.CacheFactoryRegistry;
import org.jboss.ejb3.cache.Ejb3CacheFactory;
import org.jboss.ejb3.cache.StatefulCache;
@@ -60,6 +87,7 @@
import org.jboss.ejb3.session.Ejb2xMethodNames;
import org.jboss.ejb3.session.SessionContainer;
import org.jboss.ejb3.session.SessionSpecContainer;
+import org.jboss.ejb3.timerservice.spi.TimedObjectInvoker;
import org.jboss.injection.Injector;
import org.jboss.injection.JndiPropertyInjector;
import org.jboss.logging.Logger;
@@ -67,17 +95,6 @@
import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
import org.jboss.util.NotImplementedException;
-import javax.ejb.*;
-import java.io.Serializable;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.rmi.RemoteException;
-import java.util.Arrays;
-import java.util.Hashtable;
-import java.util.Map;
-
/**
* Comment
*
@@ -639,16 +656,6 @@
return findInitMethod(cls.getSuperclass(), parameterTypes);
}
- public TimerService getTimerService()
- {
- throw new UnsupportedOperationException("stateful bean doesn't support TimerService (EJB3 18.2#2)");
- }
-
- public TimerService getTimerService(Object pKey)
- {
- return getTimerService();
- }
-
@Override
public void invokePostActivate(BeanContext beanContext)
{
@@ -1379,4 +1386,11 @@
{
getCache().remove(session);
}
+
+ @Override
+ protected TimedObjectInvoker getTimedObjectInvoker()
+ {
+ // stateful beans don't support timers
+ return null;
+ }
}
Modified: projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java
===================================================================
--- projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java 2010-11-04 05:19:06 UTC (rev 109109)
+++ projects/ejb3/branches/jboss-ejb3-core-1.3/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java 2010-11-04 07:42:39 UTC (rev 109110)
@@ -22,6 +22,23 @@
package org.jboss.ejb3.stateless;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Set;
+
+import javax.ejb.EJBContext;
+import javax.ejb.EJBException;
+import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBObject;
+import javax.ejb.Handle;
+import javax.ejb.RemoteHome;
+import javax.ejb.Timer;
+import javax.ejb.TimerService;
+import javax.naming.NamingException;
+
import org.jboss.aop.Advisor;
import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
@@ -74,23 +91,7 @@
import org.jboss.wsf.spi.invocation.integration.InvocationContextCallback;
import org.jboss.wsf.spi.invocation.integration.ServiceEndpointContainer;
-import javax.ejb.EJBContext;
-import javax.ejb.EJBException;
-import javax.ejb.EJBLocalObject;
-import javax.ejb.EJBObject;
-import javax.ejb.Handle;
-import javax.ejb.RemoteHome;
-import javax.ejb.Timer;
-import javax.ejb.TimerService;
-import javax.naming.NamingException;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.Set;
-
/**
* Comment
*
@@ -102,12 +103,9 @@
{
private static final Logger log = Logger.getLogger(StatelessContainer.class);
- protected TimerService timerService;
private Method timeout;
private StatelessDelegateWrapper mbean = new StatelessDelegateWrapper(this);
- private TimerServiceFactory timerServiceFactory;
-
public StatelessContainer(ClassLoader cl, String beanClassName, String ejbName, Domain domain,
Hashtable ctxProperties, Ejb3Deployment deployment, JBossSessionBeanMetaData beanMetaData) throws ClassNotFoundException
{
@@ -186,69 +184,7 @@
this.timeout = getTimeoutCallback(timeoutMethodMetaData, getBeanClass());
}
- @Override
- protected void lockedStart() throws Exception
- {
- try
- {
- super.lockedStart();
- // just create the timerservice, restoring of
- // any timers which were suspended during undeployment
- // will be done, through afterStart(), once the container has fully started.
- timerService = timerServiceFactory.createTimerService(this);
-
- }
- catch (Exception e)
- {
- try
- {
- this.lockedStop();
- }
- catch (Exception ignore)
- {
- log.debug("Failed to cleanup after start() failure", ignore);
- }
- throw e;
- }
- }
- /**
- * Restores the timers after this container has fully started, thus
- * ensuring that any invocations on this container through the restored
- * timers are handled successfully
- *
- * @see org.jboss.ejb3.EJBContainer#afterStart()
- */
- @Override
- protected void afterStart()
- {
- super.afterStart();
- this.timerServiceFactory.restoreTimerService(timerService);
- }
-
- @Override
- protected void lockedStop() throws Exception
- {
- if (timerService != null)
- {
- timerServiceFactory.suspendTimerService(timerService);
- timerService = null;
- }
-
- super.lockedStop();
- }
-
- public TimerService getTimerService()
- {
- return timerService;
- }
-
- public TimerService getTimerService(Object pKey)
- {
- assert timerService != null : "Timer Service not yet initialized";
- return timerService;
- }
-
public void callTimeout(Timer timer) throws Exception
{
if (timeout == null) throw new EJBException("No method has been annotated with @Timeout");
@@ -710,18 +646,19 @@
: ObjectStoreBindings.OBJECTSTORE_BEAN_NAME_JNDI_REGISTRAR_SLSB;
}
- /* (non-Javadoc)
+ /**
* @see org.jboss.ejb3.timerservice.spi.TimedObjectInvoker#getTimedObjectId()
*/
+ @Override
public String getTimedObjectId()
{
return getDeploymentQualifiedName();
}
- @Inject
- public void setTimerServiceFactory(TimerServiceFactory factory)
+ @Override
+ protected TimedObjectInvoker getTimedObjectInvoker()
{
- this.timerServiceFactory = factory;
+ return this;
}
static class WSCallbackImpl implements BeanContextLifecycleCallback
More information about the jboss-cvs-commits
mailing list