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


Reply via email to