activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask

web service task是BPMN2.0中的一种任务类型,在activiti5中它并没有专门的标签表示,而是使用了service task 来表示。而且有很多要配置的内容是无法用图形化工具来完成的。要使用web service task,当然要先有web service。所以首先要编写一个web service。

首先是JAR包:

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第1张图片

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第2张图片

编写webservice的接口:

package org.mpc.activiti.webservice;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService
public interface MpcService {

	@WebMethod
	@WebResult(name = "address")//返回值的名称为address
	String createMpc(@WebParam(name = "name") String name);//定义了一个名称为name的String类型的参数
}
编写webservice的实现类:

package org.mpc.activiti.webservice;

import javax.jws.WebService;

@WebService(endpointInterface = "org.mpc.activiti.webservice.MpcService", serviceName = "MpcService")
public class MpcServiceImpl implements MpcService {

	public String createMpc(String name) {
		System.out.println("创建人:" + name);
		Mpc mpc = new Mpc();
		mpc.setAdd("香格里拉");
		return mpc.getAdd();
	}
}

实体类Mpc

package org.mpc.activiti.webservice;

public class Mpc {
	private String name;
	private String add;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAdd() {
		return add;
	}

	public void setAdd(String add) {
		this.add = add;
	}
}

在主程序中发布web service:

package org.mpc.activiti.webservice;

import javax.xml.ws.Endpoint;

public class Main {

    public static void main(String args[]) throws Exception {
    	//实例化一个MpcServiceImpl的对象,并在http://localhost:9090/mpc的地址中发布webservice
        Endpoint.publish("http://localhost:9090/mpc", new MpcServiceImpl());
        System.out.println("服务启动...");
        Thread.sleep(100 * 60 * 1000);//随意设个时间,不要立马退出程序,最好长一点
        System.exit(0);
    }

}

运行main以后在浏览器中输入http://localhost:9090/mpc?wsdl会看到如下内容:

<wsdl:definitions xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://webservice.activiti.mpc.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MpcService" targetNamespace="http://webservice.activiti.mpc.org/">
<wsdl:types>
<xs:schema xmlns:tns="http://webservice.activiti.mpc.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="http://webservice.activiti.mpc.org/" version="1.0">
<xs:element name="createMpc" type="tns:createMpc"/>
<xs:element name="createMpcResponse" type="tns:createMpcResponse"/>
<xs:complexType name="createMpc">
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="createMpcResponse">
<xs:sequence>
<xs:element minOccurs="0" name="address" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="createMpcResponse">
<wsdl:part element="tns:createMpcResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="createMpc">
<wsdl:part element="tns:createMpc" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:portType name="MpcService">
<wsdl:operation name="createMpc">
<wsdl:input message="tns:createMpc" name="createMpc"></wsdl:input>
<wsdl:output message="tns:createMpcResponse" name="createMpcResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MpcServiceSoapBinding" type="tns:MpcService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="createMpc">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="createMpc">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="createMpcResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MpcService">
<wsdl:port binding="tns:MpcServiceSoapBinding" name="MpcServiceImplPort">
<soap:address location="http://localhost:9090/mpc"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

在这份wsdl文档结构中,我们可以得到如下信息:

有name 和 address 两个string类型的变量;有两个消息,分别是createMpc和createMpcResponse,两者都是用来和activiti交互的消息,前者接受参数,后者返回信息; 还有MpcService中的creatreMpc方法,供activiti调用。


在activiti5中访问webservice

方式一 直接的、纯粹的webservice

JAR包:

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第3张图片activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第4张图片


流程图:

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第5张图片

该流程对应的xml

<?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="http://www.activiti.org/test"
	xmlns:mpc="http://webservice.activiti.mpc.org/"><!-- 这里的namespace是对应于wsdl中的namespace的,在这里定义一下方便后面使用 -->

	<!--引入外部的wsdl文件中存储的数据,也就是我们的webservice生成的wsdl数据 -->
	<import importType="http://schemas.xmlsoap.org/wsdl/" location="http://localhost:9090/mpc?wsdl"
		namespace="http://webservice.activiti.mpc.org/" />

	<process id="service1" name="service1">
		<startEvent id="startevent1" name="Start"></startEvent>
		<userTask id="usertask1" name="Ready Task"></userTask>
		<serviceTask id="servicetask1" name="Web service invocation"
			implementation="##WebService" operationRef="createMpcOper"><!-- 这里的 implementation="##WebService" 
				表明这是一个webservice任务 operationRef="createPostOper"指明了这个webservice要执行的操作 -->

			<dataInputAssociation><!-- 要输入的参数 ,可以有多个 -->
				<sourceRef>nameVar</sourceRef><!--输入变量在流程中名称 -->
				<targetRef>name</targetRef><!--输入变量在wsdl中的名称 -->
			</dataInputAssociation>
			<dataOutputAssociation><!--输出的参数,只可以有一个 -->
				<sourceRef>address</sourceRef><!-- 输出变量在wsdl中名称 -->
				<targetRef>addVar</targetRef><!-- 输出变量在流程中的名称 -->
			</dataOutputAssociation>
			<!-- sourceRef就是变量在来源中的名称 targetRef就是变量在目标中的名称 -->
		</serviceTask>

		<userTask id="usertask2" name="EndTask"></userTask>
		<endEvent id="endevent1" name="End"></endEvent>
		<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="usertask2"></sequenceFlow>
		<sequenceFlow id="flow4" name="" sourceRef="usertask2"
			targetRef="endevent1"></sequenceFlow>
	</process>

	<!-- 所谓的message 就是activiti 和 webservice 之间的数据交流的信息 -->
	<message id="createMpcMsg" itemRef="createMpcItem"></message>
	<message id="createMpcResponseMsg" itemRef="createMpcResponseItem"></message><!-- 这里定义了消息,itemRef="createMpcResponseItem" 
		定义了这个消息的类型 -->
	<itemDefinition id="createMpcItem" structureRef="mpc:createMpc" />
	<itemDefinition id="createMpcResponseItem" structureRef="mpc:createMpcResponse" /><!-- 
		类型对应于wsdl中的文档结构 -->
	<!--start -->
	<itemDefinition id="nameVar" structureRef="string" />
	<itemDefinition id="name" structureRef="string" />
	<itemDefinition id="address" structureRef="string" />
	<itemDefinition id="addVar" structureRef="string" />
	<!-- end --><!-- 指定每个变量的类型 -->

	<interface name="Mpc Service" implementationRef="MpcService">
		<operation id="createMpcOper" name="Create Mpc Operation"
			implementationRef="mpc:createMpc">
			<inMessageRef>createMpcMsg</inMessageRef>
			<outMessageRef>createMpcResponseMsg</outMessageRef>
		</operation>
	</interface>




	<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="190" y="210"></omgdc:Bounds>
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
				<omgdc:Bounds height="55" width="105" x="280" y="200"></omgdc:Bounds>
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="servicetask1"
				id="BPMNShape_servicetask1">
				<omgdc:Bounds height="55" width="105" x="440" y="200"></omgdc:Bounds>
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">
				<omgdc:Bounds height="55" width="105" x="610" y="200"></omgdc:Bounds>
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
				<omgdc:Bounds height="35" width="35" x="770" y="210"></omgdc:Bounds>
			</bpmndi:BPMNShape>
			<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
				<omgdi:waypoint x="225" y="227"></omgdi:waypoint>
				<omgdi:waypoint x="280" y="227"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
				<omgdi:waypoint x="385" y="227"></omgdi:waypoint>
				<omgdi:waypoint x="440" y="227"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
				<omgdi:waypoint x="545" y="227"></omgdi:waypoint>
				<omgdi:waypoint x="610" y="227"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
				<omgdi:waypoint x="715" y="227"></omgdi:waypoint>
				<omgdi:waypoint x="770" y="227"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
		</bpmndi:BPMNPlane>
	</bpmndi:BPMNDiagram>
</definitions>


测试方法:

package bpmn;

import java.util.HashMap;
import java.util.Map;

import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.Deployment;
import org.junit.Test;

public class WebServiceTest extends PluggableActivitiTestCase {

	@Test
	@Deployment(resources = "bpmn/WebService1.bpmn")
	public void test() {
		// 初始化参数
		Map<String, Object> vars = new HashMap<String, Object>();
		vars.put("nameVar", "mpc_test");
		ProcessInstance pi = runtimeService.startProcessInstanceByKey(
				"service1", vars);
		// 完成第一个任务
		Task task = taskService.createTaskQuery().singleResult();
		taskService.complete(task.getId());
		// 输出调用Web Service后的参数
		String add = (String) runtimeService.getVariable(pi.getId(), "addVar");
		System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
		System.out.println();
		System.out.println();
		System.out.println("mpc_test现在居住的地点是—————————————————————————>" + add);
		System.out.println();
		System.out.println();
		System.out.println("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
	}

}

测试的结果是绿条,输出结果如下:

在webservice端的输出为:

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第6张图片

在测试端的输出为:

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第7张图片

 
 

方式二 使用 java delegate来实现web service任务

上面的方式太复杂,而且没有图形化的设计界面,容易出错,下面这种就好多了。

使用的jar包和方式一是一样的。

流程图:

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第8张图片

然后可以利用图形化的工具来编辑我们的service task

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第9张图片

当然也可以用xml的方式编辑,这是完成后的xml

<?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:xsd="http://www.w3.org/2001/XMLSchema" 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="http://www.activiti.org/test">
  <process id="delegate" name="process1" isExecutable="true">
    <startEvent id="startevent1" name="Start"></startEvent>
    <serviceTask id="servicetask1" name="Service Task" activiti:class="bpmn.WebServiceDelegate">
      <extensionElements>
        <activiti:field name="wsdl">
          <activiti:string><![CDATA[http://localhost:9090/mpc?wsdl]]></activiti:string>
        </activiti:field>
        <activiti:field name="operation">
          <activiti:string><![CDATA[createMpc]]></activiti:string>
        </activiti:field>
        <activiti:field name="name">
          <activiti:string><![CDATA[mpc_test]]></activiti:string>
        </activiti:field>
      </extensionElements>
    </serviceTask>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="servicetask1"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="servicetask1" targetRef="endevent1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_delegate">
    <bpmndi:BPMNPlane bpmnElement="delegate" id="BPMNPlane_delegate">
      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="250.0" y="210.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="servicetask1" id="BPMNShape_servicetask1">
        <omgdc:Bounds height="55.0" width="105.0" x="330.0" y="200.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="490.0" y="210.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="285.0" y="227.0"></omgdi:waypoint>
        <omgdi:waypoint x="330.0" y="227.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="435.0" y="227.0"></omgdi:waypoint>
        <omgdi:waypoint x="490.0" y="227.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

代理类:

package bpmn;

import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.Expression;
import org.activiti.engine.delegate.JavaDelegate;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

public class WebServiceDelegate implements JavaDelegate {
	/*
	 *  这些变量我们都在流程中进行了定义,
	 * 也就是说通过流程注入到了这个代理类中,当然要用activiti流程注入,
	 * 就要使用activiti的数据类型Expression
	 * */
	private Expression wsdl;
	private Expression operation;
	private Expression name;

	// 要注入当然要有set方法
	public void setWsdl(Expression wsdl) {
		this.wsdl = wsdl;
	}

	public void setOperation(Expression operation) {
		this.operation = operation;
	}

	public void setName(Expression name) {
		this.name = name;
	}

	@Override
	public void execute(DelegateExecution execution) throws Exception {
		JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
		// 使用wsdl数据创建Client
		Client client = dcf.createClient((String) wsdl.getValue(execution));
		//创建请求的参数
		Object [] vars = new Object[] {name.getValue(execution)};
		//发出请求
		Object [] results = client.invoke((String)operation.getValue(execution), vars);
		String result=(String)results[0];
		System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
		System.out.println();
		System.out.println();
		System.out.println("mpc_test现在居住的地点是—————————————————————————>" + result);
		System.out.println();
		System.out.println();
		System.out.println("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
	}

}

测试类:

package bpmn;

import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.test.Deployment;
import org.junit.Test;

public class JavaDelegateWebServiceTest extends PluggableActivitiTestCase {

	@Test
	@Deployment(resources = "bpmn/JavaDelegateWebService1.bpmn")
	public void test() {
		runtimeService.startProcessInstanceByKey("delegate");
	}

}


测试结果:

绿条没问题

web service的输出:(有上次的测试输出,所以是两条)

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第10张图片

测试端的输出:

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第11张图片




下面是service task 的另一种变化 shell service

和以上两个测试在同一个工程下,所以JAR包们是没有变化的。

流程图:

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第12张图片

流程图对应的xml:

<?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:xsd="http://www.w3.org/2001/XMLSchema"
	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="http://www.activiti.org/test">
	<process id="shellservice" name="shellservice" isExecutable="true">
		<startEvent id="startevent1" name="Start"></startEvent>
		<serviceTask id="servicetask1" name="Service Task"
			activiti:type="shell"><!-- 这里要制定这个servicetask是 activiti:type="shell" -->
			<extensionElements>
				<!-- 这些属性可以在图形化界面中添加,也可以在xml模式下添加,这些属性是要注入给ActivitiBehaviour类的,有该类实现shell任务 -->
				<activiti:field name="command">
					<activiti:string><![CDATA[cmd]]></activiti:string>
				</activiti:field>
				<activiti:field name="arg1">
					<activiti:string><![CDATA[/c]]></activiti:string>
				</activiti:field>
				<activiti:field name="arg2">
					<activiti:string><![CDATA[echo]]></activiti:string>
				</activiti:field>
				<activiti:field name="arg3">
					<activiti:string><![CDATA[%TEMP%]]></activiti:string>
				</activiti:field>
				<activiti:field name="outputVariable">
					<activiti:string><![CDATA[TEMP]]></activiti:string>
				</activiti:field>
			</extensionElements>
		</serviceTask>
		<sequenceFlow id="flow1" sourceRef="startevent1"
			targetRef="servicetask1"></sequenceFlow>
		<userTask id="usertask1" name="User Task"></userTask>
		<sequenceFlow id="flow2" sourceRef="servicetask1"
			targetRef="usertask1"></sequenceFlow>
		<endEvent id="endevent1" name="End"></endEvent>
		<sequenceFlow id="flow3" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
	</process>
	<bpmndi:BPMNDiagram id="BPMNDiagram_shellservice">
		<bpmndi:BPMNPlane bpmnElement="shellservice"
			id="BPMNPlane_shellservice">
			<bpmndi:BPMNShape bpmnElement="startevent1"
				id="BPMNShape_startevent1">
				<omgdc:Bounds height="35.0" width="35.0" x="250.0" y="160.0"></omgdc:Bounds>
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="servicetask1"
				id="BPMNShape_servicetask1">
				<omgdc:Bounds height="55.0" width="105.0" x="330.0" y="150.0"></omgdc:Bounds>
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
				<omgdc:Bounds height="55.0" width="105.0" x="480.0" y="150.0"></omgdc:Bounds>
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
				<omgdc:Bounds height="35.0" width="35.0" x="630.0" y="160.0"></omgdc:Bounds>
			</bpmndi:BPMNShape>
			<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
				<omgdi:waypoint x="285.0" y="177.0"></omgdi:waypoint>
				<omgdi:waypoint x="330.0" y="177.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
				<omgdi:waypoint x="435.0" y="177.0"></omgdi:waypoint>
				<omgdi:waypoint x="480.0" y="177.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
				<omgdi:waypoint x="585.0" y="177.0"></omgdi:waypoint>
				<omgdi:waypoint x="630.0" y="177.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
		</bpmndi:BPMNPlane>
	</bpmndi:BPMNDiagram>
</definitions>


测试类:

package bpmn;

import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.test.Deployment;
import org.junit.Test;

public class ShellTaskTest extends PluggableActivitiTestCase {

	@Test
	@Deployment(resources = "bpmn/shellTask.bpmn")
	public void test() {
		ProcessInstance pi = runtimeService
				.startProcessInstanceByKey("shellservice");
		String result = (String) runtimeService.getVariable(pi.getId(), "TEMP");
		System.out.println(result);
	}

}

这里我在测试类中通过shell命令获得了我的计算机的TEMP变量的值并输出了

测试结果如下:

activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask_第13张图片


啊,所有的测试案例中的activiti.cfg.xml都是如下定义的:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean
		class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"
		id="processEngineConfiguration">
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activi" />
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
		<property name="jdbcUsername" value="root" />
		<property name="jdbcPassword" value="root" />
		<property name="databaseSchemaUpdate" value="true" />
		<property name="jobExecutorActivate" value="true" />
		<property name="mailServerHost" value="mail.my-corp.com" />
		<property name="mailServerPort" value="5025" />
		<property name="history" value="full"></property>
	</bean>

</beans>


你可能感兴趣的:(Web,webservice,wsdl,shell,service,activiti5)