2013-05-16 2 views
0

JConsole없이 JMX로 메소드를 실행하는 방법은 무엇입니까?JConsole을 사용하지 않고 JMX로 메소드 실행

Java 코드에서 JMX를 통해 메소드를 호출하려고합니다. 아래 코드를 사용하면 모든 메서드의 이름을 MBean 인터페이스의으로 가져올 수 있지만 실제로는 실제로 사용할 수 없습니다. 을 실행합니다. 아직 뭔가 빠졌어. 누구 좀 도와 주실 래요?

private static String connectJmx() { 
    StringBuilder sb = new StringBuilder(); 

    JMXServiceURL serviceUrl; 
    JMXConnector jmxConnector = null; 
    try { 
     serviceUrl = new JMXServiceURL(URL); 
     jmxConnector = JMXConnectorFactory.connect(serviceUrl, null); 
     MBeanServerConnection mbeanConn = jmxConnector.getMBeanServerConnection(); 

     ObjectName objectName = ObjectNameProvider.getObjectName(); 
     MBeanInfo info = mbeanConn.getMBeanInfo(objectName); 

     MBeanOperationInfo[] operations = info.getOperations();   
     for (int i = 0; i < operations.length; i++) { 
     sb.append(operations[i].getName()).append("\n"); 
     } 

    } 
    catch (Exception e) { 
     LogManager.doLog(LOG, LOGLEVEL.INFO, "exception connection jmx", e); 

    } finally { 
     try { 
      if(jmxConnector != null){ 
       jmxConnector.close(); 
      } 
     } catch (IOException e) { 
     // 
     } 
    }  
    return sb.toString(); 
} 

위의주기는 메소드의 이름을 수집합니다. 이름을 수집하는 대신 실제로 이름을 실행하는 것과 비슷한 것을 원합니다. JConsole을 권장하지 마십시오. 다른 이유로 작동하지 않습니다.

+0

이 * "JConsole의 권장하지 마십시오, 그것은 다른 이유로 작동하지 않습니다 여기에 당신을 도울 수있는 샘플 코드입니다. "* 이유를 알려주십시오. –

+0

우리는이 기능을 우리의 응용 프로그램에 포함시키고 자하므로 Jconsole없이 사용할 수있는 클라이언트에 배포 할 때 –

답변

1

mbean 메서드를 호출하는 코드를 넣지 않았습니다. MBeanServerConnection를 용의 JavaDoc에서

import javax.management.*; 
import javax.management.remote.*; 
import com.sun.messaging.AdminConnectionFactory; 
import com.sun.messaging.jms.management.server.*; 


public class InvokeOp 
    { 
    public static void main (String[] args) 
     { 
     try 
      { // Create administration connection factory 
       AdminConnectionFactory acf = new AdminConnectionFactory(); 

      // Get JMX connector, supplying user name and password 
       JMXConnector jmxc = acf.createConnection("AliBaba", "sesame"); 

      // Get MBean server connection 
       MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); 

      // Create object name 
       ObjectName serviceConfigName = MQObjectName.createServiceConfig("jms"); 

      // Invoke operation 
       mbsc.invoke(serviceConfigName, ServiceOperations.PAUSE, null, null); 

      // Close JMX connector 
       jmxc.close(); 
      } 

     catch (Exception e) 
      { System.out.println("Exception occurred: " + e.toString()); 
      e.printStackTrace(); 
      } 
     } 
    } 
+0

이 'ServiceOperations.PAUSE'대신에 메소드의 이름을 지정해야합니다. –

관련 문제