2013-07-19 3 views
0

есть ли способ получить список экземпляров bean, которые весна зарегистрировала в mbeanserver?Как получить бобы, которые весна зарегистрировала в jmx?

Я видел, что вы можете зарегистрировать MBeanExporterListener на MBeanExporter, но это только говорит мне ObjectName, в котором был зарегистрирован компонент. Могу ли я использовать эту ObjectName где-нибудь, чтобы получить экземпляр объекта, который был зарегистрирован?

Я вижу, что один из вариантов может быть подклассом MBeanExporter, но я действительно не хочу этого делать, если только не нужно.

Спасибо.

ответ

0

Оказывается, вы не можете. Вы должны подклассифицировать MBeanExporter, если хотите этого.

0

я испытал образец код следующим образом

// 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 на этом ,

+0

Спасибо, но я за экземпляром объекта, а не с именем класса. – gjrwebber

+0

Как только у вас есть имя класса, вы можете ввести объект в имя класса и использовать его: Hello helloObject = (Hello) instance; –

+0

, если я не понимаю, что вы имеете в виду, что невозможно в Java. – gjrwebber

Смежные вопросы