BPEL开发实例

BPEL 实例教程

1.
环境配置...........................................................................................................................2
2.
相关服务的开发...............................................................................................................3
3.
BPEL的开发.....................................................................................................................5
1.创建bpel工程。.............................................................................................................5
2.创建流程........................................................................................................................5
3.导入加法服务和减法服务的wsdl文件。 ....................................................................5
4.设置伙伴链接................................................................................................................6
5.修改CaculatorProcessArtifacts.wsdl文件......................................................................7
6.创建调用服务时需要的变量。....................................................................................8
7.配置变量........................................................................................................................8
8.BPEL流程设计..............................................................................................................9
9.流程的发布..................................................................................................................12
第一次写文章,大家多多担待!
BPEL 实例教程

教程内容分三部分:

环境配置

相关服务的开发(加法服务,减法服务)

BPEL 的开发
在继续之前,先介绍下要实现的功能:先手动写好两个服务,一个是加法服务,一个
是减法服务,然后希望构建一个 bpel 流程,该流程能够根据用户的输入来决定是调用加法
服务还是减法服务。
1. 环境配置
1. 我的环境是:JDK1.6 Tomcat6.0 Eclipse3.4.2(最好用 j2ee 版本)。
2. 启动eclipse安装BPEL,我是直接从
http://download.eclipse.org/technology/bpel/update-site/进行在线安装的。
用 eclipse3.5 的人可能要注意了,安装 bpel 的时候会出错。建议还是用 3.4.2 吧。
3. 安装Apache ODE,从网站http://ode.apache.org/getting-ode.html下载即可,我下的是 1.3.3
版本,现在似乎出 1.3.4 了。下完后,把压缩包中的ode.war文件直接复制到
TOMCAT_DIR\webapps目录下,重新启动Tomcat,即把ode安装成功。
4. 在 Eclipse 上配置 ODE server
首先是显示出 Servers 视图。通过 Windows->Show View->Servers。
在 Servers 视图中点右键,选择 New->Server,开始配置,主要是下面这个对话框。
主要是配置 ODE 和 Tomcat 的目录,要注意的是 ODE 的目录是你安装在 Tomcat
下的目录,而不是你把 ODE 的压缩包解压的地方。
配置完后就可以在 eclipse 的 servers 视图中启动,停止 ODE 了。(在启动 ODE 时,
Tomcat 也会启动,不需要单独去启动 Tomcat).
环境的配置就讲到这里,篇幅所限,写得不是很详细,大家可以参考:
http://www-inf.it-sudparis.eu/~nguyen_n/tps/bpel/installation.html,照着这个做就行了。
2. 相关服务的开发
为了进行服务组合,首先必须有服务。因此,这一部分会向大家介绍Eclipse环境下
的服务的简单开发过程。大家可以参考自底向上建立web服务这篇文章。
1. 新建一个动态 web project- webServiceProj
2. 在工程的 src 目录下建两个包:ws.example.add 和 ws.example.sub 分别放加法和减法的实
现类。因为加法服务和减法服务的实现过程都一样,下面只讲解加法服务的实现

3. 在包 ws.example.add 下建一个 java 类 AddService.java,具体实现如下:
4.选上 AddService.java,点 File -> New -> Other... -> Web Services -> Web Service.

package ws.example.add;
public class AddService {//相当简单
public double add(double a1,double a2){
System.out.println(a1+"+"+a2+"="+(a1+a2));
return a1+a2;
}
}
复选上最后一个,可以
看 到 交 互 过 程 中 的
SOAP 消息
滑片选在 Test client,
会生成一个客户端调

滑片选在 Start Service
4. 点 finish 就会生成 java 类对应的 wsdl 和配置文件,并发面到 tomcat 中,同时会生成调
用服务的客户端。(在此过程中,如果出现警告窗口,点确定就行了)
5. 在方法中点 add(double,double),输入两个数,点 invoke 则返回对应的结果。说明服务生
成成功。
6. 如果你在生成 web service 的过程中选择了“Monitor Web service”,则可以在 TCP/IP
Montor 中看到每次调用过程中的 SoAP 消息。这里就不展示了。
7. 同样的方式生成减法服务。
8. 要想把生成的服务放到 Tomcat 目录下,则很简单,把这个工程 Export 成一个 war 包即
可。

FileExportWebWAR File,选择保存位置,则会生成 webServiceProj.war,把生成
的 war 包复制到 Tomcat_Home/webapps 目录下,重启 Tomcat,则完成服务的发布。
在浏览器里输入http://localhost:8080/webServiceProj/services/AddService?wsdl则能打
开加法服务对应的wsdl.这也意味着服务发布成功了。
3. BPEL的开发
在上一步完成的基础上,咱们就可以真正来开始开发组合服务了。到目前为止,我们只
是开发了两个服务:加法服务与减法服务,并部署到 Tomcat 下了,你完全可以用其它的方
式开发这两个服务,如用 axis 或 cxf 都是完全可以的。最后都别忘记部署到 Tomcat 下。
接下来的内容就是开发 BPEL 了。
这一部分内容大家可以参考这里。
1.创建bpel工程。
点 File > New > Other,然后点 BPEL 2.0 -> BPEL Project 打开 BPEL 项目对话框,
这里只需要输入项目名称,其它保持默认,点 Finish 就行了。这里项目名取为
CaculatorProj
2.创建流程
选上刚建立的项目,点File > New > Other,然后BPEL 2.0 > New BPEL Process File,
打开流程创建对话框。按如下设置,点finish即可。流程名是CaculatorProcess,名字空
间设为:http://www.tju.edu.cn/bpel/sample,选择同步流程。
这样,自动生成了两个文件:CaculatorProcess.bpel 用来保存 BPEL 流程代码,
CaculatorProcessArtifacts.wsdl 用来保存该流程对应的 WSDL 文件,通过该文件,就知道该
流程对外提供的接口。
3.导入加法服务和减法服务的wsdl文件
很简单,就是把 AddService.wsdl 和 SubService.wsdl 复制到工程目录里。
4.设置伙伴链接
Bpel 把涉及其中的所有服务都称之为伙伴链接。Bpel 对应的 wsdl 本身也是一个伙伴链
接。系统已经自动生成了。对于流程中要用到的加法服务,减法服务,应该生成对应的伙伴
链接。
在最右边的 Partner Links 中,增加两个链接:addPL,subPL,分别对应加法服务和减
法服务。下面具体讲下 addPL 的配置。
点选上 addPL,在属性视图中 Details 页面中点 Browser..按钮,打开一个对话框。
点 Add WSDL 把用到的两个 WSDL 即 AddService.wsdl 和 SubService 加进来,这样会
在 CaculatorProcessArtifacts.wsdl 文件中生成两条对应的<import>语句。加完后这个对话框也
会把这两个 wsdl 文件中的接口都显示出来。如上面左图所示。
一定要记住,所谓的伙伴链接一定是针对某个 wsdl 文件的某个接口而言的。
选上 AddService 接口,点 Ok,弹出伙伴链接类型定义,把名字取为 addPLT,点 Next。
要求输入 Role Name,这里输入 “addProvider”,点 Finish 完成。同时在属性视图中把
ParterRole 选为 addProvider.
同样的方式配置 subPL,只不过把名字分别换成 subPLT,subProvider.,同时别忘记
Partner Role 要选上 subProvider.
5.修改CaculatorProcessArtifacts.wsdl文件.
主要是改输入输出,使之符合我们的要求。
1.1 用 open with WSDL Editor 打开该文件,转到设计视图里。
可以看到,默认生成的 WSDL 很简单,只有一个操作 process,该操作有输入 input,输
出 output.
1.2 为了让操作名更有意义,首先把操作名 process 改为 caculator,可以在图上改也可以
在属性视图里改。
1.3 当把鼠标移到输入输出所在行右边的箭头时,可以查看输入输出消息的详细定义。
下图是输入消息:
可以看到该输入消息只有一个元素 input,和我们的要求是不符合的,点击右下角的
Open In New Editor,打开一个新的 Editor 对输入消息进行配置。进去后选中类型,右键,
就可以增加元素,并设置元素的类型,具体过程就不多说了,很简单的,只给出一个结
果。
咱们要做的流程是接受三个参数,前两个是 double 型数据,第三个表示是调用加法
服务还是减法服务,当 type=’add’,时,调用加法服务,当 type=’sub’时调用减法服务。
同样的方法,改一下输出,把类型改为 double。
这里需要注明下。我一开始的顺序其实是:534 的,本想先定义好接口再导入相关

的,本想先定义好接口再导入相关
的 wsdl,但做完后发现 CaculatorProcessArtifacts.wsdl 文件中的类型定义出错了。大家不
妨试试,印象会深刻些。最后只好改成现在的
文件中的类型定义出错了。大家不
妨试试,印象会深刻些。最后只好改成现在的 345。(这应该算是 Eclipse BPEL 的 bug
吧,现在我只好每次都先导入需要的 wsdl,再进行其它的操作,如果谁有好的解决方案,
麻烦告诉我,我会补充进来。
,再进行其它的操作,如果谁有好的解决方案,
麻烦告诉我,我会补充进来。zhongkem@163.com)
6.创建调用服务时需要的变量。
每次 invoke 一个服务时都要有对应的变量,同时要进行赋值。我们这里要调用加法
服务和减法服务。因此需要额外加入 addRequest,addResponse,subRequest,subResponse。
加完后的效果如下:
Input,output 分别对应流程的
输入输出
addRequest,addResponse

别对应加法服务的输入输出
subRequest,subResponse分别
对应减法服务的输入输出
7.配置变量
Input,output 变量都自动配置好了,对应 CaculatorProcessArtifacts.wsdl 定义的消息。
下面以 addRequest 为例讲解配置过程。
点上 addRequest 变量,属性视图中切换到 Details 页,点右上角的 Browse..按钮,打
开类型选择对话框。addRequest 是加法服务的输入,因此把它的类型设为加法服务里的
输入定义就可以了。
一个变量的类型可以是简单类型,也可以是复杂类型,还可以是 wsdl 中的 Message
定义。简单起见,我们这里就把 addRequest 的类型设为 AddService 服务中的 addRequest
Message。如下图所示:(Message 前面的复选框一定要选上)
点 ok 即完成变量的定义,同样的方式定义其它三个变量。至此,准备工作就算是
做好了。下一步开始真正的 bpel 流程设计。
8.BPEL流程设计
8.1 根据需要,我们首先是根据输入的第三个变量的值来决定调用加法服务还是减法服
务,所以,显然需要一个条件 IF 语句,拖到 receiveInput 后面。
8.2 选中刚建好的 if 模块,点右键,依次点 Add ElseIf,Add Else。基本结构如下:
思路应该比较清晰,如果 type=’add’,则调用加法服务,如果 type=’sub’则调用减法
服务,其它情况就返回错误信息。进一步完善后,如下:
接下来就是对各个结点进行具体的配置了。
8.3 If 语句的配置
选择 If,在属性视图中点开 Details 页,做如下配置:
输入条件语句:$input.payload/tns:type='add'
同样,选择 Else If
意思应该很明了,就不多解释了。
8.4 Assign 语句的配置
五个 Assign 语句的配置过程都一样,这里只讲解下第一个 Assign 的配置。
第一个 Assign 的作用是把输入变量 input 中的前两个参数传给 addRequest 变量。需要注
意的是,
需要注
意的是,BEPL 中的变量赋值只能是一个一个的赋,不能直接把 input 赋 给 addRequest (当
然这里也不匹配,即使匹配也不行),而只能把
(当
然这里也不匹配,即使匹配也不行),而只能把 input 下的参数挨个赋给 addRequest..
选择 Assign,同样在属性视图中点开 Details 页,点 New 按钮,作如下的选择:
意思应该很明了,把 input 下的 a1 赋给 addRequest 下的 a1.
然后会弹出一个对话框,问是否需要初始化 addRequest,你点 Yes 就是了。
再次点 New,把 input 下的 a2 赋给 addRequest 下的 a2.
对于 Assign1,它的作用是把 addResponse 的值传给流程的输出变量 output.如果如下:
对于 Assign2,Assign3,做出相应的配置就行了,别忘了这是针对减法服务。
对于 Assign4,直接返回一个错误消息就行了,别忘了这些变量的类型都是消息,因此直接赋
值也需要返回一条相应的消息。为了不会书写错误,我首先还是点 New..,但此时 From 里
需不选任何东西,直接在to里选择outputpayloadresult,然后再在别处点一下鼠标,Eclipse
会提醒你要给 output 变量赋初值。点”Yes”,则会生成如下的赋值:
把 Variable to Variable 赋值语句删掉。然后把上面的<tns:result></tns:result>间加上一句
话:The type value should only be ‘add’ or ‘sub’.
需要注意的是,To 里面选择的应该是 outputpayload,而不是下面的 result.
8..5 Invoke 的配置。
Invoke 的作用是调用伙伴链接对应接口下的对应操作,还需要指定输入输出变量。
选上 InvokeAdd,同样在属性视图的 Details 页面中进行如下配置:
如上所示,很简单,就涉及三方面内容,选择伙伴链接,选择对应操作,选择对应的
输入输出变量。
选择伙伴链接,选择对应操作,选择对应的
输入输出变量。
同理配置 InvokeSub:
到此,流程部分已经做完了。
9.流程的发布
BPEL 流程最终的目的也是发布成一个 web service,只不过这个 web 服务自己基本
上不实现功能,主要是通过调用别人的功能来完成任务。因此,最后也要把流程对应的
WSDL 发布出去。默认生成的 WSDL 只有类型定义,消息定义,和操作定义,缺少绑
定信息和服务定义。
a)
打开 CaculatorProcessArtifacts.wsdl,此时图形如下:
从图中可以看到,import 进来的 wsdl 也会显示在图形视图中。
b) 加入 Binding 信息
在空白处点右键,选择 Add Binding,选上创建的 Binding,进行如下的配置:
首先设置绑定名为:CaculatorProcessBinding
然后接口类型选择:CaculatorProcess
最后点 Generate Binding Content…弹出一个对话框,选择协议为 SOAP 即可。
这一步所做的,对应该源代码即是下面这些代码:
<binding name="CaculatorProcessBinding"
type="tns:CaculatorProcess">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="process">
<soap:operation
soapAction="http://www.tju.edu.cn/bpel/sample/process" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
c)
加入服务定义
点右键,选择 Add Service,,服务名改为 CaculatorService,选择服务下的 NewPort,
进行如下定义:
源码中对应的代码即是:
<service name="CaculatorService">
<port name="CaculatorPort" binding="tns:CaculatorProcessBinding">
<soap:address location="http://localhost:8080/ode/processes/CaculatorProcess" />
</port>
</service>
这样,一个服务就定义完全了:
d) 创建发布 ODE 发布文件
FileNewOtherBPEL 2.0 Apache ODE Deployment Descriptor,直接点 Finish 即会
生成一个 deploy.xml 文件,
主要把伙伴链接对应的端口对应选上即可。
e)
启动 ODE
从 Servers 视图中启动 ODE.
先启动 ODE 再把 BPEL 工程复制进去是为让排错,ODE 热发布时,如果有错,会
在控制台提示错误信息,这样好排错。如果先进行
热发布时,如果有错,会
在控制台提示错误信息,这样好排错。如果先进行 9.6.。就不好找错了。
f)
Bpel 工程复制到 ODE 目录中
即把工作空间中的
整个目录复制到 D:\JavaTools\Tomcat
6.0\webapps\ode\WEB-INF\processes 目录下,ODE 会热发布,在控制台中应该
能够看到发布成功的提示:
g) 运行 BPEL
右 击 CaculatorProcessArtifacts.wsdlWeb ServiceTest with Web
Service Explore:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值