版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本文介绍如何在 tomcat 服务器中部署服务, 并用 BEPL 流程组合已有的服务组成新的服 务的过程, 包括一些要注意的重点步骤, 和 操作过程 ! 绝对有用!先部署两个服务 add和 sub 实现加法和减法 服务,用 BPEL 工程将这两个工程组成一个 新的服务, 实现两个数之和第三个数的数的 差。实验设备(环境)及要求1 Java 运行环境 JDK1.7 版本2 Servlet 容器运行环境 Tomcat 5.5.28 版本3 BPEL 流程执行引擎工具 ActiveBPEL 或者 Apache ODE4. Web服务客户端运行环境 AXIS2 1.5 类库(装 jdk 的教程网上都有
2、,只需下载 jdk 包然后放到某个目录下,然后设置系统变量等,Tomcat5.5.28 也是直接下载包,这个版本及之后的应该都不用安装,直接打开目录中的 bin/startup.bat 可以直接启动服务器 ,这之前得要根据启动tomcat 的需求新建用户变量CATALINA HOME 为 Tomcat 的安装路径。实验内容与步骤内容:编写 BPEL 流程 CaculateComputer ,分别调用两个数的加法和减法逻辑 Web 服务程序:客户端输入 3 个数字, BPEL 流程接收请求,先调用加法 Web服务,获得结果后, 再将结果和第三个参数,作为减法 Web 的输入,调用减法 Web 服
3、务,获得预期结 果,并返回客户。其中我用的是我第一次实验的一个 CaculatorService 的服务,其 中实现了 add 和 sub 方法。例如:输入: 3, 6.5,2首先调用服务的 add 方法: 3+6.5 = 9.5然后调服务的 sub方法: 9.5-2 =7.5 返回客户 7.5编写调用客户端程序,调用 CaculateComputer BPEL ,并输出预期的计算结果步骤:1搭建 BPEL 流程执行引擎平台环境分别安装 Java运行环境、 Servlet 容器运行环境、 BPEL 流程执行引擎运行环境JDK1.7Tomcat 5.x部署 Apache ODE1.3 war安装
4、 BPEL Designer 插件1.1 部署 Apache ODE1.3 war下载 apache-ode-war-1.3.3.zip 并将文件解压,将目录中的 ode.war 文件放到 <Tomcat 安装目录 >webapps 目录中(本文使用的 Tomcat 的版本是 5.5.28),并启动 Tomcat。1.2 安装 BPEL Designer 插件1) 启动 Eclipse ,选择 Help -> Install New Software ,进入 Install wizard ,如下所示2) 选择 Add 按钮,并输入如下地址:http:/download.ecl
5、/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/o
6、de/ ,如果在浏览器中显示如下图所示,表示运行正常。3部署加减法的服务1编写服务端逻辑实现类services.xml 文件并与刚才在 eclipse 中编写 Java 程序分别实现 CalculatorAdd 和 CalculatorSub 接口及实现这两个 接口的类 CaculatorService., 见源程序包中 server/CaculatorAdd.java 及 server/CaculatorSub.java 及 server/CaculatorService.java 。后继的任务可以通过两种方法完成,一种方法是手动编写写的那些服务实现类打包生成 *.aar 文件然后放到指定目
7、录即能部署好这个服务, 另一种方 法是利用一个 Axis2 的插件,按照向导在指定目录自动生成上述文件,两者的最终结果相 同。手动方式:2. 编写 AXIS 的服务发布描述文件 services.xml 。 把它放到工程文件的 bin 目录下的 META-INF 目录下,services.xml 的内容如下所示:<service name="CaculatorService" scope="application"> <description>The Caculator Service </description> &
8、lt;messageReceivers><messageReceiver mep="/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/><messageReceiver mep="/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceive
9、r"/> </messageReceivers><parameter name="ServiceClass"> server.CaculatorService</parameter></service>3. 打包将服务把实现类和 service.xml ,按照标准格式打包为 ws.aar.:进入工程目录的 bin 文件夹下 用 jar cvf ws.aar . 命令将此目录的所有内容打包为ws.aar 文件;4 部署服务拷贝打包好的 wsaar文件到 %tomcat%下的 webappaxis2WEB-INFs
10、ervices 目录下,在 浏览器中 输入 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 的 plug
11、ins 目录下,在 eclipse 中, file->new.->others. 里面会出现 axis2 wizards .3. 打包并部署右键工程 ->新建->其他 ->Axis2 Wizards->Axis2 Service Archiver, 如图所示一步一 步的 next:下一步选择编写的这些服务类的 Class 文件所在位置 :下面两步是加 wsdl 文件和 liabrares ,直接 skip 了,然后选择自动生成 services.xml 文 件,然后是给服务命名,并通过服务类 load 它的方法,填好服务类名, load 后如下所示:这里可以
12、看到这个服务类中的一些方法,其中有要用的Add和 Sub 方法。下一步就是选择输出文件的位置为 %tomcat%下的webappaxis2WEB-INFservices 目录(如果选 择 %tomcat% 下的 webappodeWEB-INFservices 就会在 ode 服务器中部署 ),这一步相当于 上述手动的第 6步,把生成的 .aar文件放到这个目录下,实现在 tomcat 中的热部署。然后会提示:这代表服务已经部署完毕,自动部署完成。4. 验证查看在 axis2 中部署的服务看是否有 CaculatorServices 部署成功,下一步编写客户端程序对这个服务进行调用 器中则 h
13、ttp:/localhost:8080/ode/services/listServices在浏览器中输入 http:/localhost:8080/axis2/services/listServices 服务, 如下所示,说明 如果部署在 ode 服务 查看 , 后面的 BPEL项目用到的是 ode 服务器,所以应该部署在 ode服务器中,或者将部署的 服务可以从 axis2 的 services 文件夹中拷贝到 ode 对应的文件夹中)8. 编写相应 Web 服务的客户端调用程序使用 RPC 方式调用 WebService 方式。源代码见:附录四实验结果与数据处理通过 RPC方式调用 Cac
14、ulatorService 能够返回正确的数据,如下图是两次次测试:先 提示输入要进行计算的两个数,然后通过调用 CaculatorService 的 Add 和 Sub 方法计算这 两个数的和及差, 返回结果并打印, 第二次的减法结果应该是因为计算机中对浮点数数据表 示规则造成有时候会出现一点点误差。利用第一次试验的结果在 Axis2 中部署了 CaculatorService 的服务,在这个服务 中实现了 add 和 sub 方法,现在把那个服务的打包结果(见./my service.aar) 放到%tomcat-home%webappsodeWEB-INFservices 目录下,并通过
15、 ode 的 Web 服务控 制台查看部署的服务是否正确 ( http:/localhost:8080/ode/services/listServices ,当时我的电脑上 8080 端口被占,所以图中部署的端口是 8070 端口),如下图所示如果出现这 一条,则表示正确部署,并获得加 CaculatorService 服务的 WSDL 描述。4 .BPEL 实例开发、部署4.1 创建 BPEL 工程。在点击 File->New->Other ,然后选择 BPEL 2.0 ->BEPL Project ,在弹出的对话框中输 入项目名 BPELCaculator 。4.2 创建
16、 BPEL 流程, 右键 BPEL 工程,点击 New->Other ,选择 BPEL 2.0- > New BPEL Process File ,出现 New BPEL Process对话框,输入流程名 CaculateComputer,名字空间设为 :http:/nwpu/soa/bpel/exp , 然后 next 再选择同步流程(许多教程中说的是刚开始的对话框中选则同步流程,而现 在是在新建流程文件时第一个对话框中没有选择同步流程,而是在 next 之后的对话框 中选择同步流程,不然默认的选择的是异步流程,如果是异步流程默认生成的会有些 不同)。点击 Finish 完成(见
17、 ./BPELCaculator/bepelContent/) 。4.3导入加法服务和减法服务的 wsdl 文件将 CaculatorService.wsdl 复制到工程目录里 (见./BPELCaculator/bepelContent/ )。4.4 设置伙伴链接a) 在右上角的 Partner Links ,增加一个伙伴链接,分别是 CaculatorPL 。如下图所 示:b) 设置伙伴链接, 右击 CaculatorPL ,选择属性打开属性视图, 在属性视图中 Details 页面中点 Browser ,点 Add WSDL 把用到的一个 WSDL 即 CaculatorService.
18、wsdl 加进来如下图,选上 CaculatorServicePortType 接口,点 Ok, 弹出伙伴链接类型 定义,把名字取为 CaculatorPLT ,点 Next。要求输入 Role Name,这里输入 “ CaculatorProvider ” ,点 Finish 完成。c) 然后在属性视图中把 ParterRole 选为 CaculatorProvider 。如下图所示:4.5 修改 CaculateComputerArtifacts.wsdl 中的输入输出 因为其默认的输入输出不符合要求,打开 CaculateComputerArtifacts.wsdll 文 件、,转到设计
19、视图里。如下图所示:单击 input 后边对应的箭头, 打开一个新的 Editor 对输入消息进行配置。 进行增加元素, 并设置元素的类型,结果如下,其中a,b分别表示需要加的 2个值, c用来表示第三个要减的数。同理,单击 output 后边对应的箭头,修改类型,结果如下:4.6 创建调用服务时需要的变量每次 invoke 一个服务时都要有对应的变量, 同时要进行赋值。 我们这里要调用加法服 务和减法服务。因此需要额外加入 addRequest,addResponse,subRequest,subResponse加完后 的效果如下:4.7 配置变量点上 addRequest变量,属性视图中切
20、换到 Details 页,点右上角的 Browse.按钮, 打 开类型选择对话框。 addRequest 是加法服务的输入,因此把它的类型设为加法服务里的输 入定义就可以了。一个变量的类型可以是简单类型,也可以是复杂类型,还可以是 wsdl 中 的 Message 定义。这里就把 addRequest 的类型设为 CaculatorService 服务中的 AddRequest Message类型(勾选上上方 message类型的选项) ,如下图所示。同理,其他 3 个变量也做 相应的处理。4.8 BPEL 流程设计a)打开控件视图, Window->Show View->Pale
21、tte ,根据实验要求,拖入空间进行流程 设计,首先是将输入的数值 assign给 add 方法,然后进行 add服务调用,然后将结果和输 入的第三个数值 assign 给 sub方法,然后进行 sub服务调用,最后将减法的结果 assign 给 输出,所以基本结构如下:b)配置 assignAdd 控件,右键打开它的属性视图的 detail 页面, BEPL 中的变量赋值只能 是一个一个的赋, 不能直接把 input 赋给 addReques(t 当然这里也不匹配, 即使匹配也不行) 而只能把 input 下的参数挨个赋给 addRequest。如下图所示, new 一个复制过程,将 inp
22、ut的值 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),在属性视图的
23、 Details 页面中进行如下配 置:partnerLink 选择之前配置好的 CaculatorPL ,执行的方法选择它的 Add 方法, 然后它的输入 输出变量选择之前配置好的 addRequest 和 addResponse变量(去掉 use Wsdl message.,前面 的对勾),同理配置 InvokeSub 。d )由于插件本身的 bug 吧,刚开始设置的 address location 这里改变,还是用了自动 配置的地址,所以要将 CaculateComputerArtifacts.wsdl 文件的 Server 的 soap: address需要 手动修改, 默认生成的地
24、址是: <soap:addresslocation="http:/localhost:8080/CaculateComputer"/>这 里 需 要 修 改 成 : <soap:addresslocation="http:/localhost:8080/ode/processes/BPELCaculator"/> 其 中 BPELCaculato r 是工程名。4.9 BPEL 流程发布BPEL 流程最终的目的也是发布成一个 web-service ,只不过这个 web 服务自己基本上不 实现功能,主要是通过调用别人的功能来完成任
25、务。因此,最后也要把流程对应的 WSDL 发布出去。默认生成的 WSDL 只有类型定义,消息定义,和操作定义,缺少绑定信息和服 务定义。选择 File->New Other BPEL 2.0 Apache ODE Deployment Descriptor ,如下所示,直 接 Finish 即会生成一个 deploy.xml 文件( 这时保证生成的 deploy.xml 文件和其他的那些 bpel 和 wsdl 文件在一个目录中,否则可能没法选择端口 )。打开配置伙伴端口:对端口进行配置,如下图所示:四 BPEL 运行与测试1. 创建一个 ODE 服务器(网上很多,其实就是建一个工程一样
26、,在 file 中新建一下, 然后选择 others 然后选择 server 文件夹中的 server,然后选择 ode 服务器 ,然后再 window 的 preferrence 中选择服务器中的 ode服务器进行配置,如下图: ode' home derect 应该是是 ode 在 tomcat 中的目录)然后右键启动 (先启动 ),然后再选择叫加入服务器中的 BEPEL 工程, 选择 BPELCaculator 工程如下图所示,这是控制台应该会有一些加载的信息。2. 测试服务是否部署好了,在浏览器输入 http:/localhost:8080/ode/services/listS
27、ervices 然后发现有如下服务已经部署好了:3. 然后测试两个 wsdl 文件,对 Caculatorwsdl ,选择 Web Services->Test with web service explorer ,选择 CaculatorServiceSoap11Binding 中的 add 方法,进行测试,测试结果如下所 示:同理,对 Sub 方法进行测试对项目中自动生成的 CaculateComputerArtifacts.wsdl 也进行上述测试, 结果如下图所示, 表示 BPEL 流程设计正确,已经成功通过这个 BPEL 项目实现实验的要求,经过多次测试 证明可以达到预期的效果
28、,如下图所示,输入的a,b,c,分别为 3,4,5,结果为 3+4-5=2.04. 编写相应 Web 服务的客户端调用程序使用 RPC 方式调用 WebService 方式。源代码见: client/MyClient.java五分析与讨论分析:通过这次实验, 我大概对 BEPEL的业务流程有些了解, 它是各种不同功能的活动相连的 一组由相关的任务,并且按照一定的业务逻辑执行, Web 服务采用 BPEL 标准描述业务交 互中参与者的实际行为,并将一组现有的服务组合起来,从而定义一个新的 Web 服务。通 过 BPEL 流程组织之前部署的一个服务的功能,实现组合功能,而它自己本身没有写实际 运行
29、的过程,只是按照流程调用别的服务的功能,这样组合各种服务的功能就可以完成一 个新的任务! 思考问题讨论:问题 1:理解 BPEL 中不同标签定义的实际语义含义这次试验我用到的 invoke 和 assign 标签比较多, 所以说一下这两个, invoke 是执行的意 思,对它的配置合作伙伴链接和它对应服务的一个方法,就是执行这个服务的这个方法, 如 invokeAdd ,给它配置的是 CaculatorPL 和它的 add 方法,以及之前配置好的输入输出参 数,那么到 invokeAdd 方法时就会执行 CaculatorService 的 add 方法。Assign 主要是对变量的赋值, 如
30、实验中用到的把加法的结果赋值给减法的一个输入参数 等,通过 assign 就会进行参数的传递。问题 2:采用 BPEL 来组合多个 Web 服务成为一个新的 Web 服务,有什么优点? 个人觉得,它的最大的有的就是对现有的服务进行组合,形成一个新的服务,而不用重 新写一个这样的服务,这个在实现的服务比较复杂的时候应该比较有用,假如一个服务特 别复杂,去直接从头写可能是一件比较大的任务,但是如果能够利用现有的服务组合起来 实现可能是比较好实现的,而且可以通过这种方法可以实现各种服务。在整个实验过程中遇到不少的问题,现在做一总结。问题 1::在官网上下载 tomcat 没有安装程序不知道怎么安装并
31、启动原来下载的是绿色免安装版,直接在软件目录下的 bin 目录下运行 startup.bat 批处理 文件,但是还是无法启动,打开这个批处理文档发现,命令执行在 CATALINA_HOME 作 为 tomcat 的安装目录来进行,这个从辅助文档中 running.txt 中也有提示,所以加上这个环 境变量值为 tomcat 的 bin 目录所在路径,后来为了方便直接下载了Eclipse 的 tomcat 插件com.sysdeo.eclipse.tomcat_3.2.1 放在 Eclipse 的 plugins 目录下,然后在 Eclipse 中可以看到 tomcat 的标志,利用这个可以直接
32、启动或关闭tomcat。问题 2:下载的 axis2-1.6.2-bin 的 bin 目录加到了 path 中,但是写程序时发现有一些包 找不到,没法 import 进来。在 Eclipse 中直接新建一个 UserLibrary 包括了下载的 axis2-1.6.2-bin 中的所有 .jar 包, 然后在此工程中的 build path 中把这个 UserLibrary 添加进来,有些 axis2 包就可以 import 进来了。问题 3:打开服务列表发现新部署的服务出错提示找不到类文件。应该把编译好的 .class 文件和 services.xml 文件打包,而不是把 .java 文件和
33、 services.xml 文件打包。问题 4 :上述步骤之后,打开服务列表发现新部署的服务出错The services.xml filecannot be found for the service, 但是我已经加入了 Services.xml 文件了。应该把 services.xml 文件放到 META-INF 文件夹中和其他类文件打包。 如:我的工程文件 夹 下 的 bin目录下有 server 目 录中有我的CaculatorService.class,CaculatorAdd.class,和 CaculatorSub.class,在bin目录下建一个 META-INF文件夹下放入se
34、rvices.xml文件然后在 bin 目录下直接用jarcvfws.arr .命令将这个目录下的所有打包为ws.aar ,这里之前看 ppt 是没有注意到最后的”,然后看了 jar 命令的用法然后发现了错误。问题 5: 上述步骤做了之后,发现还有错误提示invalid UTF-8 start by 0xa1.原来这里的 services.xml 文件要求是 UTF-8 编码的,而一般记事本编写保存默认是ASCI 所以不兼容,识别不了。所以在保存 services.xml 文件的时候自己把编码模式改成UTF-8。问题 6:上述修改之后,发现还是有错误Unexpected character &
35、#39;?' (code 12288 /0x3000!我想可能还是有些隐藏的字符不太符合要求,因为这个 Services.xml 是我在别处拷贝 的然后改了改,在 word 和 ppt 文档中有很多隐藏字符吧,然后索性自己敲了一遍这个文件 然后保存,然后打包替换。经过上述步骤在然后在 listservice 页面终于找到了没有出错 的 CaculatorService 服务!问题 1:生成的 deploy.xml 文件没法手动选择 partnerLink 关联的端口因为生成的 deploy.xml 文件默认生成目录是工程下的 bepelContent 目录下,而其他的 . 文件都直接在
36、工程目录下, 所以找不到其他文件中定义的端口, 把他们都放到 bepelContent 目录下就可以了!问题 2:打开 ode服务器后访问不了要用的 CaculatorServie 服务 因为之前没有想着把那个服务部署到 ode 文件夹下,后来想到这样 ode 服务器上是没有这 个服务的所以没法访问它的方法, 把要用的 CaculatorService 服务加到 ode 的 service 文件夹 下,查看 ode 服务列表发现有 CaculatorService 服务,这时候打开 ode 服务器可以访问到要 用的服务。问题 3:在 ode 服务器中直接添加 BPEL 项目启动后,对其生成的
37、wsdl 文件进行 test web service with explorer 不能成功,而且 ode 服务列表内也没有添加新的 bepel 整合的 服务。后来发现这个问题可以通过先启动 ode 服务器,再添加 BPEL 工程,这样就热部署了,在 ode 的服务列表中就可以发现新部署的 BPELCaculator 服务,然后 test web service with explorer 测试也可以了! 附录:客户端调用部署的 axis2 的服务package client;import java.io.IOException;import java.util.Scanner;import j
38、space.QName;import org.apache.axis2.AxisFault;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.rpc.client.RPCServiceClient;public class MyClient private RPCServiceClient serviceClient ;private Options options;private End
39、pointReference targetEPR;public MyClient(String endPoint)throws AxisFault/使用 RPC 方式调用 webService serviceClient = new RPCServiceClient ();/options = serviceClient.getOptions();/制定调用 webservice 的 URL targetEPR = new EndpointReference(endPoint);/ options.setTo(targetEPR);public Object invokeOP(String tar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届云南省景东县第二中学高二物理第一学期期中综合测试试题含解析
- 黑龙江省哈尔滨市六中2025届高一物理第一学期期中调研模拟试题含解析
- 2025届浙江省两校物理高一第一学期期中检测试题含解析
- 湖北省仙桃、天门、潜江三市2025届物理高三上期末复习检测试题含解析
- 2025届吉林省吉林市蛟河市蛟河一中高一物理第一学期期末考试模拟试题含解析
- 2025届辽宁省大连市物理高二上期中教学质量检测试题含解析
- 2025届河北省迁西一中物理高二第一学期期中复习检测模拟试题含解析
- 2025届山西省吕梁市联盛中学物理高一上期中达标检测试题含解析
- 内蒙古呼和浩特市2025届物理高二上期末质量跟踪监视模拟试题含解析
- 2025届湖南省明德中学高三物理第一学期期中监测模拟试题含解析
- 2024年小红书品牌合作合同
- 2024-2030年中国再生金属行业发展形势及十三五规模研究报告
- 2024年大学生创业就业知识竞赛题库及答案(共350题)
- 中国医科大学2024年12月(含解析)《形势与政策》作业考核试题
- 2024年临时演员劳动力租赁合同
- 机床功能部件行业发展趋势
- 河南省信阳市2024-2025学年 七年级上学期数学期中测试卷
- 线上教学工作简报(30篇)
- 中国物联网安全行业市场现状、前景分析研究报告(智研咨询发布)
- 湘潭、成都工厂VDA63-2023审核员培训考核附有答案
- 济南2024年山东济南市文化和旅游局所属事业单位招聘人选笔试历年典型考题及考点附答案解析
评论
0/150
提交评论