2012-09-04 207 views
1

我想創建一個JMX cklient,這可以與我的服務器一起工作。我可以使用jconsole連接到我的服務器,但是如何使用java代碼來完成。 謝謝!Jmx連接客戶端

這是我的服務器代碼:

  MBeanServer mbeanServer = ManagementFactory 
       .getPlatformMBeanServer(); 

     //giving name for service 
     ObjectName objectName = new ObjectName("bean:name=logService"); 
     RequiredModelMBean mbean = new RequiredModelMBean(); 

     mbean.setManagedResource(logService, "objectReference"); 

     Descriptor logStringDescriptor = new DescriptorSupport(
       new String[] { "name=logString", 
         "descriptorType=attribute", 
         "getMethod=getLogString", "setMethod=setLogString" }); 

     ModelMBeanAttributeInfo logStringAttribute = new ModelMBeanAttributeInfo(
       "logString", "java.lang.String", "String to be logged", 
       true, true, false, logStringDescriptor); 

     ModelMBeanOperationInfo getLogStringOperation = new ModelMBeanOperationInfo(
       "Get the log string", 
       LoggerService.class.getMethod("getLogString")); 

     ModelMBeanOperationInfo setLogStringOperation = new ModelMBeanOperationInfo(
       "Set the log string", LoggerService.class.getMethod(
         "setLogString", String.class)); 

     ModelMBeanInfo mbeanInfo = new ModelMBeanInfoSupport(
       "LoggerService", "Logger Service", 
       new ModelMBeanAttributeInfo[] { logStringAttribute }, null, 
       new ModelMBeanOperationInfo[] { getLogStringOperation, 
         setLogStringOperation }, null); 

     mbean.setModelMBeanInfo(mbeanInfo); 
     mbeanServer.registerMBean(mbean, objectName); 

回答

1

這是非常簡單:)

  MBeanServer mbeanServer = ManagementFactory 
       .getPlatformMBeanServer(); 


     //giving name for service 
     ObjectName objectName = new ObjectName("bean:name=logService"); 

     String str = (String) mbeanServer.getAttribute (objectName, "logString"); 
     System.out.println(str); 
0
public static <T> T createJmxClient(Class<T> clazz, String objectName, String serviceUrl) { 
    return createJmxClient(clazz, objectName, serviceUrl, null, null); 
} 

public static <T> T createJmxClient(Class<T> clazz, String objectName, String serviceUrl, final String user, final String pass) { 
    try { 
     JMXServiceURL jmxServiceUrl = new JMXServiceURL(serviceUrl); 
     Map<String, ?> env = user == null ? null : new HashMap<String, Object>() {{ 
      put(JMXConnector.CREDENTIALS, new String[] {user, pass}); 
     }}; 
     JMXConnector jmxc = JMXConnectorFactory.connect(jmxServiceUrl, env); 
     MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); 
     ObjectName mbeanName = new ObjectName(objectName); 
     return JMX.newMBeanProxy(mbsc, mbeanName, clazz, true); 
    } catch (IOException | MalformedObjectNameException e) { 
     throw new RuntimeException("Can not create client for remote JMX " + serviceUrl, e); 
    } 
}