1

我正在尝试从运行 activemq 代理的同一进程访问 jmx 功能,并通过 Web 服务公开一些属性。代码如下所示:

    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
    try {
        ObjectName name = new ObjectName("org.apache.activemq:BrokerName=locahost,Type=Broker");
        BrokerViewMBean brokerViewMBean = JMX.newMBeanProxy(mbs, name, BrokerViewMBean.class);
        ObjectName[] queues = brokerViewMBean.getQueues();
        .
        .
        .
    } catch (Exception e) {
        e.printStackTrace();
    }

当我运行此代码时,出现以下异常:

java.lang.reflect.UndeclaredThrowableException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl 在 com.myinc.MyObject.getAllQueues(MyObject.java:37) 的 $Proxy51.getQueues(UndeclaredThrowableException)。在 org.apache.cxf.service.invoker 的 java.lang.reflect.Method.invoke(Method.java:597) 的 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 的调用(NativeMethodAccessorImpl.java:39) .AbstractInvoker.performInvocation(AbstractInvoker.java:180) 在 org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) 在 org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:178) ) 在 org.apache.cxf.service 的 org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:64)。invoker.AbstractInvoker.invoke(AbstractInvoker.java:75) at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441 ) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 org.apache.cxf.workqueue.SynchronousExecutor.execute( SynchronousExecutor.java:37) at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:107) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262) at org.apache.cxf .transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 在 org.apache.cxf.transport.http.AbstractHTTPDestination。在 org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:193) 处调用(AbstractHTTPDestination.java:211)在 org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:130) 在 org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:221) 在 org.apache.cxf.transport .servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:141) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 在 org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:197) ) 在 org.apache.catalina.core 的 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)。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 .apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve .java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 在 org.apache.coyote。 http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker。在 java.lang.Thread.run(Thread.java:662) 处运行 (JIoEndpoint.java:489) 原因:javax.management.InstanceNotFoundException: org.apache.activemq:BrokerName=locahost,Type=com.sun 处的代理。 jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094) 在 com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662) 在 com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java: 638) 在 javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:263) ... 39 更多getMBean(DefaultMBeanServerInterceptor.java:1094) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662) at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638) at javax.management .MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:263) ... 还有 39 个getMBean(DefaultMBeanServerInterceptor.java:1094) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662) at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638) at javax.management .MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:263) ... 还有 39 个

谁能让我知道我做错了什么以及这个异常想说什么?

谢谢。

4

1 回答 1

3

线索是由部分异常引起的:

Caused by: javax.management.InstanceNotFoundException: org.apache.activemq:BrokerName=locahost,Type=Broker at 

您使用的对象名称必须不正确或代理尚未运行。您可以使用 jconsole 附加到进程并查看有效的 ObjectName 是什么。

于 2012-10-26T03:11:19.333 回答