Creación y registro de MBeans estándar, dinámicos y personalizados abiertos
Puede crear MBeans estándar, dinámicos y personalizados abiertos y registrarlos con el servicio administrativo del producto.
Antes de empezar
No defina nuevas clases como parámetros para los MBeans. Puede que las clases no estén disponibles en todos los procesos. Si debe definir una nueva clase, asegúrese de que la clase está disponible en todos los procesos, incluido el gestor de despliegue, los agentes de nodo y los servidores de aplicaciones. Si la clase no está disponible para un proceso, se produce la excepción ClassNotFoundException para la nueva clase cuando intenta acceder a ésta.
Acerca de esta tarea
Lleve a cabo las tareas siguientes para crear y registrar un MBean estándar, dinámico o personalizado abierto.
Procedimiento
- Cree la clase o las clases de MBean concretas.
- Escriba un descriptor de MBean en el lenguaje XML del MBean.
- Registre el MBean; para ello, inserte el código que utilice la clase colaboradora com.ibm.websphere.management.UserMBeanCollaborator de ejecución de WebSphere Application Server en el código de aplicación.
- Empaquete los archivos de clase de la interfaz y la implementación de MBean, el archivo XML de descriptor y el archivo archivador Java (JAR) de la aplicación.
Resultados
Ejemplo
En el ejemplo siguiente se muestra cómo crear y registrar un MBean estándar con el servicio administrativo:
SnoopMBean.java:
/**
* Utilizar el MBean SnoopMBean, que tiene una interfaz de MBean estándar.
*/
public interface SnoopMBean {
public String getIdentification();
public void snoopy(String parm1);
}
SnoopMBeanImpl.java:
/**
* SnoopMBeanImpl - Implementación de SnoopMBean
*/
public class SnoopMBeanImpl implements SnoopMBean {
public String getIdentification() {
System.out.println(">>> getIdentification() called...");
return "snoopy!";
}
public void snoopy(String parm1) {
System.out.println(">>> snoopy(" + parm1 + ") called...");
}
}
Defina el siguiente descriptor de MBean para el MBean en un archivo .xml. El método getIdentification se establece para ejecutarse con la opción unicall y el método snoopy se establece para utilizar la opción multicall. Estas opciones se utilizan sólo para aplicaciones de la plataforma z/OS. Las opciones de WebSphere Application Server para z/OS no son aplicables a las plataformas distribuidas, pero no es necesario suprimirlas. Las opciones se ignoran en las plataformas distribuidas. . Algunas sentencias están partidas en varias líneas para fines de impresión.

SnoopMBean.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE MBean SYSTEM "MbeanDescriptor.dtd">
<MBean type="SnoopMBean"
version="5.0"
platform="dynamicproxy"
description="Sample SnoopMBean to be initialized inside an EJB.">
<attribute name="identification" getMethod="getIdentification"
type="java.lang.String" proxyInvokeType="unicall"/>
<operation name="snoopy" role="operation" type="void" targetObjectType="objectReference"
impact="ACTION" proxyInvokeType="multicall">
<signature>
<parameter name="parm1" description="test parameter" type="java.lang.String"/>
</signature>
</operation>
</MBean>
Suponga que el MBean se utiliza como enterprise bean.
Registre el
MBean en el método ejbCreate de enterprise bean y anule su registro en el método
ejbRemove. //El método MBeanFactory.activateMBean() exige cuatro parámetros:
//Tipo de serie: valor de tipo que se incluye en el descriptor de este MBean. Para este ejemplo
//el tipo de serie es SnoopMBean.
//RuntimeCollaborator co: instancia colaboradora de MBean de usuario UserMBeanCollaborator
//que se crea
//ID de serie: nombre exclusivo que se selecciona
//Descriptor de serie: la vía de acceso completa al archivo descriptor de MBean
import com.ibm.websphere.management.UserMBeanCollaborator;
//Importar otras clases aquí.
.
.
.
static private ObjectName snoopyON = null;
static private Object lockObj = "this is a lock";
.
.
.
/**
* método ejbCreate: registrar el Mbean.
*/
public void ejbCreate() throws javax.ejb.CreateException {
synchronized (lockObj) {
System.out.println(">>> SnoopMBean activating for --|" + this + "|--");
if (snoopyON != null) {
return;
}
try {
System.out.println(">>> SnoopMBean activating...");
MBeanFactory mbfactory = AdminServiceFactory.getMBeanFactory();
RuntimeCollaborator snoop = new UserMBeanCollaborator(new SnoopMBeanImpl());
snoopyON = mbfactory.activateMBean("SnoopMBean", snoop, "snoopMBeanId",
"SnoopMBean.xml");
System.out.println(">>> SnoopMBean activation COMPLETED! --|" + snoopyON + "|--");
} catch (Exception e) {
System.out.println(">>> SnoopMBean activation FAILED:");
e.printStackTrace();
}
}
}
.
.
.
/**
* método ejbRemove: anular el registro del MBean.
*/
public void ejbRemove() {
synchronized (lockObj) {
System.out.println(">>> SnoopMBean Deactivating for --|" + this + "|--");
if (snoopyON == null) {
return;
}
try {
System.out.println(">>> SnoopMBean Deactivating ==|" + snoopyON + "|== for --|"
+ this + "|--");
MBeanFactory mbfactory = AdminServiceFactory.getMBeanFactory();
mbfactory.deactivateMBean(snoopyON);
System.out.println(">>> SnoopMBean Deactivation COMPLETED!");
} catch (Exception e) {
System.out.println(">>> SnoopMBean Deactivation FAILED:");
e.printStackTrace();
}
}
}