博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【应用篇】Activiti显示器(抽象)简单的应用程序和服务的颗粒结合(两)
阅读量:5993 次
发布时间:2019-06-20

本文共 5470 字,大约阅读时间需要 18 分钟。

Activiti简单的应用程序,业务颗粒与工作流程结合。让流程带动业务颗粒运行的过程。此次的监听我们应用抽象的监听来实现,也就是说全部的普通业务类均应用此抽象监听,而不须要每个类一个监听的来操作。

 

新建两个普通类:

package com.tgb.itoo.activiti.controller;public class milaoshi {	public static void SayHello(){		System.out.println("milaoshi--sayHello--");	}/*	public static void SayHi(){		System.out.println("milaoshi--sayHi--");	}*/}package com.tgb.itoo.activiti.controller;public class tanghuan {	public static void SayHello(){		System.out.println("tanghuan--sayHello--");	}	public static void SayHi(){		System.out.println("tanghuan--sayHi--");	}}

抽象监听类:

package com.tgb.itoo.activiti.controller;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import org.activiti.engine.delegate.DelegateTask;import org.activiti.engine.delegate.TaskListener;public class CommonDelegate implements TaskListener{	static Map
map; public CommonDelegate(){} public CommonDelegate(Map
map){ this.map=map; } @Override public void notify(DelegateTask delegateTask) { Object obj=map.get("object"); Class clazz=obj.getClass(); Method[] methods=clazz.getDeclaredMethods(); for(int i=0;i

业务流程图 如图(tanghuan类和milaoshi类均绑定同一个监听):

流程变量 如图(不允许如图,允许为${result}):

终于生成的配置文件 例如以下:


启动流程相应的代码:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.RepositoryService;import org.activiti.engine.RuntimeService;import org.activiti.engine.TaskService;import org.activiti.engine.runtime.ProcessInstance;import org.activiti.engine.task.Task;import com.tgb.itoo.activiti.controller.CommonDelegate;import com.tgb.itoo.activiti.controller.milaoshi;import com.tgb.itoo.activiti.controller.tanghuan;public class MapDemo {	private static String readDataFromConsole(String prompt) {		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));		String str = null;		try {			System.out.print(prompt);			str = br.readLine();		} catch (IOException e) {			e.printStackTrace();		}		return str;	}	public static void main(String[] args) {		String str = readDataFromConsole("Please input string:");		System.out.println("The information from console: " + str);		// 创建流程引擎		ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration				.createStandaloneProcessEngineConfiguration();		// 连接数据库的配置		processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");		processEngineConfiguration				.setJdbcUrl("jdbc:mysql://localhost:3306/activitiexam?

useUnicode=true&characterEncoding=utf8"); processEngineConfiguration.setJdbcUsername("root"); processEngineConfiguration.setJdbcPassword("root"); ProcessEngine processEngine = processEngineConfiguration .buildProcessEngine(); System.out.println(processEngine); // 获取流程存储服务组件 RepositoryService repositoryService = processEngine .getRepositoryService(); // 获取运行时服务组件 RuntimeService runtimeService = processEngine.getRuntimeService(); // 获取流程任务组件 TaskService taskService = processEngine.getTaskService(); // 1、部署流程文件 repositoryService.createDeployment().name("MyProcess") .addClasspathResource("diagrams/" + str + ".bpmn").deploy(); Map<Object,Object> map=new HashMap<Object,Object>(); tanghuan th=new tanghuan(); milaoshi mxj=new milaoshi(); //向map里面扔对象 map.put("object", th); /*map.put("milaoshi", mxj);*/ CommonDelegate common=new CommonDelegate(map); // 2、启动流程 ProcessInstance processInstance = runtimeService .startProcessInstanceByKey("myProcess"); String end="1";//processInstance.getId() != null while (end.equalsIgnoreCase("1")) { map.remove("object"); map.put("object", mxj); // 3、查询第一个任务 Task task = taskService.createTaskQuery() .processInstanceId(processInstance.getId()).singleResult(); ; if (task != null) { System.out.println("============" + task.getId() + "============" + task.getName() + "============"); str = readDataFromConsole("Please input result:"); Map<String, Object> variables = new HashMap<String, Object>(); Boolean result; if (str.equalsIgnoreCase("true")) { result = true; } else { result = false; } variables.put("result", result); taskService.complete(task.getId(), variables); // 完毕任务 }else { end="0"; System.out.println("任务已经完毕"); } } } }


运行结果:


总结:

    以上这样的方式主要是应用了反射技术实现。我们在client动态的向监听内扔对象,依据扔的对象来去运行相应的方法,降低了我们编写监听的个数。

 


版权声明:本文博客原创文章,博客,未经同意,不得转载。

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4741991.html,如需转载请自行联系原作者

你可能感兴趣的文章
Nginx日志配置及配置调试
查看>>
(转)RabbitMQ学习之spring整合发送同步消息
查看>>
【JOURNAL】天井组诗之七 - 来生
查看>>
strtok()和strtok_r()
查看>>
关于override,new 那点事
查看>>
awk用法小结
查看>>
C++运算符重载
查看>>
论文笔记之:Playing Atari with Deep Reinforcement Learning
查看>>
学习jQuery
查看>>
REST服务开发实战,互联网营销
查看>>
Cocos Creator JS web平台复制粘贴代码(亲测可用)
查看>>
ELF文件整体格式小结
查看>>
JAX-RS开发 hello world
查看>>
题目:请实现一个函数,将一个字符串中的空格替换成“%20”
查看>>
shell 的语法
查看>>
RIA and volta
查看>>
Linux下安装redis
查看>>
安装ndoutils 提示“MySQL library could not be located”错误!
查看>>
时光易逝,我懂你心
查看>>
2019年别离职、别创业、别投资,收藏好这些热点好好干!
查看>>