Author: andygumbrecht
Date: Thu Nov 24 07:35:00 2011
New Revision: 1205745

URL: http://svn.apache.org/viewvc?rev=1205745&view=rev
Log:
Fix for following error that seems to be a race condition that occasionally 
occurs when an application under load is undeployed - The beanContext Data has 
not been set:
2011-11-24 08:13:10,996 FATAL [OpenEJB.server.remote.ejb] (ejbd 13) Unknown 
error in container
java.lang.NullPointerException
        at 
org.apache.openejb.core.stateless.StatelessInstanceManager.discardInstance(StatelessInstanceManager.java:259)
        at 
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:185)
        at 
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:142)
        at 
org.apache.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:266)
        at 
org.apache.openejb.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:135)
        at 
org.apache.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:234)
        at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:164)
        at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:71)
        at 
org.apache.openejb.server.ejbd.KeepAliveServer$Session.service(KeepAliveServer.java:213)
        at 
org.apache.openejb.server.ejbd.KeepAliveServer.service(KeepAliveServer.java:233)
        at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:66)
        at org.apache.openejb.server.ServicePool$2.run(ServicePool.java:91)
        at org.apache.openejb.server.ServicePool$3.run(ServicePool.java:120)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?rev=1205745&r1=1205744&r2=1205745&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
 Thu Nov 24 07:35:00 2011
@@ -249,16 +249,17 @@ public class StatelessInstanceManager {
      * @param callContext
      * @param bean
      */
-    public void discardInstance(ThreadContext callContext, Object bean) throws 
SystemException {
+    public void discardInstance(final ThreadContext callContext, final Object 
bean) throws SystemException {
         if (bean == null) throw new SystemException("Invalid arguments");
-        Instance instance = Instance.class.cast(bean);
+        final Instance instance = Instance.class.cast(bean);
 
-        BeanContext beanContext = callContext.getBeanContext();
-        Data data = (Data) beanContext.getContainerData();
-
-        Pool<Instance> pool = data.getPool();
+        final BeanContext beanContext = callContext.getBeanContext();
+        final Data data = (Data) beanContext.getContainerData();
 
-        pool.discard(instance.getPoolEntry());
+        if (null != data) {
+            final Pool<Instance> pool = data.getPool();
+            pool.discard(instance.getPoolEntry());
+        }
     }
 
     private void freeInstance(ThreadContext callContext, Instance instance) {


Reply via email to