针对开发人员的WebLogic Server应用管理,第 6 部分使用 JMX 自定义应用程序管理

来源:百度文库 编辑:神马文学网 时间:2024/05/24 03:52:20
本文是针对开发人员的WebLogic Server应用管理的最后一篇。第一部分侧重 WebLogic Server 管理概念和术语,以及打包应用程序和设置、配置 WebLogic Server 域的图形化工具。

第一部分侧重 WebLogic Server 管理概念和术语,打包应用程序和设置、配置 WebLogic Server 域的图形化工具。第二篇文章着眼于可用的应用程序部署、运行时管理和不需要 JMX 知识的监控工具。第三篇文章讨论 JMX 和 WebLogic Server 8.1 JMX 基础结构的基本概念和术语,并介绍如何使用 WebLogic Server 8.1 随附的特定于 JMX 的工具。第四篇文章侧重于编写自定义 Java 应用程序的基础知识,这些应用程序使用 JMX 配置、管理基于 WebLogic Server 8.1 的应用程序。上个月,我们通过展示如何使用通知工具创建通知侦听器、监控器和定时器,继续讨论了 JMX 编程。

本月,我们将描述如何通过 JMX 和 WebLogic Admin Console 展示您自己的管理功能。我们从讨论您选择使用 JMX 装配应用程序的原因入手。然后,讨论使用标准、动态和模型 MBean 装配应用程序的基础知识。最后介绍如何通过 WebLogic Console 安置您的 MBean。

选择使用 JMX 进行装配
您为什么考虑使用 JMX 装配应用程序?如果您阅读了这个系列中前面的文章,您应该已经知道了这个问题的答案。如果您还没有阅读,这个答案非常简单:使用 JMX 装配的应用程序代码允许在 WebLogic Server 中监控和管理应用程序的配置及运行时信息,就像其他资源一样。

上个月,我们展示了 JMX 通知和监控器怎样允许应用程序动态地监控和跟踪任意数量的 MBean 值。通过 MBean 展示应用程序信息可简化关联应用程序状态和其他 MBean(如,提供关于组成产品环境的各种服务器和应用程序组件统计信息的 WebLogic MBeans)的状态。

最后,使用 JMX 装配代码允许您通过 WebLogic Admin Console 展示应用程序的监控和管理功能。

您能通过 JMX 展示那些功能呢?答案是您希望能管理的应用程序的任何属性或功能都可以。例如,一个应用程序可能使用一个日志框架,允许在运行时动态地改变日志级别。使用 JMX 装配日志框架来展示日志级别,可以相对简单地实现:

·         通过标准的 JMX 机制动态地修改日志级别。

·         当观察到其他 MBean 上的某些其他条件时,使用 JMX 通知和监控器来修改日志级别。

·         通过 WebLogic Console 展示日志框架配置和/或运行时信息。

现在,您已经知道自己希望展示哪种功能,需要做的下一个决定就是希望实现哪种类型的 MBean。JMX 提供了一些实现 MBean 的可选方法:

·         标准 MBean

·         动态 MBean

·         模型 MBean

我们将使用同一个简单示例来一起说明这三个方法(示例可以在 www.sys-con.com/weblogic/sourcec.cfm 上找到)。我们的示例使用一个简单的 Java 类来模拟一个日志框架并展示当前的日志级别和通过 MBean 写入的日志记录数。我们包括了一个简单的 Web 应用程序,允许您给日志(在我们的示例中,指 stdout)撰写消息。这些示例演示了一个简单的案例,在该案例中,开发人员希望用一种系统管理员或操作员能够以轻松监控的方式呈现他们应用程序一些部分的状态和使用信息。稍后,我们将展示如何通过 WebLogic Admin Console 展示这一功能。

使用标准 MBean 进行 JMX 装配
实现标准 MBean 很简单。在开始前,必须确保 MBean 接口类和 MBean 实现类名称遵守适用于所有标准 MBean 的特定模式:MBean 接口类名称必须和去掉后缀 MBean 的 MBean 实现类名称一样。在我们的例子中,MBean 实现类名称是 wldj.standard.Logger,因此,MBean 接口类名称是 wldj.standard.LoggerMBean。现在您已经为创建标准 MBean 做好了准备。

首先,创建一个通过方法定义提供公开 JMX 属性和操作的接口类。就像第3部分中讨论的,属性通过遵守标准 JavaBean 格式的 getter 和/或 setter 方法来公开:

public Bar getFoo();
public void setFoo(Bar newValue);

接口中公开的不遵守这些约定的所有其他方法被认为是 JMX 操作。我们的 LoggerMBean 接口公开了以下 JMX 属性和操作:

Read-Write Attributes:
LoggingLevel

Read-Only Attributes:
DebugLogWrites
InfoLogWrites
WarningLogWrites
ErrorLogWrites
EmergencyLogWrites
TotalLogWrites

Operations:
void resetLogWriteStatistics()

下一步,创建 MBean 实现类来实现所定义的 MBean 接口。记住,接口只需要公开您希望 JMX 应用程序管理的方法。

最后,需要在应用程序中包含初始化代码来用 MBeanServer 创建和注册 MBean。在我们的例子中,使用了一个 WebLogic Startup 类在 MBean 服务器中创建并注册MBean,像 LoggerStartup 类的代码段中展示的一样(参见清单 1)。

这种方法的主要限制是它不允许公布这些属性的额外描述信息。JMX 1.2 通过标准 MBean 基类来处理这个限制,您能够扩展和使用其来提供额外信息。然而,您必须等到 BEA WebLogic Server 的下一个发行版才能利用这个功能。

使用动态 MBean 进行 JMX 装配
实现动态 MBean 有一点复杂,但提供了更多的灵活性,您实际上可以公开运行时定义的 JMX 属性和操作,而不是编译期间的。为了实现动态 MBean,您的 MBean 实现类必须实现 DynamicMBean 接口,包括:

·         提供一个 MBeanInfo 对象,它提供关于 MBean 所提供的 JMX 属性、操作和通知的详细信息。

·         实现 getAttribute() 和 setAttribute() 方法,为 MBean 的 JMX 属性提供读写能力。

·         实现 invoke() 方法,解释方法和属性类型,并执行所需的 JMX 操作。

·         如果 MBean 发送 JMX 通知,则实现 NotificationBroadcaster 接口。

·         如果 MBean 需要生命周期回调来创建和/或清除 MBean 状态,则实现MBeanRegistration 接口。

在我们的例子中,实现了 DynamicMBean 接口方法。该实现很简单,因此我们这里不仔细讨论其细节(参阅示例代码)。

动态 MBean 提供最大的灵活性,并允许使用整个 JMX 功能。就如示例演示的那样,它也需要比实现标准 MBean 更多的工作。怎样才能既保持动态 MBean 的灵活性,同时又减少复杂性呢?模型 MBean 显著地减少了实现动态 MBean 所需的工作量。

使用模型 MBean 进行 JMX 装配
模型 MBean 提供和动态 MBean 类似的功能,但显然更易于实现。使用模型 MBean 的大多数工作是构建元数据,此元数据用于描述 MBean 将公开的属性、构造函数、操作和通知,以及它们如何与正在装配的应用程序类相关。模型 MBean 的许多好处来自于其无需修改就能适应已存在的实现代码的能力。

我们选择将创建包含元数据的 ModelMBeanInfo 对象的逻辑放在Logger类中。我们能轻易地把它放在 LoggerStartup 类中,因此 Logger 类将没有任何 JMX 代码。在我们的示例中,我们使用的 ModelMBeanAttributeInfo 类构造函数版本假定要公布的 JMX 属性在被装配的类上具有标准的 getter 和 setter 方法名称。

模型 MBean 也支持通过 Descriptor 类指定被装配类上的不同方法名称来更改属性和操作的名称。该描述符包含一个名称-值对的列表。JMX 1.0 规范定义了一套必需的和可选的描述符字段。例如,设置描述符中的 currencyTimeLimit 字段会使模型 MBean 实现类缓存指定时段的属性值。这种灵活性在获取涉及远程调用的值或查询后端系统时非常重要。因为我们的类从标准 MBean 开发,所以不需要使用描述符功能。

一旦组装了 ModelMBeanInfo 对象,我们只需要使用 RequiredModelMBean 类创建一个 ModelMBean 的实例,配置它以装配我们的 Logger类,并使用 MbeanServer 注册它(参见清单2)。

尽管创建和组装 ModelMBeanInfo 对象的代码比创建标准 MBean 需要更多工作,它与实现 DynamicMBean.getMBeanInfo() 方法是等价的。由于这项工作,您获得了动态 MBean 的灵活性,不需要在 DymanicMBean 接口中实现其他指派方法。

在 WebLogic Admin Console 中公开 MBean
WebLogic Admin Console 提供了一个扩展机制,允许向控制台中添加页面来公开应用程序的 MBeans。其基本步骤为:

1.     实现扩展 weblogic.management.console.extensibility.Extension 类的 Java 类,并实现 weblogic.management.console.extensibility.NavTreeExtension 接口。

2.     编写 JSP 来描述您希望添加到控制台的导航树的节点。

3.     编写一套 JSP 页面,当用户从导航树中选择节点时,这些页面出现在控制台的右边部分。

4.     创建一套 Web 应用程序部署描述符,告诉服务器该 Web 应用程序是一个控制台扩展。

5.     打包 Web 应用程序,部署 Web 应用程序,就像对任何其他应用程序做的那样。

在编写 Java 类时,要实现的最重要方法是 getNavExtensionFor() 方法。传递的参数是一个 MBean 引用,它指明导航树中的不同节点。应用程序对这些调用的响应决定新节点在导航树中出现的位置。例如,我们希望扩展在域级别上显示,因此如果参数是 DomainMBean 的实例,则实现只返回 URL:

 
    public String getNavExtensionFor(Object key) 
    {
        if (key instanceof DomainMBean)
            return "logging_navlink.jsp";
        return null;
    }

要描述希望添加的节点,必须编写 JSP 文件,这些文件的名称与从 getNavExtensionFor() 方法返回的值相匹配。BEA WebLogic Server 8.1 提供了一个自定义JSP标签库——console_extensions_taglib.tld,它包含 JSP 自定义标签 wl:node,您需要使用它定义您的控制台扩展节点。要创建嵌套的节点集,只需将 wl:node 标签嵌入 JSP 中。wl:node 标签的 url 参数定义了当用户在控制台中选择自定义节点时调用的 JSP 页面。例如,在我们的例子中选择标准 MBean Logger 文件夹,将调用 standard_summary.jsp 来填入到控制台窗口的右边部分(参见清单 3)。

在为应用程序编写控制台页面集时,可以使用 wl:tag JSP 自定义标签创建一套类似于 WebLogic Console 的其他部分中选项卡页面的选项卡。该标签至多允许创建两层选项卡。参考我们的示例,了解如何使用该功能。要了解有关支持扩展 WebLogic Console 的自定义 JSP 标签的更多信息,请参阅下面的联机文档,地址为:http://edocs.bea.com/wls/docs81/console_ext/taglib.html。

下一步,您需要编写 Web 应用程序部署描述符。除了描述 Web 应用程序内容的标准信息外,还有三件必须做的事情。首先,您需要告诉控制台怎样通过在 web.xml 部署描述符中定义 context-param 来找到您的 NavTreeExtension 类:

 
    
        weblogic.console.extension.class
        wldj.LoggingConsoleExtension
    

第二,您需要向 web.xml 部署描述符中添加 taglib 定义:

 
    
        console_extension_taglib.jar 
        
            WEB-INF/console_extension_taglib.tld
        
    

最后,您需要把您的 Web 应用程序使用的 CookieName 设置成和 WebLogic Admin Console 一样,所以在用户登录到控制台时您的扩展将被认证。您可以通过在 weblogic.xml 部署描述符中定义一个 session-param 来实现这一点(参见清单 4)。在最后一步,您需要打包Web应用程序,并将其部署到您的 WebLogic Admin 服务器。您需要将控制台扩展标签库描述符文件——/server/lib/console_extensions_taglib.tld——复制到您 Web 应用程序的 WEB-INF 目录中。

尽管这里的空间不允许我们更加详细地讨论创建控制台扩展的所有细微差别,我们仍然希望这个可下载的示例能提供一个足够现实的例子来开始您的学习。要了解有关创建控制台扩展的更多信息,请参阅 BEA WebLogic Server 8.1 文档 http://edocs.bea.com/wls/docs81/console_ext/。

结束语
我们已经到达了使用 BEA WebLogic Server 8.1 进行应用程序管理这一系列教程的末尾。我们希望能够向您展示 WebLogic Server 8.1 管理工具和服务的能力及灵活性。WebLogic Server内建的基础结构不仅允许您创建自定义管理应用程序来管理 WebLogic Server,而且允许您将应用程序与 JMX 装配在一起,并将该装配通过 WebLogic Console 的扩展来展示公开。

本文程序清单:

 
清单 1
 
InitialContext ctx = new InitialContext();
         MBeanServer mbeanServer = (MBeanServer)
         ctx.lookup("weblogic.management.server");
         ObjectName mbeanName = new ObjectName("wldj:Name=" + name);
         Logger myLogger = new Logger(name);
         ObjectInstance mbeanInstance =
         mbeanServer.registerMBean(myLogger, mbeanName);
 
清单2
 
ObjectName mbeanName = new ObjectName("wldj:Name=" + name);
Logger myLogger = new Logger(name);
ModelMBean modelMBean = new RequiredModelMBean();
modelMBean.setModelMBeanInfo(myLogger.getModelMBeanInfo());
modelMBean.setManagedResource(myLogger, "ObjectReference");
ObjectInstance mbeanInstance =
mbeanServer.registerMBean(modelMBean, mbeanName);
 
清单3
 
    
             icon="/images/folder.gif" expanded="false"
             url="/standard_summary.jsp">
      <%
          for (int i = 0; i < standardNames.length; i++) {
              String name = standardNames[i];
      %>
            
                     icon="/images/bullet.gif"
                     url="/standard_detail.jsp?Name=<%= name %>"
            />
      <%
          }
      %>
    
 
清单4
 
        
            
                CookieName
                ADMINCONSOLESESSION
            
        
    

 

 作者简介 Robert Patrick是BEA的CTO Office的技术总监,也是Mastering BEA WebLogic Server: Best Practices for Building and Deploying J2EE Applications一书的作者之一。Robert的职业生涯致力于使用BEA Tuxedo 和 BEA WebLogic Server来帮助客户设计、构建和部署高性能、容错性强和任务关键型的分布式系统。 Vadim Rosenberg是BEA WebLogic Server的产品市场经理。在加入BEA之前,他有13年从事商业软件工程的经验,最近的工作是在Compaq Computers (Tandem Division)开发容错性强和高度可扩展的J2EE框架。
针对开发人员的WebLogic Server应用管理,第 6 部分使用 JMX 自定义应用程序管理 针对开发人员的WebLogic Server应用管理,第 2 部分 针对开发人员的WebLogic Server应用管理,第 1 部分----基本概念和配置工具 针对开发人员的利用WebLogic Server进行应用程序托管,第5部分 为 WebSphere Application Server Community Edition 开发 Spring 应用程序: 第 2 部分:使用 Spring 进行数据库连接管理 WebSphere Application Server Community Edition 中的高级管理,第 2 部分: 使用线程池、集群和配置插件 使用 PHP 和 DHTML 设计 Web 2.0 应用程序,第 1 部分: 使用这些技术打造有特色的应用 使用 HTML 5 创建移动 Web 应用程序,第 2 部分: 使用 HTML 5 开启移动 Web 应用程序的本地存储 使用Maven 2创建WebLogic Portal应用程序 为 WebSphere Application Server Community Edition 开发 Spring 应用程序: 第 1 部分:Spring MVC 管理的部分知识 项目管理(MS Project Server 2002)使用简介 使用Project 2003 Server 实现企业整体项目管理 项目管理(MS Project Server 2002)使用简介 要针对“具体的人”进行管理 要针对“具体的人”进行管理 管理Microsft Server和PC 的实用工具 Spring与WebLogic Server的集成 Spring与WebLogic Server的集成 WebLogic Server 的最佳调整建议 Spring与WebLogic Server的集成 掌握 Ajax,第 6 部分: 建立基于 DOM 的 Web 应用程序 使用 Rational AppScan 保证 Web 应用的安全性,第 2 部分: 使用 Rational AppScan 应对 Web 应用攻击 Gartner:影响数据中心的十大颠覆性技术 , 数据,应用程序,技术,管理,服务器,电源,统一通讯,影响,使用,自动化, ,