分享

针对开发人员的WebLogic Server应用管理,第3部分 --JMX基础知识及支持工具

 苍茫的星空 2010-10-05

本文是针对开发人员的BEA WebLogic Server管理系列文章的第三篇。

第一篇文章(WLDJ,第2卷,第10期)着重介绍了WebLogic Server管理的概念和术语,以及用于打包应用程序和建立、配置一个WebLogic域的图形化工具。第二篇文章(WLDJ,第2卷,第11期)着重于无需JMX知识即可在WebLogic Server中可用的应用部署、运行时管理和监控功能。

在这篇文章中,我们将讨论JMX的基本概念和术语,以及BEA WebLogic Server 8.1 JMX的基础结构。同时还会展示如何使用WebLogic Server8.1的特定于JMX的工具。

JMX概念和术语

BEA WebLogic Server 8.1实现 Java Management ExtensionsJMX1.0规范。此规范由两部分组成:设备规范和代理规范。

在设备层,JMX提供了实现可管理资源的规范。可管理资源(Manageable resource)可以是从单个Java对象到整个应用程序,从某种设备到应用程序的用户,或者任何由兼容JMX的应用程序管理的方式实现的任何程序。实现一个可管理资源可以允许兼容JMX应用程序通过定义一个或更多的管理beans来管理它们,这也就是MBeans

JMX代理直接控制可管理资源,并使它们可用于兼容JMX的应用程序。典型的代理位于它们控制的资源所在的同一台机器上。一个代理提供了管理对象的注册,并将此对象公开给兼容JMX的应用程序。该注册处称为一个Mbean Server。此外,代理为动态地加载类公开了一套附加的管理服务、监视Mbean属性的变化、创建定时器,以及定义Mbeans之间的关系。

管理Beans

Mbean就是一个Java类,提供了控制和监视资源的管理能力。这种管理能力通过Mbean管理接口公开出来,它们既可能在编译时静态地定义,也可能在运行时动态地定义。JMX将静态定义其管理接口的Mbean称为标准Mbean,将动态定义其管理接口的Mbean称为动态Mbean

标准Mbean也是一个Java类,此类通过类实现的Java接口公开其管理接口。通过添加Mbean后缀到实现类名称的后端,接口类名称必须派生自实现类名称。例如,一个名为com.example.MyDevice的标准Mbean类可以通过一个名为com.example.MyDevice的接口类公开它的管理接口。

Mbeans公开了各种属性和操作。一种属性总是通过MBean管理接口公开,此管理接口使用标准JavaBean命名惯例的getter/setter方法。对特定属性的访问通过管理接口具有或缺少gettersetter方法来指明。例如,只读属性不能有一个在Mbean管理接口中公开的相应setter方法。

一个操作是不符合属性的gettersetter方法约定的任何方法。JMX管理程序使用Mbean的管理接口的自省功能来决定Mbean公开的管理功能。

Mbean支持通告。JMX通告模型是基于Java事件模型。通告广播是一个发出通告的Mbean管理应用程序和其他程序利用广播来将它们的兴趣注册到这些通告中。通告通过NotificationListener接口的实现传递给已注册对象。

通告的有效负荷使用Notification 对象发送,它包括类型、序列号、时间戳、消息和任何相关的数据。通告类型是使用圆点符号表示的字符串。例如,当一个新设备上线时的发出的通告类型可能是com.example.mydevice.start。收听者也能定义一个通告过滤器来限制收听者接收的通告类型。我们将在另一篇文章中详细讨论JMX通告。

动态Mbean是实现javax.management.DynamicMBean接口的Java类,如下所示:

public interface DynamicMBean
{
Object getAttribute(String attribute);
AttributeList getAttributes(String[] attributes);
MBeanInfo getMBeanInfo();
Object invoke(String actionName, Object[] params,
String[] signature)
void setAttribute(Attribute attribute);
AttributeList setAttributes(AttributeList attributes) ;
}

动态Mbeans比标准Mbeans更灵活。这是因为它们的管理接口是通过getMBeanInfo()方法的返回值,而不是通过静态定义的接口类来呈现的。管理应用程序期望使用MbeanInfo类返回的信息来决定可以操纵的属性和操作集。所有随后的属性访问或操作调用都通过使用定义在DynamicMBean接口上的方法来执行。

JMX规范也定义了两种附加的Mbeans类型:开放Mbeans和模型Mbeans。开放Mbean是动态Mbean,它的管理接口是按照一组有限的指定Java类型来定义的。其思想是通过限制Mbean管理接口所呈现的类型,管理应用程序能被打包成包含管理一组应用程序所需的所有被请求类,而无需由管理应用程序来动态加载特定于应用程序的类。

模型Mbean是一种动态Mbean,它提供一个可配置的一般模板,以允许任何人快速利用任何资源。JMX代理提供了模型Mbean的实现,这样,资源提供者就能例示、配置它呈现的管理接口,指定管理接口与代理调用的方法之间的映射关系,以及将该接口注册到JMX代理。这种思想极大地减少了增加资源的可管理性时的编程负担。

现在理解了基本的Mbean概念,再谈谈JMX代理。

JMX代理

JMX代理是作为管理应用程序和一组Mbeans之间媒介的Java组件。代理由一个Mbean服务器、一组代表被管理资源的Mbeans和一组代理服务组成。此外,代理一般包括一些提供远程访问来支持被管理资源和托管程序之间通信的机制。JMX 1.0规范指出这种支持是由JMX代理提供一个或多个连接器和/或协议适配器来获得;但对这些连接器或协议适配器如何工作没有作规定。

Mbean服务器

Mbean服务器是Mbeans的中心注册处。所有对Mbeans管理操作都必须通过Mbean服务器。它是实现了javax.management.MbeanServer接口的Java对象。如果查看MbeanServer接口(其中部分显示在清单1中),将很快发现这些方法非常类似于那些由DynamicMBean接口定义的方法。这允许Mbean服务器给管理应用程序提供一个统一的接口,而不管资源开发者选择实现哪种类型的Mbean

注意,每个方法都采用一个ObiectName作为它的第一个参数。管理应用程序用此对象名来指定方法调用所针对的MBean或一组Mbeans。对象名由两部分组成:一个域名和一个无序的关键属性集。对象名的标准形式是具有下述语法的字符串:

[domainName]:property=value[,property=value]*

例如,表示一个WebLogic Server实例的Mbean的规范名称可能是:

mydomain:Name=myserver,Type=Server

对象名也包括了对指定一组Mbeans的支持。通过仅指定信息的一个子集,JMX允许代理查找任何能匹配提供的信息的Mbeans。例如,指定对象名mydomain:Type=Server将导致代理匹配mydomain域中的所有类型是ServerMbeans

对象名支持隐含的域名和通配符。要使用隐含的域名,只要简单地从对象名中省略去域名,代理将自动地应用此名称到缺省的域。例如,对象名:Name=myserverType=Server在缺省域是mydomain时与上面的例子是相同的。对象名也能包含标准文件的通配符:

l         * ——匹配任何字符序列。

l         ——匹配任何单个字符。

虽然对象名给JMX带来很大的灵活性,它们也为用户增添了复杂性,用户只是想决定恬当的属性集以识别一个特定的Mbean。我们将在后面讨论WibLogic JMX客户端工具时使用对象名。

代理服务

JMX代理也必须提供一组管理服务:

l         动态类加载。

l         监视。

l         定时器。

l         关系。

动态类加载服务,也称为m-let服务,通过指定远程URL(其中Mbean的实现是可用的)允许管理应用程序例示Mbeans并注册到Mbean服务器。(对m-let服务的讨论已经超出了本文的范畴。欲获得更多信息请参见JMX 1.0规范的第8章。)

监视服务允许管理应用程序通知代理在周期性的间隔内观测一个Mbean属性的值,并且当此属性值满足一特定条件时通告管理应用程序。JMX定义了三种类型的监视器来指定管理应用程序期望被通告的条件。它们是:

l         计数器(Counter):观测的整型值属性,用于当它们达到或超过设定的值时。

l         字符串(String):观测的字符串型值属性,用于当属性值或匹配或异于设定的值时。

l         范围(Gauge):观测的数字型值属性,用于它们达到或超过一个高的阀值和/或达到或低于一个低的阀值。

定时器服务允许管理应用程序让代理在特定的日期和时间上或者在一个恒定的间隔内重复地发送通告。在另一篇文章中我们将更多地讨论有关监视服务和定时器服务。

关系服务允许管理应用程序定义Mbeans之间的关系。一旦定义了关系之后,代理将负责检验在任何管理操作执行后任何现有关系的有效性。任何导致一关系值改变的操作将使代理产生一个通告。(对关系服务的详细讨论超出了本文的范畴。欲获得更多信息请参见JMX 1.0规范的第11章。)

现在对JMX的基本概念已有了一些理解,再讨论BEA WebLogic Server 8.1JMX实现。

WebLogic Server 8.1 JMX

BEA WebLogic Server 8.1实现了JMX 1.0规范。几乎每个WebLogic Server资源都是使用Mbeans实现的,并且任何JMX兼容的管理应用程序都能插入到WebLogic ServerJMX代理实现中并能与之进行通信。

虽然此JMX兼容的接口对当前的任何管理任务都是足够的,但是MbeanServer接口的内省和松散类型的特点使得编写JMX管理程序来自动化简单的管理任务变得比我们希望的更难。同样,WebLogic Server也暴露出它自己的强类型的Mbean接口,此接口作为由JMX定义的一个接口的可替换选择。通过这些接口,能执行与通过标准JMX MbeanServer接口所能执行的相同的一组操作,但是使用的是更典型的强类型Java编程模型,为应用程序代码提供了更佳的编译时检查。我们将在另外的时间讨论这两种方法。

WebLogic Server 8.1定义了三种服务于不同目标的主要Mbeans类型:

l         配置(Configuration):代表域的针对其资源的配置信息。

l         运行时(Runtime):与他们代表的被管理资源位于同一服务器上,这些Mbeans提供了对资源运行时状态的访问。

l         安全性(Security):代表为WebLogic Server提供的安全。

配置Mbeans被进一步分类为:

l         管理(Administration):配置Mbeans位于域的管理服务器上。要修改域的配置,需要在管理服务器上修改适当的管理Mbeans

l         本地配置(Local Configuration):管理Mbeans的本地复制,个别服务器用于提升性能。本地配置Mbean是不能修改的。

要查找所有WebLogic Server 8.1 Mbeans的说明,请参见http://edocs./wls/docs81/javadocs/index.html处针对weblogic.management.configurationweblogic.management.runtimeweblogic.management.security.*包的BEA WebLogic Server 8.1 Java文档。

WebLogic JMX客户端工具

BEA WebLogic Server 8.1包括两个访问它的底层JMX Mbeans的客户端工具。第一个工具是在最后一篇文章中讨论的weblogic.Admin实用程序。WebLogic Server 8.1也包括wlconfig Ant任务,它使写脚本来创建或修改域的配置变得容易。有了这两个工具,必须理解WebLogic Server使用的对象命名方案。

WebLogic Server给对象名使用标准化的JMX标准形式。大多对象名包括NameType属性,很多需要Location属性。

Type属性值由Mbean的类名以及WebLogic Mbean是否是一个管理、本地配置或运行时MBean来决定的。

对于管理Mbean类型,Type值是通过简单地从配置Mbean的接口类名中去掉Mbean后缀得到的。例如,执行weblogic.management.comfiguration.JDBCConnectionPoolMBean类的Mbeans具有TypeJDBCConnectionPool

运行时(Runtime)Mbeans有一个类似的方案,这样执行weblogic.management.runtime.JDBCConnectionPoolRuntimeMBean接口的MbeansType属性是JDBCConnectionPoolRuntime。要给本地配置Mbean指定Type值,只要简单地把Config后缀加到等价的管理MbeanType中。接着前面的例子,本地配置MbeanType值是JDBCConnectionPoolConfig

运行时(Runtime)Mbeans和本地配置(Local Configuration)Mbeans都要求在它们的对象名中指定Location属性。这个属性的值是Mbean感兴趣的WebLogic Server实例的名称。由于域内很多其他的服务器也可能具有带相同NameType属性值的Mbean,因此位置信息是需要的。

现在理解了对象命名方案,再看看每个JMX客户端工具以及如何使用它们来自动化基本的管理任务。

weblogic.Admin

weblogic.Admin工具支持以下JMX命令:

l         CREATE:创建管理Mbean的一个实例。

l         DELETE:删除管理Mbean的一个实例。

l         GET:显示一个Mbean的对象名和属性。

l         INVOKE:运行目标Mbean上的方法。

l         QUERY:根据对象名匹配查找Mbeans

l         SET:设置一个配置Mbean的属性值。

我们无法解释这些命令的所有可能用法——实在是太多了,无法一一例举。我们将提供部分例子,使您对自己能够利用这些命令做什么有一个感性认识。

要创建一个新的JMS连接工厂,使用CREATE命令:

java weblogic.Admin -url t3://AdminHost:7001
-username weblogic -password weblogic
CREATE -name jms/MyConnectionFactory
-type JMSConnectionFactory

要为新的连接工厂设置JNDI名,使用SET命令。但是,SET命令要求指定Mbean的对象名。如果不能确定确切的对象名,可使用GET命令来获得JMSConnectionFactory类型的所有Mbeans

java weblogic.Admin -url t3://AdminHost:7001
-username weblogic -password weblogic
GET -type JMSConnectionFactory

Mbean名字显示在下面的输出中:

{MBeanName="medrec:Name=jms/MyConnectionFactory,Type=JMSConnectionFactory"
{AcknowledgePolicy=All}{AllowCloseInOnMessage=false}...

现在,使用SET命令来设置JNDI名:

java weblogic.Admin -url t3://AdminHost:7001
-username weblogic -password weblogic
SET -mbean "medrec:Name=jms/MyConnectionFactory,
Type=JMSConnectionFactory"
-property JNDIName jms/MyConnectionFactory

最后要做的是把新连接工厂部署到MedRecServer。再次使用SET命令,但由于setTarget()方法(针对JMSConnectionPoolMBean接口)把一个Mbeans数组作为参数,因此必须使用MedRecServerServer Mbean的对象名:

java weblogic.Admin -url t3://AdminHost:7001
-username weblogic -password weblogic
SET -mbean "medrec:Name=jms/MyConnectionFactory,
Type=JMSConnectionFactory"
-property Targets "medrec:Name=MedRecServer,
Type=Server"

要添加一个新的用户,使用INVOKE命令来针对适当认证者的UserEditotMBean接口(假定认证者实现该接口)调用createUser()方法。要查找认证者的安全Mbean的对象名,使用QUERY命令:

java weblogic.Admin -url t3://AdminHost:7001
-username weblogic -password weblogic QUERY -pattern "Security:*"

感兴趣的Mbean的名称显示在这:

{MBeanName="Security:Name=myrealmDefaultAuthenticator" {ControlFlag=SUFFICIENT}...
{MBeanName="Security:Name=myrealmMedRecSampleAuthenticator"{ControlFlag=SUFFICIENT}...

由于MedRecSampleAuthenticator不执行UserEditorMBean接口,所以必须使用INVOKE命令添加用户到DefaultAuthenticator

java weblogic.Admin -url t3://AdminHost:7001
-username weblogic -password weblogic
INVOKE -mbean "Security:Name=myrealmDefaultAuthenticator"
-method createUser rpatrick password "Robert Patrick"

要删除这个JMS连接工厂的例子,使用DELETE命令:

java weblogic.Admin -url t3://AdminHost:7001
-username weblogic -password weblogic
DELETE -mbean "medrec:Name=jms/MyConnectionFactory,
Type=JMSConnectionFactory"

欲了解更多关于用于操纵WebLogic Mbeansweblogic.Admin命令的信息,请参见http://edocs./wls/docs81/admin_ref/cli.html#1240048

wlconfig Ant 任务

wlconfig Ant任务提供一种机制,通过此机制能连接到域的管理服务器,并查询、创建或改变域的管理Mbeans的属性。

BEA WebLogic Server 8.1也提供了四种其他的Ant任务:wlcompilewlappcwlserverwldeploy。这些任务允许进行完全自动化的端对端过程来创建和配置域,以及编译、打包和部署应用程序。要使用wlconfig,需要写一个Ant脚本。欲获得更多的关于Ant的信息,请参见http://ant./

要连接到MedRec管理服务器,须在Ant脚本中使用下面的wlconfig标签:

<wlconfig url="t3://AdminHost:7001"
username="weblogic" password="weblogic">
...
</wlconfig>

wlconfig支持五个嵌套标签,其含义类似于前面介绍的等价的weblogic.Admin命令:createdeletegetqueryset。在此我们将提供部分例子,使您对自己能够利用这些标签做什么有一个感性认识。

清单2是使用wlconfig来修改域的配置的一个例子。我们用query标签来获得对MedRecServerServer Mbean的引用,并把它存储到一个叫medrecserver的属性中以在以后的脚本中使用。接下来,我们使用create标签来创建一个JMS文件存储,并存储一个对新创建的Mbean的引用到myfilestore属性中。我们使用嵌套set标签来指定JMS文件存储的目录属性。接着我们再使用create标签来创建一个JMS服务器。注意,当设置JMS服务器的Mbean的属性值时,嵌套的set标签使用先前创建的属性来供应适当的Mbeans

最后,我们在JMS服务器的create标签内使用了一个嵌套的create标签来创建一个JMS队列,该队列是新创建的JMS服务器的一部分。这种嵌套结构用于指定作用被应用于其上的Mbean(就set命令来说)或者用于指定Mbeans之间的关系(就create命令来说)。

欲获得更多关于wlconfig Ant任务的信息,请参见

http://edocs./wls/docs81/admin_ref/ant_tasks.html

小结

这篇文章提供了对JMX概念和术语的概述,并且讨论了BEA WebLogic Server 8.1 JMX的实现。文章结尾讨论了WebLogic JMX客户端工具以及如何使用它们来创建、查看和修改WebLogic Server Mbeans。下一篇文章将探讨用于创建自定义JMX程序的Java APIs。再下一篇文章将讨论创建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来帮助客户设计、构建和部署高性能、容错性强和任务关键型的分布式系统。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多