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) {