服务部署及BPEL流程创建过程.docx
《服务部署及BPEL流程创建过程.docx》由会员分享,可在线阅读,更多相关《服务部署及BPEL流程创建过程.docx(21页珍藏版)》请在冰豆网上搜索。
服务部署及BPEL流程创建过程
本文介绍如何在tomcat服务器中部署服务,并用BEPL流程组合已有的服务组成新的服务的过程,包括一些要注意的重点步骤,和操作过程!
!
!
绝对有用!
!
!
!
实验要求及结果:
先部署两个服务add和sub实现加法和减法服务,用BPEL工程将这两个工程组成一个新的服务,实现两个数之和第三个数的数的差。
实验设备(环境)及要求
1.Java运行环境JDK1.7版本
2.Servlet容器运行环境Tomcat5.5.28版本
3.BPEL流程执行引擎工具ActiveBPEL或者ApacheODE
4.Web服务客户端运行环境AXIS21.5类库
(装jdk的教程网上都有,只需下载jdk包然后放到某个目录下,然后设置系统变量等,Tomcat5.5.28也是直接下载包,这个版本及之后的应该都不用安装,直接打开目录中的bin/startup.bat可以直接启动服务器,这之前得要根据启动tomcat的需求新建用户变量CATALINA_HOME为Tomcat的安装路径。
)
实验内容与步骤
内容:
编写BPEL流程CaculateComputer,分别调用两个数的加法和减法逻辑Web服务程序:
⏹客户端输入3个数字,BPEL流程接收请求,先调用加法Web服务,获得结果后,再将结果和第三个参数,作为减法Web的输入,调用减法Web服务,获得预期结果,并返回客户。
其中我用的是我第一次实验的一个CaculatorService的服务,其中实现了add和sub方法。
⏹例如:
输入:
3,6.5,2
☐首先调用服务的add方法:
3+6.5=9.5
☐然后调服务的sub方法:
9.5-2=7.5
☐返回客户7.5
⏹编写调用客户端程序,调用CaculateComputerBPEL,并输出预期的计算结果
步骤:
1.搭建BPEL流程执行引擎平台环境
分别安装Java运行环境、Servlet容器运行环境、BPEL流程执行引擎运行环境
●JDK1.7
●Tomcat5.x
●部署ApacheODE1.3war
●安装BPELDesigner插件
1.1部署ApacheODE1.3war
下载apache-ode-war-1.3.3.zip并将文件解压,将目录中的ode.war文件放到\webapps目录中(本文使用的Tomcat的版本是5.5.28),并启动Tomcat。
1.2安装BPELDesigner插件
1)启动Eclipse,选择Help->InstallNewSoftware,进入Installwizard,如下所示
2)选择Add按钮,并输入如下地址:
http:
//download.eclipse.org/bpel/site/
3)选择全部安装,安装成功后,在Eclipse中选择File->New->Other,可以查看到BPEL选项,如下图所示:
至此,BPEL开发环境配置完成。
2.测试web服务运行环境运行是否正常
a.在tomcat安装目录的bin目录中找到startup.bat运行启动tomcat,在浏览其中其中数入URL:
http:
//localhost:
8080/出现tomcat的标志页面如下所示,表示tomcat正常启动。
b.在浏览器地址栏中输入如下的URL:
http:
//localhost:
8080/ode/,如果在浏览器中显示如下图所示,表示运行正常。
3.部署加减法的服务
1.编写服务端逻辑实现类
在eclipse中编写Java程序分别实现CalculatorAdd和CalculatorSub接口及实现这两个接口的类CaculatorService.,见源程序包中server/CaculatorAdd.java及server/CaculatorSub.java及server/CaculatorService.java。
后继的任务可以通过两种方法完成,一种方法是手动编写services.xml文件并与刚才写的那些服务实现类打包生成**.aar文件然后放到指定目录即能部署好这个服务,另一种方法是利用一个Axis2的插件,按照向导在指定目录自动生成上述文件,两者的最终结果相同。
手动方式:
2.编写AXIS的服务发布描述文件services.xml。
把它放到工程文件的bin目录下的META-INF目录下,services.xml的内容如下所示:
3.打包将服务
把实现类和service.xml,按照标准格式打包为ws.aar.:
进入工程目录的bin文件夹下用jarcvfws.aar.命令将此目录的所有内容打包为ws.aar文件;
4部署服务
拷贝打包好的wsaar文件到%tomcat%下的\webapp\axis2\WEB-INF\services目录下,在浏览器中输入http:
//localhost:
8070/axis2/services/listServices查看服务列表,发现会有CaculatorService服务加进来,如下所示:
自动方式:
2.安装axis的eclipse插件,
下载axis插件
a).axis2-eclipse-codegen-plugin-1.6.2
b).axis2-eclipse-service-plugin-1.6.2
安装
把刚才下的两个插件包解压后放置Eclipse安装目录下plugins的文件夹中.解压后都放到eclipse的plugins目录下,在eclipse中,file-->new.-->others..里面会出现axis2wizards.
3.打包并部署
右键工程-->新建-->其他-->Axis2Wizards-->Axis2Service Archiver,如图所示一步一步的next:
下一步选择编写的这些服务类的Class文件所在位置:
下面两步是加wsdl文件和liabrares,直接skip了,然后选择自动生成services.xml文件,然后是给服务命名,并通过服务类load它的方法,填好服务类名,load后如下所示:
这里可以看到这个服务类中的一些方法,其中有要用的Add和Sub方法。
下一步就是选择输出文件的位置为%tomcat%下的\webapp\axis2\WEB-INF\services目录(如果选择%tomcat%下的\webapp\ode\WEB-INF\services就会在ode服务器中部署),这一步相当于上述手动的第6步,把生成的.aar文件放到这个目录下,实现在tomcat中的热部署。
然后会提示:
这代表服务已经部署完毕,自动部署完成。
4.验证
在浏览器中输入http:
//localhost:
8080/axis2/services/listServices查看在axis2中部署的服务看是否有CaculatorServices服务,如下所示,说明部署成功,下一步编写客户端程序对这个服务进行调用。
(如果部署在ode服务器中则http:
//localhost:
8080/ode/services/listServices查看,后面的BPEL项目用到的是ode服务器,所以应该部署在ode服务器中,或者将部署的服务可以从axis2的services文件夹中拷贝到ode对应的文件夹中)
8.编写相应Web服务的客户端调用程序
使用RPC方式调用WebService方式。
源代码见:
附录
四.实验结果与数据处理
通过RPC方式调用CaculatorService能够返回正确的数据,如下图是两次次测试:
先提示输入要进行计算的两个数,然后通过调用CaculatorService的Add和Sub方法计算这两个数的和及差,返回结果并打印,第二次的减法结果应该是因为计算机中对浮点数数据表示规则造成有时候会出现一点点误差。
利用第一次试验的结果在Axis2中部署了CaculatorService的服务,在这个服务中实现了add和sub方法,现在把那个服务的打包结果(见./my_service.aar)放到%tomcat-home%\webapps\ode\WEB-INF\services目录下,并通过ode的Web服务控制台查看部署的服务是否正确(http:
//localhost:
8080/ode/services/listServices,当时我的电脑上8080端口被占,所以图中部署的端口是8070端口),如下图所示如果出现这一条,则表示正确部署,并获得加CaculatorService服务的WSDL描述。
4.BPEL实例开发、部署
4.1创建BPEL工程。
在点击File->New->Other,然后选择BPEL2.0->BEPLProject,在弹出的对话框中输入项目名BPELCaculator。
4.2创建BPEL流程,
右键BPEL工程,点击New->Other,选择BPEL2.0->NewBPELProcessFile,出现NewBPELProcess对话框,输入流程名CaculateComputer,名字空间设为:
http:
//nwpu/soa/bpel/exp,然后next再选择同步流程(许多教程中说的是刚开始的对话框中选则同步流程,而现在是在新建流程文件时第一个对话框中没有选择同步流程,而是在next之后的对话框中选择同步流程,不然默认的选择的是异步流程,如果是异步流程默认生成的会有些不同)。
点击Finish完成(见./BPELCaculator/bepelContent/)。
4.3导入加法服务和减法服务的wsdl文件
将CaculatorService.wsdl复制到工程目录里(见./BPELCaculator/bepelContent/)。
4.4设置伙伴链接
a)在右上角的PartnerLinks,增加一个伙伴链接,分别是CaculatorPL。
如下图所示:
b)设置伙伴链接,右击CaculatorPL,选择属性打开属性视图,在属性视图中Details页面中点Browser,点AddWSDL把用到的一个WSDL即CaculatorService.wsdl加进来如下图,选上CaculatorServicePortType接口,点Ok,弹出伙伴链接类型定义,把名字取为CaculatorPLT,点Next。
要求输入RoleName,这里输入“CaculatorProvider”,点Finish完成。
c)然后在属性视图中把ParterRole选为CaculatorProvider。
如下图所示:
4.5修改CaculateComputerArtifacts.wsdl中的输入输出
因为其默认的输入输出不符合要求,打开CaculateComputerArtifacts.wsdll文件、,转到设计视图里。
如下图所示:
单击input后边对应的箭头,打开一个新的Editor对输入消息进行配置。
进行增加元素,并设置元素的类型,结果如下,其中a,b分别表示需要加的2个值,c用来表示第三个要减的数。
同理,单击output后边对应的箭头,修改类型,结果如下:
4.6创建调用服务时需要的变量
每次invoke一个服务时都要有对应的变量,同时要进行赋值。
我们这里要调用加法服务和减法服务。
因此需要额外加入addRequest,addResponse,subRequest,subResponse加完后的效果如下:
4.7配置变量
点上addRequest变量,属性视图中切换到Details页,点右上角的Browse..按钮,打开类型选择对话框。
addRequest是加法服务的输入,因此把它的类型设为加法服务里的输入定义就可以了。
一个变量的类型可以是简单类型,也可以是复杂类型,还可以是wsdl中的Message定义。
这里就把addRequest的类型设为CaculatorService服务中的AddRequestMessage类型(勾选上上方message类型的选项),如下图所示。
同理,其他3个变量也做相应的处理。
4.8BPEL流程设计
a)打开控件视图,Window->ShowView->Palette,根据实验要求,拖入空间进行流程设计,首先是将输入的数值assign给add方法,然后进行add服务调用,然后将结果和输入的第三个数值assign给sub方法,然后进行sub服务调用,最后将减法的结果assign给输出,所以基本结构如下:
b)配置assignAdd控件,右键打开它的属性视图的detail页面,BEPL中的变量赋值只能是一个一个的赋,不能直接把input赋给addRequest(当然这里也不匹配,即使匹配也不行),而只能把input下的参数挨个赋给addRequest。
如下图所示,new一个复制过程,将input的值a赋给addRequest的值a,(弹出是否初始化变量的对话框,选择yes)同理,将input的值b赋给addRequest的值b。
同理,将其他的AssignSub,和AssignOut配置一下,AssignSub是将addResponse的结果和input的c给subRequest的a和b;AssignOut将subResponse的结果给output。
c)对Invoke语句设置,Invoke的作用是调用伙伴链接对应接口下的对应操作,还需要指定输入输出变量。
右键选择InvokeAdd(Invoke),在属性视图的Details页面中进行如下配置:
partnerLink选择之前配置好的CaculatorPL,执行的方法选择它的Add方法,然后它的输入输出变量选择之前配置好的addRequest和addResponse变量(去掉useWsdlmessage.,,,前面的对勾),同理配置InvokeSub。
d)由于插件本身的bug吧,刚开始设置的addresslocation这里改变,还是用了自动配置的地址,所以要将CaculateComputerArtifacts.wsdl文件的Server的soap:
address需要手动修改,默认生成的地址是:
addresslocation="http:
//localhost:
8080/CaculateComputer"/>这里需要修改成:
addresslocation="http:
//localhost:
8080/ode/processes/BPELCaculator"/>其中BPELCaculator是工程名。
4.9BPEL流程发布
BPEL流程最终的目的也是发布成一个web-service,只不过这个web服务自己基本上不实现功能,主要是通过调用别人的功能来完成任务。
因此,最后也要把流程对应的WSDL发布出去。
默认生成的WSDL只有类型定义,消息定义,和操作定义,缺少绑定信息和服务定义。
选择File->NewOtherBPEL2.0ApacheODEDeploymentDescriptor,如下所示,直接Finish即会生成一个deploy.xml文件(这时保证生成的deploy.xml文件和其他的那些bpel和wsdl文件在一个目录中,否则可能没法选择端口)。
打开配置伙伴端口:
对端口进行配置,如下图所示:
四BPEL运行与测试
1.创建一个ODE服务器(网上很多,其实就是建一个工程一样,在file中新建一下,然后选择others然后选择server文件夹中的server,然后选择ode服务器,然后再window的preferrence中选择服务器中的ode服务器进行配置,如下图:
ode’homederect应该是是ode在tomcat中的目录)
然后右键启动(先启动),然后再选择叫加入服务器中的BEPEL工程,选择BPELCaculator工程如下图所示,这是控制台应该会有一些加载的信息。
2.测试服务是否部署好了,在浏览器输入http:
//localhost:
8080/ode/services/listServices然后发现有如下服务已经部署好了:
3.然后测试两个wsdl文件,对Caculatorwsdl,选择WebServices->Testwithwebserviceexplorer,选择CaculatorServiceSoap11Binding中的add方法,进行测试,测试结果如下所示:
同理,对Sub方法进行测试
对项目中自动生成的CaculateComputerArtifacts.wsdl也进行上述测试,结果如下图所示,表示BPEL流程设计正确,已经成功通过这个BPEL项目实现实验的要求,经过多次测试证明可以达到预期的效果,如下图所示,输入的a,b,c,分别为3,4,5,结果为3+4-5=2.0
4.编写相应Web服务的客户端调用程序
使用RPC方式调用WebService方式。
源代码见:
client/MyClient.java
五.分析与讨论
分析:
通过这次实验,我大概对BEPEL的业务流程有些了解,它是各种不同功能的活动相连的一组由相关的任务,并且按照一定的业务逻辑执行,Web服务采用BPEL标准描述业务交互中参与者的实际行为,并将一组现有的服务组合起来,从而定义一个新的Web服务。
通过BPEL流程组织之前部署的一个服务的功能,实现组合功能,而它自己本身没有写实际运行的过程,只是按照流程调用别的服务的功能,这样组合各种服务的功能就可以完成一个新的任务!
思考问题讨论:
问题1:
理解BPEL中不同标签定义的实际语义含义
这次试验我用到的invoke和assign标签比较多,所以说一下这两个,invoke是执行的意思,对它的配置合作伙伴链接和它对应服务的一个方法,就是执行这个服务的这个方法,如invokeAdd,给它配置的是CaculatorPL和它的add方法,以及之前配置好的输入输出参数,那么到invokeAdd方法时就会执行CaculatorService的add方法。
Assign主要是对变量的赋值,如实验中用到的把加法的结果赋值给减法的一个输入参数等,通过assign就会进行参数的传递。
问题2:
采用BPEL来组合多个Web服务成为一个新的Web服务,有什么优点?
个人觉得,它的最大的有的就是对现有的服务进行组合,形成一个新的服务,而不用重新写一个这样的服务,这个在实现的服务比较复杂的时候应该比较有用,假如一个服务特别复杂,去直接从头写可能是一件比较大的任务,但是如果能够利用现有的服务组合起来实现可能是比较好实现的,而且可以通过这种方法可以实现各种服务。
在整个实验过程中遇到不少的问题,现在做一总结。
问题1:
:
在官网上下载tomcat没有安装程序不知道怎么安装并启动
原来下载的是绿色免安装版,直接在软件目录下的bin目录下运行startup.bat批处理文件,但是还是无法启动,打开这个批处理文档发现,命令执行在CATALINA_HOME作为tomcat的安装目录来进行,这个从辅助文档中running.txt中也有提示,所以加上这个环境变量值为tomcat的bin目录所在路径,后来为了方便直接下载了Eclipse的tomcat插件com.sysdeo.eclipse.tomcat_3.2.1放在Eclipse的plugins目录下,然后在Eclipse中可以看到tomcat的标志,利用这个可以直接启动或关闭tomcat。
问题2:
下载的axis2-1.6.2-bin的bin目录加到了path中,但是写程序时发现有一些包找不到,没法import进来。
在Eclipse中直接新建一个UserLibrary包括了下载的axis2-1.6.2-bin中的所有.jar包,然后在此工程中的buildpath中把这个UserLibrary添加进来,有些axis2包就可以import进来了。
问题3:
打开服务列表发现新部署的服务出错提示找不到类文件。
应该把编译好的.class文件和services.xml文件打包,而不是把.java文件和services.xml文件打包。
问题4:
上述步骤之后,打开服务列表发现新部署的服务出错Theservices.xmlfilecannotbefoundfortheservice,但是我已经加入了Services.xml文件了。
应该把services.xml文件放到META-INF文件夹中和其他类文件打包。
如:
我的工程文件夹下的bin目录下有server目录中有我的CaculatorService.class,CaculatorAdd.class,和CaculatorSub.class,在bin目录下建一个META-INF文件夹下放入services.xml文件然后在bin目录下直接用jarcvfws.arr.命令将这个目录下的所有打包为ws.aar,这里之前看ppt是没有注意到最后的“.”,然后看了jar命令的用法然后发现了错误。
问题5:
上述步骤做了之后,发现还有错误提示invalidUTF-8startby0xa1...
原来这里的services.xml文件要求是UTF-8编码的,而一般记事本编写保存默认是ASCI所以不兼容,识别不了。
所以在保存services.xml文件的时候自己把编码模式改成UTF-8。
问题6:
上述修改之后,发现还是有错误Unexpectedcharacter'?
'(code12288/0x3000!
我想可能还是有些隐藏的字符不太符合要求,因为这个Services.xml是我在别处拷贝的然后改了改,在word和ppt文档中有很多隐藏字符吧,然后索性自己敲了一遍这个文件然后保存,然后打包替换。
经过上述步骤在然后在listservice页面终于找到了没有出错的CaculatorService服务!
问题1:
生成的deploy.xml文件没法手动选择partnerLink关联的端口
因为生成的deploy.xml文件默认生成目录是工程下的bepelContent目录下,而其他的.文件都直接在工程目录下,所以找不到其他文件中定义的端口,把他们都放到bepelContent目录下就可以了!
问题2:
打开ode服务器后访问不了要用的CaculatorServie服务
因为之前没有想着把那个服务部署到ode文件夹下,后来想到这样ode服务器上是没有这个服务的所以没法访问它的方法,把要用的CaculatorService服务加到ode的service文件夹下,查看ode服务列表发现有CaculatorService服务,这时候打开ode服务器可以访问到要用的服务。
问题3:
在ode服务器中直接添加BPEL项目启动后,对其生成的wsdl文件进行testwebservicewithexplorer不能成功,而且ode服务列表内也没有添加新的bepel整合的服务。
后来发现这个问题可以通过先启动ode服务器,再添加BPEL工程,这样就热部署了,在ode的服务列表中就可以发现新部署的BPELCaculator服务,然后testwebservicewithexplorer测试也可以了!
附录:
客户端调用部署的axis2的服务