Sie können mit Java-Anwendungen eine Verbindung zu MBeans herstellen. Diese Anwendungen verwenden die Schnittstellen im Paket "com.ibm.websphere.objectgrid.management".
Das folgende Beispielprogramm stellt eine Verbindung zu einem eigenständigen MBean-Server des Katalogservice her und gibt eine XML-formatierte Zeichenfolge zurück, in der jeder Container-Server zusammen mit den ihm zugeordneten Shards für ein bestimmtes ObjectGrid und ein bestimmtes MapSet aufgelistet sind.
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;
/**
* Erfasst die Verteilungsinformationen vom Katalogserver für ein bestimmtes 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";
/**
* Stellt eine Verbindung zum ObjectGrid-Katalogservice her, um Verteilungsinformationen
* abzurufen, und gibt die Informationen aus.
*
* @param args
* @throws Exception
* Wenn ein Problem beim Herstellen der Verbindung zum MBean-Server des Katalogservice auftritt.
*/
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>
Container-Server hosten MBeans, um Informationen zu den einzelnen Maps- und ObjectGrid-Instanzen abzufragen, die im Container-Server ausgeführt werden. Das folgende Beispielprogramm gibt den Status jedes Container-Servers aus, der im Katalogserver mit der JMX-Adresse localhost:1099 ausgeführt wird:
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;
/**
* Erfasst den Verteilungsstatus jedes verfügbaren Containers direkt.
*/
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>
Die Methode für den programmgesteuerten Zugriff auf MBeans in WebSphere Application Server weicht geringfügig von dem Zugriff auf MBeans in einer eigenständigen Konfiguration ab.
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;
/**
* Erfasst die Verteilungsinformationen von dem Katalogserver, der in einem Deployment Manager für ein bestimmtes ObjectGrid ausgeführt wird.
*/
public final class CollectPlacementPlanWAS {
private static String hostName = "localhost";
private static int port = 9809;
private static String objectGridName = "library";
private static String mapSetName = "ms1";
/**
* Stellt eine Verbindung zum Katalogservice her, um Verteilungsinformationen abzurufen, und gibt diese Informationen aus.
*
* @param args
* @throws Exception
* Wenn ein Problem beim Herstellen der Verbindung zum MBean-Server des Katalogservice auftritt.
*/
public static void main(String[] args) throws Exception {
// Verbindung zum Bootstrap-Port des Deployment Manager herstellen.
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=<IIOP-URL_ode_Corbaloc-URL_zur_Anwendungsservermaschine> \
-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory \
-Dserver.root="$WAS_HOME" "$CLIENTSAS" "$CLIENTSSL" $USER_INSTALL_PROP \
-classpath "$WAS_CLASSPATH":<Liste_der_Anwendungs-JARs_und_Klassen> \
<vollständig_qualifizierter_Name_der_auszuführenden_Klasse> <Anwendungsparameter>
Dieser Befehl
setzt voraus, dass das Script WAS-Stammverzeichnis/bin/setupCmdLine.sh
zur ordnungsgemäßen Definition der Variablen ausgeführt wurde.
Ein Beispiel für das Format des Werts der Eigenschaft
"java.naming.provider.url" ist corbaloc:iiop:1.0@<Host>:<Port>/NameService.Weitere Informationen zum Herstellen der Verbindung zur Katalogservice-MBean mit aktivierter Sicherheit finden Sie unter JMX-Sicherheit (Java Management Extensions).
Weitere Informationen zu MBeans finden Sie auch im Paket com.ibm.websphere.objectgrid.management.