中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> Bea专区 > WebLogic Server 8.1
针对开发人员的WebLogic Server应用管理,第4部分--使用JMX编写自定义Java应用程序
作者:佚名 时间:2005-11-23 20:53 出处:bea 责编:chinaitpower
              摘要:示范如何编写自定义的JAVA应用程序,并通过这些应用程序使用JMX来配置、管理和托管基于BEA WebLogic Server 8.1的应用程序。

本文是针对开发人员的BEA WebLogic Server 管理系列文章的第四篇(WLDJVol.2, 10-12)。第1部分集中讨论了管理的基本概念和相关术语,以及一些用于打包应用程序和设置、配置WebLogic Server域的图形界面工具。

2部分我们主要关注在不需要了解JMX的情况下有关WebLogic Server上应用程序的部署,运行时托管和WebLogic Server包含的相关监控工具。第3部分讨论了JMX的基本概念和相关术语,以及WebLogic Server 8.1JMX基础结构,以及如何使用WebLogic Server 8.1上带有的JMX相关工具。

在这篇文章中,我们将示范如何编写自定义的JAVA应用程序,并通过这些应用程序使用JMX来配置、管理和托管基于BEA WebLogic Server 8.1的应用程序。

JMX编程基础

当使用BEA WebLogic ServerJMX功能编写Java应用程序的时候,首先要考虑的就是使用标准的JMX MBeanServer 接口还是 WebLogic 服务器的强类型接口。我们在上一篇文章中讨论过,MBeanServer接口是弱类型的Java反射风格的接口,允许你编写管理任何JMX兼容应用程序的Java应用程序。对于一个希望与各种应用程序协同工作,在运行时提供多种功能的工具软件厂商来说,这个接口应该是完美的,但是如果是用它来管理一些非常知名的JMX兼容的应用程序时,开发和调试的过程会十分冗长和乏味。BEA WebLogic Server 8.1提供了强类型接口,使用更简单,提供了更好的代码编译时检查功能。

使用MBeanServer接口

使用MBeanServer接口编写JMX程序的基本步骤如下:

l         获得取到MBeanServer实现的引用。

l         确定感兴趣的MBean

l         确定MBean的属性和/或感兴趣的操作。

l         MBeanServer上调用相应的方法来执行操作。

当编写用于管理BEA WebLogic ServerJMX应用程序时,获得到MBeanServer实现的引用的最容易方法是,使用JNDI名称 weblogic.management.server在管理服务器的JNDI树上查找。管理MBean可以通过管理服务器的MBeanServer访问。所有来自域的配置改变都要通过管理服务器的MBeanServer来完成。

受管理的服务器也拥有自己的MBeanServer。通过这些MBeanServer你可以访问本地配置和运行时MBeans。目前,受管理服务器上的MBeanServer只可以通过特定于WebLogicMBeanHome接口访问,这个接口我们将在下一节讨论。

BEA WebLogic 服务器的MBeanServer支持通过普通WebLogic RMI机制进行透明的远程访问功能,所以你编写的JMX程序无需担心MBeanServer是在本地还是远程运行。如果你打算改动MBean属性或者调用会修改域的操作,你需要在WebLogic Server上验证应用程序足是否有够的权限来完成这项任务。尽管JNDI的验证机制不赞成JAAS风格的验证,我们将简要地对这一验证机制进行介绍(参见清单1

为了获得有关MBean的信息,你首先需要知道它的对象名。JMX使用javax.management.ObjectName类来表示一个MBean对象名。如果你不知道哪个MBean可用,使用任一MBeanServer查询方法来获得匹配的MBeans清单。例如,使用不带null 参数的queryNames()方法来返回一个java.util.Set,包含所有已经注册的MBeansObjectName对象,如下所示:

Set mbeansSet = mbeanServer.queryNames(null, null);
Iterator mbeans = mbeansSet.iterator();
while (mbeans.hasNext()) {
ObjectName mbeanName = (ObjectName)mbeans.next();
...
}

一旦你决定了感兴趣的MBean的对象名,就可以通过使用MBeanServergetMBeanInfo()方法来获得MBean的属性和操作的详细信息(见清单2)。

最后,你可以通过在MBeanServer上调用适当的方法来获得或设置属性,或者调用操作(见清单3)。

如果你知道要管理的JMX应用程序、相关的MBean对象名及其属性和感兴趣的操作,并且愿意牺牲一些灵活性的话,可以更直接地进行JMX编程。清单4展示了一个简单的JMX程序,用于获得域管理服务器上默认执行队列的线程配置数目。

注意,我们在默认域中使用了一个AdminServer类型的MBean来获得相关Mbean所在的域名和服务器名。

BEA WebLogic Server 8.1中,默认域名总是weblogic,所以在创建管理服务器的MBean对象名的时候,我们可以跳过调用getDefaultDomain()而是直接使用weblogic作为域名(或者干脆忽略它,因为它是默认的)。

使用强类型的WebLogicJMX接口

BEA WebLogic Server 8.1同样提供了一个MBeanHome接口,用于访问强类型的接口。可以通过查找JNDI获得对服务器MBeanHome接口的引用。和使用MBeanServer的情况一样,管理MBean必须通过管理服务器的特定MBeanHome(称为AdministrationMBeanHome)来访问。要获得对Administration MBeanHome接口的引用,可以在管理服务器上使用JNDI名称weblogic.management.adminhome来进行JNDI查找。这个JNDI名称被定义为是MBeanHome接口的ADMIN_JNDI_NAME常量,这样有助于避免了程序受到JNDI更改的影响。

包括管理服务器在内的所有服务器都有本地MBeanHome实现,提供了对本地配置和运行时MBean的访问。 使用JNDI名称weblogic.management.home.localhome 或者weblogic.management.home.<server_name>(其中server_nameWebLogic Server实例的名称),通过对感兴趣的服务器直接执行JNDI查找,这些本地MBeanHome都可以访问。MBeanHome接口定义了两个附加的常量,LOCAL_JNDI_NAME JNDI_NAME,分别可用于取代weblogic.management.home.localhome weblogic.management.home。管理服务器还可以通过weblogic.management.home.<server_name>这样的JNDI名称,对所有托管服务器的本地MBeanHome接口进行引用。

以下代码用于获得对Administration MBeanHome的引用,这段代码非常类似于前面示范的用于获得MBeanServer的代码:

MBeanHome mbeanHome = null;
try {
... // Same as earlier example

mbeanHome =(MBeanHome)
ctx.lookup("weblogic.management.adminhome");
}
catch (NamingException ne) { ... }

MBeanHome接口提供了广泛的创建MBean和获得不同类型MBean的方法。比如说,getAllMBeans()方法能够返回指定域中所有MBeans的类型安全的存根(type-safe stubs),要做到这一点,可以使用Java反射来确定每个MBean都支持的属性和操作集。当然,你一般会选择使用强类型的接口,因为你已经知道需要操作的MBean类型。getAdminMBean()方法允许你获得对管理MBean的类型安全(type-safe)的引用。

String domainName = mbeanHome.getDomainName();
ServerMBean myserver = (ServerMBean)
mbeanHome.getAdminMBean("myserver", "Server", domainName);

一旦获得类型安全(type-safe)的引用,就可以直接访问属性和操作:

int listenPort = myserver.getListenPort();

清单5给出了与清单4相同的强类型接口版本。注意我们使用了getAdminMbean(name, type, domain)方法来查找感兴趣的MBean引用。这个接口比JMX标准接口更简单,在JMX标准接口中,我们必须使用MBean对象名称的ObjectName表示。然而,当需要提供不止Name Type属性来惟一地识别 MBean时,还是有些混淆,因为你必须带上附加的属性的名-值对,并用逗号分隔。比如说,清单5中的以下代码片断展示了名称参数的格式,这里我们还需要指定 Server属性,从而唯一地查找出感兴趣的ExecuteQueueMBean

String defaultExecuteQueueName =
"weblogic.kernel.Default,Server=" + adminServerName;
ExecuteQueueMBean defaultExecuteQueueMBean = (ExecuteQueueMBean)
mbeanHome.getAdminMBean(defaultExecuteQueueName,
"ExecuteQueue", domainName);

我们希望你能意识到,程序的类型安全(type-safe)版本更简单,而且提供了更好的编译时检查。如果你需要通过编写JMX程序来自动化管理基于BEA WebLogic Server的应用,我们推荐在大多数情况下使用类型安全(type-safe)的接口。如果你在构建JMX管理工具,以便使用各种JMX兼容的应用程序的话,那么使用JMX MBeanServer接口将使得工作变得更容易。

小结

在本文中,我们介绍了两种不同JMX编程接口的基础知识,这两种接口用于为BEA WebLogic Server 8.1构建JMX管理程序。JMX标准MBeanServer接口提供了松散类型的、反射风格的接口,允许工具开发商编写在运行时发现MBean及其属性和操作的工具。

强类型的WebLogic JMX MBeanHome接口提供了更简单的接口来构建JMX 管理程序,从而利用基于WebLogic Server的应用程序执行预定义的任务。

本系列的下一篇文章将深入探讨更高级的用于构建自定义JMX程序的Java API,这些程序使用了带有监视器和定时器的JMX通告。最后一期将讨论创建自定义的MBeans,并扩展Admin Console以便显示它们。

 作者简介
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框架。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有