【功能设计】
设计一个流程调用“数加”和“数减”两个WebService,并将给流程发布成一个WebService,测试该流程。
【实现流程】
1. 发布“数加(NumberPlus)”“数减(NumberSubtract)”两个WebService,并进行测试;
1) 建立WebServiceProject;
2) 建立WebService;
3) 发布该WebService;
4) 测试该WebService;
2. 设计流程调用“数加”“数减”两个服务,部署该流程;
1) 设计流程;
将变量设计在节点内,将服务的调用写在Transition的Action中;
2) 写Action(com.NumberPlusSubt.action);
(1) 将节点中得到的变量(Object)转换为int ;
(2) 调用WebService,具体流程为:
Step1:将Service接口抓到本地;
Step2:对象服务工程利用该接口创建一个服务模版;
Step3:创建一个代理工厂;
Step4:该工厂仿照该模版创建一个Service接口;
Step5:利用该接口调用服务;
(3) 将调用WebService得到的结果传给该流程的全局变量,在下一个节点中使用;
3) 部署流程(com.NumberPlusSubt.deploy);
部署一次如果对于流程没有修改就不需要再部署了
(1) 导入MySQLDriver;
(2) 配置Hibernate;
(3) 用main()方法主要完成流程的部署工作,其实质就是在JBPM数据库中进行记录,要在测试前先部署;具体流程:
Step1:得到JBPM配置实例;
Step2:根据配置实例得到JBPM的上下文;
Step3:将流程定义文件转化为InputStream,再根据ProcessDefinition的方法得到一个流程定义;
Step4:将该ProcessDefinition部署在Jbpm上下文中;
4) 调用流程(com.services.client);
(1) 在构造方法中初始化流程参数;
(2) 写调用各个action的方法:
Step1:得到流程实例和上下文实例;
Step2.:接受参数;
Step3:执行相应的action;
Step4:返回相应流程的ID,(在下一方法中使用以保证为同一个流程);
(3) 写一个调用各个方法的总方法,返回结果;
3. 将该流程封装成WebService(com.service.callNumberPlusSubtract),并写测试程序调用该WebService;
1) 增加WebService功能;
增加XFire的架包;
配置services.xml文档;
2) 增加Web功能(只有WebProject能在Server上部署);
配置Web.xml文档,指定截获请求的Servlet的实现类;
4. 写调用该WebService的Client程序(CallNumberPlusSubtractClient);
1) 引进架包——XFire Http Client(如果在前面已经引进了就省去该步);
2) 将WebService接口抓到本地;
3) 建立一个class在其中写main();
【小结】
1. 工程之间是不能通信的;
2. 任何工程都可以增加WebService功能,从而将其发布为一个WebService;
3. 调用WebService要把接口抓到本地来用;
4. 写每个类一定要写构造器(无论是含参数还是不含参数的),在定义一个参数的时候一定要初始化(如果是对象就要用该类的构造器);
5. 一个类中有main()在运行时提示没有main()方法:打开“Run As“——》”Open Run Dialog…“在其中弄弄(我这次调试的时候也不知道怎么弄的再运行就又好了);
6. processInstance.findToken():这个方法我还是不知道其中的参数是什么,就才用曲线救国分方式,Token token = processInstance.getRootToken();//每次使token回到流程的开始;
7. token.signal("to_end")//再是token执行相关路径;