Author: genspring
Date: Thu May 26 03:32:33 2011
New Revision: 1127767
URL: http://svn.apache.org/viewvc?rev=1127767&view=rev
Log:
Add NPE protection for operations on ThreadContext.getThreadContext().
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java?rev=1127767&r1=1127766&r2=1127767&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java
Thu May 26 03:32:33 2011
@@ -31,11 +31,14 @@ import javax.interceptor.InvocationConte
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.util.Classes;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
/**
* @version $Rev$ $Date$
*/
public class InterceptorStack {
+ private static final Logger logger =
Logger.getInstance(LogCategory.OPENEJB, "org.apache.openejb.util.resources");
private final Object beanInstance;
private final List<Interceptor> interceptors;
private final Method targetMethod;
@@ -122,11 +125,15 @@ public class InterceptorStack {
public Object invoke(Object... parameters) throws Exception {
try {
InvocationContext invocationContext =
createInvocationContext(parameters);
- ThreadContext.getThreadContext().set(InvocationContext.class,
invocationContext);
+ if (ThreadContext.getThreadContext() != null) {
+ ThreadContext.getThreadContext().set(InvocationContext.class,
invocationContext);
+ }
Object value = invocationContext.proceed();
return value;
} finally {
- ThreadContext.getThreadContext().remove(InvocationContext.class);
+ if (ThreadContext.getThreadContext() != null) {
+
ThreadContext.getThreadContext().remove(InvocationContext.class);
+ }
}
}
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=1127767&r1=1127766&r2=1127767&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
Thu May 26 03:32:33 2011
@@ -157,11 +157,15 @@ public class MdbInstanceFactory {
}
ThreadContext callContext = ThreadContext.getThreadContext();
- Operation originalOperation = callContext.getCurrentOperation();
- BaseContext.State[] originalAllowedStates =
callContext.getCurrentAllowedStates();
+
+ Operation originalOperation = callContext == null ? null :
callContext.getCurrentOperation();
+ BaseContext.State[] originalAllowedStates = callContext == null ? null
: callContext.getCurrentAllowedStates();
+
try {
// call post destroy method
- callContext.setCurrentOperation(Operation.PRE_DESTROY);
+ if (callContext != null) {
+ callContext.setCurrentOperation(Operation.PRE_DESTROY);
+ }
Method remove = instance.bean instanceof MessageDrivenBean ?
MessageDrivenBean.class.getMethod("ejbRemove") : null;
List<InterceptorData> callbackInterceptors =
beanContext.getCallbackInterceptors();
InterceptorStack interceptorStack = new
InterceptorStack(instance.bean, remove, Operation.PRE_DESTROY,
callbackInterceptors, instance.interceptors);
@@ -169,8 +173,11 @@ public class MdbInstanceFactory {
} catch (Throwable re) {
MdbInstanceFactory.logger.error("The bean instance " +
instance.bean + " threw a system exception:" + re, re);
} finally {
- callContext.setCurrentOperation(originalOperation);
- callContext.setCurrentAllowedStates(originalAllowedStates);
+
+ if (callContext != null) {
+ callContext.setCurrentOperation(originalOperation);
+ callContext.setCurrentAllowedStates(originalAllowedStates);
+ }
}
}