EJB and JBOSS AS 5.0: Null Pointer Exception in StatelessSessionContainer
adireddi.aswin May 21, 2010 7:22 AMHi,
I'm having an issue during the invocation of method in the ejb. Need some help
Details:
I have deployed an stateless EJB (myejb.jar) and a Client(ejbwar.war) in JBOSS AS5.0GA.
The contents of myejb.jar are as follows-
Home Intf: MyBeanHome
RemoteIntf: MyBeanRemote
Bean Class: MyBean (has a method called noop(String arg) apart from default methods)
My ejb-jar.xml contains the following-
    <enterprise-beans>
        <session>
            <ejb-name>MyBean</ejb-name>
            <home>com.my.MyBeanHome</home>
            <remote>com.my.MyBeanRemote</remote>
            <ejb-class>com.my.MyBean</ejb-class>
            <session-type>Stateless</session-type>
            <transaction-type>Container</transaction-type>                       
        </session>
    </enterprise-beans>    
    <assembly-descriptor>      
        <security-role>
            <role-name>EJBAdmin</role-name>
        </security-role>
        
        <method-permission>
            <role-name>EJBAdmin</role-name>
            <method>
                <ejb-name>MyBean</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <role-name>EJBAdmin</role-name>
            <method>
                <ejb-name>MyBean</ejb-name>
                <method-name>create</method-name>
            </method>
            <method>
                <ejb-name>MyBean</ejb-name>
                <method-name>remove</method-name>
            </method>
        </method-permission>        
    </assembly-descriptor>
My jboss.xml contains the following-
<security-domain>java:/jaas/jacc-test</security-domain>    
    <enterprise-beans>
        <session>
            <ejb-name>MyBean</ejb-name>
            <jndi-name>jacc-test/MyBean</jndi-name>            
        </session>        
    </enterprise-beans>        
    <container-configurations>
    <!-- Override the role mapping function from that of the
        security-domain setting for stateless session beans -->
        <container-configuration>
        <!-- Use the standardjboss.xml container-name so we only have
            to specify the elements we want to override -->
            <container-name>Standard Stateless SessionBean</container-name>
            <role-mapping-manager>java:/jaas/session-roles</role-mapping-manager>
        </container-configuration>
    </container-configurations> 
The contents of ejbwar.war are as follows-
2 jsps: index (Submit button to invoke the noop method in the ejb) and response.
Servlet: EJBClient.java
Code:
InitialContext ctx = new InitialContext();
com.my.MyBeanHome myHome =(com.my.MyBeanHome)ctx.lookup("java:comp/env/ejb/MyBean");
com.my.MyBeanRemote myEjb=myHome.create();
String ejbMsg=myEjb.noop(""); << Getting an error here
web.xml:
<servlet>
        <servlet-name>dummy</servlet-name>
        <servlet-class>EjbClient</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>dummy</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
    
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
      
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>All Resources</web-resource-name>
            <description>Declarative security tests</description>
            <url-pattern>/servlet/*</url-pattern>            
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>EJBAdmin</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>Sample EJB Realm</realm-name>
    </login-config>
    <security-role>
        <role-name>EJBAdmin</role-name>
    </security-role>      
    <ejb-ref>
        <ejb-ref-name>ejb/MyBean</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <home>com.rsa.MyBeanHome</home>
        <remote>com.rsa.MyBeanRemote</remote>
    </ejb-ref>
jboss-web.xml:
<security-domain>java:/jaas/jacc-test</security-domain>
      <ejb-ref>
             <ejb-ref-name>ejb/MyBean</ejb-ref-name>
             <jndi-name>jacc-test/MyBean</jndi-name>
     </ejb-ref> 
I have configured by security domain in login-config.xml under the name jacc-test, where i have a custom login module for authentication. The authentication succeeds, but while invoking the noop(""), server throws the following error-
ERROR [STDERR] java.lang.NullPointerException
ERROR [STDERR]     at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:187)
ERROR [STDERR]     at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:650)
ERROR [STDERR]     at org.jboss.ejb.Container.invoke(Container.java:1029)
ERROR [STDERR]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
ERROR [STDERR]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
ERROR [STDERR]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
ERROR [STDERR]     at java.lang.reflect.Method.invoke(Method.java:597)
ERROR [STDERR]     at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
ERROR [STDERR]     at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
ERROR [STDERR]     at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
ERROR [STDERR]     at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
ERROR [STDERR]     at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
ERROR [STDERR]     at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:169)
ERROR [STDERR]     at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:118)
ERROR [STDERR]     at org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:209)
ERROR [STDERR]     at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:195)
ERROR [STDERR]     at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
ERROR [STDERR]     at org.jboss.proxy.ejb.SecurityContextInterceptor.invoke(SecurityContextInterceptor.java:64)
ERROR [STDERR]     at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:68)
ERROR [STDERR]     at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:112)
ERROR [STDERR]     at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:101)
ERROR [STDERR]     at $Proxy99.noop(Unknown Source)
ERROR [STDERR]     at EjbClient.processRequest(EjbClient.java:58)
ERROR [STDERR]     at EjbClient.doGet(EjbClient.java:16)
ERROR [STDERR]     at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
ERROR [STDERR]     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
ERROR [STDERR]     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
ERROR [STDERR]     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
ERROR [STDERR]     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
ERROR [STDERR]     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
ERROR [STDERR]     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
ERROR [STDERR]     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
ERROR [STDERR]     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
ERROR [STDERR]     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
ERROR [STDERR]     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
ERROR [STDERR]     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
ERROR [STDERR]     at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
ERROR [STDERR]     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:567)
ERROR [STDERR]     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
ERROR [STDERR]     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
ERROR [STDERR]     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
ERROR [STDERR]     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
ERROR [STDERR]     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
ERROR [STDERR]     at java.lang.Thread.run(Thread.java:619)
Question:
Am I missing some configurations or is my approach incorrect?
Whats the reason for Null Pointer Exception?
I have looked up regarding this issue and couldnt find much help.
Any help would be appreciated.
Thanks in advance!
