हम अपने जेएमएक्स सर्वर से प्रोग्रामेटिक रूप से कनेक्ट करने के लिए निम्न की तरह कुछ उपयोग करते हैं।
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=1234
-Dcom.sun.management.jmxremote.ssl=false
एक विशेष पते के लिए बाध्य करने के लिए आप निम्न वीएम तर्क जोड़ने की आवश्यकता होगी: आपको निम्न तर्क की तरह कुछ के साथ अपने सर्वर चलाना चाहिए
-Djava.rmi.server.hostname=A.B.C.D
तो फिर आप अपने सर्वर से कनेक्ट कर सकते हैं निम्नलिखित की तरह JMX ग्राहक कोड का उपयोग:
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();
}
हम भी कोड है कि प्रोग्राम के वीएम तर्कों के बाहर एक विशेष बंदरगाह के लिए खुद को प्रकाशित कर सकते हैं लेकिन यह है कि अधिक फू है आपको लगता है की तुलना में मुझे लगता है।
"पीआईडी द्वारा" जोड़ने के संदर्भ में, आप के रूप में तक मुझे पता है जावा भूमि से यह करने के लिए Java6 उपयोग करने की आवश्यकता। मैंने निम्नलिखित कोड का उपयोग नहीं किया है लेकिन ऐसा लगता है कि यह काम करता है।
List<VirtualMachineDescriptor> vms = VirtualMachine.list();
for (VirtualMachineDescriptor desc : vms) {
VirtualMachine vm;
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();
}
}
मैंने भी SimpleJMX package के लेखक जो यह आसान एक JMX सर्वर प्रारंभ और दूरदराज के ग्राहकों के लिए सेम प्रकाशित करने के लिए बनाता है।
// create a new server listening on port 8000
JmxServer jmxServer = new JmxServer(8000);
// start our server
jmxServer.start();
// register our lookupCache object defined below
jmxServer.register(lookupCache);
jmxServer.register(someOtherObject);
// stop our server
jmxServer.stop();
यह रूप में अच्छी तरह लेकिन अभी यह पीआईडी द्वारा प्रक्रियाओं को खोजने के लिए किसी भी तंत्र नहीं है एक ग्राहक इंटरफ़ेस है - (6/2012 में) केवल होस्ट/पोर्ट संयोजन समर्थित हैं।
दोनों मुख्य कार्यक्रम और JMX ग्राहक स्टैंड-अलोन कार्यक्रमों (जावा SE) कर रहे हैं। – mjafari
यह भी देखें http://www.pongasoft.com/blog/yan/entry/connecting_to_a_local_vm/ –