Issues to be addressed:
Want to develop a JMX client to configure a local Java program. The specific requirements are as follows:
Please do not recommend the use of jconsole! Jconsole is inappropriate because jconsole is a generic JMX client that has a negative impact on the performance of the main program.
There is an example on the Oracle website that uses Rmiconnector and "host: Port number" as a parameter, but I do not know where to set the port number of JMX?
Jconsole can select the PID to connect to the Java process. But in the JMX API, I can't find any way to use PID as a parameter.
Answer:
We use some programs like the following to connect to a JMX server. However, you need to specify the following parameters when you run the server:
-dcom.sun.management.jmxremote
-dcom.sun.management.jmxremote.authenticate=false
-dcom.sun.management.jmxremote.port=1234
-dcom.sun.management.jmxremote.ssl=false
In order to bind a specific address, you need to add the following VM parameters:
1-djava.rmi.server.hostname=a.b.c.d
In this way, you can connect to your server like the following JMX client code:
String host = "localhost"; or some a.b.c.d
int port = 1234;
String url = "service:jmx:rmi:///jndi/rmi://" + Host + ":" + port + "/jmxrmi";
Jmxserviceurl serviceurl = new Jmxserviceurl (URL);
Jmxconnector jmxconnector = jmxconnectorfactory.connect (serviceurl, NULL);
try {
Mbeanserverconnection mbeanconn = Jmxconnector.getmbeanserverconnection ();
Now query to get the beans or whatever
set<objectname> beanset = mbeanconn.querynames (null, NULL);
...
} finally {
Jmxconnector.close ();
}
We can also not use the VM parameters, the code itself can be programmed to publish at the specified port number. But I think this is more complicated than your needs.
If you want to connect according to the PID, as far as I know, you need to use more than Java version 6. I have not used the following code, but it will work as expected:
list<virtualmachinedescriptor> VMS = Virtualmachine.list ();
for (Virtualmachinedescriptor Desc:vms) {
Virtualmachine VMS;
try {
VM = Virtualmachine.attach (DESC);
} catch (Attachnotsupportedexception e) {
Continue
}
Properties props = Vm.getagentproperties ();
String connectoraddress =
Props.getproperty ("com.sun.management.jmxremote.localConnectorAddress");
if (connectoraddress = = null) {
Continue
}
Jmxserviceurl url = new Jmxserviceurl (connectoraddress);
Jmxconnector connector = jmxconnectorfactory.connect (URL);
try {
Mbeanserverconnection mbeanconn = Connector.getmbeanserverconnection ();
set<objectname> beanset = mbeanconn.querynames (null, NULL);
...
} finally {
Jmxconnector.close ();
}
}
I have released a new SIMPLEJMX package that can help to start a JMX service very simply and send beans to a remote client.
Create a new server and listen on port 8000
Jmxserver jmxserver = new Jmxserver (8000);
Start the server
Jmxserver.start ();
Register the Lookupcache object defined below
Jmxserver.register (Lookupcache);
Jmxserver.register (Someotherobject);
Stop Service
Jmxserver.stop ();
The package does have a client interface, but no one currently has a mechanism to find the process through the PID, only the host/port combination is supported.
PS: If there is any problem, please put it directly in group 457036818.
This article is from the Java Learning Video tutorial blog, so be sure to keep this source http://10239772.blog.51cto.com/10229772/1659718
Java tutorial How to use JMX to connect Java programs running on the local JVM-Tanzhou Java