2 Replies Latest reply on Feb 14, 2006 6:18 PM by patrick_ibg

    Newbie-ish question... Using Seam annotated SFSBs outside of

    patrick_ibg

      I have an EAR file set up as follows:
      - jar with entity and session beans, annotated with Seam/EJB3. Also has WsServlet class, which is a regular "Hello World" servlet, but looks up an SLSB.
      - war file that uses Seam/JSF
      - another war file that just has a web.xml that defines WsServlet

      When I make a request to WsServlet, I get the following stacktrace:

      16:58:38,180 ERROR [[WsServlet]] Servlet.service() for servlet WsServlet threw exception
      javax.ejb.EJBException: java.lang.NullPointerException
       at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69)
       at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
       at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:192)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
       at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
       at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
       at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
       at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
       at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
       at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:178)
       at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:74)
       at $Proxy187.find(Unknown Source)
       at com.inertiabev.ws.WsServlet.doPost(WsServlet.java:45)
       at com.inertiabev.ws.WsServlet.doGet(WsServlet.java:32)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
       at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
       at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:54)
       at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:174)
       at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
       at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
       at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
       at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
       at java.lang.Thread.run(Thread.java:595)
      Caused by: java.lang.NullPointerException
       at org.jboss.seam.Component.forName(Component.java:1011)
       at org.jboss.seam.ejb.SeamInterceptor.getSeamComponent(SeamInterceptor.java:61)
       at org.jboss.seam.ejb.SeamInterceptor.aroundInvoke(SeamInterceptor.java:34)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:120)
       at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:62)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
       at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
       at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
       ... 38 more
      


      The servlet code is as follows:
       public void doPost (HttpServletRequest request, HttpServletResponse response)
       throws ServletException,
       IOException
       {
       try {
       PrintWriter out = response.getWriter () ;
       out.println ("Hello World!") ;
      
       InitialContext ctx = new InitialContext () ;
       BaseDao baseDao = (BaseDao) ctx.lookup ("biggie/BaseDaoBean/local") ;
       State state = baseDao.find (State.class, "NY") ;
       out.println (state.toString()) ;
      
       out.close () ;
       return;
       }
       catch (NamingException e) {
       e.printStackTrace();
       throw new ServletException (e) ;
       }
       }
      


      BaseDao is an SLSB that is also a Seam component (uses the @Interceptors annotation). State is an @Entity bean.

      I'm somewhat new to EJBs, so I might be doing something wrong with the EJB3 context lookup. However, the SeamInterceptor comes up in the stack trace, so I just wanted to make sure that there wasn't anything in Seam that would prevent me from looking up a Seam component as a regular EJB.

      I suppose the fallback is to lookup the BaseDaoBean from the Seam context?


        • 1. Re: Newbie-ish question... Using Seam annotated SFSBs outsid
          gavin.king

          Ah. Interesting.

          The problem is that the EJB has the SeamInterceptor enabled. And the SeamInterceptor tries to find stuff in the Seam contexts which do not exist.

          So in the current release, it is not possible to invoke a Seam component as a plain EJB.

          Enter this in JIRA, and I'll see if this restriction can meaningfully be relaxed.

          (BTW, you could workaround using SeamServletFilter, I guess....)

          • 2. Re: Newbie-ish question... Using Seam annotated SFSBs outsid
            patrick_ibg

             

            "gavin.king@jboss.com" wrote:
            Enter this in JIRA, and I'll see if this restriction can meaningfully be relaxed.


            Done:
            http://jira.jboss.com/jira/browse/JBSEAM-137

            I see how this can get tricky... in general, it would be great to have certain Seam-related annotations (such as @Name, @Scope, @Role/s and @Interceptors) "externalizable", i.e., defined outside of the components. However, it's really just @Interceptors that is intrusive and cannot be ignored.

            For now, I think I'll try lookup via the Seam contexts.