Author: xuhaihong
Date: Fri Mar 25 02:49:42 2011
New Revision: 1085242

URL: http://svn.apache.org/viewvc?rev=1085242&view=rev
Log:
OPENEJB-1451 TimerService should be only binded to singleton/stateless/MDB. 
(Patch from Shawn Jiang)

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=1085242&r1=1085241&r2=1085242&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 Fri Mar 25 02:49:42 2011
@@ -44,7 +44,6 @@ import org.apache.openejb.util.Classes;
 import org.apache.openejb.util.IntrospectionSupport;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
-import org.apache.openejb.core.timer.TimerServiceWrapper;
 import org.omg.CORBA.ORB;
 
 import javax.annotation.ManagedBean;
@@ -86,14 +85,14 @@ public class JndiEncBuilder {
         app,
         global,
     }
-    
+
     private final boolean beanManagedTransactions;
     private final JndiEncInfo jndiEnc;
     private final URI moduleUri;
     private final List<Injection> injections;
     private final ClassLoader classLoader;
     private final AppContext appContext;
-    
+
     private boolean useCrossClassLoaderRef = true;
     private boolean client = false;
 
@@ -151,15 +150,15 @@ public class JndiEncBuilder {
             break;
         case global:
             addSpecialGlobalBindings(bindings);
-            break;          
+            break;
         }
 
         return jndiFactory.createComponentContext(bindings);
     }
-    
+
     public Map<String, Object> buildMap() throws OpenEJBException {
         Map<String, Object> bindings = new HashMap<String, Object>();
-        
+
         // get JtaEntityManagerRegistry
         JtaEntityManagerRegistry jtaEntityManagerRegistry = 
SystemInstance.get().getComponent(JtaEntityManagerRegistry.class);
 
@@ -203,7 +202,7 @@ public class JndiEncBuilder {
                 bindings.put(normalize(entry.referenceName), reference);
                 continue;
             }
-            
+
             try {
                 Class type = Classes.deprimitivize(getType(entry.type, entry));
                 Object obj = null;
@@ -245,18 +244,18 @@ public class JndiEncBuilder {
         }
 
         for (ResourceReferenceInfo referenceInfo : jndiEnc.resourceRefs) {
-            
+
             if (referenceInfo.location != null) {
                 Reference reference = 
buildReferenceLocation(referenceInfo.location);
                 bindings.put(normalize(referenceInfo.referenceName), 
reference);
                 continue;
             }
-            
+
             Class<?> type = getType(referenceInfo.referenceType, 
referenceInfo);
-            
+
             Object reference = null;
             if (URL.class.equals(type)) {
-                reference = new URLReference(referenceInfo.resourceID);       
+                reference = new URLReference(referenceInfo.resourceID);
             } else if (type.isAnnotationPresent(ManagedBean.class)) {
                 ManagedBean managed = type.getAnnotation(ManagedBean.class);
                 String name = managed.value().length() == 0 ? 
type.getSimpleName() : managed.value();
@@ -272,15 +271,15 @@ public class JndiEncBuilder {
         }
 
         for (ResourceEnvReferenceInfo referenceInfo : jndiEnc.resourceEnvRefs) 
{
-            
+
             if (referenceInfo.location != null) {
                 Reference reference = 
buildReferenceLocation(referenceInfo.location);
                 bindings.put(normalize(referenceInfo.referenceName), 
reference);
                 continue;
             }
-            
+
             Class<?> type = getType(referenceInfo.resourceEnvRefType, 
referenceInfo);
-            
+
             Object reference = null;
             if (EJBContext.class.isAssignableFrom(type)) {
                 String jndiName = "comp/EJBContext";
@@ -439,11 +438,6 @@ public class JndiEncBuilder {
             userTransaction = new CoreUserTransaction(transactionManager);
             bindings.put("comp/UserTransaction", userTransaction);
         }
-
-        // bind TimerService
-        if (!isClient()) {
-            bindings.put("comp/TimerService", new TimerServiceWrapper());
-        }
     }
 
     private void addSpecialModuleBindings(Map<String, Object> bindings) {
@@ -455,7 +449,7 @@ public class JndiEncBuilder {
             bindings.put("module/dummy", "dummy");
         }
     }
-    
+
     private void addSpecialAppBindings(Map<String, Object> bindings) {
         if (moduleUri != null) {
             bindings.put("app/AppName", moduleUri.toString());
@@ -465,14 +459,14 @@ public class JndiEncBuilder {
             bindings.put("app/dummy", "dummy");
         }
     }
-    
+
     private void addSpecialGlobalBindings(Map<String, Object> bindings) {
         // ensure the bindings will be non-empty
         if (bindings.isEmpty()) {
             bindings.put("global/dummy", "dummy");
         }
     }
-    
+
     public static boolean bindingExists(Context context, Name contextName) {
         try {
             return context.lookup(contextName) != null;
@@ -503,9 +497,9 @@ public class JndiEncBuilder {
                 throw new OpenEJBException("Unable to load type '" + type + "' 
for " + injectable.referenceName);
             }
         }
-        return inferType(injectable);   
+        return inferType(injectable);
     }
-    
+
     private Class inferType(InjectableInfo injectable) throws OpenEJBException 
{
         for (InjectionInfo injection : injectable.targets) {
             try {
@@ -520,7 +514,7 @@ public class JndiEncBuilder {
         }
         throw new OpenEJBException("Unable to infer type for " + 
injectable.referenceName);
     }
-    
+
     private static class Ref implements EjbResolver.Reference, Serializable {
         private final EjbReferenceInfo info;
 

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java?rev=1085242&r1=1085241&r2=1085242&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
 Fri Mar 25 02:49:42 2011
@@ -17,6 +17,17 @@
  */
 package org.apache.openejb.core.mdb;
 
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.ejb.EJBContext;
+import javax.ejb.MessageDrivenBean;
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.resource.spi.UnavailableException;
+
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.core.BaseContext;
@@ -25,20 +36,11 @@ import org.apache.openejb.core.Operation
 import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.core.interceptor.InterceptorData;
 import org.apache.openejb.core.interceptor.InterceptorStack;
+import org.apache.openejb.core.timer.TimerServiceWrapper;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 
-import javax.ejb.EJBContext;
-import javax.ejb.MessageDrivenBean;
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.resource.spi.UnavailableException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
 /**
  * A MdbInstanceFactory creates instances of message driven beans for a single 
instance. This class differs from other
  * instance managers in OpenEJB as it doesn't do pooling and it creates 
instances for only a single EJB deployment.
@@ -75,8 +77,9 @@ public class MdbInstanceFactory {
         try {
             final Context context = beanContext.getJndiEnc();
             context.bind("comp/EJBContext", mdbContext);
+            context.bind("comp/TimerService", new TimerServiceWrapper());
         } catch (NamingException e) {
-            throw new OpenEJBException("Failed to bind EJBContext", e);
+            throw new OpenEJBException("Failed to bind 
EJBContext/TimerService", e);
         }
 
         beanContext.set(EJBContext.class, this.mdbContext);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java?rev=1085242&r1=1085241&r2=1085242&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
 Fri Mar 25 02:49:42 2011
@@ -16,48 +16,49 @@
  */
 package org.apache.openejb.core.singleton;
 
-import java.lang.reflect.Method;
 import java.lang.management.ManagementFactory;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.Future;
-import java.util.concurrent.FutureTask;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import javax.ejb.EJBContext;
-import javax.ejb.SessionBean;
 import javax.ejb.NoSuchEJBException;
+import javax.ejb.SessionBean;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
 import javax.naming.Context;
 import javax.naming.NamingException;
 import javax.xml.ws.WebServiceContext;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
 
+import org.apache.openejb.ApplicationException;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.BeanType;
 import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.ApplicationException;
-import org.apache.openejb.core.transaction.TransactionType;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.monitoring.StatsInterceptor;
-import org.apache.openejb.monitoring.ObjectNameBuilder;
-import org.apache.openejb.monitoring.ManagedMBean;
+import org.apache.openejb.core.InstanceContext;
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.core.InstanceContext;
 import org.apache.openejb.core.interceptor.InterceptorData;
 import org.apache.openejb.core.interceptor.InterceptorStack;
+import org.apache.openejb.core.timer.TimerServiceWrapper;
 import org.apache.openejb.core.transaction.EjbTransactionUtil;
 import org.apache.openejb.core.transaction.TransactionPolicy;
+import org.apache.openejb.core.transaction.TransactionType;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.monitoring.ManagedMBean;
+import org.apache.openejb.monitoring.ObjectNameBuilder;
+import org.apache.openejb.monitoring.StatsInterceptor;
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.LogCategory;
@@ -111,7 +112,7 @@ public class SingletonInstanceManager {
             // We will construct this FutureTask and compete with the
             // other threads for the right to create the singleton
             FutureTask<Instance> task = new FutureTask<Instance>(new 
Callable<Instance>() {
-                public Instance call() throws Exception {                    
+                public Instance call() throws Exception {
                     return createInstance(callContext, beanContext);
                 }
             });
@@ -166,11 +167,11 @@ public class SingletonInstanceManager {
             }
         }
     }
-    
+
     private Instance createInstance(ThreadContext callContext, BeanContext 
beanContext) throws ApplicationException {
         try {
             initializeDependencies(beanContext);
-            
+
             final InstanceContext context = beanContext.newInstance();
 
             if (context.getBean() instanceof SessionBean){
@@ -254,7 +255,7 @@ public class SingletonInstanceManager {
             TransactionPolicy transactionPolicy = 
EjbTransactionUtil.createTransactionPolicy(transactionType, callContext);
             try{
                 //Call the chain
-                interceptorStack.invoke();                
+                interceptorStack.invoke();
             } catch(Throwable e) {
                 //RollBack Transaction
                 EjbTransactionUtil.handleSystemException(transactionPolicy, e, 
callContext);
@@ -267,7 +268,7 @@ public class SingletonInstanceManager {
             logger.error("Singleton shutdown failed: 
"+beanContext.getDeploymentID(), re);
         }
     }
-    
+
     /**
      * This method has no work to do as all instances are removed from
      * the pool on getInstance(...) and not returned via poolInstance(...)
@@ -313,8 +314,9 @@ public class SingletonInstanceManager {
             final Context context = beanContext.getJndiEnc();
             context.bind("comp/EJBContext", sessionContext);
             context.bind("comp/WebServiceContext", webServiceContext);
+            context.bind("comp/TimerService", new TimerServiceWrapper());
         } catch (NamingException e) {
-            throw new OpenEJBException("Failed to bind EJBContext", e);
+            throw new OpenEJBException("Failed to bind 
EJBContext/WebServiceContext/TimerService", e);
         }
     }
 

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?rev=1085242&r1=1085241&r2=1085242&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
 Fri Mar 25 02:49:42 2011
@@ -16,51 +16,52 @@
  */
 package org.apache.openejb.core.stateless;
 
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
+import java.io.Flushable;
+import java.io.IOException;
 import java.lang.management.ManagementFactory;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.rmi.RemoteException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.concurrent.Executor;
+import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.Executor;
-import java.io.Flushable;
-import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
+import javax.ejb.ConcurrentAccessTimeoutException;
 import javax.ejb.EJBContext;
 import javax.ejb.SessionBean;
 import javax.ejb.SessionContext;
-import javax.ejb.ConcurrentAccessTimeoutException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
 import javax.naming.Context;
 import javax.naming.NamingException;
-import javax.management.ObjectName;
-import javax.management.MBeanServer;
 
+import org.apache.openejb.ApplicationException;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.SystemException;
-import org.apache.openejb.ApplicationException;
-import org.apache.openejb.monitoring.StatsInterceptor;
-import org.apache.openejb.monitoring.ObjectNameBuilder;
-import org.apache.openejb.monitoring.ManagedMBean;
-import org.apache.openejb.loader.Options;
+import org.apache.openejb.core.InstanceContext;
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.core.InstanceContext;
 import org.apache.openejb.core.interceptor.InterceptorData;
 import org.apache.openejb.core.interceptor.InterceptorStack;
+import org.apache.openejb.core.timer.TimerServiceWrapper;
+import org.apache.openejb.loader.Options;
+import org.apache.openejb.monitoring.ManagedMBean;
+import org.apache.openejb.monitoring.ObjectNameBuilder;
+import org.apache.openejb.monitoring.StatsInterceptor;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.Duration;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
-import org.apache.openejb.util.SafeToolkit;
-import org.apache.openejb.util.Pool;
 import org.apache.openejb.util.PassthroughFactory;
+import org.apache.openejb.util.Pool;
+import org.apache.openejb.util.SafeToolkit;
 import org.apache.xbean.recipe.ObjectRecipe;
 import org.apache.xbean.recipe.Option;
 
@@ -81,7 +82,7 @@ public class StatelessInstanceManager {
         this.accessTimeout = accessTimeout;
         this.closeTimeout = closeTimeout;
         this.poolBuilder = poolBuilder;
-        
+
         if (accessTimeout.getUnit() == null) 
accessTimeout.setUnit(TimeUnit.MILLISECONDS);
 
         executor = new ThreadPoolExecutor(callbackThreads, callbackThreads*2,
@@ -138,7 +139,7 @@ public class StatelessInstanceManager {
      * If StrictPooling is not enabled this method will create a
      * new stateless bean instance performing all required injection
      * and callbacks before returning it in a method ready state.
-     * 
+     *
      * @param callContext
      * @return
      * @throws OpenEJBException
@@ -229,11 +230,11 @@ public class StatelessInstanceManager {
             pool.push(instance);
         }
     }
-    
+
     /**
-     * This method is called to release the semaphore in case of the business 
method 
+     * This method is called to release the semaphore in case of the business 
method
      * throwing a system exception
-     * 
+     *
      * @param callContext
      * @param bean
      */
@@ -298,8 +299,9 @@ public class StatelessInstanceManager {
             final Context context = beanContext.getJndiEnc();
             context.bind("comp/EJBContext", data.sessionContext);
             context.bind("comp/WebServiceContext", new 
EjbWsContext(data.sessionContext));
+            context.bind("comp/TimerService", new TimerServiceWrapper());
         } catch (NamingException e) {
-            throw new OpenEJBException("Failed to bind EJBContext", e);
+            throw new OpenEJBException("Failed to bind 
EJBContext/WebServiceContext/TimerService", e);
         }
 
         final int min = builder.getMin();


Reply via email to