HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

解析 GlassFish 3 中的配置组件

  • 2012-03-20
  • 本文字数:3870 字

    阅读完需:约 13 分钟

在 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。

方法 3,通过第三方工具 JConsole

接下来,我们要通过 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", "adminadmin"
};
env.put(JMXConnector.CREDENTIALS, creds);
// 建立连接
JMXConnector connector = JMXConnectorFactory.connect(url, env);
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
// 要访问的 MBean 的 Object Name
ObjectName mbeanName = new ObjectName("com.sun.appserv:type=jdbc-connection-pool,name=mypool,category=config");
// 所要访问的属性 idle-timeout-in-seconds
System.out.println("Using JMX, jdbc pool idle timeout:" + mbsc.getAttribute(mbeanName, "idle-timeout-in-seconds"));
}
public static void main(final String[] args) throws Exception {
new JMX_demo();
}
}

运行结果如下:

复制代码
Using JMX, jdbc pool idle timeout:888

方法 5,通过 AMX 编程方式

AMX 方式的代码如下:

复制代码
import com.sun.appserv.management.DomainRoot;
import com.sun.appserv.management.client.AppserverConnectionSource;
import com.sun.appserv.management.client.TLSParams;
import com.sun.appserv.management.util.misc.ExceptionUtil;
import com.sun.appserv.management.config. * ;
import java.net.ConnectException;
import java.util.Map; /** * 此类为演示使用 AMX 方式访问服务器端的 MBean 的演示代码。 */
public class AMX_demo {
public AMX_demo() throws Exception {
//Domain Admin Server 的机器名或 IP 地址
final String host = "localhost";
//JMX 管理端口,缺省 8686。
final int port =8686;
// 管理员名
final String user = "admin";
// 管理员密码
final String password = "adminadmin";
TLSParams tlsParams=null;
// 连接到 JMX
serverAppserverConnectionSource conn = new AppserverConnectionSource(
AppserverConnectionSource.PROTOCOL_RMI,
host,
port,
user,
password,
tlsParams,
null);
conn.getJMXConnector( true );
//DomainRoot 和 JDBCConnectionPoolConfig 就是所说的 DCP 组件
DomainRoot mDomainRoot = conn.getDomainRoot();
// 获取 JDBCConnectionPool 的列表
Map pools = mDomainRoot.getDomainConfig().getJDBCConnectionPoolConfigMap();
JDBCConnectionPoolConfig mypool = (JDBCConnectionPoolConfig)pools.get("mypool");
System.out.println("Using DCP, jdbc pool idle timeout: "+mypool.getIdleTimeoutInSeconds());
}
public static void main(
final String[] args ) throws Exception{
new AMX_demo();
}
}

运行结果如下:

复制代码
Using DCP, jdbc pool idle timeout: 888

注意,采用 AMX 的方式时,在项目的库路径上要加入 appserv-ext.jar 和 javaee.jar。

关于作者

张华,长期从事 Java 方面的开发工作,有搜索引擎、中间件应用服务器、互联网、云计算等领域的行业经验,目前正在从事基于 Power 的虚拟化技术研发。博客地址: http://blog.csdn.net/quqi99


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-03-20 00:004874

评论

发布
暂无评论
发现更多内容

Sketch Measure for Mac中文破解版 sketch标注插件下载

南屿

Sketch Measure mac中文版 sketch标注插件

ScaleUp插件使用方法 附ScaleUp for Mac破解版资源

南屿

高级视频增强工具 ScaleUp插件下载 ScaleUp mac破解版 AE/PR插件

软件测试/测试开发/全日制/测试管理丨CSS Selector

测试人

软件测试

实用fcpx插件:Photo Montage(轻松制作照片动画)

南屿

fcpx fcpx插件

荣耀开发者大会2023 · 一张图读懂设计分论坛

荣耀开发者服务平台

AI 设计 开发者大会 honor

App加固:不同类型和费用对比

堡垒机和数据库防水坝的区别一二

行云管家

数据库 网络安全 堡垒机 数据库防水坝

photoshop色轮插件Coolorus怎么安装 附Coolorus 许可证

南屿

Coolorus mac版 PS调色插件 Coolorus许可证 Coolorus安装教程

软件测试/测试开发/全日制/测试管理丨iOS 自动化相关工具

测试人

软件测试

Lightroom预设资源-高级食物lr预设 附lr预设导入教程

南屿

高级食物lr预设 Lightroom预设下载 lr预设怎么导入

电子签章接口调用,以契约锁为例

Geek_2a38d5

电子签章 契约锁

云联接:揭开SD-WAN神秘面纱,颠覆你对网络的认知!

博文视点Broadview

如何利用 APM 追踪完整的类函数调用

心有千千结

APM Datadog OpenTelemetry 系统可观测性 DDTrace

5分钟带您了解DRS录制回放

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟

软件测试/测试开发/全日制/测试管理丨兼容性测试

测试人

软件测试

eBPF运行时安全

统信软件

安全 ebpf 运行时

NFTScan | 01.08~01.14 NFT 市场热点汇总

NFT Research

NFT NFT\ NFTScan

30款绚彩天空背景特效PS渐变-Photoshop天空渐变

南屿

ps渐变 天空背景特效 Photoshop素材

Authing 入选中国信通院《 2023 高质量数字化转型产品及服务全景图》

Authing

中国信通院 信通院 Authing

微店获得微店商品详情 API(micro.item_get)在电商中的发展

技术冰糖葫芦

API

AE蓝宝石插件BorisFX Sapphire 2024 for Mac破解版 及新功能介绍

南屿

FCPX插件-动态视频运动模糊视觉特效 mMotion Blur 支持Intel和Apple M芯片

南屿

fcpx动态视频 运动模糊视觉特效 fcpx插件下载 fcpx特效

软件测试/测试开发/全日制/测试管理丨Android WebView 技术原理

测试人

软件测试

外贸自建站推广为何首选谷歌广告?谷歌广告的优势在哪?

九凌网络

SD-WAN服务简介及挑选服务商指南

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

PS磨皮滤镜降噪插件Imagenomic Professional 支持ps2024 兼容M1

南屿

磨皮插件 ps滤镜下载 Imagenomic Imagenomic Professional

ps一键磨皮插件Delicious Retouch 5怎么安装 支持M芯片

南屿

磨皮插件 Photoshop 插件

LED透明显示屏前景发展怎么样?

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家 市场 #研发

如何定位和优化程序CPU、内存等性能之巅

雪奈椰子

QCN9024: The future of wireless communications, five major advantages over competitors

wallysSK

解析GlassFish 3中的配置组件_Java_张华_InfoQ精选文章