2016-05-04 4 views
0

私はリモートのjvmでThreadMXBeanで操作を呼び出そうとしています。 I動作たinvoke使用コードスニペットは、は、getRemote()メソッドは、MBeanServerConnectionをリモートjvmのスレッドダンプをプログラムで作成する

IスタブのメソッドgetThreadInfo()を呼び出すことはできませんを返すこと

bean = new ObjectName("java.lang:type=Threading"); 
     memoryInfo = RemoteConnector.getRemote().getMBeanInfo(bean); 
     RemoteConnector.getRemote().getObjectInstance(bean); 
     MBeanOperationInfo [] mBeanAttributeInfos = memoryInfo.getOperations(); 
     for(MBeanOperationInfo mBeanAttributeInfo : mBeanAttributeInfos){ 
      System.out.println(mBeanAttributeInfo.getName()); 
     } 
     long [] allThreadIds = (long [])RemoteConnector.getRemote().getAttribute(bean,"AllThreadIds"); 
     Object [] params = new Object[2]; 
     int maxDepth = 100; 
     params[0] = allThreadIds; 
     params[1] = maxDepth; 
     String [] opSigs = {allThreadIds.getClass().getName(),"I"}; 
     RemoteConnector.getRemote().invoke(bean,"getThreadInfo",params,opSigs); 

注以下です。私はこのメッセージに

2016-05-05 00:17:37 ERROR ThreadDumpCreator:67 - Operation getThreadInfo exists but not with this signature: ([J, I) 

を取得し、私はこの問題を解決してください:)

以下

ています私は、リモートのMBeanServer

public class RemoteConnector { 

private static MBeanServerConnection remote = null; 
private static JMXConnector connector = null; 

public static void defaultConnector(){ 
    try { 
     JMXServiceURL target = new JMXServiceURL 
       ("service:jmx:rmi://localhost:11111/jndi/rmi://localhost:9999/jmxrmi"); 
     //for passing credentials for password 
     Map<String, String[]> env = new HashMap<String, String[]>(); 
     String[] credentials = {"admin", "admin"}; 
     env.put(JMXConnector.CREDENTIALS, credentials); 

     connector = JMXConnectorFactory.connect(target, env); 
     remote = connector.getMBeanServerConnection(); 

    }catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public static MBeanServerConnection getRemote() { 
    return remote; 
} 

public static void setRemote(MBeanServerConnection remote) { 
    RemoteConnector.remote = remote; 
} 

public static void closeConnection() throws IOException { 
    if(connector != null){ 
     connector.close(); 
    } 
} 

}

答えて

1

を接続するために使用される方法は、どうやら私が持つべきですメソッドのシグネチャとしてint.class.getName()を使用するには、呼び出しメソッド

が必要です。
関連する問題