[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