문제

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