Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-3132

Web Console fails on Equinox OSGi server

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Won't Fix
    • 5.4.2
    • None
    • None
    • None

    Description

      I tried to run the activemq-web-console bundle on an equinox based OSGi runtime. Essentially I was following the description on the web console section of the http://activemq.apache.org/osgi-integration.html page. However when I try to access any of the pages, I get an exception:

      15:09:30.736 WARN [qtp1617610261-54] org.eclipse.jetty.util.log [Slf4jLog.java:50] - /activemqweb/index.jsp
      javax.el.ELException: Error reading 'brokerName' on type org.apache.activemq.web.RemoteJMXBrokerFacade
      at javax.el.BeanELResolver.getValue(BeanELResolver.java:66) ~[na:na]
      at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53) ~[na:na]
      at org.apache.el.parser.AstValue.getValue(AstValue.java:118) ~[na:na]
      at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) ~[na:na]
      at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:925) ~[na:na]
      at org.apache.jsp.index_jsp._jspService(index_jsp.java:75) ~[na:na]
      at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) ~[na:na]
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) ~[org.apache.geronimo.specs.geronimo-servlet_2.5_spec-1.1.1.jar:1.1.1]
      at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) ~[na:na]
      at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) ~[na:na]
      at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) ~[na:na]
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) ~[org.apache.geronimo.specs.geronimo-servlet_2.5_spec-1.1.1.jar:1.1.1]
      at org.ops4j.pax.web.jsp.JspServletWrapper$2.call(JspServletWrapper.java:132) ~[na:na]
      at org.ops4j.pax.web.jsp.JspServletWrapper$2.call(JspServletWrapper.java:127) ~[na:na]
      at org.ops4j.pax.swissbox.core.ContextClassLoaderUtils.doWithClassLoader(ContextClassLoaderUtils.java:60) ~[na:na]
      at org.ops4j.pax.web.jsp.JspServletWrapper.service(JspServletWrapper.java:124) ~[na:na]
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:527) ~[na:na]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216) ~[na:na]
      at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83) ~[spring-web-3.0.3.RELEASE.jar:3.0.3.RELEASE]
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) ~[spring-web-3.0.3.RELEASE.jar:3.0.3.RELEASE]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187) ~[na:na]
      at org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:45) ~[activemq-web-5.4.2.jar:5.4.2]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187) ~[na:na]
      at org.apache.activemq.web.filter.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:81) ~[bundlefile:5.4.2]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187) ~[na:na]
      at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) ~[sitemesh-2.2.1.jar:na]
      at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) ~[sitemesh-2.2.1.jar:na]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187) ~[na:na]
      at org.ops4j.pax.web.service.internal.WelcomeFilesFilter.doFilter(WelcomeFilesFilter.java:169) ~[na:na]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187) ~[na:na]
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:421) ~[na:na]
      at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:65) ~[na:na]
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) ~[na:na]
      at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:493) ~[na:na]
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225) ~[na:na]
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:930) ~[na:na]
      at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:116) ~[na:na]
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:358) ~[na:na]
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) ~[na:na]
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:866) ~[na:na]
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) ~[na:na]
      at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:72) ~[na:na]
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113) ~[na:na]
      at org.eclipse.jetty.server.Server.handle(Server.java:351) ~[na:na]
      at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:594) ~[na:na]
      at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1042) ~[na:na]
      at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:549) ~[na:na]
      at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:211) ~[na:na]
      at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:424) ~[na:na]
      at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:506) ~[na:na]
      at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436) ~[na:na]
      at java.lang.Thread.run(Unknown Source) ~[na:1.6.0_22]
      Caused by: java.lang.RuntimeException: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
      java.lang.ClassNotFoundException: javax.management.remote.rmi.RMIServerImpl_Stub (no security manager: RMI class loader disabled)]
      at org.apache.activemq.web.RemoteJMXBrokerFacade.createConnection(RemoteJMXBrokerFacade.java:165) ~[activemq-web-5.4.2.jar:5.4.2]
      at org.apache.activemq.web.RemoteJMXBrokerFacade.getMBeanServerConnection(RemoteJMXBrokerFacade.java:114) ~[activemq-web-5.4.2.jar:5.4.2]
      at org.apache.activemq.web.RemoteJMXBrokerFacade.getBrokerAdmin(RemoteJMXBrokerFacade.java:88) ~[activemq-web-5.4.2.jar:5.4.2]
      at org.apache.activemq.web.RemoteJMXBrokerFacade.getBrokerName(RemoteJMXBrokerFacade.java:101) ~[activemq-web-5.4.2.jar:5.4.2]
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
      at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.6.0_22]
      at javax.el.BeanELResolver.getValue(BeanELResolver.java:62) ~[na:na]
      ... 51 common frames omitted
      Caused by: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
      java.lang.ClassNotFoundException: javax.management.remote.rmi.RMIServerImpl_Stub (no security manager: RMI class loader disabled)]
      at javax.management.remote.rmi.RMIConnector.connect(Unknown Source) ~[na:na]
      at javax.management.remote.JMXConnectorFactory.connect(Unknown Source) ~[na:1.6.0_22]
      at org.apache.activemq.web.RemoteJMXBrokerFacade.createConnection(RemoteJMXBrokerFacade.java:146) ~[activemq-web-5.4.2.jar:5.4.2]
      ... 59 common frames omitted
      Caused by: javax.naming.CommunicationException: null
      at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source) ~[na:1.6.0_22]
      at com.sun.jndi.toolkit.url.GenericURLContext.lookup(Unknown Source) ~[na:1.6.0_22]
      at javax.naming.InitialContext.lookup(Unknown Source) ~[na:1.6.0_22]
      at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(Unknown Source) ~[na:na]
      at javax.management.remote.rmi.RMIConnector.findRMIServer(Unknown Source) ~[na:na]
      ... 62 common frames omitted
      Caused by: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
      java.lang.ClassNotFoundException: javax.management.remote.rmi.RMIServerImpl_Stub (no security manager: RMI class loader disabled)
      at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) ~[na:na]
      ... 67 common frames omitted
      Caused by: java.lang.ClassNotFoundException: javax.management.remote.rmi.RMIServerImpl_Stub (no security manager: RMI class loader disabled)
      at sun.rmi.server.LoaderHandler.loadClass(Unknown Source) ~[na:na]
      at sun.rmi.server.LoaderHandler.loadClass(Unknown Source) ~[na:na]
      at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source) ~[na:1.6.0_22]
      at java.rmi.server.RMIClassLoader.loadClass(Unknown Source) ~[na:1.6.0_22]
      at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source) ~[na:na]
      at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) ~[na:1.6.0_22]
      at java.io.ObjectInputStream.readClassDesc(Unknown Source) ~[na:1.6.0_22]
      at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) ~[na:1.6.0_22]
      at java.io.ObjectInputStream.readObject0(Unknown Source) ~[na:1.6.0_22]
      at java.io.ObjectInputStream.readObject(Unknown Source) ~[na:1.6.0_22]
      ... 68 common frames omitted

      This exception essentially says that the RMIServerImpl_Stub from the javax.management.remote.rmi package (this is from the JRE) is not available to the bundle, which is not so surprising because the bundle does not import that package.

      I have also tested this with karaf and it works there, though I have no clue why it works, probably it is using the RMI class loader which is probably unwanted for a JDK provided class.

      As a workaround I added javax.management.remote.rmi to bootdelegation and it works now, however in my opinion this should be added to the manifest of the war file (this is defined in activemq-web-console/pom.xml).

      Attachments

        Activity

          People

            Unassigned Unassigned
            siano Stephan Siano
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: