IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

WebSphere Application Server V5 的系统管理: 第 4 部分:如何扩展 WebSphere 管理系统

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码


级别: 初级

Leigh Williamson (leighw@us.ibm.com), 系统管理架构师, IBM WebSphere Application Server

2003 年 7 月 01 日

位于 WebSphere Application Server V5 的核心的 Java 管理扩展(Java Management Extensions,JMX)MBeanServer 提供了管理应用程序服务器组件(这些组件由该产品附带的一组 MBean 来定义)的标准接口。

© Copyright International Business Machines Corporation 2003. All rights reserved.

引言

位于 WebSphere®Application Server V5 的核心的 Java™ 管理扩展(Java Management Extensions,JMX)MBeanServer 提供了管理应用程序服务器组件(这些组件由该产品附带的一组 MBean 来定义)的标准接口。这些 MBean 足以管理 WebSphere Application Server 中包括的功能部件。但是,如果您的新的 WebSphere 应用程序需要新的管理功能,而且您想把这些功能集成到该产品附带的现有的 WebSphere 管理功能,怎么办?这正是有关 WebSphere Application Server V5 的系统管理的系列文章的第 4 部分的主题。





回页首


访问嵌入式 JMX MBeanServer

在本系列的 第 1 部分第 2 部分中已提到,WebSphere Application Server V5 管理被构建在 JMX 规范之上。每个 WebSphere Application Server 进程都包括嵌入式 JMX 代理。JMX 代理的主要部分是 MBeanServer,它被用作本地 JVM 中可用的管理接口(MBean)的注册中心。图 1 显示了一个 Java 虚拟机的内部 JMX 体系结构。WebSphere 进程的嵌入式 JMX MBeanServer 可直接被访问并被用来注册您自己的 MBean。


图 1:JMX 体系结构
JMX 体系结构的图

下面的示例说明了运行在 WebSphere Application Server 进程之中的代码如何访问嵌入式 MBeanServer 并注册它自己的 MBean:


MBeanServer mbs = AdminServiceFactory.getMBeanFactory().getMBeanServer();
mbs.registerMBean(myObjectReference, myObjectName);

在这个示例中, myObjectReference 是保存对您的 MBean 的实现的引用的变量, myObjectName 是这个 MBean 被注册并用来标识它的 JMX ObjectName。 registerMBean 方法只是由 JMX 规范定义的标准方法。请注意,您还可以使用标准的 JMX MBeanServerFactory findMBeanServer API 来获得嵌入式 WebSphere MBeanServer 的引用。

虽然这种访问嵌入式 JMX MBeanServer 和使用它的标准的 API 的方式是最简单的实现方式,但是它并不是扩展 WebSphere 管理基础结构的推荐方式,稍后将在本文中讨论其中的原因。





回页首


Java 2 安全性要求

如果您运行启用了 Java 2 安全性的 WebSphere Application Server,那么以上代码样本将抛出异常,因为任何无特权的代码库无法使用受保护的、嵌入式 JMX 代码。这意味着为了在 WebSphere Application Server 进程中使用 JMX 代码(实际上,为了使用任何 WebSphere 管理 API),您必须在 Java 2 安全性基础结构读取的策略文件中把必要的许可权授予您的代码。WebSphere ApplicationServer 中的 JMX 代码由两层许可权来保护:

  • 包含 com.ibm.websphere.security.WebSphereRuntimePermission "AdminPermission" 的 WebSphere 管理许可权。如果没有 AdminPermission ,那么您的代码就不能象以上示例中所示的那样执行 AdminServiceFactory 的方法来获取该服务器的 MBeanFactory 实例的引用。
  • 包含 com.tivoli.jmx.MBeanServerPermission "MBeanServer.*" and "MBeanServerFactory.*" 的 Tivoli®TMX4J 许可权。

以下示例是您可以添加到您的应用程序的 was.policy 文件的策略节(如果它包含访问嵌入式 JMX MBeanServer 的代码)。


grant codeBase "file:${application}" {
  permission com.ibm.websphere.security.WebSphereRuntimePermission"AdminPermission";
};
grant codeBase "file:${application}" {
  permission com.tivoli.jmx.MBeanServerPermission "MBeanServer.*";
};




回页首


WebSphere 特有的 ObjectName 键属性

WebSphere Application Server 管理基础结构为 JMX 指定的、标准的、单一的 JVM 体系结构提供了一些重要的扩展。除了更好的安全性保护之外,WebSphere 扩展标准的 JMX 的方式之一是通过提供多节点、多进程、分布式 MBean 请求路由和事件通知。这个分布式扩展的工作原理的一部分是 ObjectName 中的一些特别的键属性的约定,这些键属性被赋给在 WebSphere Application Server 所用的 MBeanServer 中注册的每个 MBean。

下面的表显示了 WebSphere Application Server 基础结构使用并期望 MBean 的 ObjectName 中存在的特别的键属性。如果这些键属性没有在 MBean ObjectName 中被设置,那么 MBean 仍然可在 MBeanServer 中注册,但是这个 MBean 将无法使用 WebSphere 提供的分布式服务。如果没有这些键属性,那么 MBean 仅在它注册所在的 JVM 中是可访问的。


WebSphere Application Server 中 ObjectName 键属性的名称
type MBean 代表的资源类型
name MBean 的个别实例的标识
cell MBean 执行所在的单元的名称
node MBean 执行所在的节点的名称
process MBean 执行所在的进程的名称

您可以创建 MBean 的 ObjectName,包含这些关键属性并恰当的设置它们的值。或者,您也可以利用 WebSphere AdminService 的组件来为您创建和注册 MBean ObjectName,就象 WebSphere Application Server 附带的所有运行时 MBean 所做的一样。

用于此目的的 AdminService 组件是 MBeanFactory 和包含您的 MBean 的描述的 XML 文件。您调用 MBeanFactory 的 activateMBean 方法并把 MBean 的 XML MBean 描述符文件传递给它。MBeanFactory 负责创建其中有全部所需的键属性(和任何您指定的其它键属性)的 ObjectName 并在 MBeanServer 中用这个 ObjectName 来注册 MBean。此后就可以通过由整个 WebSphere 分布式单元定义的网络来访问您的 MBean。





回页首


WebSphere XML MBean 描述符

现在花些时间来研究 MBean XML 描述符是有益的。

WebSphere MBean 描述符声明了给定的 MBean 类型的所有的属性、操作和通知。MBean 描述符文件的格式必须与 MbeanDescriptor.dtd 文件(您可在任何 WebSphere Application Server V5 安装的根安装目录之下的 properties 目录中找到它)中的定义相匹配。MBeanFactory 读取并解析 MBean 描述符,用描述符中声明的属性、操作和通知来创建 JMX ModelMBean。MBeanFactory 创建 MBean 的 ObjectName,然后回调一段特定的代码(RuntimeCollaborator,稍后本文将给出解释),回调的目的是在 MBeanServer 中注册 MBean 之前作最后的调整。

图 2 和图 3 显示了本文中的示例将使用的 MBean 描述符文件的两个示例:


图 2. SnoopMBean MBean 描述符
SnoopMBean MBean 描述符

图 3. Voter MBean 描述符
Voter MBean 描述符

图 2 中的 MBean 描述符声明了 MBean 类型 SnoopMBean ,我们将用 SnoopMBean 来扩展 SnoopServlet 的管理功能。这个 MBean:

  • 支持一个属性: idenitification ,它是只读字符串属性。
  • 声明一个操作: snoopy ,它取得一个字符串参数。




回页首


MBeanFactory 和 RuntimeCollaborator

图 3 中的 MBean 描述符声明了 MBean 类型 Voter

  • 支持两个属性:
    • identification ,它是只读字符串属性(只读的原因是未定义 setMethod)。
    • age ,它是读写整数属性。
  • 支持一个 operation(操作): setBallots ,带有两个参数:
    • 代理名的字符串
    • 选票名的数组。

为了解析您的 MBean XML 描述符和注册 MBean,您的代码需要调用 MBeanFactory 的 activateMBean 方法。WebSphere MBeanFactory 的 activateMBean 方法有几个特征符。MBeanFactory 接口的 javadoc 是可与 WebSphere Application Server 一起被安装的公开的 javadoc 的一部分,您也可在信息中心中获得它(请参阅 相关信息)。您可在图 4 中的 javadoc 的片断中看到,调用 activateMBean 的可能的方式有三种。


图 4. MBeanFactory 的 Javadoc 片断
MBeanFactory 的 Javadoc 片断

activateMBean 的所有形式都取得相同的前三个参数:

  • type - 要激活的 MBean 类型
  • collaborator - 与这个 MBean 一起被使用的 RuntimeCollaborator 实例(稍后将作详细介绍)
  • configId -(如果适用)标识 MBean 的配置信息的可选的字符串。

除了这三个共同的参数外, activateMBean 的两种形式取得 descriptor 参数,这个参数标识 MBean XML 描述符文件的名称和在类路径上它的位置。 activateMBean 的第三种形式取得 keyProperties 参数,这个参数允许您可选地把任意的键属性添加到 MBean 的 ObjectName。

我们来把某段代码添加到 SnoopServlet 样本中以激活 SnoopMBean,这样,我们就可以看到如何把一段段代码加在一起。图 5 显示了为激活 SnoopMBean 需要添加到 SnoopServlet 中的代码。


图 5. 激活 SnoopMBean 的 SnoopServlet 代码
激活 SnoopMBean 的 SnoopServlet 代码

激活 SnoopMBean 的方法(图 5):

  1. 声明内部类 Collab ,Collab 继承了 RuntimeCollaborator 抽象类并实现了在 MBean 描述符中为 MBean 声明的操作和属性(图 2)。
  2. 在这个 servlet 的服务方法中,使用静态的 getMBeanFactory() 方法来获取 MBeanFactory 的引用。创建 RuntimeCollaborator 的实例 collab ,调用 activateMBean 方法并传递必要的参数。
  3. 再次编译这个 servlet。请注意,您还需要为 com.ibm.websphere.management.* 包添加 Java import 语句以使代码中引用的类可被找到。您还需要确保来自 WebSphere Application Server 的 admin.jar 文件在类路径中。
  4. 把以下三个文件放在部署的 Web 应用程序的 classes 目录中
    installedApps\<nodename>\DefaultApplication.ear\DefaultWebApplication.war\WEB-INF\classes ):
    • SnoopServlet.class (与新的 activateMBean 代码一起再次编译)
    • SnoopServlet$Collab.class (新定义的内部类)
    • SnoopMBean.xml (图 2)。
  5. 停止并重新启动 DefaultApplication。
  6. 把浏览器指向 Snoop servlet( http:// hostname:9080/snoop )。查看服务器的 SystemOut.log 文件,您应当看到已激活 MBean 的跟踪输出:

    [3/12/03 23:12:29:260 CST] 3154ece9 SystemOut O SnoopMBean activated.

  7. 当 MBean 已被激活时,您可以使用 wsadmin 程序来访问和管理这个 MBean。启动 wsadmin 并输入以下命令(粗体)以获取 SnoopMBean 的变量引用:

    wsadmin> set snoop [$AdminControl queryNames *:*,type=SnoopMBean]WebSphere:cell=bluehill,name=snoopMBeanId,mbeanIdentifier=snoopMBeanId,
    type=SnoopMBean,node=bluehill,process=server1

    wsadmin> $AdminControl getAttributes $snoop
    {identification snoopy}

    wsadmin> $AdminControl invoke $snoop snoopy lookit

  8. 在调用 MBean 的 snoopy 操作之后,回过头去再看看服务器的 SystemOut.log 文件,您将看到:

    [3/12/03 23:14:13:850 CST] 26856cef SystemOut O paramater is: lookit

    这显示实现 snoopy 操作的 SnoopMBean 代码接收并使用了传递给 wsadmin 中的 invoke 调用的 lookit 字符串。

以上这个示例说明了如何激活在 J2EE 应用程序代码中实现的 MBean。在使用这种方式之前,请想一想:在某个应用程序客户机(浏览器或 EJB 客户机代码)对您的应用程序发出第一次客户机请求之后,您的 MBean 才被注册。根据您的情况,这可能没问题,但是,您往往需要在启动服务器时就激活 MBean 而不是等到第一次客户机请求。如果在您遇到的情况中这是更好的,那么下面的示例说明了实现它的一种方式。





回页首


ExtensionMBeanProvider

代码库 ExtensionMBeanProvider 提供了 WebSphere MBean 描述符和实现这个 MBean 描述符中声明的函数的相关代码。把 ExtensionMBeanProvider 库的配置信息添加到 WebSphere Application Server 中将有助于服务器的 MBeanFactory 定位这个 MBean 描述符文件从而可以装入并解析它。

通过完成这些一般的步骤来添加 ExtensionMBeanProvider 配置和实际的扩展 MBean:

  1. 定义 ExtensionMBeanProvider 的管理控制台页面的链接位于服务器的 Administration Services 控制台页面的 Additional Properties部分中(图 6)。
    图 6. Administration Services 页面中 ExtensionMBeanProvider 配置的链接
    Administration Services 控制台页面
  2. 选择 Extension MBean Providers链接。没有缺省定义的扩展 MBean 提供程序,所以,最初这个页面是空的。为了定义新的扩展 MBean 提供程序,请选择 New。为了定义新的提供程序,您将输入以下信息:
    • Classpath(可选,但是推荐)- 如果代码没有被放在服务器的类路径上的一个缺省位置中(例如安装根之下的 /classes 目录),那么这使 MBeanFactory 所用的类装入器能够定位类和 XML MBean 描述符文件。
    • Description(可选)- 任何有助于区别于其它扩展 MBean 提供程序的有用的文本。
    • Name(必需)- 用于在配置中标识这个特定的扩展 MBean 提供程序的名称。这个名称不必与实际的 MBean 类型或名称本身相关,因为这个名称仅标识扩展 MBean 提供程序配置数据。
  3. 图 7 显示了名为 VoterMBeanProvider 的扩展 MBean 提供程序(正为这个示例而定义它)。我们的示例 MBean 代码和 WebSphere XMLMBean 描述符文件被存储在位于 /build/newmbean/newmbean.jar 的 JAR 文件中。
    图 7. 定义新的 ExtensionMBeanProvider
    新的 ExtensionMBeanProvider 控制台页面
  4. 选择 Apply以使这个新的扩展 MBean 提供程序定义被存储在临时的配置工作空间中。您可以在应用临时工作空间中的定义之后把它 保存到主配置库,或者您可以等到您完成了对这个提供程序提供的扩展 MBean 的定义。
  5. 在应用了扩展 MBean 提供程序定义之后(无论是否保存到主库),这个定义将出现在这个服务器的 Extension MBean Providers 页面中(图 8)。您现在可以创建实际的 MBean 定义。为此,请单击新定义的提供程序的链接以返回配置页面。
    图 8. 定义了新的提供程序之后的 Extension MBean Providers 页面
    Extension MBean Providers 页面
  6. 图 9 显示了新的 Voter MBean 提供程序的 Extension MBean Providers 页面。为了定义这个提供程序支持的 Voter MBean,请选择页面底部的 ExtensionMBeans链接。
    图 9. Voter Extension MBean Providers 页面
    Extension MBean Providers 页面
  7. 起初显示的扩展 MBean 的列表是空的。为了定义这个提供程序的新的 MBean,请选择 New。请看图 10。
    图 10. 配置 Voter 扩展 MBean
    Voter 扩展 MBean 定义
  8. 扩展 MBean 定义需要两条信息:
    • descriptorURI - MBean XML 描述符文件相对提供程序类路径的位置。因为我们将把描述符文件放在 JAR 文件的根目录中,所以在我们的示例中这个值就是文件名 VoterMBean.xml
    • type - 用于注册这个 MBean 的类型。这 必须与 MBean 描述符文件中声明的类型相匹配,在我们的示例中,它是 Voter
  9. 为了把新的 MBean 定义添加到临时配置工作空间,请选择 Apply,然后选择 Save,以使更改被保存到主配置库中。在保存了更改之后,新的扩展 MBean 的定义与图 11 相似。
    图 11. 新的 Voter 扩展 MBean
    Voter 扩展 MBean
  10. 添加新的扩展 MBean 提供程序和扩展 MBean 定义的结果是 server.xml 文件(如下所示)中的条目:
    图 12. Server.xml 片断
    server.xml 片断

因为扩展 MBean 提供程序和扩展 MBean 的配置数据已被添加,通过调用 WebSphere MBeanFactory 来激活这个 MBean 的代码不必确保 XML MBean 描述符文件位于这个进程的类路径中。但是,服务器中仍然需要有最先调用 activateMBean 方法的代码。激活扩展 MBean 的几个可能的方法如下:

  • 您可以简单地把它放在 J2EE 应用程序代码中,一直等到应用程序客户机向您的应用程序发出第一次请求。
  • 您可以在应用程序中使用启动 servlet 或启动 bean,这样,在启动应用程序时就激活了扩展 MBean。
  • 您还可以使用 WebSphere CustomService和一段激活 MBean 的代码来扩展服务器运行时本身。事实上,CustomService 甚至可以是 MBean 的实现(如果这种安排适合您的情形)。

下一节将说明使用 CustomService 来激活扩展 MBean 的示例。





回页首


CustomService 和 JMXManageable 接口

CustomService 是一段扩展 WebSphere Application Server 运行时的代码(无论这段代码是否有表示它的管理接口的 JMX MBean)。WebSphere Application Server V4.0 支持 CustomService,V5 改进了 CustomService 以简化 JMX 支持。为了开发 CustomService,您需要创建实现 com.ibm.websphere.runtime.CustomService 接口的类。这个接口有两个方法:

  • initialize - 在启动时由服务器运行时来调用
  • shutdown - 在正常的关闭处理时由服务器运行时来调用。

CustomService 接口很简单,如下所示。


public interface CustomService {
        /**
        * The initialize method is called by the application server runtime
        * during server startup. The Properties object passed in on this
        * method must contain all configuration information necessary for
        * this service to initialize properly.
        */
        void initialize(java.util.Properties configProperties)
        throws Exception;

        /** * The shutdown method is called by the application server runtime
        * when the server begins it shutdown processing.
        */ void shutdown() throws Exception;
}

当您把 CustomService 的定义添加到服务器配置时,服务器运行时将在服务器启动时调用 CustomService 的 initialize 方法(在关闭服务器时调用 CustomService 的 shutdown 方法)。CustomService 代码实际上成为服务器运行时的扩展。

使用 CustomService 是把 MBean 添加到系统中的好方法。在启动服务器时 CustomService 中的逻辑被执行并且可以激活 MBean 而无需某个外部的应用程序客户机向服务器发出请求。为了为 CustomService 简化 JMX 的使用,WebSphere Application Server V5 支持 JMXManageable 接口。如果实现 CustomService 接口的类还声明实现 JMXManageable 接口,那么 MBean 的装入和激活在很大程度上将是自动的。

为了设置 CustomService:

  1. 首先,您必须定义新的 CustomService。在 WebSphere Application Server 管理控制台中,选择 Additional Properties 部分中的 Custom Services链接(图 12)。
  2. 为了创建新的 CustomService 定义,请选择 Custom Services 页面中的 New。图 13 显示了这个示例的 CustomService 配置设置。
    图 12. 管理控制台服务器页面中 Custom Services 定义的链接
    Custom Services 的链接

    图 13. 新的 CustomService 定义
    新的 CustomService 定义
  3. CustomService 的重要的配置值:
    • Startup - 很重要;在启动服务器时不初始化这个 CustomService,除非选中这个复选框。
    • External Configuration URL - 包含这个 CustomService 的配置数据的文件的 URL(可选)。这些数据可以使用任何您想要的格式,这取决于 CustomService 逻辑的实现。
    • Classname(必需)- 提供实现 CustomService 接口的类的全限定包名和类名。服务器在启动时装入这个名称并调用这个名称来初始化。
    • Display Name(必需)- 标识这个服务的配置。
    • Description - 任何有助于区别于其它 CustomService 的文本。
    • Classpath(必需)- 包含这个 CustomService 的实现代码的 JAR 文件的位置。
  4. 为了把这个新的 CustomService 定义添加到配置中,请选择 Apply,然后选择 Save以使更改被保存到主配置库。当您返回到这个服务器的 Custom Services 页面时,您应当看到新的 CustomService,如图 14 所示。
    图 14. Custom Services 页面
    Custom Service 列表




回页首


示例代码:分布式 WebSphere 扩展 MBean

CustomService 和扩展 MBean 的配置现已完成。现在是看看实现代码的时候了。


 1 package wsdd.extmbean.voter;
 2
 3 import java.util.Properties;
 4
 5 import com.ibm.websphere.management.JMXManageable;
 6 import com.ibm.websphere.runtime.CustomService;
 7
 8 public class CustomServiceMBean implements CustomService, JMXManageable
 9 {
10     private int age = 21;
11
12     // CustomService methods
13     public void initialize(Properties props) throws Exception
14     {
15         System.out.println("CustomServiceMBean.initialize("+props+")");
16     }
17     public void shutdown()
18     {
19         System.out.println("CustomServiceMBean.shutdown()");
20     }
21
22     // JMXManageable methods
23     public String getType()
24     {
25         System.out.println("CustomServiceMBean.getType()"); return"Voter";
26     }
27     public Properties getMBeanProperties()
28     {
29         System.out.println("CustomServiceMBean.getMBeanProperties()");
30         Properties props = new Properties();
31         props.put("Identification", "voter1");
32         return props;
33     }
34
35     // MBean attributes
36     public String getIdentification()
37     {
38         System.out.println("CustomServiceMBean.getIdentification()");
39         return "voter1";
40     }
41     public int getAge()
42     {
43         System.out.println("CustomServiceMBean.getAge()");
44         return age;
45     }
46     public void setAge(int age)
47     {
48         System.out.println("CustomServiceMBean.setAge("+age+")");
49         this.age = age;
50     }
51     
52     // MBean operations
53     public void setBallots(String agent, String[] names)
54     {
55         System.out.println("CustomServiceMBean.setBallots() agent: "+agent);
56         System.out.println("CustomServiceMBean.setBallots() ballot names"+names);
57     }
58 }

以下是代码流程的一般解释:

  • 第 1 至 10 行:package、import 和 class 声明语句。
  • 第 12 至 21 行:实现 CustomService 接口定义的两个方法。在这个示例中,它们仅仅打印跟踪以显示在启动和关闭服务器时确实执行了这段代码。
  • 第 22 至 33 行:实现 JMXManageable 接口定义的两个方法。这个 MBean 的类型被声明为 Voter ,所以这正是 getType 方法所返回的东西。
  • 第 35 至 40 行:实现前面显示的 MBean 描述符中声明的只读 identification MBean 属性的 getter 方法。
  • 第 41 至 50 行:实现读写 age 属性的 getter 和 setter 方法。
  • 第 52 至 57 行:实现为这个 MBean 声明的 setBallots 操作的不重要的逻辑。

在编译这段代码并打包到 JAR 文件(按照示例配置中的指定,该文件位于 /build/newmbean/newmbean.jar )后,启动被配置成包括这个扩展的服务器。在服务器完成初始化之后,请看看服务器的 SystemOut.log 文件。您应当看到来自 CustomService 初始化的以下跟踪:


[3/11/03 23:03:04:127 CST] 6dbdc7b6 JMSRegistrati A MSGS0601I: WebSphereEmbedded Messaging has not been installed
[3/11/03 23:03:07:712 CST] 6dbdc7b6 SystemOut O CustomServiceMBean.initialize({})
[3/11/03 23:03:07:712 CST] 6dbdc7b6 SystemOut O CustomServiceMBean.getType()
[3/11/03 23:03:07:712 CST] 6dbdc7b6 SystemOut O CustomServiceMBean.getMBeanProperties()
[3/11/03 23:03:07:873 CST] 6dbdc7b6 JMXSoapAdapte A ADMC0013I: SOAP connectoravailable at port 8880

现在,执行 wsadmin WebSphere 管理脚本编制程序来证明新的 MBean 已扩展了系统,并用 WebSphere 管理工具来管理这个 MBean。在 wsadmin 提示符后,输入:


wsadmin> $AdminControl queryNames *:*,type=Voter

应返回 Voter 扩展 MBean 的 ObjectName


"WebSphere:cell=bluehill,Identification=voter1,name=Voter Service,type=Voter,node=bluehill,process=server1,mbeanIdentifier=..."

把这个 ObjectName 存储在 Tcl 变量中:


wsadmin> set voter [$AdminControl queryNames *:*,type=Voter]

您应当看到这个命令所返回的长长的 ObjectName ,这个 ObjectName 与前面一个相同。现在,请查看 wsadmin 内置 $Help 函数可以告诉我们有关这个新的 MBean 的哪些信息。输入:


wsadmin> $Help all $voter

您应当看到与以下相似的输出:


Name: "WebSphere:cell=bluehill,Identification=voter1,name=Voter Service,mbeanIde
ntifier=cells/bluehill/nodes/bluehill/servers/server1/server.xml#CustomService_1
,type=Voter,node=bluehill,process=server1"
        Description: null
        Class name: javax.management.modelmbean.RequiredModelMBean

Attribute                       Type                            Access
identification                  java.lang.String               RO
age                             int                            RW

Operation
java.lang.String getIdentification()
int getAge()
void setAge(int)
void setBallots(java.lang.String, [Ljava.lang.String;)

Notifications
jmx.attribute.changed

Constructors

这意味着在 MBean 描述符文件中声明的有关 MBean 的元信息被成功解析并在系统中注册。请注意,identification 属性是只读的,age 属性是可读写的。现在我们来操纵在服务器中执行的活动的 MBean。


wsadmin> $AdminControl getAttributes $voter

您应当看到 MBean 的两个属性:


{age 21}
{identification voter1}

为了动态地更改 MBean 的运行内存中的属性:


wsadmin> $AdminControl setAttribute $voter age 33

检查更改是否生效:


wsadmin> $AdminControl getAttribute $voter age
33

您可以继续使用 wsadmin 来管理新的扩展 MBean。再看看 SystemOut.log 文件,您可看到来自各种 MBean 实现方法( wsadmin 命令导致了这些方法被调用)的跟踪:


[3/11/03 23:27:07:623 CST] 59abc7a4 SystemOut O CustomServiceMBean.getIdentification()
[3/11/03 23:27:07:623 CST] 59abc7a4 SystemOut O CustomServiceMBean.getAge()
[3/11/03 23:29:47:262 CST] 59a8c7a4 SystemOut O CustomServiceMBean.getAge()
[3/11/03 23:29:47:613 CST] 59c2c7a4 SystemOut O CustomServiceMBean.setAge(33)
[3/11/03 23:31:02:711 CST] 59abc7a4 SystemOut O CustomServiceMBean.getAge()

现在您已用被实现为服务器扩展 CustomService 的新的 MBean 扩展了 WebSphere Application Server V5 管理基础结构。您可在此基础上采取多种方式,增强这个扩展 MBean 的功能。





回页首


结束语

在本文中,我们讲述了用您自己的 JMX MBean 来扩展 WebSphere 管理系统的具体方法。不管新的管理逻辑是和 J2EE 应用程序还是某个其它的服务器扩展(例如 CustomService)相关联,WebSphere Application Server V5 对 JMX 的使用都以标准的方式使系统成为可访问的和易于扩展的。

请继续关注有关 WebSphere Application Server 管理的这个系列中的其它文章。计划未来的主题包括:

  • 如何使用 WebSphere 5.0 ConfigService API。
  • 如何通过程序来安装和管理应用程序。
  • 如何把 Jython 用作 wsadmin 的脚本编制语言。

请让我们知道您想在下一篇文章中看到哪些主题。





回页首


相关信息






回页首


下载

名字大小下载方法
newmbean.zip0.1 MBHTTP
关于下载方法的信息


关于作者

Leigh Williamson

Leigh Williamson是 IBM 的 STSM 软件架构师。作为 WebSphere 的系统管理架构师,他目前领导着 WebSphere Application Server 产品管理功能的变革。您可以通过 leighw@us.ibm.com与他联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款