加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

GlassFish 中的 命令框架 (CLI) 实现

发布时间:2020-12-17 02:05:31 所属栏目:安全 来源:网络整理
导读:GlassFish 中的命令框架 (CLI) [ Command Line Interface 框架的工作原理 ] GlassFish 开源服务器中间,提供了 CMD 命令行机能,服务器的使用者可以通过 CMD 来发布更新自己的 jar 包,配置服务器的 JDBC 连接等等。 那么,到底 GlassFish 是怎么做到这一步

GlassFish中的命令框架(CLI)

[Command Line Interface框架的工作原理]

GlassFish开源服务器中间,提供了CMD命令行机能,服务器的使用者可以通过CMD来发布更新自己的jar包,配置服务器的JDBC连接等等。

那么,到底GlassFish是怎么做到这一步的呢?

我们看到GlassFish实际上是引用了一个开源的命令行框架--- Command Line Interface框架

我们具体可以参照以下URL:

https://glassfish.dev.java.net/javaee5/admin-cli/admin-cli.html

CLI框架的工作流程如下:

1.????? 在这个框架内部,使用者发送的命令以及参数,会通过CMD窗口传给常驻内存的CLI框架的核心类CLIMain

2.?????? CLIMain通过查找一个名叫[CLIDescriptor.xml]的配置文件,在里面查找具体的执行类,一般来说GlassFish中的执行类都被叫做XXXXCommand之类的名字

3.?????? XXXXCommand之类的执行类,开始访问MBeanServer调用相对应的MBean,访问资源(一般都是config.xml),配置服务器

MBean相关知识请看我的另外一篇文章

配置工作中会涉及到对config.xml的容错性检查,这是通过rng技术来实现,这里就不讲了

?

[实践 自己动手建立一个Command]

???长话短说,我们来自己建立一个Command

1.????? 找到以下目录,在其中增加自己的Command执行实体类

[glassfish/admin-cli/commands/src/java/com/sun/enterprise/cli/commands]

public class NewListComponentsCommand extends S1ASCommand {

?????? /**

?????? ?* An abstract method that validates the options on the specification in the

?????? ?* xml properties file This method verifies for the correctness of number of

?????? ?* operands and if all the required options are supplied by the client.

?????? ?*

?????? ?* @return boolean returns true if success else returns false

?????? ?*/

?????? public boolean validateOptions() throws CommandValidationException {

????????????? return super.validateOptions();

?????? }

?????? /**

?????? ?* An abstract method that Executes the command

?????? ?*

?????? ?* @throws CommandException

?????? ?*/

?????? public void runCommand() throws CommandException,

???????????????????? CommandValidationException {

????????????? // if validateOptions is false,then it must be that --help option

????????????? // is provided and there is no need to execute the command since

????????????? // either manpage or usage text is displayed

????????????? if (!validateOptions())

???????????????????? return;

????????????? String objectName = getObjectName();

????????????? Object[] params = getParamsInfo();

????????????? String operationName = getOperationName();

????????????? String[] types = getTypesInfo();

????????????? CLILogger.getInstance().printMessage("It is a test From Jiang Biao");

?????? }

?

}

上面的Command唯一干的事情就是在CMD窗口上打出"It is a test From Jiang Biao"这句话

2.????? 我们找到[CLIDescriptor.xml]文件,在其中加入我们自己的Command配置

<Command name="new-list-components" classname="com.sun.enterprise.cli.commands.NewListComponentsCommand" numberofoperands="1" usage-text="list-components [--terse=false] [--echo=false] [--interactive=true] [--user admin_user] [--passwordfile file_name] [--help] [--type application|ejb|web|connector|webservice] target">

????????????????????????????????????????? <ValidOption name="user"/>

????????????????????????????????????????? <ValidOption name="password"/>

????????????????????????????????????????? <ValidOption name="passwordfile"/>

????????????????????????????????????????? <ValidOption name="host"/>

????????????????????????????????????????? <ValidOption name="port"/>

????????????????????????????????????????? <ValidOption name="secure"/>

????????????????????????????????????????? <ValidOption name="interactive"/>

????????????????????????????????????????? <ValidOption name="terse"/>

????????????????????????????????????????? <ValidOption name="echo"/>

????????????????????????????????????????? <ValidOption name="type"/>

????????????????????????????????????????? <properties>

??????????????????????????????????????????????????????? <property name="objectname">

??????????????????????????????????????????????????????? ????????????? <value>com.sun.appserv:type=applications,category=config</value>

??????????????????????????????????????????????????????? </property>

??????????????????????????????????????????????????????? <property name="operation">

??????????????????????????????????????????????????????? ????????????? <value>getAllUserDeployedComponents</value>

??????????????????????????????????????????????????????? </property>

??????????????????????????????????????????????????????? <property name="params">

??????????????????????????????????????????????????????? ??????? <value>{#1}</value>??????????????????????

??????????????????????????????????????????????????????? </property>

??????????????????????????????????????????????????????? <property name="paramtypes">??????????????????

??????????????????????????????????????????????????????? ??????? <value>java.lang.String</value>

??????????????????????????????????????????????????????? </property>

??????????????????????????????????????????????????????? <property name="displaytype">

????????????????????????????????????????????????????????????????????? <value>name</value>

??????????????????????????????????????????????????????? </property>

??????????????????????????????????????????????????????? <property name="manpage">

??????????????????????????????????????????????????????? ????????????? <value>com.sun.enterprise.tools.cli.help</value>

??????????????????????????????????????????????????????? </property>

??????????????????????????????????????????????????????? <property name="command-type">

????????????????????????????????????????????????????????????????????? <value>list</value>

??????????????????????????????????????????????????????? </property>

????????????????????????????????????????? </properties>

??????????????????????????? </Command>

以上配置文件定义了我们自己的Command类,并且规定了控制台上访问该类的命令是[new-list-components]

3.????? 将我们的修改打成jar包,替换到glassfish的运行环境,我们就能在控制台上运行自己的command命令咯~~~~~

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读