创建并注册标准、动态和开放式定制 MBean。

可以创建标准、动态和开放式定制 MBean,并使用产品管理服务对它们进行注册。

开始之前

此任务假设您对 MBean 编程有基本的了解。有关 MBean 编程的信息,请参阅 MBean Java™ 应用程序编程接口 (API) 文档。 在此信息中心中,单击引用 > MBean 接口

不要将新类定义为 MBean 的参数。这些类并非在所有进程中可用。如果必须定义新类,请确保该类在所有进程上可用,包括 Deployment Manager、Node Agent 和应用程序服务器。如果新类对某个进程不可用,那么当您尝试访问该类时,会对该类发出 ClassNotFoundException 异常。

关于此任务

执行以下各项任务,从而创建并注册标准、动态或开放式定制 MBean。

过程

  1. 创建特定的一个或多个 MBean 类。
  2. 使用 XML 语言为 MBean 编写 MBean 描述符。
  3. 通过将使用 WebSphere® Application Server 运行时 com.ibm.websphere.management.UserMBeanCollaborator 协调程序类的代码插入应用程序代码来注册 MBean。
  4. 打包 MBean 接口和实现的类文件,打包描述符 XML 文件和应用程序 Java 归档 (JAR) 文件。

结果

成功完成这些步骤后,您会拥有一个标准、动态或开放式定制 MBean(已使用产品管理服务注册并激活该 MBean)。

示例

以下示例显示如何使用管理服务创建和注册标准 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 选项不适用于分布式平台,但不需要将它们移除。这些选项在分布式平台上是被忽略的。. 为了便于打印,某些语句被拆分为几行。

避免故障 避免故障: 如果您正在多 JVM 环境中运行,那么必须将类型属性包含在 MBean 描述符中。gotcha
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();
        }
    }
}

下一步做什么

编译 MBean Java 文件,并将结果类文件和描述符 .xml 文件一起打包到企业 Bean JAR 文件。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjmx_standard_dynamic_mbean
文件名:tjmx_standard_dynamic_mbean.html