Bpel实例:房屋贷款处理
应企业建模课业需求,记录一下用Bpel实现一个房屋贷款处理程序。本文档只记录操作,跳过配置过程,且不讲解原理。
房屋贷款处理业务用例
文档对原业务用例进行了一些简化,以集中于对流程操作的讲解。
- 用户需要键入自己的姓名以申请贷款。
- 接收到贷款请求后,系统将通过一个已有数据库验证用户提供的个人信息,获取用户已有的房屋数量。
- 系统根据不同房屋数量给用户提供不同的贷款方案。
- 如果贷款由于某种原因被拒绝,则生成一个显示拒绝原因的报告,并发送给用户。
工具清单
- Eclipse Oxygen.3a Release (4.7.3a)
- Bpel (Eclipse plugin)
- Tomcat 7.0
- Ode v1.x
服务的编码与部署
新建一个动态Web项目。
在工程的 src 目录下建两个包:ws.loan.bank和 ws.loan.search分别存放贷款方案类以及获取用户房屋数量的类。
编写服务类,根据用户的姓名获取相应的房屋数量。
package ws.loan.search; public class GetHouseNumberService { //TODO link to the database. public int getHouseNumber(String name){ //测试用例 switch (name) { case "Emiya": return 1; case "Lora": return 2; case "Niggle": return 3; case "Water": return 4; default: return 0; } } }
编写相应的方案类
Bank0:处理已有房屋数量为0的客户的贷款需求,有专门针对房屋数量为0的贷款首付和贷款利率。
Bank1:处理已有房屋数量为1的客户的贷款需求,有专门针对房屋数量为1的贷款首付和贷款利率。
Bank2:处理已有房屋数量为2的客户的贷款需求,有专门针对房屋数量为2的贷款首付和贷款利率。
Bank3:处理已有房屋数量大于2的客户的贷款需求,有专门针对房屋数量大于2的贷款首付和贷款利率。下面只给出bank1的code。
package ws.loan.bank; public class Bank1Service { public String bank1 () { return "名下有1套住房,首付比例30%,贷款利率为基准下浮10% "; } }
生成服务的wsdl文件
在配置窗口里一路next即可,最后需要启动服务器。生成的wsdl文件存放于:
所有服务类都需要这样逐个操作。
工程打包为war文件
可能引发的错误: war文件导出失败
将war文件移动到tomcat安装目录的webapps下,打开服务器进行部署。
生成了相应的文件夹,表示部署成功。
对生成的wsdl文件进行测试。
出现Web服务浏览窗口:
功能测试:
测试正常,至此,这样一个服务就已经available了。依次测试其他所有服务后,就可以准备进行下一步了。
Bpel工程编写与测试
创建工程
创建工程
在工程内创建bpel process
改为同步模版:
创建在原工程的bpelContent文件夹下。
创建伙伴链接以及相应变量
所谓伙伴链接(Partner Link)简单点理解就是外部wsdl文件,相对一个bpel文件而言。这里要将在创建好的工程里将刚才部署好的服务整合到一起。
- 将要使用的wsdl文件拷贝到当前工程的bpelContent目录下
点开当前工程的bpel文件,在设计窗口右上栏创建伙伴链接
选中新建的伙伴链接,在Propties窗口的details里点击Browse..。
浏览目录,将刚才拷贝进来的wsdl文件全部添加了。然后就可以在Matches面板里看到多了很多Service了。
将Service映射到相应的伙伴链接上去,在Matches面板上选中Service,OK后需要指定链接类型、伙伴角色(partner role),完毕后需要在Detail选项卡里调整Partner Role为刚才设置的role,以getHouseNumberService为例:
为各个伙伴链接创建_Request、_Response变量,以getHouseNumberService为例:
在details里Browse…,在Filter勾选Messages,选中对应的消息,OK:
流程设计
流程文件即xxx.bpel, 成品如下:
十分抱歉,一时图快没有好好命名。下面简单讲下用到的各个模块:
输入输出模块略过,首先是assign模块,顾名思义就是执行赋值操作。选中任一assign模块,在其Properties的窗口的detail选项卡里可为其添加赋值语句。
wsdl文件配置
流程设计并保存完毕后,可以发现IDE已经自动更新了wsdl文件。这里只要修改一下项目部署位置:
改为项目部署位置即可:
http://localhost:8080/ode/processes/LoanRequestorProcess
项目部署与测试
右键当前项目的bpelContent目录,生成BPEL Deployment Descriptor文件,然后正确配置接口
启动ode服务器
- 将项目文件拷贝到…\tomcat\webapps\ode\WEB-INF\processes目录下
- 将bpelContent目录下的所有文件复制到上一层目录下
测试方法跟服务测试一样,右键wsdl文件进行test —— 可能存在的错误
错误清单
war文件导出失败 - source
原因不明,我的应急方法是给将当前项目换个work place。
- uninitializedVariable - source
<faultstring xmlns:ns2e24D="http://docs.oasis-open.org/wsbpel/2.0/process/executable">
ns2e24D:uninitializedVariable
</faultstring>
检查一下assign模块的变量是否被正确初始化。
- selectionFailure - source
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
- <soapenv:Body>
- <soapenv:Fault>
<faultcode xmlns:nsIDc08="http://schemas.xmlsoap.org/soap/envelope/">nsIDc08:Server</faultcode>
<faultstring xmlns:ns2e24D="http://docs.oasis-open.org/wsbpel/2.0/process/executable">ns2e24D:selectionFailure</faultstring>
<detail />
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
检查一下assign模块的变量是否被正确指定。
- EPR - source
- <soapenv:Fault xmlns:nsIDc08="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>nsIDc08:Client</faultcode>
<faultstring>The service cannot be found for the endpoint reference (EPR) http://localhost:8080/ode/processes/LoanRequestorProcess</faultstring>
- <detail>
检查一下deploy.xml文件是否正确配置。
相关资料
房屋贷款BPEL实例详解: http://dev.yesky.com/179/7754179.shtml
Bpel简介及实例总结: https://blog.csdn.net/qq_22642239/article/details/68062437