2012-09-04 3 views
1

내 서버에서 작동 할 수있는 JMX 클라이언트를 만들고 싶습니다. 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

당신은 당신의 MBean 서버의 래퍼 수 및 특수 어댑터의 사용과 외부 프로세스에 의해 응용 프로그램에 연결할 수 있도록하는 JMX 에이전트를 만들어야합니다. 이 어댑터를 사용하면 클라이언트가 특정 프로토콜 (SNMP, HTTP 등) 또는 기술 (RMI)을 사용하여 MBean 서버에 연결할 수 있습니다. 현재 어댑터에 대해 읽을 수 있습니다 : 그것은 매우 간단합니다 http://marxsoftware.blogspot.com/2008/08/remote-jmx-connectors-and-adapters.html

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); 
    } 
}