オラクルのドキュメントから:
ドメインランタイムMBeanサーバー:このMBeanサーバーは、管理対象サーバーに存在するMBeanの単一アクセスポイントとしても機能します。
私がやりたいのは、この事実を使用して、複数の管理対象サーバーに散在しているすべてのカスタムmBeanにアクセスすることです。たとえば、2つのノードserver-1server-2があるとします。管理者ノードに接続して、サーバー1、サーバー2の両方ですべてのカスタムmBeanにアクセスするにはどうすればよいですか?
各ノードにリモートアクセスして結果を返したくない単一のエントリポイントが必要ですこれを行うことで、サーバーの名前、状態、およびその他の情報を取得できました
JMXConnector connector;
ObjectName service;
MBeanServerConnection connection;
String protocol = "t3";
Integer portInteger = Integer.valueOf(<admin server port>);
int port = portInteger.intValue();
String jndiroot = "/jndi/";
String mserver = "weblogic.management.mbeanservers.runtime";
JMXServiceURL serviceURL = new JMXServiceURL(protocol, "<serverName>", port,
jndiroot + mserver);
Hashtable h = new Hashtable();
h.put(Context.SECURITY_PRINCIPAL, "weblogic");
h.put(Context.SECURITY_CREDENTIALS, "weblogicpass");
h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
"weblogic.management.remote");
h.put("jmx.remote.x.request.waiting.timeout", new Long(10000));
connector = JMXConnectorFactory.connect(serviceURL, h);
connection = connector.getMBeanServerConnection(); service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
ObjectName[] ons = (ObjectName[]) connection.getAttribute(service, "ServerRuntimes");
int length = (int) ons.length;
for (int i = 0; i < length; i++) {
String name = (String) connection.getAttribute(ons[i],
"Name");
String state = (String) connection.getAttribute(ons[i],
"State");
String internalPort = (String) connection.getAttribute(ons[i],"ListenPort");
System.out.println("Server name: " + name + ". Server state: "
+ state);
しかし、情報だけでなく、各サーバーで作成されたカスタムMbeanにアクセスする必要があります