`
ivywang
  • 浏览: 33770 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

用JSR-88往Java EE应用服务器上部署应用

阅读更多

概述

每种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有一个就可以了

  • 大小: 61.6 KB
1
1
分享到:
评论
2 楼 lgfeng2012 2012-12-20  
lgfeng2012 写道
在jboss下进行部署的时候,好像有点问题:

<deployments>
        <deployment name="file:/C:/DOCUME~1/user/LOCALS~1/Temp/welcome.war" runtime-name="file:/C:/DOCUME~1/user/LOCALS~1/Temp/welcome.war">
            <content sha1="8cdc8d50d8f3dbe6c62ff4db9c38d49cb9521aa9"/>
        </deployment>
    </deployments>


不知道是我没设置好,还是怎么样,求指导???


部署的war的runtime-name为这个,这个怎么去访问呢。。。
file:/C:/DOCUME~1/user/LOCALS~1/Temp/welcome.war
1 楼 lgfeng2012 2012-12-20  
在jboss下进行部署的时候,好像有点问题:
<deployments>
        <deployment name="file:/C:/DOCUME~1/user/LOCALS~1/Temp/welcome.war" runtime-name="file:/C:/DOCUME~1/user/LOCALS~1/Temp/welcome.war">
            <content sha1="8cdc8d50d8f3dbe6c62ff4db9c38d49cb9521aa9"/>
        </deployment>
    </deployments>


不知道是我没设置好,还是怎么样,求指导???

相关推荐

    java_ee_sdk-8u1.zip

    3. **开发工具**:可能包含GlassFish服务器或其他兼容Java EE的服务器的版本,用于部署和测试应用程序。 4. **库文件**:包含Java EE 8实现所需的JAR文件,这些文件在开发和运行Java EE应用时会被引用。 5. **许可...

    java EE 7 & HTML5 应用开发——构建和部署同时支持桌面和移动设备的动态高性能企业级应用.rar

    首先,Java EE 7(Java Platform, Enterprise Edition 7)是Oracle公司发布的Java服务器端平台版本,它提供了丰富的API和服务器端服务,用于开发分布式、多层的Web应用。Java EE 7的重点在于提高开发效率、简化API,...

    Beginning Java EE 6 with GlassFish 3, 2nd Edition

    - **部署示例**: 通过详细的步骤指导读者如何在GlassFish 3上部署Java EE 6应用,并介绍了一些基本的管理和监控操作。 #### 四、实践示例 - **实体到Session Beans**: 书中通过实例演示了如何使用EJB 3.1和JPA 2.0...

    Java EE 7 Development with WildFly

    在本书《Java EE 7 Development with WildFly》中,作者深入探讨了如何使用WildFly服务器进行Java EE 7应用程序开发。Java EE 7(Java Platform, Enterprise Edition 7)是Java企业级应用开发的一个重要版本,它引入...

    Java EE Schema Resources

    在Java EE开发中,模式资源通常包括XML架构(Schema),它们定义了各种配置文件的结构和约束,比如web.xml(Web应用部署描述符)、ejb-jar.xml(Enterprise JavaBeans配置)、persistence.xml(持久化配置)等。...

    高教类课件:Java EE 6企业级应用开发教程

    Java EE 6是Java平台上用于构建分布式、多层架构的服务器端应用的框架,它提供了丰富的API和服务,以支持各种企业功能,如数据访问、事务处理、安全性和并发控制。 在本教程中,你将学习到以下关键知识点: 1. **...

    Java-EE-6.0

    Java EE(Java Platform, Enterprise Edition)是Oracle公司主导的Java平台,用于开发和部署企业级应用程序。Java EE 6是该平台的一个重要版本,于2009年发布,引入了多项新特性和改进,旨在简化开发过程,提高可...

    Java EE 7 API Documentation 官方英文版(html)

    10. **Batch Processing**:Java EE 7包含了JSR 352,定义了一种批处理应用的编程模型,简化了大数据处理任务。 总的来说,Java EE 7 API文档是开发者理解和利用这些技术的重要资源。通过官方的HTML版本,开发者...

    java-978-1-7886-2218-9:Java EE 8 应用程序开发 [视频]

    在"Java EE 8 应用程序开发 [视频]"课程中,你将逐步了解如何设置Java EE 8开发环境,搭建服务器,配置应用服务器(如Tomcat或WildFly),创建和部署Servlet、JSP、EJB等组件。此外,你还将学习如何使用JPA进行数据...

    Beginning EJB in Java EE8-2018

    在阅读本书的过程中,读者将学到如何利用Java EE8和EJB来设计、开发、测试和部署高效、可扩展的企业级应用程序。无论是初学者还是有经验的开发者,都可以从中获得宝贵的指导和启发,提升自己的专业技能。 总而言之...

    Java Web之高级应用

    - Java API for WebSocket(JSR 356)是Java EE 7及更高版本中的标准接口,用于WebSocket服务器端编程。 8. **性能优化** - 缓存技术如Ehcache和Redis可以提高数据访问速度,减少数据库压力。 - Tomcat服务器的...

    Java+EE+5+平台简介与开发

    - **部署**:将Web服务部署到应用服务器上。 - **测试**:使用客户端工具进行测试,确保服务按预期工作。 #### 五、比较 Java EE 5 平台和 J2EE 1.4 平台 最后,本节将对比Java EE 5 和之前的J2EE 1.4版本之间的...

    Java EE 5 SDK中文版+英文版

    5. **部署**:将应用程序打包成WAR或EAR文件,然后部署到生产环境的Java EE服务器上。 Java EE 5 SDK的中文文档("JavaEE_CN.chm")对于中国开发者来说尤其有用,它提供了详细的API参考和教程,帮助开发者更好地...

    Java EE 6 DOC API (html版,英文完整)

    5. **CDI 1.0 (Contexts and Dependency Injection)**:CDI为Java EE应用提供了依赖注入和上下文管理,允许开发者轻松地注入依赖对象,同时支持事件、拦截器和可选绑定。 6. **JAX-RS 1.1 (Java API for RESTful ...

Global site tag (gtag.js) - Google Analytics