Puede conectarse a MBeans con aplicaciones Java. Estas aplicaciones utilizan las interfaces del paquete com.ibm.websphere.objectgrid.management.
El programa de ejemplo siguiente se conecta a un servidor MBean de servicio de catálogo autónomo y devuelve una serie con formato XML que lista cada uno de los servidores de contenedor junto con sus fragmentos asignados para un ObjectGrid y MapSet determinados.
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;
/**
* Recopila la información de colocación del servidor de catálogo para un ObjectGrid determinado.
*/
public final class CollectPlacementPlan {
private static String hostName = "localhost";
private static int port = 1099;
private static String objectGridName = "library";
private static String mapSetName = "ms1";
/**
* Se conecta al servicio de catálogo de ObjectGrid para recuperar información de colocación y
* muestra dicha información.
*
* @param args
* @throws Exception
* Si hay un problema al conectar al servidor MBean de servicio de catálogo.
*/
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>
Los servidores de contenedor alojan MBeans para consultar información sobre las correlaciones individuales y las instancias de ObjectGrid que se ejecutan en el servidor de contenedor. El programa de ejemplo siguiente muestra el estado de cada uno de los servidores de contenedor que aloja el servidor de catálogo con la dirección JMX de 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;
/**
* Recopila estado de colocación de cada uno de los contenedores disponibles directamente.
*/
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>
El método para acceder mediante programación a MBeans en WebSphere Application Server es ligeramente distinto a acceder a los MBeans en una configuración autónoma.
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;
/**
* Recopila la información de colocación del servidor de catálogo en ejecución en un gestor de despliegue para un ObjectGrid determinado.
*/
public final class CollectPlacementPlanWAS {
private static String hostName = "localhost";
private static int port = 9809;
private static String objectGridName = "library";
private static String mapSetName = "ms1";
/**
* Se conecta al servicio de catálogo para recuperar información de colocación y visualizarla.
*
* @param args
* @throws Exception
* Si hay un problema al conectar al servidor MBean de servicio de catálogo.
*/
public static void main(String[] args) throws Exception {
// conectar al puerto de rutina de carga del gestor de despliegue
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=<un_URL_IIOP_o_un_URL_corbaloc_al_nombre_de_máquina_servidor_aplicaciones> \
-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory \
-Dserver.root="$WAS_HOME" "$CLIENTSAS" "$CLIENTSSL" $USER_INSTALL_PROP \
-classpath "$WAS_CLASSPATH":<lista_de_jars_y_clases_de_la_aplicación> \
<nombre_clase_completamente_calificado_para_ejecutar> <parámetros_aplicación>
Este mandato asume que el script raíz_was/bin/setupCmdLine.sh se ha ejecutado para establecer las variables correctamente. Un ejemplo del formato del valor de la propiedad java.naming.provider.url es corbaloc:iiop:1.0@<host>:<puerto>/NameService.Para obtener más información sobre cómo conectar al MBean de servicio de catálogo con la seguridad habilitada, consulte Seguridad JMX (Java Management Extensions).
También puede encontrar más información sobre los MBeans en el paquete com.ibm.websphere.objectgrid.management.