MBean への接続に Java アプリケーションを使用できます。これらのアプリケーションは、com.ibm.websphere.objectgrid.management パッケージ内の インターフェースを使用します。
次のサンプル・プログラムは、スタンドアロン・カタログ・サービス MBean サーバーに 接続し、指定された ObjectGrid および MapSet の各コンテナー・サーバーと コンテナー・サーバーそれぞれに割り振られた断片のリストを XML フォーマットのストリングで返します。
package com.ibm.websphere.sample.xs.admin;
import java.util.Set;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
/**
* Collects the placement information from the Catalog Server for a given ObjectGrid.
*/
public final class CollectPlacementPlan {
private static String hostName = "localhost";
private static int port = 1099;
private static String objectGridName = "library";
private static String mapSetName = "ms1";
/**
* Connects to the ObjectGrid Catalog Service to retrieve placement information and
* prints it out.
*
* @param args
* @throws Exception
* If there is a problem connecting to the catalog service MBean server.
*/
public static void main(String[] args) throws Exception {
String serviceURL = "service:jmx:rmi:///jndi/rmi://" + hostName + ":" + port +
"/objectgrid/MBeanServer";
JMXServiceURL jmxUrl = new JMXServiceURL(serviceURL);
JMXConnector jmxCon = JMXConnectorFactory.connect(jmxUrl);
try {
MBeanServerConnection catalogServerConnection = jmxCon.getMBeanServerConnection();
Set placementSet = catalogServerConnection.queryNames(new
ObjectName("com.ibm.websphere.objectgrid"
+ ":*,type=PlacementService"), null);
ObjectName placementService = (ObjectName) placementSet.iterator().next();
Object placementXML = catalogServerConnection.invoke(placementService,
"listObjectGridPlacement", new Object[] {
objectGridName, mapSetName }, new String[] { String.class.getName(),
String.class.getName() });
System.out.println(placementXML);
} catch (Exception e) {
if(jmxCon != null) {
jmxCon.close();
}
}
}
}
<objectGrid name="library" mapSetName="ms1">
<container name="Container-1" zoneName="DefaultZone"
hostName="myhost.mycompany.com" serverName="ogserver">
<shard type="SynchronousReplica" partitionName="0"/>
<shard type="SynchronousReplica" partitionName="1"/>
<shard type="SynchronousReplica" partitionName="2"/>
<shard type="SynchronousReplica" partitionName="3"/>
</container>
<container name="Container-0" zoneName="DefaultZone"
hostName="myhost.mycompany.com" serverName="ogserver">
<shard type="Primary" partitionName="0"/>
<shard type="Primary" partitionName="1"/>
<shard type="Primary" partitionName="2"/>
<shard type="Primary" partitionName="3"/>
</container>
<container name="library:ms1:_UnassignedContainer_" zoneName="_ibm_SYSTEM"
hostName="UNASSIGNED" serverName="UNNAMED">
<shard type="SynchronousReplica" partitionName="0"/>
<shard type="SynchronousReplica" partitionName="1"/>
<shard type="SynchronousReplica" partitionName="2"/>
<shard type="SynchronousReplica" partitionName="3"/>
<shard type="AsynchronousReplica" partitionName="0"/>
<shard type="AsynchronousReplica" partitionName="1"/>
<shard type="AsynchronousReplica" partitionName="2"/>
<shard type="AsynchronousReplica" partitionName="3"/>
</container>
</objectGrid>
コンテナー・サーバーは MBean をホスティングして、コンテナー・サーバー内で実行している 個々のマップや ObjectGrid インスタンスに関する情報を照会します。次のサンプル・プログラムは、JMX アドレスが localhost:1099 の カタログ・サーバーによってホスティングされる各コンテナー・サーバーの状況をプリントします。
package com.ibm.websphere.sample.xs.admin;
import java.util.List;
import java.util.Set;
import javax.management.MBeanServerConnection;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
/**
* Collects placement status from each of the available containers directly.
*/
public final class CollectContainerStatus {
private static String hostName = "localhost";
private static int port = 1099;
/**
* @param args
*/
public static void main(String[] args) throws Exception {
String serviceURL = "service:jmx:rmi:///jndi/rmi://" + hostName + ":" + port + "/objectgrid/MBeanServer";
JMXServiceURL jmxUrl = new JMXServiceURL(serviceURL);
JMXConnector jmxCon = JMXConnectorFactory.connect(jmxUrl);
try {
MBeanServerConnection catalogServerConnection = jmxCon.getMBeanServerConnection();
Set placementSet = catalogServerConnection.queryNames(new ObjectName("com.ibm.websphere.objectgrid"
+ ":*,type=PlacementService"), null);
ObjectName placementService = (ObjectName) placementSet.iterator().next();
List<String> containerJMXAddresses = (List<String>) catalogServerConnection.invoke(placementService,
"retrieveAllServersJMXAddresses", new Object[0], new String[0]);
for (String address : containerJMXAddresses) {
JMXServiceURL containerJMXURL = new JMXServiceURL(address);
JMXConnector containerConnector = JMXConnectorFactory.connect(containerJMXURL);
MBeanServerConnection containerConnection = containerConnector.getMBeanServerConnection();
Set<ObjectInstance> containers = containerConnection.queryMBeans(
new ObjectName("*:*,type=ObjectGridContainer"), null);
for (ObjectInstance container : containers) {
System.out.println(containerConnection.getAttribute(container.getObjectName(), "Status"));
}
}
} finally {
if(jmxCon != null) {
jmxCon.close();
}
}
}
}
<container name="Container-0" zoneName="DefaultZone" hostName="descartes.rchland.ibm.com"
serverName="ogserver">
<shard type="Primary" partitionName="1"/>
<shard type="Primary" partitionName="0"/>
<shard type="Primary" partitionName="3"/>
<shard type="Primary" partitionName="2"/>
</container>
WebSphere Application Server 内で MBean にプログラマチックにアクセスする方式は、スタンドアロン構成内で MBean にアクセスするときと少し違います。
package com.ibm.websphere.sample.xs.admin;
import java.util.Set;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
/**
* Collects the placement information from the catalog server running in a deployment manager for a given ObjectGrid.
*/
public final class CollectPlacementPlanWAS {
private static String hostName = "localhost";
private static int port = 9809;
private static String objectGridName = "library";
private static String mapSetName = "ms1";
/**
* Connects to the catalog service to retrieve placement information and prints it out.
*
* @param args
* @throws Exception
* If there is a problem connecting to the catalog service MBean server.
*/
public static void main(String[] args) throws Exception {
// connect to bootstrap port of the deployment manager
String serviceURL = "service:jmx:iiop://" + hostName + ":" + port + "/jndi/JMXConnector";
JMXServiceURL jmxUrl = new JMXServiceURL(serviceURL);
JMXConnector jmxCon = JMXConnectorFactory.connect(jmxUrl);
try {
MBeanServerConnection catalogServerConnection = jmxCon.getMBeanServerConnection();
Set placementSet =
catalogServerConnection.queryNames(new ObjectName("com.ibm.websphere.objectgrid"
+ ":*,type=PlacementService"), null);
ObjectName placementService = (ObjectName) placementSet.iterator().next();
Object placementXML = catalogServerConnection.invoke(placementService,
"listObjectGridPlacement", new Object[] {
objectGridName, mapSetName }, new String[] { String.class.getName(),
String.class.getName() });
System.out.println(placementXML);
} finally {
if(jmxCon != null) {
jmxCon.close();
}
}
}
}
"$JAVA_HOME/bin/java" "$WAS_LOGGING" -Djava.security.auth.login.config="$app_server_root/properties/wsjaas_client.conf" ¥
-Djava.ext.dirs="$JAVA_HOME/jre/lib/ext:$WAS_EXT_DIRS:$WAS_HOME/plugins:$WAS_HOME/lib/WMQ/java/lib" ¥
-Djava.naming.provider.url=<an_IIOP_URL_or_a_corbaloc_URL_to_your_application_server_machine_name> ¥
-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory ¥
-Dserver.root="$WAS_HOME" "$CLIENTSAS" "$CLIENTSSL" $USER_INSTALL_PROP ¥
-classpath "$WAS_CLASSPATH":<list_of_your_application_jars_and_classes> ¥
<fully_qualified_class_name_to_run> <your_application_parameters>
このコマンドは、変数を
適切に設定する was_root/bin/setupCmdLine.sh スクリプトが
実行済みであると想定しています。java.naming.provider.url プロパティー値の
フォーマットの例は、corbaloc:iiop:1.0@<host>:<port>/NameService です。セキュリティーが使用可能なカタログ・サービス MBean への接続の詳細については、Java Management Extensions (JMX) セキュリティーを参照してください。
MBean の詳細については、com.ibm.websphere.objectgrid.management パッケージ内でも参照できます。