日期:2014-05-16 浏览次数:20381 次
每种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包里重要的接口有:
二、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、处理完之后释放到应用服务器的连接
代码写好后,启动应用服务器产品,运行就可以了。
附件是支持JBoss 7.1.1和GlassFish 3的部署示例代码。代码包含如下文件:
假设JBoss 7.1.1安装在%JBOSS_HOME%目录,GlassFish 3安装在%GLASSFISH_HOME%目录,ClassPath为: