activiti webservice task 的一个简单执行和配置实例

一、webservice的服务端简单实现


@WebService
public interface Calculator {
@WebMethod
@WebResult(name = "num3")
public int plus(@WebParam(name = "num1") int num1,
@WebParam(name = "num2") int num2);
}


@WebService(endpointInterface = "com.first.service.Calculator",
serviceName = "calculator")
public class CalculatorImpl implements Calculator{

@Override
public int plus(int num1, int num2) {
return num1+num2;
}

}

public static void main(String[] args) {
Calculator calculator;
Server server;
calculator = new CalculatorImpl();
JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
svrFactory.setServiceClass(Calculator.class);
svrFactory.setAddress("http://localhost:63081/calculator");
svrFactory.setServiceBean(calculator);
svrFactory.getInInterceptors().add(new LoggingInInterceptor());
svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());
server = svrFactory.create();
server.start();
}

java实现一个简单的webservice服务端,并且为调用方法的传入传出参数指定名称,方便activiti中引用
二、activiti


流程定义文件




<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="com.first.service"
xmlns:tns="com.first.service"
xmlns:calculator="http://webservice.activiti.org/">

<import importType="http://schemas.xmlsoap.org/wsdl/"
location="http://localhost:63081/calculator?wsdl"
namespace="http://webservice.activiti.org/" />

<process id="process1" name="process1">
<startEvent id="startevent1" name="Start"></startEvent>
<endEvent id="endevent1" name="End"></endEvent>
<userTask id="usertask1" name="hello"></userTask>
<serviceTask id="servicetask1" name="calculator" implementation="##WebService"
operationRef="tns:plusOperation">

<!-- activiti流程变量和webservice的输入输出参数的转换 -->
<dataInputAssociation>
<sourceRef>input1</sourceRef><!-- name of an Activiti variable -->
<targetRef>num1</targetRef><!-- name of an element of the input message -->
</dataInputAssociation>
<dataInputAssociation>
<sourceRef>input2</sourceRef><!-- name of an Activiti variable -->
<targetRef>num2</targetRef><!-- name of an element of the input message -->
</dataInputAssociation>
<dataOutputAssociation>
<sourceRef>num3</sourceRef><!-- name of an element of the output message -->
<targetRef>output3</targetRef><!-- name of an Activiti variable -->
</dataOutputAssociation>
</serviceTask>

<sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
<sequenceFlow id="flow2" name="" sourceRef="usertask1" targetRef="servicetask1"></sequenceFlow>
<sequenceFlow id="flow3" name="" sourceRef="servicetask1" targetRef="endevent1"></sequenceFlow>
</process>

<!-- webservice的传入传出参数(webservice服务端明确指出),以及activiti执行代码中传入的参数引用 -->
<itemDefinition id="num1" structureRef="int" />
<itemDefinition id="num2" structureRef="int" />
<itemDefinition id="num3" structureRef="int" />
<itemDefinition id="input1" structureRef="int" />
<itemDefinition id="input2" structureRef="int" />
<itemDefinition id="output3" structureRef="int" />

<!-- 一个webservice方法操作调用的定义 implementationRef="calculator:Calculator" 中 Calculator 即 portType的引用 -->
<interface name="Calculator Interface" implementationRef="calculator:Calculator">
<!-- Operation: implementationRef = QName of WSDL Operation -->
<operation id="plusOperation" name="plusOperation Operation" implementationRef="calculator:plus">
<inMessageRef>tns:plusRequestMessage</inMessageRef>
<outMessageRef>tns:plusResponseMessage</outMessageRef>
</operation>
</interface>

<message id="plusRequestMessage" itemRef="tns:plusRequestItem" />
<message id="plusResponseMessage" itemRef="tns:plusResponseItem" />

<itemDefinition id="plusRequestItem" structureRef="calculator:plus" />
<itemDefinition id="plusResponseItem" structureRef="calculator:plusResponse" />

<bpmndi:BPMNDiagram id="BPMNDiagram_process1">
<bpmndi:BPMNPlane bpmnElement="process1" id="BPMNPlane_process1">
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
<omgdc:Bounds height="35" width="35" x="60" y="160"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
<omgdc:Bounds height="35" width="35" x="590" y="160"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
<omgdc:Bounds height="55" width="105" x="170" y="150"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="servicetask1" id="BPMNShape_servicetask1">
<omgdc:Bounds height="55" width="105" x="370" y="150"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="95" y="177"></omgdi:waypoint>
<omgdi:waypoint x="170" y="177"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
<omgdi:waypoint x="275" y="177"></omgdi:waypoint>
<omgdi:waypoint x="370" y="177"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
<omgdi:waypoint x="475" y="177"></omgdi:waypoint>
<omgdi:waypoint x="590" y="177"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

流程执行代码


ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("acitiviti.cfg.xml");
RepositoryService repositoryService=(RepositoryService) applicationContext.getBean("repositoryService");
RuntimeService runtimeService = (RuntimeService) applicationContext.getBean("runtimeService");
IdentityService identityService=(IdentityService) applicationContext.getBean("identityService");
repositoryService.createDeployment().addClasspathResource("calculator.bpmn20.xml").deploy();

Map<String,Object> map=new HashMap<String,Object>();
map.put("input1", 2);
map.put("input2", 3);
ProcessInstance pi=runtimeService.startProcessInstanceByKey("process1", map);
System.out.println(pi.getId());


TaskService taskService = (TaskService) applicationContext.getBean("taskService");
taskService.claim("12", "yuyong");
taskService.complete("12");
int output = (Integer) runtimeService.getVariable("5", "output3");
System.out.println(output);




map中传入的参数即开启一个流程实例传入的流程变量。也是 流程定义文件中定义的项目item。因为webservice task 无需人工驱动,流程执行到此task时,会自动执行。所以,执行完id为12的usertask后,自动执行了此webservice task。流程结束。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值