概述
每种Java EE应用服务器都为应用部署提供了多种方式,常用的有命令行、Web控制台、自动部署等。除了这些,用户还可以利用JSR-88 往Java EE应用服务器上部署应用。
JSR-88是Java EE Deployment API,定义了往Java EE应用服务器上部署应用的统一模型和API。利用JSR-88的部署工具可以采用统一的方式往不同的Java EE应用服务器上部署应用,而不用了解众多产品之间的诸多差异,从而简化部署过程。如果有相对独立的应用部署需求,或者需要往多种应用服务器上统一、无差别地部署应用,用JSR-88是个不错的选择。
JSR-88要求Java EE应用服务器实现javax.enterprise.deploy.spi包里接口,并能和遵循JSR-88规范的第三方部署工具互相通讯。很多Java EE应用服务器都支持JSR-88。不过JSR-88主要用来部署已打包好的应用程序,应用依赖的资源、使用的服务不能通过JSR-88进行处理。
接口简介
一、javax.enterprise.deploy.spi包里重要的接口有:
- DeploymentManager:部署工具使用Java EE应用服务器提供的部署功能时的入口点
- Target:表示部署Java EE模块/应用的某个服务器实例或某个服务器实例组(即集群)
- TargetModuleID:已部署模块/应用的唯一标识,每个TargetModuleID表示部署在某个Target上的一个模块/应用
二、javax.enterprise.deploy.spi.factories包里还有一个Java EE应用服务器的“部署驱动器”DeploymentFactory,这个工厂返回已经连接到特定Java EE应用服务器的DeploymentManager对象。
JSR-88要求Java EE应用服务器在某个Jar包的manifest文件中暴露出DeploymentFactory接口的实现类,具体是用J2EE-DeploymentFactory-Implementation-Class属性指定实现类的全限定名称。例如JBoss 7.1.1是在modules\org\jboss\as\ee\deployment\main\jboss-as-ee-deployment-7.1.1.Final.jar:META-INF\MANIFEST.MF里指定J2EE-DeploymentFactory-Implementation-Class为org.jboss.as.ee.deployment.spi.factories.DeploymentFactoryImpl。
三、除了上面的几个接口,API还定义了配置、状态、异常等内容,具体介绍可以查看JavaDoc或规范。
处理过程
规范里给出了OID(Object Interaction Diagram,对象交互图),利用JSR-88提供的API编写部署应用的代码时可以参考。下图是部署应用的OID:
(图片来自于JSR-88规范v1.2)
下面是编写工具的主要步骤:
1、获取应用服务器的JSR-88 DeploymentManager
1)访问暴露DeploymentFactory接口的Jar包,获取manifest文件中的J2EE-DeploymentFactory-Implementation-Class属性
2)创建DeploymentFactory实现的实例,并将实例注册到DeploymentFactoryManager里
3)根据应用服务器定义的URI、用户名、密码,获取DeploymentManager对象
示例代码:
// 1) File file = new File("Path of jar file"); Manifest mf = new JarFile(file).getManifest(); String className = mf.getMainAttributes().getValue( "J2EE-DeploymentFactory-Implementation-Class"); // 2) Class factory = Class.forName(className); DeploymentFactory df = (DeploymentFactory) factory .newInstance(); DeploymentFactoryManager dfm = DeploymentFactoryManager .getInstance(); dfm.registerDeploymentFactory(df); // 3) DeploymentManager dm = dfm.getDeploymentManager("URI", "username", "password");
2、调用DeploymentManager的getTargets(获取所有的部署目标)、distribute(发布)、start(启动)、stop(停止)、undeploy(解部署)、redeploy(重部署)、getAvailableModules(获取已部署应用)等方法对应用进行部署处理
3、处理完之后释放到应用服务器的连接
代码写好后,启动应用服务器产品,运行就可以了。
Demo
附件是支持JBoss 7.1.1和GlassFish 3的部署示例代码。代码包含如下文件:
- app.properties:指定应用存放路径(app.path)、部署计划存放路径(plan.path)、应用类型(app.type)。其中应用类型是小写的web、ejb、rar或ear
- dm.properties:指定应用服务器的DeploymentManager相关信息。格式为“filed.product”,filed可以是dm.jar(暴露DeploymentFactory接口的Jar包)、dm.uri(应用服务器指定的URI)、dm.userName(管理用户用户名)、dm.password(管理用户密码);product用来区分不同的应用服务器产品,示例代码要求小写,代码运行时可以指定这里声明的产品名(不指定的话取jboss)
- AppInfo:app.properties的包装类
- DMProperty:dm.properties的包装类
- DeploymentHandler:获取DeploymentManager、封装DeploymentHandler的操作
- JSR88Deployer:测试主类
假设JBoss 7.1.1安装在%JBOSS_HOME%目录,GlassFish 3安装在%GLASSFISH_HOME%目录,ClassPath为:
- %JBOSS_HOME%/modules/javax/enterprise/deploy/api/main/jboss-jad-api_1.2_spec-1.0.0.Final.jar(编译也要用到)
- %JBOSS_HOME%/modules/org/jboss/as/ee/deployment/main/jboss-as-ee-deployment-7.1.1.Final.jar(编译也要用到)
- %JBOSS_HOME%/modules/org/jboss/logging/main/jboss-logging-3.1.0.GA.jar
- %JBOSS_HOME%/modules/org/jboss/as/controller-client/main/jboss-as-controller-client-7.1.1.Final.jar
- %JBOSS_HOME%/modules/org/jboss/threads/main/jboss-threads-2.0.0.GA.jar
- %JBOSS_HOME%/modules/org/jboss/as/protocol/main/jboss-as-protocol-7.1.1.Final.jar
- %JBOSS_HOME%/modules/org/jboss/remoting3/main/jboss-remoting-3.2.3.GA.jar
- %JBOSS_HOME%/modules/org/jboss/xnio/nio/main/xnio-nio-3.0.3.GA.jar
- %JBOSS_HOME%/modules/org/dom4j/main/dom4j-1.6.1.jar
- %JBOSS_HOME%/modules/org/jboss/common-core/main/jboss-common-core-2.2.17.GA.jar
- %JBOSS_HOME%/modules/org/jboss/dmr/main/jboss-dmr-1.1.1.Final.jar
- %JBOSS_HOME%/modules/org/jboss/sasl/main/jboss-sasl-1.0.0.Final.jar
- %JBOSS_HOME%/modules/org/jboss/marshalling/main/jboss-marshalling-1.3.11.GA.jar
- %JBOSS_HOME%/modules/org/jboss/xnio/main/xnio-api-3.0.3.GA.jar
- %GLASSFISH_HOME%/glassfish/modules/javax.enterprise.deploy.jar(编译也要用到)
- %GLASSFISH_HOME%/glassfish/modules/deployment-client.jar
- %GLASSFISH_HOME%/glassfish/modules/common-util.jar
- %GLASSFISH_HOME%/glassfish/modules/deployment-common.jar
- %GLASSFISH_HOME%/glassfish/modules/hk2-core.jar
- %GLASSFISH_HOME%/glassfish/modules/auto-depends.jar
- %GLASSFISH_HOME%/glassfish/modules/glassfish-api.jar
- %GLASSFISH_HOME%/glassfish/modules/admin-cli.jar
其中%GLASSFISH_HOME%/glassfish/modules/javax.enterprise.deploy.jar和%JBOSS_HOME%/modules/javax/enterprise/deploy/api/main/jboss-jad-api_1.2_spec-1.0.0.Final.jar有一个就可以了
相关推荐
JSR133-memory_model-1_0-pfd2-spec.pdf JSR133中文版.pdf j-jtp02244-Java.theory.and.practice-Fixing.the.Java.Memory.Model.Part1/2.pdf Java Memory Model Pragmatics (transcript).pdf 读JSR133笔记 - 十年磨...
标签:undertow、websockets、jsr、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,...
标签:undertow、websockets、jsr、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...
比较-JSR-168-Java-Portlet-规范与-IBM-Portlet-API.docx
多数基于Java的门户服务器都支持JSR-168 portlet。 另一个好处是更易于联合。当portlet符合JSR-168规范时,通过Web Services for Remote Portlets (WSRP)生产者公开JSR-168 Portlet会更容易一些。WSRP提供了一...
This document is the proposed final draft version of the JSR-133 specification, the Java Memory Model (JMM) and Thread Specification. This specification is intended to be part of the JSR-176 umbrella ...
标签:undertow、jsr、websockets、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...
标签:undertow、jsr、websockets、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,...
java.lang.ClassNotFoundException: javax.measure.converter.ConversionException所需的jar
本文是JSR-133规范,即JavaTM内存模型与线程规范,由JSR-133专家组开发。本规范是JSR-176(定义了JavaTM平台 Tiger(5.0)发布版的主要特性)的一部分。本规范的标准内容将合并到JavaTM语言规范、JavaTM虚拟机规范...
JSR-000343 Java Message Service 2.0 javadocs for Evaluation.官网下载的,放在这里共享
JSR-75-135-172_Supported List 主流手机对JSR 75 135 172的支持!
Java第三方包JSR80说明文档,稀缺资源,只有英文版
Java EE Security (JSR-375) Specification.zip
Java EE Security (JSR-375) Reference Implementation.zip
本文是JSR-133规范,即JavaTM内存模型与线程规范,由JSR-133专家组开发。本规范是JSR-176(定义了JavaTM平台 Tiger(5.0)发布版的主要特性)的一部分。本规范的标准内容将合并到JavaTM语言规范、JavaTM虚拟机规范...
JSR-000343 Java Message Service 2.0 Specification for Evaluation.从官网下载的,在这里共享
spring3零配置注解实现Bean定义(包括JSR-250、JSR-330)
webservice中用到的jar,xfire-jsr181-api-1.0-M1.jar,xfire-jsr181-api-1.0-M1.jar