我知道可以使用 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