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