You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2011/05/10 13:27:14 UTC

svn commit: r1101410 - in /openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core: ./ managed/ mdb/ singleton/ stateful/ stateless/

Author: jlmonteiro
Date: Tue May 10 11:27:14 2011
New Revision: 1101410

URL: http://svn.apache.org/viewvc?rev=1101410&view=rev
Log:
OPENEJB-1528 Allow users to add default interceptors. Thanks Romain.

Modified:
    openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
    openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
    openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
    openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
    openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
    openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java

Modified: openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java?rev=1101410&r1=1101409&r2=1101410&view=diff
==============================================================================
--- openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java (original)
+++ openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java Tue May 10 11:27:14 2011
@@ -54,11 +54,16 @@ import org.apache.openejb.core.timer.Ejb
 import org.apache.openejb.core.timer.MethodSchedule;
 import org.apache.openejb.core.transaction.TransactionType;
 import org.apache.openejb.core.transaction.TransactionPolicyFactory;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.Index;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 
 public class CoreDeploymentInfo implements org.apache.openejb.DeploymentInfo {
+    private Logger logger = Logger.getInstance(LogCategory.OPENEJB, CoreDeploymentInfo.class);
+ 
+    public static final String USER_DEFAULT_INTERCEPTOR_KEY = "org.apache.openejb.default.user.interceptors";
+    public static final String USER_DEFAULT_INTERCEPTOR_SEPARATOR = ",";
 
     private boolean destroyed;
     private Class homeInterface;
@@ -123,6 +128,7 @@ public class CoreDeploymentInfo implemen
     private final Set<InterceptorData> instanceScopedInterceptors = new HashSet<InterceptorData>();
 
     private final List<InterceptorInstance> systemInterceptors = new ArrayList<InterceptorInstance>(); 
+    private final List<InterceptorInstance> userDefaultInterceptors = new ArrayList<InterceptorInstance>();
     private final Map<Method, Method> methodMap = new HashMap<Method, Method>();
     private final Map<String, String> securityRoleReferenceMap = new HashMap<String, String>();
     private String jarPath;
@@ -174,6 +180,36 @@ public class CoreDeploymentInfo implemen
         return null;
     }
 
+    /**
+     * load default interceptors configured in properties.
+     */
+    private CoreDeploymentInfo(DeploymentContext context, BeanType componentType) {
+        this.context = context;
+        this.componentType = componentType;
+
+        String interceptors = SystemInstance.get().getProperties().getProperty(USER_DEFAULT_INTERCEPTOR_KEY);
+        if (interceptors != null) {
+            String[] interceptorArray = interceptors.split(USER_DEFAULT_INTERCEPTOR_SEPARATOR);
+            ClassLoader classLoader = context.getClassLoader();
+            for (String interceptor : interceptorArray) {
+                Object interceptorObject;
+                String name = interceptor.trim();
+                if (name.length() <= 0) {
+                    continue;
+                }
+
+                try {
+                    Class<?> clazz = classLoader.loadClass(name);
+                    interceptorObject = clazz.newInstance();
+                } catch (Exception e) {
+                    logger.warning("interceptor " + interceptor + " not found, are you sure the container can load it?");
+                    continue;
+                }
+                addUserDefaultInterceptor(interceptorObject);
+            }
+        }
+    }
+
     public CoreDeploymentInfo(DeploymentContext context,
                               Class beanClass, Class homeInterface,
                               Class remoteInterface,
@@ -182,10 +218,10 @@ public class CoreDeploymentInfo implemen
                               Class serviceEndpointInterface, List<Class> businessLocals, List<Class> businessRemotes, Class pkClass,
                               BeanType componentType
     ) throws SystemException {
+        this(context, componentType);
         if (context == null || beanClass == null) {
             throw new NullPointerException("context or beanClass input parameter is null");
         }
-        this.context = context;
         this.pkClass = pkClass;
 
         this.homeInterface = homeInterface;
@@ -203,8 +239,6 @@ public class CoreDeploymentInfo implemen
         this.pkClass = pkClass;
         this.serviceEndpointInterface = serviceEndpointInterface;
 
-        this.componentType = componentType;
-
 //        if (businessLocal != null && localHomeInterface == null){
 //            this.localHomeInterface = BusinessLocalHome.class;
 //        }
@@ -293,11 +327,10 @@ public class CoreDeploymentInfo implemen
     }
 
     public CoreDeploymentInfo(DeploymentContext context, Class beanClass, Class mdbInterface, Map<String, String> activationProperties) throws SystemException {
-        this.context = context;
+        this(context, BeanType.MESSAGE_DRIVEN);
         this.beanClass = beanClass;
         this.mdbInterface = mdbInterface;
         this.activationProperties.putAll(activationProperties);
-        this.componentType = BeanType.MESSAGE_DRIVEN;
 
         if (TimedObject.class.isAssignableFrom(beanClass)) {
             try {
@@ -743,12 +776,19 @@ public class CoreDeploymentInfo implemen
         systemInterceptors.add(new InterceptorInstance(interceptor));    
     }
 
-    public List<InterceptorInstance> getSystemInterceptors() {
-        return systemInterceptors;
+    private void addUserDefaultInterceptor(Object interceptor) {
+        userDefaultInterceptors.add(new InterceptorInstance(interceptor));
+    }
+
+    public List<InterceptorInstance> getSystemAndUserInterceptors() {
+        List<InterceptorInstance> interceptors = new ArrayList<InterceptorInstance>();
+        interceptors.addAll(systemInterceptors);
+        interceptors.addAll(userDefaultInterceptors);
+        return interceptors;
     }
 
     public List<InterceptorData> getCallbackInterceptors() {
-        return addSystemInterceptorDatas(callbackInterceptors);
+        return addUserAndSystemInterceptorDatas(callbackInterceptors);
     }
 
     public void setCallbackInterceptors(List<InterceptorData> callbackInterceptors) {
@@ -761,19 +801,19 @@ public class CoreDeploymentInfo implemen
 
         List<InterceptorData> interceptors = methodInterceptors.get(method);
 
-        return addSystemInterceptorDatas(interceptors);
+        return addUserAndSystemInterceptorDatas(interceptors);
     }
 
-    private List<InterceptorData> addSystemInterceptorDatas(List<InterceptorData> interceptors) {
+    private List<InterceptorData> addUserAndSystemInterceptorDatas(List<InterceptorData> interceptors) {
         if (interceptors == null) interceptors = Collections.EMPTY_LIST;
 
-        if (systemInterceptors.size() <= 0) return interceptors;
+        if (systemInterceptors.size() <= 0 && userDefaultInterceptors.size() <= 0) return interceptors;
 
         // we have system interceptors to add to the beginning of the stack
         
-        List<InterceptorData> datas = new ArrayList<InterceptorData>(systemInterceptors.size() + interceptors.size());
+        List<InterceptorData> datas = new ArrayList<InterceptorData>(getSystemAndUserInterceptors().size() + interceptors.size());
 
-        for (InterceptorInstance instance : systemInterceptors) {
+        for (InterceptorInstance instance : getSystemAndUserInterceptors()) {
             datas.add(instance.getData());
         }
 

Modified: openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java?rev=1101410&r1=1101409&r2=1101410&view=diff
==============================================================================
--- openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java (original)
+++ openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java Tue May 10 11:27:14 2011
@@ -603,7 +603,7 @@ public class ManagedContainer implements
             HashMap<String, Object> interceptorInstances = new HashMap<String, Object>();
 
             // Add the stats interceptor instance and other already created interceptor instances
-            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemInterceptors()) {
+            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemAndUserInterceptors()) {
                 Class clazz = interceptorInstance.getData().getInterceptorClass();
                 interceptorInstances.put(clazz.getName(), interceptorInstance.getInterceptor());
             }

Modified: openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java?rev=1101410&r1=1101409&r2=1101410&view=diff
==============================================================================
--- openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java (original)
+++ openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java Tue May 10 11:27:14 2011
@@ -202,7 +202,7 @@ public class MdbInstanceFactory {
             HashMap<String, Object> interceptorInstances = new HashMap<String, Object>();
 
             // Add the stats interceptor instance and other already created interceptor instances
-            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemInterceptors()) {
+            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemAndUserInterceptors()) {
                 Class clazz = interceptorInstance.getData().getInterceptorClass();
                 interceptorInstances.put(clazz.getName(), interceptorInstance.getInterceptor());
             }

Modified: openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java?rev=1101410&r1=1101409&r2=1101410&view=diff
==============================================================================
--- openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java (original)
+++ openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java Tue May 10 11:27:14 2011
@@ -181,7 +181,7 @@ public class SingletonInstanceManager {
             HashMap<String, Object> interceptorInstances = new HashMap<String, Object>();
 
             // Add the stats interceptor instance and other already created interceptor instances
-            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemInterceptors()) {
+            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemAndUserInterceptors()) {
                 Class clazz = interceptorInstance.getData().getInterceptorClass();
                 interceptorInstances.put(clazz.getName(), interceptorInstance.getInterceptor());
             }

Modified: openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=1101410&r1=1101409&r2=1101410&view=diff
==============================================================================
--- openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Tue May 10 11:27:14 2011
@@ -614,7 +614,7 @@ public class StatefulContainer implement
             HashMap<String, Object> interceptorInstances = new HashMap<String, Object>();
 
             // Add the stats interceptor instance and other already created interceptor instances
-            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemInterceptors()) {
+            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemAndUserInterceptors()) {
                 Class clazz = interceptorInstance.getData().getInterceptorClass();
                 interceptorInstances.put(clazz.getName(), interceptorInstance.getInterceptor());
             }

Modified: openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?rev=1101410&r1=1101409&r2=1101410&view=diff
==============================================================================
--- openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java (original)
+++ openejb/branches/openejb-3.2.x/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java Tue May 10 11:27:14 2011
@@ -206,7 +206,7 @@ public class StatelessInstanceManager {
             HashMap<String, Object> interceptorInstances = new HashMap<String, Object>();
 
             // Add the stats interceptor instance and other already created interceptor instances
-            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemInterceptors()) {
+            for (InterceptorInstance interceptorInstance : deploymentInfo.getSystemAndUserInterceptors()) {
                 Class clazz = interceptorInstance.getData().getInterceptorClass();
                 interceptorInstances.put(clazz.getName(), interceptorInstance.getInterceptor());
             }