Jbpm实践项目2——服务组合(ServiceComposer)

 

【功能设计】

利用Jbpm设计一个流程来完成以下功能:

1.       调用三个WebService,分别完成:鉴权、数加、数减;

2.       在流程中加入事务判断机制,当前一个判断没有通过则后面的流程不再执行;

【流程设计】

1.       设计流程;

【流程设计原则】(这样设计出来的流程会比较清晰,易于扩展):

1) 公共变量写在总流程中,局部变量写在节点中;

2) Decision只负责判定和流程的转移;

3) 操作应写在节点的Transition中;

2.       Action

1) 将接口抓到本地;

2) 导入XFire CoreHttpClient架包;

3) 按照流程写ActionDecision的实现类;

【设计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进行调用测试;

你可能感兴趣的:(service)