解析GlassFish 3中的配置组件

在GlassFish 3中,存在大量的组件,作者详细分析了其组件配置的架构、工具和应用方法,对于想要深入了解GlassFish的开发人员和系统管理人员有较好的借鉴意义。

\

1 配置组件研究

\

在GlasFish中,有大量的配置文件,很大一部分是自动产生的,为助于理解,我们有必要先将它吃透。它也有一个主域配置文件(位于%GlassFishV3%\\domains\\domain1\\config\\config.xml),它主要包括以下几个部分:

\

832aef4d189ec225c057f90da058590d.jpg

\

图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模块中包含了大量的配置元数据,有些是自动产生的,有些是手动产生的。

\

ebd6937a355a931aa030706bb3329ca8.jpg

\

图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是如何支持这几种方式对其资源进行访问的。

\

e1b38243e4b435ecc9d2bc5c810f54a4.jpg

\

图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\
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像的目标属于哪个类别。 定位问题:确定目标在图像的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值