创建并注册标准、动态和开放式定制 MBean。
可以创建标准、动态和开放式定制 MBean,并使用产品管理服务对它们进行注册。
开始之前
不要将新类定义为 MBean 的参数。这些类并非在所有进程中可用。如果必须定义新类,请确保该类在所有进程上可用,包括 Deployment Manager、Node Agent 和应用程序服务器。如果新类对某个进程不可用,那么当您尝试访问该类时,会对该类发出 ClassNotFoundException 异常。
关于此任务
执行以下各项任务,从而创建并注册标准、动态或开放式定制 MBean。
过程
- 创建特定的一个或多个 MBean 类。
- 使用 XML 语言为 MBean 编写 MBean 描述符。
- 通过将使用 WebSphere® Application Server 运行时 com.ibm.websphere.management.UserMBeanCollaborator 协调程序类的代码插入应用程序代码来注册 MBean。
- 打包 MBean 接口和实现的类文件,打包描述符 XML 文件和应用程序 Java 归档 (JAR) 文件。
结果
示例
以下示例显示如何使用管理服务创建和注册标准 MBean:
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...");
}
}
在 .xml 文件中为 MBean 定义以下 MBean 描述符。getIdentification 方法被设置为与单调用选项一起运行,而 snoopy 方法被设置为使用多调用选项。这些选项仅用于 z/OS® 平台应用程序。WebSphere Application Server for z/OS 选项不适用于分布式平台,但不需要将它们移除。这些选项在分布式平台上是被忽略的。. 为了便于打印,某些语句被拆分为几行。

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>
假设在企业 Bean 中使用 MBean。用企业 Bean ejbCreate 方法来注册 MBean,并用 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();
}
}
}