2 Replies Latest reply on Nov 23, 2010 7:22 PM by gturner

    Servlet+MBean dependency broken in EAR=SAR+WAR deployment on JBoss 5.1.0

    gturner

      I have an EAR with the following structure:

       

        app.ear:
          + META-INF/application.xml
          + META-INF/jboss-app.xml
          + lib/commons-whatever.jar
          + app.sar:
              + META-INF/jboss-service.xml
              + com/wherever/AppService.class
          + app.war:
              + WEB-INF/jboss-web.xml
              + WEB-INF/web.xml
              + WEB-INF/classes/com/wherever/AppServlet.class

       

      The jboss-web.xml in the WAR contians a depends element which matches what is declared in jboss-service.xml in the SAR:

       

        <depends>com.wherever:service=AppService</depends>

       

      The servlet init method invokes a method of the MBean and fails:

       

        javax.management.InstanceNotFoundException: com.wherever:service=AppService is not registered.
          at org.jboss.mx.server.registry.BasicMBeanRegistry.get(BasicMBeanRegistry.java:526)
          at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:662)
          at com.wherever.AppServlet.init(AppServlet.java:123)
          at javax.servlet.GenericServlet.init(GenericServlet.java:212)
          at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048)
          at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:777)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
          at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
          at org.jboss.web.tomcat.service.session.ClusteredSessionValve.handleRequest(ClusteredSessionValve.java:135)
          at org.jboss.web.tomcat.service.session.ClusteredSessionValve.invoke(ClusteredSessionValve.java:94)
          at org.jboss.web.tomcat.service.session.LockingValve.invoke(LockingValve.java:62)
          at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
          at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
          at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
          at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
          at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
          at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
          at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
          at java.lang.Thread.run(Thread.java:662)

       

      What's interesting is the MBean has definitely been started prior to the Servlet being loaded.

       

      This used to work fine under JBoss 4.2, 4.0, and possibly even 3.2.

       

      Maybe what's happening is that JBoss 5 doesn't register the MBean until the EAR is fully deployed.

       

      What must I do to wrangle the EAR/SAR/WAR deployment to register the MBean before initing the Servlet?

        • 1. Re: Servlet+MBean dependency broken in EAR=SAR+WAR deployment on JBoss 5.1.0
          gturner

          Okay I'm getting somewhere…

           

          The servlet init method is using java.lang.management.ManagementFactory.getPlatformMBeanServer(), I vaguely recall doing something with our 4.2 servers to activate JDK 5 management API access to the JBoss MBeans.  I'm searching but not finding anything relevant to JBoss 5.1.0 to enable this API.

          • 2. Re: Servlet+MBean dependency broken in EAR=SAR+WAR deployment on JBoss 5.1.0
            gturner

            Sorry for the noise.

             

            I tweaked a bunch of apps to use code like:

             

                private static MBeanServer getServer() {
                    MBeanServer server = null;
                    for (Iterator<MBeanServer> servers =
                             MBeanServerFactory.findMBeanServer(null).iterator();
                         servers.hasNext();) {
                        server = servers.next();
                        if (server.getDefaultDomain().equals("jboss"))
                            return server;
                    }
                    return server;
                }