Bpel实例:贷款处理

Bpel实例:房屋贷款处理

应企业建模课业需求,记录一下用Bpel实现一个房屋贷款处理程序。本文档只记录操作,跳过配置过程,且不讲解原理。


房屋贷款处理业务用例

文档对原业务用例进行了一些简化,以集中于对流程操作的讲解。

  • 用户需要键入自己的姓名以申请贷款。
  • 接收到贷款请求后,系统将通过一个已有数据库验证用户提供的个人信息,获取用户已有的房屋数量。
  • 系统根据不同房屋数量给用户提供不同的贷款方案。
  • 如果贷款由于某种原因被拒绝,则生成一个显示拒绝原因的报告,并发送给用户。

工具清单

  • Eclipse Oxygen.3a Release (4.7.3a)
  • Bpel (Eclipse plugin)
  • Tomcat 7.0
  • Ode v1.x

服务的编码与部署

  1. 新建一个动态Web项目。

    这里写图片描述

  2. 在工程的 src 目录下建两个包:ws.loan.bank和 ws.loan.search分别存放贷款方案类以及获取用户房屋数量的类。

    这里写图片描述

  3. 编写服务类,根据用户的姓名获取相应的房屋数量。

    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;
            }
        }
    }
    
  4. 编写相应的方案类

    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% ";
        }
    }
    
  5. 生成服务的wsdl文件

    这里写图片描述

    在配置窗口里一路next即可,最后需要启动服务器。生成的wsdl文件存放于:
    这里写图片描述

    所有服务类都需要这样逐个操作。

  6. 工程打包为war文件

    这里写图片描述

    可能引发的错误: war文件导出失败

  7. 将war文件移动到tomcat安装目录的webapps下,打开服务器进行部署。

    这里写图片描述

    生成了相应的文件夹,表示部署成功。

  8. 对生成的wsdl文件进行测试。

    这里写图片描述

    出现Web服务浏览窗口:
    这里写图片描述

    功能测试:
    这里写图片描述

    测试正常,至此,这样一个服务就已经available了。依次测试其他所有服务后,就可以准备进行下一步了。


Bpel工程编写与测试

创建工程

  1. 创建工程

    这里写图片描述

    这里写图片描述

    这里写图片描述

  2. 在工程内创建bpel process

    这里写图片描述

    改为同步模版:

    这里写图片描述

    创建在原工程的bpelContent文件夹下。

创建伙伴链接以及相应变量

所谓伙伴链接(Partner Link)简单点理解就是外部wsdl文件,相对一个bpel文件而言。这里要将在创建好的工程里将刚才部署好的服务整合到一起。

  1. 将要使用的wsdl文件拷贝到当前工程的bpelContent目录下
  2. 点开当前工程的bpel文件,在设计窗口右上栏创建伙伴链接

    这里写图片描述

  3. 选中新建的伙伴链接,在Propties窗口的details里点击Browse..。

    这里写图片描述

    浏览目录,将刚才拷贝进来的wsdl文件全部添加了。然后就可以在Matches面板里看到多了很多Service了。

  4. 将Service映射到相应的伙伴链接上去,在Matches面板上选中Service,OK后需要指定链接类型、伙伴角色(partner role),完毕后需要在Detail选项卡里调整Partner Role为刚才设置的role,以getHouseNumberService为例:

    这里写图片描述

  5. 为各个伙伴链接创建_Request、_Response变量,以getHouseNumberService为例:

    在details里Browse…,在Filter勾选Messages,选中对应的消息,OK:
    这里写图片描述

流程设计

流程文件即xxx.bpel, 成品如下:

这里写图片描述

十分抱歉,一时图快没有好好命名。下面简单讲下用到的各个模块:

输入输出模块略过,首先是assign模块,顾名思义就是执行赋值操作。选中任一assign模块,在其Properties的窗口的detail选项卡里可为其添加赋值语句。

wsdl文件配置

流程设计并保存完毕后,可以发现IDE已经自动更新了wsdl文件。这里只要修改一下项目部署位置:
这里写图片描述

改为项目部署位置即可:
http://localhost:8080/ode/processes/LoanRequestorProcess

项目部署与测试

  1. 右键当前项目的bpelContent目录,生成BPEL Deployment Descriptor文件,然后正确配置接口

    这里写图片描述

  2. 启动ode服务器

  3. 将项目文件拷贝到…\tomcat\webapps\ode\WEB-INF\processes目录下
  4. 将bpelContent目录下的所有文件复制到上一层目录下
  5. 测试方法跟服务测试一样,右键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模块的变量是否被正确初始化。
<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模块的变量是否被正确指定。
- <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


猜你喜欢

转载自blog.csdn.net/qq_29977681/article/details/80305140