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