我有一台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的库添加到我的类路径中。我也试过但仍然得到同样的例外。
答案 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”
希望有帮助。