@EJB annotation in aJSP raises an Excetion
I tray to access an EJB from a WebModule, through an @EJB annotation.
-
where used in a servlet, it works fine.
-
where used in a JSP, I get an Exception:
2010-10-10 18:42:50,312 : SEVERE : http-8999-1 : StandardWrapperValve.invoke : Servlet.service() for servlet jsp threw exception javax.naming.NameNotFoundException: org.apache.jsp.index2_jsp at org.ow2.jonas.lib.naming.ComponentContext.lookupCtx(ComponentContext.java:800) at org.ow2.jonas.lib.naming.ComponentContext.lookup(ComponentContext.java:218) at org.apache.catalina.util.DefaultAnnotationProcessor.lookupFieldResource(DefaultAnnotationProcessor.java:292) at org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:190) at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:148) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.ow2.jonas.web.tomcat6.CheckOpenResourcesValve.invoke(CheckOpenResourcesValve.java:73) at org.ow2.jonas.web.tomcat6.tx.TransactionValve.invoke(TransactionValve.java:90) at org.ow2.jonas.web.tomcat6.ResetAuthenticationValve.invoke(ResetAuthenticationValve.java:95) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:619)
The workarround is to explicite use InitailContext and its lookup method.
The attachment contains a simple test case.
- the callee EJB is WPureEJB (via its Welcome local interface).
- the zwebapp-0.0.1-SNAPSHOT.war (context root is /zwebapp-0.0.1-SNAPSHOT) module contains:
- a servlet, invoked at /welcome. works fine.
- index.jsp (welcome file), invoked at /. works fine, but unses an explicit call to lookup() of InitialContext
- index2.jsp. uses @EJB annotation ... and raises an Exception.