如何通过java代码连接JBoss 7.1.1 remoting -jmx?

时间:2014-03-25 06:38:37

标签: jboss jmx

我有一台JBoss 7.1.1服务器,我想为其编写jmx客户端。据我所知,jboss 7.1.1没有使用典型的基于rmi的jmx,他们在本机管理上提供了一层remoting-jmx。我使用以下代码:

JMXServiceURL address = new JMXServiceURL("service:jmx:remoting-jmx://localhost:9999");

Map env = JMXConnectorConfig.getEnvironment(paramtbl);

JMXConnector connector = JMXConnectorFactory.connect(address, env);

但是它给出了以下例外:

java.net.MalformedURLException: Unsupported protocol: remoting-jmx

我用谷歌搜索它,以下线程似乎相关: https://community.jboss.org/thread/204653?tstart=0

它要求将jboss的库添加到我的类路径中。我也试过但仍然得到同样的例外。

5 个答案:

答案 0 :(得分:10)

我在尝试获取 JmxServiceUrl 时遇到了同样的异常。 确保在standalone.xml中包含以下内容:

<subsystem xmlns="urn:jboss:domain:jmx:1.1"> <show-model value="true"/> <remoting-connector use-management-endpoint="true" /> </subsystem>

你应该在项目类路径中包含名为: jboss-client.jar 的jar,它可以在JBOSS_DIRECTORY / bin / client中找到。实际上,JMX客户端必须在其类路径中包含该jar。

这个提示为我解决了这个问题。希望它会对你有所帮助

答案 1 :(得分:1)

我使用此代码连接到远程服务器中的JBoss

ModelControllerClient client = null;
try {
 client = createClient(InetAddress.getByName("172.16.73.12"), 9999,
     "admin", "pass", "ManagementRealm");
    } 
catch (UnknownHostException e) {
 e.printStackTrace();
}

createClient是我写的一个方法 -

private ModelControllerClient createClient(final InetAddress host,
  final int port, final String username, final String password,
  final String securityRealmName) {

 final CallbackHandler callbackHandler = new CallbackHandler() {

  public void handle(Callback[] callbacks) throws IOException,
    UnsupportedCallbackException {
   for (Callback current : callbacks) {
    if (current instanceof NameCallback) {
     NameCallback ncb = (NameCallback) current;
     ncb.setName(username);
    } else if (current instanceof PasswordCallback) {
     PasswordCallback pcb = (PasswordCallback) current;
     pcb.setPassword(password.toCharArray());
    } else if (current instanceof RealmCallback) {
     RealmCallback rcb = (RealmCallback) current;
     rcb.setText(rcb.getDefaultText());
    } else {
     throw new UnsupportedCallbackException(current);
    }
   }
  }
 };
 return ModelControllerClient.Factory
   .create(host, port, callbackHandler);
}

有关如何使用Java / Google Visualizer API读取从服务器或整个项目获取的数据的更多信息(每10秒显示一次Graph中的统计信息),请参阅本教程 -

http://javacodingtutorial.blogspot.com/2014/05/reading-jboss-memory-usage-using-java.html

答案 2 :(得分:1)

试图在JBoss AS7的Arquillian测试中做同样的事情,最后不得不使用:

import org.jboss.remotingjmx.RemotingConnectorProvider;

RemotingConnectorProvider s = new RemotingConnectorProvider();
JMXConnector connector = s.newJMXConnector(url, credentials);
connector.connect();

无法拥有“module name =”org.jboss.remoting-jmx“services =”import“”working

也适用于

environment.put("jmx.remote.protocol.provider.pkgs", "org.jboss.remotingjmx");
JMXConnector connector = JMXConnectorFactory.connect(url, environment);
connector.connect();

答案 3 :(得分:0)

将以下内容添加到jboss-deployment-structure

   

   <dependencies>
         <module name="org.jboss.remoting3.remoting-jmx" services="import"/>
   </dependencies>

答案 4 :(得分:0)

对于JMX连接,似乎“ jboss-client.jar”在运行时不可用,因此请确保已在类路径中添加了“ jboss-client.jar”。 而且,您正在使用不推荐使用的协议“ remoting-jmx”,而不是“ remote”。

即“ service:jmx:remote:// localhost:9999”

希望有帮助。