次のようにjmxを使用してJavaクラスでメソッドを呼び出すことができることを私は知っています:
try { JMXServiceURL serviceUrl = new JMXServiceURL(URL);
jmxConnector = JMXConnectorFactory.connect(serviceUrl, null);
ObjectName objectName = new ObjectName("whatever");
MBeanServerConnection mbeanConn = jmxConnector.getMBeanServerConnection();
ret = (String)mbeanConn.invoke(objectName, methodName, paramsForInvoke, signitureForInvoke);
}
パラメーターを指定してメソッドを呼び出したい場合は、実際のパラメーターを Object 配列として渡し、パラメーターの型を String 配列として渡す必要があります。上記の例を続けて、sList という String ArrayList を渡したいとします。
ArrayList<String> sList = new ArrayList<String>();
sList.add("kapd_be");
Object paramsForInvoke[] = {sList};
String signitureForInvoke[] = {ArrayList.class.getName()};
この場合、すべてが正常に機能し、メソッドは適切なパラメーターで呼び出されます。そして、呼び出されたメソッドで「kapd_be」文字列を抽出できます。
しかし、パラメーターを他のクラスの ArrayList にしたい場合は、SortInfo としましょう (これは私が作成した POJO クラスで、いくつかのフィールドが含まれています)。コードは実行されず、メソッドを呼び出すことさえできないため、明らかにいいえパラメータを抽出できます。唯一の違いはこれであるため、これは奇妙です。
ArrayList<SortInfo> sList = new ArrayList<SortInfo>();
なんで?また、SortInfo リストをメソッドに渡す方法は?
http://docs.oracle.com/javase/6/docs/api/javax/management/MBeanServerConnection.html