摘要: 应用程序部署人员时常希望有这样一种机制:在开发阶段,由于应用程序的版本不断更新,当从开发人员处获得改进后的应用程序包时,如果可以通过某种自动化的方式自动卸载已经部署的应用程序并部署新版的应用程序,而不是通过管理控制台由人工来部署应用程序,将能够大大提高工作效率。本文通过对ANT和 WPS(WebSphere Process Server)所带的WS_ANT工具的介绍,并通过一个简单实例来展示使用 ANT 任务来自动地将应用程序部署到WPS。通过使用 ANT 任务,可以定义多个应用程序的部署方式并以无人照管方式在服务器上部署这些应用程序。
1. 简单实例场景描述
在实际的项目中,往往可以利用ANT做到自动化的构建和部署,步骤大致如下:
1.1 清除前一次构建产生的文件
1.2 从CVS或ClearCase获取最新的源代码
1.3 创建数据库并填充样例数据
1.4 构建企业应用程序归档文件(EAR)
1.5 启动应用服务器
1.6 在服务器上创建必要的资源(数据源或JMS连接工厂)
1.7 并安装应用程序
1.8 卸载应用程序
由于应用程序的构建已经存在大量的技术文章可供参考,本文仅仅侧重介绍SCA模块(Module)的自动部署。我们假定事先利用WID实现了一个名为HelloProcess的流程,流程的输入为某人的名字,比如“张三”,之后通过Java Snippet实现打印输出“你好吗,张三”并未流程的输出赋值。此流程非常简单并且毫无意义,只是为了以此来展示包含流程的应用如何实现自动部署。之后我们会通过bulid.xml脚本为应用打包并生成部署代码,启动WPS服务器后安装应用程序并启动应用程序。
1 ANT简述
Ant是基于Java的构建工具,属于Jakarta Apache的开源项目之一。它和Make很相似,但它使用Java类来实现具体的操作而不是操作系统提供的shell命令。Ant构建脚本使用XML文件格式,其中包含target和相对应的任务定义。Ant包含了大量内建的任务可以实现充足的常用构建操作,当然也可以使用Java来实现自己特定的 Ant任务来扩展构建能力,更多详情请参见附录部分的链接。
1.1 WS_ANT介绍
ws_ant命令是WebSphere内嵌提供的ANT工具,位于install_root /bin/ws_ant.bat|sh ,它已经事先设置了在 WAS 运行环境中 ANT 运行需要依赖的类库信息。本文介绍的 build.xml 需要通过 ws_ant 来执行。
2 场景实现
整个场景的实现步骤如下:
1) 在 WID 中新建 HelloProcessModule 并在其中实现一个简单流程 HelloProcess 。
2) 编写 build.xml 脚本实现以下任务:打包、部署、启动服务器、安装应用程序和启动应用程序。
3) 运行 ServiceDeploy 任务,以便为应用程序创建 EAR 文件。
4) 运行 startServer 任务启动 WebSphrere Process Server 实例。
5) 运行 InstallApp 任务,以便安装创建的 EAR 文件。
6) 运行 startApp 任务启动刚刚安装的应用程序。
7) 通过业务流程编排资源管理器 (BPC Explorer) 测试流程实例。
8) 运行 stopApp 、 uninstallApp 、 stopServer 任务恢复服务器初始状态。
下面重点介绍 HelloProcess 流程的实现, ANT 脚本的编制和运行。
4.1 HelloProcess流程服务实现
首先,在WID中新建一个Module,命名为HelloProcessModule。之后新建一个接口HelloProcessInterface,接口定义如下图所示:
图1 HelloProcessInterface接口定义
它将作为流程的对外接口供服务消费者调用。之后,新建名为HelloProcess的流程,如下图,
图2 HelloProcess BPEL流程实现
流程接受String类型的输入,也就是某人的名字,之后通过Java Snippet实现打印问候信息并给流程的输出赋值,“打印问候语句”的代码片断如下:
图3 Java Snippet代码实现
到此流程实现完毕,下一步是把流程实现拖拽到装配图进行服务组件的装配,如果需要开发Web客户端调用服务组件,还要新建Stand-alone References指向组件HelloWorldProcess的接口,此例中使用BPC测试流程组件,所以是否新建Stand-alone References都可以,装配图如下:
图4 HelloProcessModule装配图
好,目前整个SCA模块的开发就结束了,下一步我们将编写ANT脚本对模块进行打包部署并安装。
4.2 自动部署ANT脚本的实现和执行
build.xml脚本的完整实现会在附录中给出,下面分解介绍典型的脚本片断:
这里定义项目名称为AutoDeployModule,它缺省执行的任务是installApp,另外这里指定本脚本引用的属性文件init.properties。属性文件用于指定服务器及工作空间等信息。
<project name="AutoDeployModule" default="installApp" basedir=".">
<property file="init.properties" />
<project name="AutoDeployModule" default="installApp" basedir=".">
<property file="init.properties" />
接下来任务ServiceDeploy实现为模块(Module)生成部署代码并打包为ear,它的运行依赖于任务jarModule,它把WID的工作空间中的模块相应目录打包为Jar。
<target name="ServiceDeploy" depends="jarModule"> <taskdef name="servicedeploy" classname="com.ibm.websphere.ant.tasks.ServiceDeployTask"/> <servicedeploy scaModule="${WorkDir}/${ModuleName}.jar" ignoreErrors="true" workingDirectory="${WorkDir}" noJ2eeDeploy="true" cleanStagingModules="true"/> </target> <target name="jarModule"> <jar destfile="${WorkDir}/${ModuleName}.jar"> <fileset dir="${ModuleDir}" excludes=".**"/> </jar> </target>
在应用服务器启用安全性的时候,需要提供用户名和密码启动,这里startServer任务可以完成此操作。
<target name="startServer"> <taskdef name="wsStartServer" classname="com.ibm.websphere.ant.tasks.StartServer"/> <wsStartServer password="${password}" server="server1" username="${username}" wasHome="${wpsHome}"/> </target>
installApp任务的执行依赖于ServiceDeploy和startServer,也就是说安装应用程序的前提为生成可部署的应用程序和启动应用服务器实例。
<target name="installApp" depends="ServiceDeploy,startServer"> <echo message="开始安装应用程序..."/> <taskdef name="wsInstallApp" classname="com.ibm.websphere.ant.tasks.InstallApplication"/> <wsInstallApp conntype="SOAP" ear="${WorkDir}/${AppName}.ear" host="${host}" password="${password}" port="${port}" user="${username}" wasHome="${wpsHome}"/> <echo message="安装应用程序完毕..."/> </target>
最后通过startApp任务启动应用程序。
<target name="startApp"> <taskdef name="wsStartApplication" classname="com.ibm.websphere.ant.tasks.StartApplication"/> <wsStartApplication application="${AppName}App" conntype="SOAP" host="localhost" password="wpiadmin" port="8880" user="wpiadmin"/> </target>
以上说明了脚本定义的主要环节。一旦流程模块开发完成,我们就可以通过以下方式运行build.xml完成打包、部署、启动服务器,安装应用程序等一系列操作。首先把编制好的build.xml拷贝到install_root/bin目录下,在操作系统提示符下运行:
ws_ant.bat(sh) –f build.xml installApp
由于build.xml为默认脚本名称,installApp为默认执行的任务,这样其实只需ws_ant命令就可运行脚本。安装完毕后,可以通过 ws_ant.bat(sh) startApp 指定执行startApp任务来启动应用程序。
注意:在<taskdef name="servicedeploy" classname="com.ibm.websphere.ant.tasks.ServiceDeployTask"/& gt;,ServiceDeployTask的实现位于wpsanttasks.jar中,这个jar存在于install_root/lib目录下。另外,在后面我们将会用到的StartServer、InstallApplication等任务的实现也位于此目录下的wsanttasks.jar中。
4.3 使用BPC Explorer测试流程实现
当应用程序启动后,我们可以通过WPS内嵌的业务流程编排资源管理器进行测试,地址为
http://localhost:9080/bpc
。登陆后选择“我的流程模板”,会看到名为HelloProcess的流程模版,选中它,点击“启动实例”按钮,在流程输入消息框中输入一个名字,例如“郭德刚”,再点击“提交”按钮,输出界面如下:
图5 流程测试结果输出界面
另外,可以在SystemOut.log中同时看到“你好吗, 郭德刚?”的字样,至此测试流程实现成功。
4 小结
本文的主旨是通过一个简单样例介绍如何利用WebSphere Process Server提供的对ANT任务的支持实现SCA应用程序的自动部署。这个示例本身可能无法体现通过脚本实现自动过程的优势,然而在大型的项目中,团队协作开发的情况下,对于应用的部署和测试人员,如果可以参考本示例编制相应的ANT脚本,相信会大大提高工作效率并减少人为失误的产生。
5 术语
WPS:IBM WebSphere Process Server 是下一代业务流程集成服务器,它从公认的业务集成概念、应用程序服务器技术和最新开放式标准发展而来。IBM® WebSphere® Process Server 可支持面向服务的体系结构(SOA),是那些需要使用不同技术进行业务集成的业务应用程序的理想平台,使您能够在 SOA 中部署基于标准的流程集成解决方案。
WID:WebSphere Integration Developer 工具集,可使用诸如服务组件体系结构(SCA)编程模型和服务数据对象(SDO)数据模型等简化的集成机制,来创建业务集成解决方案。可使用 SCA 组件定义、变换、传递和映射 SDO 业务对象。WebSphere Integration Developer 可用来解决一个组织每天都要面对的集成问题。设计此产品的目的是为构建集成应用程序的人员提供一个完整的集成开发环境。为了简化和加速集成应用程序的开发,此环境提供了一层抽象层,它将您处理的以可视方式表示的组件与底层的实现分隔开来。
SCA:服务组件体系结构。服务组件体系结构”(它基于业界标准的面向服务的体系结构)以面向服务的方式表示所有业务流程 - Web Service、企业信息系统(EIS)服务资产、工作流程和数据库等。“服务组件体系结构”的目标是将业务集成逻辑与实现分隔开,以便集成开发者能专注于组装集成应用程序而不是实现细节。
BPEL流程:BPEL 流程 组件实现业务流程。它的实施语言是业界标准的 Web service 的业务流程执行语言(BPEL4WS)及其 IBM 扩展。BPEL 流程通过使用多个基本服务来实现潜在的长时间运行服务。
Module:模块 是一个部署单元,它确定将哪些工件打包到企业归档(EAR)文件中。为了提高性能,将一个模块内的组件进行排列,并且可以通过引用传递它们的值。可以将模块看成是一个限定作用域的机制;即,它设置工件的组织边界。
BPC Explorer:业务流程编排器资源管理器是一个 Web 应用程序,它实现了用于与业务流程和人员任务进行交互的通用 Web 用户界面。