【功能设计】
利用Jbpm设计一个流程来完成以下功能:
1. 调用三个WebService,分别完成:鉴权、数加、数减;
2. 在流程中加入事务判断机制,当前一个判断没有通过则后面的流程不再执行;
【流程设计】
1. 设计流程;
【流程设计原则】(这样设计出来的流程会比较清晰,易于扩展):
1) 公共变量写在总流程中,局部变量写在节点中;
2) Decision只负责判定和流程的转移;
3) 操作应写在节点的Transition中;
2. 写Action;
1) 将接口抓到本地;
2) 导入XFire Core和HttpClient架包;
3) 按照流程写Action和Decision的实现类;
【设计action的原则】
(1) 得到全局和局部变量(节点中的);
Ø 通过executionContxt.getContextInstance().getVariable()得到String类型的;
Ø 利用XXX.parseXXX()得到对应XXX型的;
(2) 调用服务,代码是固定的:
Ø Service srvcModel = new ObjectServiceFactory().create(IXXX.class)
Ø XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
Ø String XXXURL = "http://localhost:8080/XXX /services/XXX ";
Ø IXXX srvc = (IXXX) factory.create(srvcModel, XXXURL);
Ø 调用其中的方法;
(3) 将结果赋值给流程中的变量;
Ø executionContxt.getContextInstance().setVariable(“XXX”,XXX.toString();
【设计Decision的原则】
(1) 得到流程中的全局变量(标示最后结果),方法:如上【设计action的原则】中(1);
(2) 根据该变量的值判定路径,并给另一全局变量(标示流程成功与否的)赋值;
3. 流程的部署;
1) 导入MySQLDriver架包;
2) 修改Hibernate配置文件;
3) 设计ProcessDeploy类(所有的项目都相似,只要修改:FileInputStream即可);
4) 打开MySQL服务器,运行该类中的main()方法,向Jbpm数据库中写数据;
4. 流程的执行;
1) 将执行流程中需要的变量都设计为类变量,并且为Private,在构造方法中为其赋值;
2) 写总的调用方法时注意分辨自动节点和手动节点的执行情况,要非常明确流程执行到哪了。(加入手动节点后,流程会变的好控制了,但同时也失去了自动性,需要我们自己手动来执行)
5. 将流程的发布为WebService;
1) 加入XFireWebServiceCapability;
2) 建立WebService,书写接口和实现类;
3) 增加WebCapability,在Web.xml中配置XFireServlet;
4) 发布该WebService,通过WSDL进行调用测试;