2014-09-03 2 views
3

Я настроил сервер Джеймса и добавил к нему некоторых пользователей и домены.Как получить Список пользователей, зарегистрированных на сервере Джеймса через JMX

Из Jconsole я могу получить список пользователей, как показано на рисунке ниже.

Может кто-нибудь пожалуйста, предоставьте мне фрагмент кода, чтобы получить то же самое через JMX

как Джеймс документации указать этот To add user Programatically by JMX

Каким-то образом я сумел получить код сниппета работы, но не смог найти, как позвонить операции Mbean без каких-либо параметров.

Этот код печати атрибуты MBean

String url = "service:jmx:rmi://localhost/jndi/rmi://localhost:9999/jmxrmi"; 
    JMXServiceURL serviceUrl = new JMXServiceURL(url); 
    JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceUrl, null); 
    try { 
     MBeanServerConnection mbeanConn = jmxConnector.getMBeanServerConnection(); 
     ObjectName mbeanName = new ObjectName("org.apache.james:type=component,name=usersrepository"); 
     MBeanInfo info = mbeanConn.getMBeanInfo(mbeanName); 
     MBeanAttributeInfo[] attributes = info.getAttributes(); 
     for (MBeanAttributeInfo attr : attributes) 
     { 
      System.out.println(attr.getDescription() + " " + mbeanConn.getAttribute(mbeanName,attr.getName())); 
     } 
    } finally { 
     jmxConnector.close(); 

    } 

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

This is the Jconsole screen for getting the Users list from James Server

ответ

0

При вызове операции на бобе через JMX, звонки проксированные через MBeanServer. Вы запрашиваете, чтобы MBeanServer вызывал какой-либо метод в управляемом компоненте с ObjectName. В вашем коде вы получаете доступ к MBeanServer через MBeanServerConnection.

Для вызова пустого метода вы бы:

MBeanServerConnection mbeanConn = jmxConnector.getMBeanServerConnection(); 
ObjectName mbeanName = new ObjectName("org.apache.james:type=component,name=usersrepository"); 

// since you have no parameters, the types and values are null 
mbeanConn.invoke(mbeanName, "MethodToInvoke", null, null) 

Использования MBeanServer для вызова методов могут быть громоздкими, так что может быть проще использовать объект JMX Proxy. Это просто имеет локальную конструкцию соединения объект java.lang.reflect.Proxy, который использует метод MBeanServerConnection.invoke в своем InvocationHandler. Затем вы можете использовать объект Proxy, как обычный экземпляр вашего класса. Для этого подхода ваш целевой MBean должен реализовать интерфейс, который вы можете использовать для создания локального прокси.

import javax.management.JMX; 
import org.apache.james.user.api.UsersRepository; 
... 

UsersRepository proxy = JMX.newMBeanProxy(mbeanConn, mbeanName, UsersRepository.class); 
Iterator<String> userList = proxy.list(); 

Либо один из этих способов позволит вам вызывать методы без или без параметров на хранилище пользователя компонента.

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