在GlassFish 3中,存在大量的组件,作者详细分析了其组件配置的架构、工具和应用方法,对于想要深入了解GlassFish的开发人员和系统管理人员有较好的借鉴意义。
\1 配置组件研究
\在GlasFish中,有大量的配置文件,很大一部分是自动产生的,为助于理解,我们有必要先将它吃透。它也有一个主域配置文件(位于%GlassFishV3%\\domains\\domain1\\config\\config.xml),它主要包括以下几个部分:
\ \图1 GlassFish config配置管理组件的组成
\- ConfigBeans: 对于对配置文件的elements、attributes、properties执行get/set/create/delete操作,是一个底层API\
- Admin MBeans: JMX客户端API,包括:GUI/CLI/HTML adapters/remote apps\
- Admin Validator:验证配置,并且防止不合法的配置改变\
- Dynamic-reconfig: 重新配置之后,可以不用重启服务器,实时生效\
1.1 配置元数据
\在glassfish的config-api模块中包含了大量的配置元数据,有些是自动产生的,有些是手动产生的。
\ \图2 配置元数据
\配置文件符合以下三个schema, 这些schema主Relax NG语法来进行属性扩展,所有的属性扩展在其独立的名空间中:
\- sun-domain-1_2.dtd,\
- ConfigBeans\
- Validation Descriptors file\
1.2 源代码分析
\- Config Beans: 代码位于HK2核中的config模块,它包含了ConfigContext、ConfigEvent、Listeners的接口和实现。在GlassFish中的config-api模块中的server beans是由sun-domain_1_2.dtd自动产生的,手动产生的是ApplicationsHelper, ClustersHelper, ResourcesHelper等。\
- Admin MBeans: 提供JMX客户端(CLI/GUI/HTML-adapters/remote apis)的访问和管理操作。位于admin-core中的admin子模块中。\
- Config Validator : 验证metadata files,验证基础类,对客户化配置元素的验证等。\
2 监控组件研究
\我们可以通过以下5种方式访问GlassFish资源:
\- 管理控制台\
- 命令行工具asadmin\
- Jconsole第三方工具\
- 标准的JMX编程接口\
- 面向对象的AMX编程接口\
JMX是GlassFish管理架构的基础, GlassFish的设计和实现都遵循了JMX规范,因此也完全支持JMX。这种支持体现在它的命令行管理工具asadmin和管理控制台的功能上,体现在第三方管理工具比如JConsole的对其访问的支持上,也体现在通过标准 的或GlassFish特有的编程接口AMX对其资源的访问方式上。下面通过实例,来看看GlassFish是如何支持这几种方式对其资源进行访问的。
\ \图3 访问GlassFish资源的5种方式
\方法1,通过管理控制台
\首先,先通过管理控制台来创建一个数据库连接池mypool。在浏览器的输入管理控制台地址:localhost:4848。采用缺省的用户名 “admin”及其密码“adminadmin”登录。成功登录后,在左边的树型菜单中,展开“资源”-“JDBC”-“连接池”。在主面板中,点击“新建”。在面板“新建 JDBC 连接池(步骤 1,共 2 步)”中,输入“名称”为mypool,“资源类型”选为“javax.sql.DataSource”,“数据库供应商”选为“JavaDB”。在接下 来的“新建 JDBC 连接池(步骤 2,共 2 步)”中,可以看到数据库连接池的各项缺省设置。将在“池设置”一栏中的“空闲超时”值由缺省的300改为777。 点击“完成”。至此,我们通过管理控制台完成了对数据库连接池mypook的创建,并修改了其空闲超时的值。
\方法2,通过命令行工具asadmin
\接下来,我们通过命令行的asadmin来查看这一资源。
\\asadmin list server.resource*\
运行结果如下:
\\server.resource-ref.jdbc/__CallFlowPool \server.resource-ref.jdbc/__TimerPool \server.resource-ref.jdbc/__default \server.resources \server.resources.jdbc-connection-pool.DerbyPool \server.resources.jdbc-connection-pool.__CallFlowPool \server.resources.jdbc-connection-pool.__TimerPool \server.resources.jdbc-connection-pool.mypool \server.resources.jdbc-resource.jdbc/__CallFlowPool \server.resources.jdbc-resource.jdbc/__TimerPool \server.resources.jdbc-resource.jdbc/__default\
这里列出的MBean是用GlassFish自己的DottedName来标识的。接着通过asadmin的子命令get来查看对象mypool的属性:
\\asadmin get server.resources.jdbc-connection-pool.mypool.*\
或者进一步查看空闲超时(idle-timeout-in-seconds)的属性值。
\\asadmin get server.resources.jdbc-connection-pool.mypool.idle-timeout-in-seconds\
结果如下:
\\server.resources.jdbc-connection-pool.mypool.idle-timeout-in-seconds = 777\
至此,我们完成了使用命令行的管理工具asadmin对mypool的访问。这里asadmin通过GlassFish扩展的Dotted Name命名方式来访问MBean的。Dotted Name是GlassFish命令行工具asadmin定义的一套约定。在这套约定的支持下,asadmin的三个子命令(list、set和get )可以通过一个由“.”分隔的字串寻址到GlassFish中的MBean。
\ \接下来,我们要通过JConsole来访问对象mypool。在JConsole的登录面板中,选择远处进程:localhost:8686(8686是GlassFish缺省的管理端口),用户名同样为 admin,密码adminadmin。登录进来后所看到的是关于GlassFish应用服务器运行时的信息,点击“MBean”。展开树型结构 “com.sun.appserv” - “jdbc-connection-pool” - “my pool” - “config” - “属性”。可以看到我们所关心的连接池mypool的信息。属性idle-timeout-in-seconds的值为777。修改777为888。在回到管理控制台或命令行工具asadmin同样可以看到刚才在JConsole所作的修改已经生效。以上说明三种工具对GlassFish资源的修改是等效的。接下来通过编程的方式来访问数据库连接池mypool。
\方法4,通过标准的JMX编程方式
\标准的JMX方式的代码如下:
\\import javax.management. * ;\\import javax.management.remote. * ;\\public class JMX_demo {\\ public JMX_demo() throws Exception {\ //创建JMX 的URL\ JMXServiceURL url = new JMXServiceURL(\"service:jmx:rmi:///jndi/rmi://localhost:8686/jmxrmi\");\ java.util.Map env = new java.util.Hashtable();\ //缺省用户名和其口令\ String[] creds = {\ \"admin\