【问题标题】:How to get JMX connection in JBoss fuse如何在 JBoss fuse 中获得 JMX 连接
【发布时间】:2017-09-18 07:31:37
【问题描述】:

我尝试从 JBoss fuse 获取 JMX 连接,以计算 ActiveMQ 中待处理消息的数量,但我无法获得 JMX 连接。总是以异常结束

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://0.0.0.0:44444/jndi/rmi://0.0.0.0:1099/karaf-root");
JMXConnector jmxc = JMXConnectorFactory.connect(url);

以下例外:

java.lang.IllegalArgumentException: Expected String[2], got null
    at org.apache.karaf.management.JaasAuthenticator.authenticate(JaasAuthenticator.java:46)
    at javax.management.remote.rmi.RMIServerImpl.doNewClient(RMIServerImpl.java:232)
    at javax.management.remote.rmi.RMIServerImpl.newClient(RMIServerImpl.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162)
    at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
    at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2430)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:308)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:270)

【问题讨论】:

    标签: jboss activemq jmx jbossfuse simplejmx


    【解决方案1】:

    您缺少必需的凭据。

    查看this tutorial,您需要向JMXConnectorFactory 提供凭据

    Map env = ...;
    String[] creds = {"monitorRole", "mrpasswd"};
    env.put(JMXConnector.CREDENTIALS, creds);
    JMXConnector cc = JMXConnectorFactory.connect(url, env);
    

    【讨论】:

    • @Herman 很高兴它对您有所帮助。请接受我的回答(左侧打勾),谢谢!
    【解决方案2】:

    解决办法

    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://0.0.0.0:44444/jndi/rmi://0.0.0.0:1099/karaf-root");
    
    HashMap<String, String[]> environment = new HashMap<String, String[]>();
    String[] creds = { "admin", "admin" };
    environment.put(JMXConnector.CREDENTIALS, creds);
    
    JMXConnector jmxc = JMXConnectorFactory.connect(url, environment);
    MBeanServerConnection connection = jmxc.getMBeanServerConnection();
    

    【讨论】:

      猜你喜欢
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多