質問

I have a JBoss 7.1.1 server, for which I want to write jmx client. As far I understood, jboss 7.1.1 is not using typical rmi based jmx and they have given a layer of remoting-jmx over native management. I am using following code:

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

Map env = JMXConnectorConfig.getEnvironment(paramtbl);

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

But it is giving following exception:

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

I googled it and the following thread seems relevant: https://community.jboss.org/thread/204653?tstart=0

It asks to add jboss's libraries to my classpath. I tried that also but still getting same exception.

役に立ちましたか?

解決

I got the same exception when trying to get a JmxServiceUrl. Make sure that in your standalone.xml you have the following:

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

And you should include in project classpath the jar named: jboss-client.jar, it can be found in JBOSS_DIRECTORY/bin/client. In fact, the JMX client must include that jar in its classpath.

This tip fixed the problem for me..Hope it will be helpful for you

他のヒント

Tried to do the same from Arquillian test on JBoss AS7 and finally had to use:

import org.jboss.remotingjmx.RemotingConnectorProvider;

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

Could not have "module name="org.jboss.remoting-jmx" services="import"" working

Also works with

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

I used this code to connect to JBoss in a remote server

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

Where createClient is a method I wrote -

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);
}

For more information on how to read the data obtained from Server or for the complete project using Java/Google visualizer API (to show the statistics in Graph after every 10 secs) , Please refer to this tutorial -

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

Add the following to your jboss-deployment-structure

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

Activate JMX remoting subsystem by adding following entry in standalone.xml

<subsystem xmlns="urn:jboss:domain:ee:1.1">
  <!-- Activate JMX remoting -->
  <global-modules>
    <module name="org.jboss.remoting-jmx" slot="main"/>
  </global-modules>
  ...
</subsystem>

It seems like "jboss-client.jar" is not available at run-time for JMX connection, So make sure that you have added "jboss-client.jar" in the class path. And also you are using deprecated protocol "remoting-jmx" instead of "remote".

i.e, "service:jmx:remote://localhost:9999"

Hope it helps.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top