я испытал образец код следующим образом
// Get the Platform MBean Server
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
// Construct the ObjectName for the MBean we will register
ObjectName name = new ObjectName("com.example.mbeans:type=Hello");
// Create the Hello World MBean
Hello mbean = new Hello();
// Register the Hello World MBean
mbs.registerMBean(mbean, name);
Set<ObjectInstance> instances = mbs.queryMBeans(name, null);
ObjectInstance instance = (ObjectInstance) instances.toArray()[0];
System.out.println("Class Name:t" + instance.getClassName());
System.out.println("Object Name:t" + instance.getObjectName());
// Wait forever
System.out.println("Waiting forever...");
Thread.sleep(Long.MAX_VALUE);
Конечно, есть interface HelloMBean
и
class Hello extends NotificationBroadcasterSupport implements HelloMBean
Выход
Class Name:tcom.example.mbeans.Hello
Object Name:tcom.example.mbeans:type=Hello
Waiting forever...
Надеется, что это помогает!
Update:
public class ObjectInstance extends Object implements Serializable
. ObjectInstance представляет собой имя объекта MBean и его имя класса. Мы не можем получить ссылку на сам объект.
Я полагаю, что единственный способ работать с зарегистрированными mbeans - использовать JMS/RMI-коннектор (или адаптеры HTML) для подключения к mbaean-серверу, создать прокси-сервер mbaen с помощью JMX.newMBeanProxy, соответствующий зарегистрированным методам mbean и invoke на этом ,
Спасибо, но я за экземпляром объекта, а не с именем класса. – gjrwebber
Как только у вас есть имя класса, вы можете ввести объект в имя класса и использовать его: Hello helloObject = (Hello) instance; –
, если я не понимаю, что вы имеете в виду, что невозможно в Java. – gjrwebber