将JBPM4整合到web工程---流程实例管理
来源:互联网 发布:总经理助理与总监 知乎 编辑:程序博客网 时间:2024/06/06 16:21
转载自http://blog.csdn.net/huangjingqian/article/details/7344218
1.将上一篇“将JBPM4整合到web工程”项目拷贝一份
2.修改index.jsp文件至如下,在现实流程定义里面增加两个操作“启动流程,查看流程”。同时增加一个用来显示流程实例的table,并添加一个“执行”的操作。
- <%@page contentType="text/html;charset=UTF-8" %>
- <%@page import="org.jbpm.api.*" %>
- <%@page import="java.util.*" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
- <html>
- <head>
- <title>jBPM4学习</title>
- </head>
- <body>
- <form action="jbpm?zzg=deploy" method="post">
- <textarea name="xml" cols=50 rows=15></textarea>
- <input type="submit" value="发布"/>
- <input type="reset" value="取消"/>
- </form>
- <table width=480 border=1>
- <tr><td colspan="5">流程定义</td></tr>
- <tr>
- <td>ID</td>
- <td>Key</td>
- <td>名称</td>
- <td>版本</td>
- <td>操作</td>
- </tr>
- <c:forEach var="process" items="${process}">
- <tr>
- <td>${process.id}</td>
- <td>${process.key}</td>
- <td>${process.name}</td>
- <td>${process.version}</td>
- <td><a href="jbpm?zzg=start&key=${process.key }">启动</a>
- <a href="jbpm?zzg=query&id=${process.id }">查看</a>
- <a href="jbpm?zzg=delete&id=${process.id }">删除</a></td>
- </tr>
- </c:forEach>
- </table>
- <br>
- <br>
- <br>
- <table width=480 border=1>
- <tr><td colspan="5">流程实例</td></tr>
- <tr>
- <td>ID</td>
- <td>Key</td>
- <td>状态</td>
- <td>操作</td>
- </tr>
- <c:forEach var="pi" items="${pi}">
- <tr>
- <td>${pi.id}</td>
- <td>${pi.key}</td>
- <td>${pi.state}</td>
- <td><a href="jbpm?zzg=run&pid=${pi.id }">执行</a></td>
- </tr>
- </c:forEach>
- </table>
- </body>
- </html>
3.然后修改至JbpmServlet.java文件如下
- package zzg;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.ServletConfig;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.jbpm.api.Configuration;
- import org.jbpm.api.ExecutionService;
- import org.jbpm.api.ProcessDefinition;
- import org.jbpm.api.ProcessDefinitionQuery;
- import org.jbpm.api.ProcessEngine;
- import org.jbpm.api.ProcessInstance;
- import org.jbpm.api.RepositoryService;
- public class JbpmServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- private ProcessEngine processEngine = null;
- private RepositoryService repositoryService = null;
- private ExecutionService executionService = null;
- private ProcessInstance processInstance = null;
- /* 初始化ProcessEngine. */
- public void init(ServletConfig config) throws ServletException {
- processEngine = new Configuration().buildProcessEngine();
- repositoryService = processEngine.getRepositoryService();
- executionService = processEngine.getExecutionService();
- }
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- process(request, response);
- }
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- process(request, response);
- }
- protected void process(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- String zzg = request.getParameter("zzg");
- List<ProcessInstance> pi = null;
- if (zzg.equals("deploy")) {
- deployProcessDefinition(request, response);
- } else if (zzg.equals("delete")) {
- removeProcessDefinitionById(request, response);
- } else if (zzg.equals("start")) {
- startProcessInstance(request, response);
- } else if (zzg.equals("query")) {
- pi = getProcessInstance(request, response);
- request.setAttribute("pi", pi);
- } else if (zzg.equals("run")) {
- signalProcessInstance(request, response);
- pi = getProcessInstance(request, response);
- request.setAttribute("pi", pi);
- }
- List<ProcessDefinition> list = getLatestProcessDefinition(request,
- response);
- request.setAttribute("process", list);
- request.getRequestDispatcher("/index.jsp").forward(request, response);
- }
- /**
- * 发布流程方法
- *
- * @param request
- * @param response
- * @throws ServletException
- * @throws IOException
- */
- protected void deployProcessDefinition(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- String xml = request.getParameter("xml");
- repositoryService.createDeployment().addResourceFromString(
- "yy.jpdl.xml", xml).deploy();
- }
- /* 获取最新流程. */
- protected List<ProcessDefinition> getLatestProcessDefinition(
- HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- // 获取全部的流程定义
- List<ProcessDefinition> processDefinitions = repositoryService
- .createProcessDefinitionQuery().orderAsc(
- ProcessDefinitionQuery.PROPERTY_NAME).list();
- Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
- for (ProcessDefinition pd : processDefinitions) {
- String key = pd.getKey();
- ProcessDefinition definition = map.get(key);
- if ((definition == null)
- || (definition.getVersion() < pd.getVersion())) {
- map.put(key, pd);
- }
- }
- return new ArrayList(map.values());
- }
- /* 删除流程定义. */
- protected void removeProcessDefinitionById(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- String id = request.getParameter("id");
- // 根据流程ID获取流程定义实例
- ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
- .processDefinitionId(id).uniqueResult();
- // 根据流程定义发布的ID来删除流程定义
- // 注意:jbpm4是不允许直接根据流程定义的ID来直接删除流程定义的
- repositoryService.deleteDeploymentCascade(pd.getDeploymentId());
- }
- /* 根据流程定义的key值启动流程. */
- protected void startProcessInstance(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- String key = request.getParameter("key");
- processInstance = executionService.startProcessInstanceByKey(key);
- }
- /* 根据流程定义的ID查询流程实例. */
- protected List<ProcessInstance> getProcessInstance(
- HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String pdId = request.getParameter("id");
- return executionService.createProcessInstanceQuery()
- .processDefinitionId(pdId).list();
- }
- /* 根据流程实例的ID执行流程实例. */
- protected void signalProcessInstance(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- String pid = request.getParameter("pid");
- executionService.signalExecutionById(pid);
- }
- }
4.控制流程的活动主要包括以下几个:
- Start 启动流程
- End 结束流程
- State 流程等待
- Decision 决定流程流向
- Task 等待
- Fork 流程分支
- Join 流程汇聚
- Custom 操作流程
- Sub-process 启动一个子流程
- 将JBPM4整合到web工程---流程实例管理
- 将JBPM4整合到web工程---流程实例管理
- JBPM4基础篇03-管理流程实例
- JBPM4基础篇03-管理流程实例
- JBPM4基础篇03-管理流程实例
- JBPM4删除流程实例
- 将echart的官方实例关系图发布到Web工程上
- JBPM4基础篇04-设计请假流程,JBPM集成到Web Project
- JBPM4基础篇04-设计请假流程,JBPM集成到Web Project
- JBPM4基础篇04-设计请假流程,JBPM集成到Web Project
- JBPM4"公司请假流程"实例步骤
- 【整合篇】JBPM4.4业务与流程的整合
- 【整合篇】JBPM4.4业务与流程整合之查询
- JBPM4基础篇02-管理流程定义
- jBPM4.4之流程定义管理
- JBPM4基础篇02-管理流程定义
- JBPM4基础篇02-管理流程定义
- jbpm4的web流程设计器signavio
- Java中int和Integer
- JSON入门级学习小结--JSON数据结构
- java字符串与整数之间的互相转换
- 【读博笔记】读《 Android高手进阶教程(二十五)之---Android 中的AIDL!!! 》笔记
- 在Android中加入GOOGLE统计系统
- 将JBPM4整合到web工程---流程实例管理
- 淘宝买到假货之后,真的无能为力?电商是有潜力的,因为能保证真货
- Java线程之CyclicBarrier
- Android权限之sharedUserId和签名
- 设置StarUML delphi环境
- 撞车之后,不要傻里傻气的!
- struts2+spring+hibernate整合的配置文件
- IOS面试题之委托,协议与分类
- CompletionInfo[] mCompletions