2014-09-03 9 views
3

James 서버를 구성하고 일부 사용자와 도메인을 추가했습니다.JMX를 통해 James Server에 등록 된 사용자 목록을 얻는 방법

Jconsole에서 아래 그림과 같이 사용자 목록을 얻을 수 있습니다.

사람은

제임스 문서로 내가 코드 조각 작업을 얻을 관리 어떻게 든이 To add user Programatically by JMX

를 지정하고없는 방법 전화를 찾기 위해 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을 사용하여 관리 Bean의 일부 메소드를 호출하도록 요청합니다. 코드에서 MBeanServerConnection을 통해 MBeanServer에 액세스합니다.

는 것 빈 방법 호출하려면 다음을

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 프록시 개체를 사용하는 것이 더 쉬울 수 있습니다. 이것은 로컬 연결을 가지고 InvocationHandler에서 MBeanServerConnection.invoke 메소드를 사용하는 java.lang.reflect.Proxy 객체를 생성합니다. 그런 다음 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(); 

이러한 방법 중 하나는 사용자 저장소 bean에서 매개 변수없이 또는 매개 변수없이 메소드를 호출 할 수 있어야합니다.