一、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。流程结束。
分享到:
相关推荐
其中,多实例任务是Activiti的一个重要特性,它可以用来实现会签等高级工作流需求。 **多实例用户任务的XML表示:** ```xml <userTask id="task" name="多实例任务"> <loopDataInputRef>assigneeList ...
【描述】"Activiti多实例任务实现会签"这一主题主要关注的是如何通过Activiti的工作流定义语言(BPMN 2.0)中的`user task`元素,结合`multi-instance`属性来创建一个需要多人签字的任务。这种任务的特点是,每个...
在开发过程中,Activiti提供了丰富的工具支持,如Activiti Designer用于图形化设计流程定义,Activiti Explorer则提供了一个Web界面来管理和监控流程实例和任务。这些工具大大简化了开发者的日常工作,使得流程设计...
历史记录是 Activiti 中的一个重要特性,它允许开发者和管理员查看已经执行过的流程实例和任务的详细信息。这些信息包括但不限于流程实例的启动时间、结束时间、参与者、任务完成顺序、变量变化等,对于业务分析和...
UserTask代表了流程中的一个步骤,而流程实例则是整个流程的执行上下文。 8. **流程实例的结束** 当UserTask完成后,它的结果(通常是通过提交表单或调用API完成任务)会被记录,并触发流程图中下一个活动的启动。...
3. 任务(Task):流程中的一个可执行单元,可以分配给特定的用户或组。 4. 事件(Event):流程中的特殊节点,用于触发特定的行为,如开始事件、结束事件等。 5. 表单(Form):与任务相关的用户界面,用于输入或...
5. **Task Listeners**和**Service Tasks**:Activiti允许你在流程图中定义监听器和服务任务,以在特定事件(如任务创建、完成等)时执行自定义逻辑。服务任务可以调用外部系统或服务。 6. **单元测试**:实例工程...
Activiti工作流是一款开源的工作流程管理系统,主要用于设计、部署和执行业务流程。它基于Java平台,采用模型驱动的架构(MDA),支持BPMN 2.0标准,提供了丰富的API和工具,使得开发者能够轻松地创建和管理复杂的...
在开发过程中,流程图的高亮显示是非常重要的一个功能,它可以帮助开发者和业务人员更好地理解和跟踪流程的执行状态。下面将详细介绍如何配置Activiti流程图的高亮显示。 首先,理解Activiti的核心概念。Activiti是...
在找到下一个活动后,如果是任务(Task),我们可以通过`taskService.createTaskQuery().processInstanceId(processInstanceId).activityId(nextActivityId).singleResult()`来获取具体的任务实例,准备进行任务分配...
在"ActivitiDemo"这个项目中,我们看到的是一个基于Spring框架的简单Activiti实例,目的是为了展示如何将Activiti集成到Spring应用程序中,从而实现业务流程管理。 在Java世界里,Spring框架因其强大的依赖注入和...
本篇文章将通过一个简单的例子来介绍如何在MyEclipse环境中搭建Activiti开发环境,以及如何使用Activiti进行基本的流程定义和执行。 #### 二、准备工作 1. **环境准备**: - 操作系统:Windows 7 64位 - IDE:...
2. **数据库配置**: 在实际运行时,Activiti需要连接到一个数据库来存储流程实例、任务实例等数据。在部署应用时,我们需要修改配置文件(如application.properties或config.xml)中的数据库连接信息,包括数据库...
1. **Web 应用程序**:可能包含一个简单的 Web 应用,演示了如何集成 Activiti 引擎,启动流程,查询任务,以及完成任务等功能。这通常涉及到 Servlet、JSP 或者现代的前端框架如 Angular 或 React。 2. **流程定义...
Activiti 是一个开源的工作流和...总的来说,通过这个activiti请假实例,你可以学习如何定义和执行一个简单的业务流程,理解Activiti的基本概念和操作方式,为后续深入使用和开发基于Activiti的工作流应用打下基础。
这个"Activiti5.15.1简单入门Demo"是针对 Activiti 版本5.15.1的一个入门教程,旨在帮助初学者快速理解并上手 Activiti 的基本功能和使用方法。 Activiti 的核心功能包括: 1. **流程定义(Process Definition)**...
Activiti 是一个开源的工作流和业务自动化引擎,它在Java生态系统中被广泛使用,尤其在企业级应用中处理复杂的业务流程。本实例将带你深入了解如何使用Activiti在网页环境中实现请假流程的申请、启动、部署和管理。 ...
Activiti 是一个流行的开源工作流引擎,它基于模型驱动的架构,提供了一套完整的工具来设计、部署和执行业务流程。在使用Activiti时,为了更好地理解流程状态和追踪执行过程,开发者往往需要实现流程图的高亮显示...
Activiti6是一个强大的业务流程管理(BPM)和工作流引擎,它被广泛应用于企业级应用中,以实现灵活的工作流程自动化。这个压缩包文件集合提供了丰富的Activiti6示例代码和应用,帮助用户深入理解和实践这个框架的...