Session preDestroyContext Event causing exception
-------------------------------------------------
Key: JBSEAM-1264
URL:
http://jira.jboss.com/jira/browse/JBSEAM-1264
Project: JBoss Seam
Issue Type: Bug
Affects Versions: 1.2.1.GA
Reporter: Keith Naas
Priority: Minor
This is probably the wrong thing to do for what we need...but we did encounter this
interesting error.
We registered an event on the preDestroyContext.SESSION where a stateless EJB is called to
delete some items from a database.
<event type="org.jboss.seam.preDestroyContext.SESSION">
<action expression="#{service.releaseDocuments}"/>
</event>
When EJBs are passivated, this event appears to be kicking off. But since the
FacesContext is null, we get a NullPointerException from
com.sun.faces.application.MethodBindingMethodExpressionAdapter.invoke.
It looks like the FaceContext is null when it is called through the passivate interceptor,
but it is calling the previous cachedMethodBinding which was generated when the
FaceContext was not null.
Seems like the method should be changed to something like this.
private javax.faces.el.MethodBinding getFacesMethodBinding(Class[] types,
Object... args)
{
FacesContext context = FacesContext.getCurrentInstance();
if (cachedMethodBinding==null || (context == null &&
!(cachedMethodBinding instanceof UnifiedELMethodBinding)))
{
cachedMethodBinding = context==null ?
new UnifiedELMethodBinding(expression, types) :
context.getApplication().createMethodBinding(expression, types);
}
return cachedMethodBinding;
}
11:54:08,526 ERROR [SimpleStatefulCache] problem passivation thread
java.lang.RuntimeException: java.lang.NullPointerException: FacesConext -> null
at
org.jboss.ejb3.interceptor.LifecycleInterceptorHandler.prePassivate(LifecycleInterceptorHandler.java:160)
at
org.jboss.ejb3.stateful.StatefulContainer.invokePrePassivate(StatefulContainer.java:351)
at
org.jboss.ejb3.stateful.StatefulBeanContext.prePassivate(StatefulBeanContext.java:178)
at
org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.passivateSession(StatefulSessionFilePersistenceManager.java:328)
at
org.jboss.ejb3.cache.simple.SimpleStatefulCache.passivate(SimpleStatefulCache.java:194)
at
org.jboss.ejb3.cache.simple.SimpleStatefulCache$SessionTimeoutTask.run(SimpleStatefulCache.java:129)
Caused by: java.lang.NullPointerException: FacesConext -> null
at
com.sun.faces.application.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:72)
at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:148)
at org.jboss.seam.core.Events.raiseEvent(Events.java:63)
at org.jboss.seam.contexts.Contexts.destroy(Contexts.java:215)
at org.jboss.seam.contexts.Lifecycle.endCall(Lifecycle.java:72)
at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:117)
at org.jboss.seam.intercept.RootInterceptor.invokeAndHandle(RootInterceptor.java:81)
at
org.jboss.seam.intercept.SessionBeanInterceptor.prePassivate(SessionBeanInterceptor.java:59)
at sun.reflect.GeneratedMethodAccessor1059.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.ejb3.interceptor.LifecycleInvocationContextImpl.proceed(LifecycleInvocationContextImpl.java:131)
at
org.jboss.ejb3.interceptor.LifecycleInterceptorHandler.prePassivate(LifecycleInterceptorHandler.java:156)
... 5 more
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira