﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-专注技术，奋斗不止</title><link>http://www.blogjava.net/ProgramerNi/</link><description>程序员-小倪的个人博客</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 15:59:59 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 15:59:59 GMT</pubDate><ttl>60</ttl><item><title>JBPM4服务详解 </title><link>http://www.blogjava.net/ProgramerNi/archive/2012/03/23/372537.html</link><dc:creator>ProgramerNi</dc:creator><author>ProgramerNi</author><pubDate>Fri, 23 Mar 2012 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/ProgramerNi/archive/2012/03/23/372537.html</guid><wfw:comment>http://www.blogjava.net/ProgramerNi/comments/372537.html</wfw:comment><comments>http://www.blogjava.net/ProgramerNi/archive/2012/03/23/372537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ProgramerNi/comments/commentRss/372537.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ProgramerNi/services/trackbacks/372537.html</trackback:ping><description><![CDATA[<h1>流程引擎ProcessEngine的构建方式:</h1><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span>ProcessEngine pe = Configuration.getProcessEngine();&nbsp; </span></li><li><span>ProcessEngine pe = <span class="keyword">new</span><span> Configuration().buildProcessEngine();&nbsp; </span></span></li><li class="alt"><span>ProcessEngine pe = <span class="keyword">new</span><span> Configuration().setResource(</span><span class="string">"my.jbpm.cfg.xml"</span><span>).buildProcessEngine();&nbsp; </span></span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">ProcessEngine pe = Configuration.getProcessEngine();
ProcessEngine pe = new Configuration().buildProcessEngine();
ProcessEngine pe = new Configuration().setResource("my.jbpm.cfg.xml").buildProcessEngine();</textarea><h1>流程引擎的服务接口:</h1><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span>RepositoryService rs = pe.getRepositoryService();&nbsp; </span></li><li><span>ExecutionService es = pe.getExectionService();&nbsp; </span></li><li class="alt"><span>TaskService ts = pe.getTaskService();&nbsp; </span></li><li><span>HistoryService hs = pe.getHistoryService();&nbsp; </span></li><li class="alt"><span>ManagementService ms = pe.getManagementService();&nbsp; </span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">RepositoryService rs = pe.getRepositoryService();
ExecutionService es = pe.getExectionService();
TaskService ts = pe.getTaskService();
HistoryService hs = pe.getHistoryService();
ManagementService ms = pe.getManagementService();
</textarea><h2>流程资源RepositoryService:包含了管理流程资源的所有方法.</h2><h3>1)部署流程</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span class="comment">//通过classpath加载</span><span>&nbsp; </span></li><li><span>rs.createDeployment().addResourceFromClasspath(path).deploy();&nbsp; </span></li><li class="alt"><span class="comment">//通过File类加载</span><span>&nbsp; </span></li><li><span>rs.createDeployment().addResourceFromFile(file).deploy();&nbsp; </span></li><li class="alt"><span class="comment">//通过URL加载</span><span>&nbsp; </span></li><li><span>rs.createDeployment().addResourceFromUrl(url).deploy();&nbsp; </span></li><li class="alt"><span class="comment">//通过ZIP文件流加载</span><span>&nbsp; </span></li><li><span>rs.createDeployment().addResourceFromZipInputStream(zip).deploy();&nbsp; </span></li><li class="alt"><span class="comment">//通过字符串加载</span><span>&nbsp; </span></li><li><span>rs.createDeployment().addResourceFromString(resourceName, string).deploy();&nbsp; </span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">//通过classpath加载
rs.createDeployment().addResourceFromClasspath(path).deploy();
//通过File类加载
rs.createDeployment().addResourceFromFile(file).deploy();
//通过URL加载
rs.createDeployment().addResourceFromUrl(url).deploy();
//通过ZIP文件流加载
rs.createDeployment().addResourceFromZipInputStream(zip).deploy();
//通过字符串加载
rs.createDeployment().addResourceFromString(resourceName, string).deploy();

</textarea><h3>2)删除流程</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span class="comment">//删除流程定义,如果该流程还存在活动的流程实例,将抛出异常</span><span>&nbsp; </span></li><li><span>rs.deleteDeployment(deploymentId);&nbsp; </span></li><li class="alt"><span class="comment">//级联删除所有该流程相关的内容</span><span>&nbsp; </span></li><li><span>rs.deleteDeploymentCascade(deploymentId);&nbsp; </span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">//删除流程定义,如果该流程还存在活动的流程实例,将抛出异常
rs.deleteDeployment(deploymentId);
//级联删除所有该流程相关的内容
rs.deleteDeploymentCascade(deploymentId);</textarea><h3>3)挂起/恢复流程</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span class="comment">//挂起流程后,发起新流程或更新实例数据都会抛出异常</span><span>&nbsp; </span></li><li><span>rs.suspendDeployment(deploymentId);&nbsp; </span></li><li class="alt"><span class="comment">//恢复流程</span><span>&nbsp; </span></li><li><span>rs.resumeDeployment(deploymentId);&nbsp; </span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">//挂起流程后,发起新流程或更新实例数据都会抛出异常
rs.suspendDeployment(deploymentId);
//恢复流程
rs.resumeDeployment(deploymentId);</textarea><h3>4)查询流程定义信息</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span>ProcessDefinitionQuery pdq = rs.createProcessDefinitionQuery();&nbsp; </span></li><li><span>List&lt;ProcessDefinition&gt; pdList = pdq.processDefinitionKey(<span class="string">"xxx"</span><span>).list();&nbsp; </span></span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">ProcessDefinitionQuery pdq = rs.createProcessDefinitionQuery();
List&lt;ProcessDefinition&gt; pdList = pdq.processDefinitionKey("xxx").list();</textarea><h3>5)获取流程定义图片</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span class="comment">//前提条件是图片也发布到了数据库中</span><span>&nbsp; </span></li><li><span>rs.getResourceAsStream(deploymentId,<span class="string">"xxx.png"</span><span>);&nbsp; </span></span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">//前提条件是图片也发布到了数据库中
rs.getResourceAsStream(deploymentId,"xxx.png");</textarea><h2>执行服务ExecutionService:主要用于维护流程实例,包含流程实例的查询和流程变量的操作.</h2><h3>1)启动新的流程</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span class="comment">//指定KEY,默认最新版本</span><span>&nbsp; </span></li><li><span>es.startProcessInstanceByKey(<span class="string">"VMIN"</span><span>);&nbsp; </span></span></li><li class="alt"><span class="comment">//指定KEY-流程版本</span><span>&nbsp; </span></li><li><span>es.startProcessInstanceById(<span class="string">"VMIN-2"</span><span>);&nbsp; </span></span></li><li class="alt"><span class="comment">//指定流程实例ID</span><span>&nbsp; </span></li><li><span>es.startProcessInstanceByKey(<span class="string">"VMIN"</span><span>,</span><span class="string">"CGD0008"</span><span>);&nbsp; </span></span></li><li class="alt"><span class="comment">//传递流程变量</span><span>&nbsp; </span></li><li><span>Map map = <span class="keyword">new</span><span> HashMap();&nbsp; </span></span></li><li class="alt"><span>es.startProcessInstanceByKey(<span class="string">"VMIN"</span><span>, map);&nbsp; </span></span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">//指定KEY,默认最新版本
es.startProcessInstanceByKey("VMIN");
//指定KEY-流程版本
es.startProcessInstanceById("VMIN-2");
//指定流程实例ID
es.startProcessInstanceByKey("VMIN","CGD0008");
//传递流程变量
Map map = new HashMap();
es.startProcessInstanceByKey("VMIN", map);</textarea><h3>2)执行等待的流程</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span>es.signalExecutionById(executeId);&nbsp; </span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">es.signalExecutionById(executeId);</textarea><h2>任务服务TaskService</h2><h3>1)任务列表访问</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span class="comment">//查找指定用户的任务列表</span><span>&nbsp; </span></li><li><span>List&lt;Task&gt; list = ts.findPersonalTasks(<span class="string">"marker"</span><span>);&nbsp; </span></span></li><li class="alt"><span class="comment">//查找指定组的任务列表</span><span>&nbsp; </span></li><li><span>List&lt;Task&gt; list = ts.findGroupTasks(<span class="string">"hr-group"</span><span>);&nbsp; </span></span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">//查找指定用户的任务列表
List&lt;Task&gt; list = ts.findPersonalTasks("marker");
//查找指定组的任务列表
List&lt;Task&gt; list = ts.findGroupTasks("hr-group");</textarea><h3>2)读取相关数据</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span>ts.getVariable(taskId, variableName);&nbsp; </span></li><li><span>ts.getVariables(taskId, variableNames);&nbsp; </span></li><li class="alt"><span>ts.getVariableNames(taskId);&nbsp; </span></li><li><span>ts.getVariables(taskId, variables);&nbsp; </span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">ts.getVariable(taskId, variableName);
ts.getVariables(taskId, variableNames);
ts.getVariableNames(taskId);
ts.getVariables(taskId, variables);
</textarea><h3>3)完成任务</h3><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span>ts.completeTask(taskId);&nbsp; </span></li><li><span>ts.completeTask(taskId, variables);&nbsp; </span></li><li class="alt"><span>ts.completeTask(taskId, outcome);&nbsp; </span></li><li><span>ts.completeTask(taskId, outcome, variables);&nbsp; </span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">ts.completeTask(taskId);
ts.completeTask(taskId, variables);
ts.completeTask(taskId, outcome);
ts.completeTask(taskId, outcome, variables);
</textarea><h2>历史服务HistoryService:查询历史流程实例</h2><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span>hs.createHistoryProcessInstanceQuery().processDefinitionId(pdId).orderAsc(HistoryProcessInstanceQuery.PROPERTY_STARTTIME).list();&nbsp; </span></li></ol></div><textarea style="display: none;" class="java" readonly="" name="code">hs.createHistoryProcessInstanceQuery().processDefinitionId(pdId).orderAsc(HistoryProcessInstanceQuery.PROPERTY_STARTTIME).list();</textarea><h2>管理服务ManagementServcie:管理Job</h2><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/jonay/article/details/7044658#"><u><font color="#0066cc">?</font></u></a></div></div><ol class="dp-j"><li class="alt"><span>Job job = ms.createJobQuery().processInstanceId(processInstanceId).uniqueResult();&nbsp; </span></li><li><span>ms.executeJob(job.getId);&nbsp; </span></li></ol></div><img src ="http://www.blogjava.net/ProgramerNi/aggbug/372537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ProgramerNi/" target="_blank">ProgramerNi</a> 2012-03-23 13:28 <a href="http://www.blogjava.net/ProgramerNi/archive/2012/03/23/372537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>