[
https://issues.apache.org/jira/browse/OWB-423?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mark Struberg updated OWB-423:
------------------------------
Fix Version/s: (was: 1.1.1)
1.2.0
> OpenWebBeansEjbInterceptor is LATE in establishing the request context for an
> EJB
> ---------------------------------------------------------------------------------
>
> Key: OWB-423
> URL: https://issues.apache.org/jira/browse/OWB-423
> Project: OpenWebBeans
> Issue Type: Bug
> Components: Java EE Integration
> Affects Versions: 1.1.0, 1.0.0, 1.0.0-alpha-2, 1.0.0-alpha-1, M4, M3, M2,
> M1
> Environment: Win2003 Server
> Reporter: Rohit Dilip Kelapure
> Assignee: Gurkan Erdogdu
> Fix For: 1.2.0
>
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> The CDI specification in 6.7.1. Request context lifecycle states that the
> request scope is active during any remote method invocation of any EJB,
> during any asynchronous method invocation of any EJB, during any call to an
> EJB timeout method and during message delivery to any EJB message-driven
> bean, and during any message delivery to a MessageListener for a JMS topic or
> queue obtained from the Java EE component environment.
> Currently the OpenWebBeansEjbInterceptor does two broad things
> - activate and deactive request and application contexts
> - call OWB Interceptors and decorators applicable to the EJB
> This doesn't work correctly if a request scoped bean is injected in an old
> style JEE5 EJB interceptor. According to the spec. the old EJB interceptors
> run before the JSR299 interceptors and decorators. However there is no
> request scope when a CDI injection occurs in the EJB interceptor because the
> request scope is established LATER by the OpenWebBeansEjbInterceptor after
> all the EJB interceptors have run.
> This results in an exception like this ..
> javax.ejb.EJBException: Injection failure; nested exception is:
> javax.enterprise.context.ContextNotActiveException: WebBeans context with
> scope type annotation @RequestScoped does not exist within current thread
> Caused by: javax.enterprise.context.ContextNotActiveException: WebBeans
> context with scope type annotation @RequestScoped does not exist within
> current thread
> at
> org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl.java:309)
> at
> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:123)
> at
> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(NormalScopedBeanInterceptorHandler.java:94)
> at
> com.ibm.ws.fat.jcdi.beans.CurrentUser_$$_javassist_4.toString(CurrentUser_$$_javassist_4.java)
> The solution to this problem is to take a sandwich approach to configuring
> interceptors. i.e Split OpenWebBeansEjbInterceptor into two
> FirstEJBInterceptor .... establishes and tears down OWB request and
> application context
> EJB Interceptor-1
> EJB Interceptor- 2
> OpenWebBeansEjbInterceptor .. setsup the JCDI runtime to call OWB
> Interceptors and decorators applicable to the EJB
> OWB Interceptor-1
> OWB decorator
> The FirstEJBInterceptor is responsible for ensuring the request context is
> active during requests to EJBs and has to be innermost or the first
> interceptor in the stack for all EJBs. Without this interceptor Apache OWB
> cannot do injection of request scoped or application scoped beans in the
> older JEE5 EJB Interceptors.
> --Thank You
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira