Création et enregistrement de MBeans standard, dynamiques et ouverts personnalisés
Vous pouvez créer des MBeans standard, dynamiques et ouverts personnalisés, puis les enregistrer avec le service d'administration de produit.
Avant de commencer
Ne définissez pas de nouvelles classes comme paramètres pour vos MBeans. Les classes risquent de ne pas être disponibles dans tous les processus. Si vous devez définir une nouvelle classe, vérifiez qu'elle est disponible sur tous les processus, y compris le gestionnaire de déploiement, les agents de noeud et les serveurs d'applications. Si elle n'est pas disponible pour un processus, l'exception ClassNotFoundException a lieu pour la nouvelle classe lorsque vous tentez d'y accéder.
Pourquoi et quand exécuter cette tâche
Procédez comme suit pour créer et enregistrer un MBean standard, dynamique ou ouvert personnalisé.
Procédure
- Créez une ou plusieurs classes MBean.
- Ecrivez un descripteur MBean en XML pour votre MBean.
- Enregistrez le MBean en insérant du code utilisant la classe de collaborateur com.ibm.websphere.management.UserMBeanCollaborator du contexte d'exécution de WebSphere Application Server dans le code de l'application.
- Placez dans un package les fichiers classe pour l'interface et l'implémentation MBean, le fichier XML du descripteur et le fichier JAR (Java Archive).
Résultats
Exemple
L'exemple suivant montre comment créer et enregistrer un MBean standard avec le service d'administration :
SnoopMBean.java:
/**
* Use the SnoopMBean MBean, which has a standard mbean interface.
*/
public interface SnoopMBean {
public String getIdentification();
public void snoopy(String parm1);
}
SnoopMBeanImpl.java:
/**
* SnoopMBeanImpl - SnoopMBean implementation
*/
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...");
}
}
Définissez le descripteur MBean suivant pour votre MBean dans un fichier .xml. La méthode getIdentification est définie avec l'option d'appel unique, la méthode snoopy pour utiliser l'option d'appels multiples. Ces options ne sont valables que pour les applications de la plateforme z/OS. Les options de WebSphere Application Server for z/OS ne s'appliquent pas aux plateformes distribuées; il est toutefois inutile de les supprimer. Elles sont simplement ignorées sur les plateformes distribuées . Certaines instructions sont présentées sur plusieurs lignes à des fins d'affichage.

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>
Imaginez que votre MBean est utilisé dans un bean
enterprise.
Enregistrez-le dans la méthode ejbCreate du bean
enterprise et supprimez son enregistrement dans la méthode ejbRemove. //The method MBeanFactory.activateMBean() requires four parameters:
//String type: The type value that you put in this MBean's descriptor. For this example
//the string type is SnoopMBean.
//RuntimeCollaborator co: The UserMBeanCollaborator user MBean collaborator instance
//that you create
//String id: Unique name that you pick
//String descriptor: The full path to the MBean descriptor file
import com.ibm.websphere.management.UserMBeanCollaborator;
//Import other classes here.
.
.
.
static private ObjectName snoopyON = null;
static private Object lockObj = "this is a lock";
.
.
.
/**
* ejbCreate method: Register your 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();
}
}
}
.
.
.
/**
* ejbRemove method: Unregister your 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();
}
}
}