概述
每种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有一个就可以了
相关推荐
3. **开发工具**:可能包含GlassFish服务器或其他兼容Java EE的服务器的版本,用于部署和测试应用程序。 4. **库文件**:包含Java EE 8实现所需的JAR文件,这些文件在开发和运行Java EE应用时会被引用。 5. **许可...
首先,Java EE 7(Java Platform, Enterprise Edition 7)是Oracle公司发布的Java服务器端平台版本,它提供了丰富的API和服务器端服务,用于开发分布式、多层的Web应用。Java EE 7的重点在于提高开发效率、简化API,...
- **部署示例**: 通过详细的步骤指导读者如何在GlassFish 3上部署Java EE 6应用,并介绍了一些基本的管理和监控操作。 #### 四、实践示例 - **实体到Session Beans**: 书中通过实例演示了如何使用EJB 3.1和JPA 2.0...
在本书《Java EE 7 Development with WildFly》中,作者深入探讨了如何使用WildFly服务器进行Java EE 7应用程序开发。Java EE 7(Java Platform, Enterprise Edition 7)是Java企业级应用开发的一个重要版本,它引入...
在Java EE开发中,模式资源通常包括XML架构(Schema),它们定义了各种配置文件的结构和约束,比如web.xml(Web应用部署描述符)、ejb-jar.xml(Enterprise JavaBeans配置)、persistence.xml(持久化配置)等。...
Java EE 6是Java平台上用于构建分布式、多层架构的服务器端应用的框架,它提供了丰富的API和服务,以支持各种企业功能,如数据访问、事务处理、安全性和并发控制。 在本教程中,你将学习到以下关键知识点: 1. **...
Java EE(Java Platform, Enterprise Edition)是Oracle公司主导的Java平台,用于开发和部署企业级应用程序。Java EE 6是该平台的一个重要版本,于2009年发布,引入了多项新特性和改进,旨在简化开发过程,提高可...
在"Java EE 8 应用程序开发 [视频]"课程中,你将逐步了解如何设置Java EE 8开发环境,搭建服务器,配置应用服务器(如Tomcat或WildFly),创建和部署Servlet、JSP、EJB等组件。此外,你还将学习如何使用JPA进行数据...
在阅读本书的过程中,读者将学到如何利用Java EE8和EJB来设计、开发、测试和部署高效、可扩展的企业级应用程序。无论是初学者还是有经验的开发者,都可以从中获得宝贵的指导和启发,提升自己的专业技能。 总而言之...
- Java API for WebSocket(JSR 356)是Java EE 7及更高版本中的标准接口,用于WebSocket服务器端编程。 8. **性能优化** - 缓存技术如Ehcache和Redis可以提高数据访问速度,减少数据库压力。 - Tomcat服务器的...
- **部署**:将Web服务部署到应用服务器上。 - **测试**:使用客户端工具进行测试,确保服务按预期工作。 #### 五、比较 Java EE 5 平台和 J2EE 1.4 平台 最后,本节将对比Java EE 5 和之前的J2EE 1.4版本之间的...
10. **Batch Processing**:Java EE 7包含了JSR 352,定义了一种批处理应用的编程模型,简化了大数据处理任务。 总的来说,Java EE 7 API文档是开发者理解和利用这些技术的重要资源。通过官方的HTML版本,开发者...
5. **部署**:将应用程序打包成WAR或EAR文件,然后部署到生产环境的Java EE服务器上。 Java EE 5 SDK的中文文档("JavaEE_CN.chm")对于中国开发者来说尤其有用,它提供了详细的API参考和教程,帮助开发者更好地...
5. **CDI 1.0 (Contexts and Dependency Injection)**:CDI为Java EE应用提供了依赖注入和上下文管理,允许开发者轻松地注入依赖对象,同时支持事件、拦截器和可选绑定。 6. **JAX-RS 1.1 (Java API for RESTful ...