[英]How can I connect to Apache James' user repository and retrieve a list of users through Java code?
[英]How to get the List of Users registered in James Server through JMX
我已經配置了James服務器並為其添加了一些用戶和域。
從Jconsole我可以獲得用戶列表,如下圖所示。
任何人都可以請我提供代碼片段以通過JMX獲得相同的代碼片段
正如James文檔中指定的那樣, 以編程方式添加用戶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();
}
請幫助獲取此代碼以獲取用戶列表。
通過JMX調用bean上的操作時,調用通過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代理對象可能更容易。 這只是本地連接構造一個java.lang.reflect.Proxy對象,該對象在其InvocationHandler中使用MBeanServerConnection.invoke方法。 然后,您可以像使用類的普通實例一樣使用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上調用不帶或不帶參數的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.