jbpm视频教程 一定需要jboss吗

JBPM 整合 Drools(JBoss Rule)-java-电脑编程网>进入jBPM 是一个非常优秀的开源工作流引擎,虽然他不是一个一站式的工作流平台,不过它已经为我们提供了比..." />JBPM 整合 Drools(JBoss Rule)作者:佚名 和相关&&
欢迎进入Java社区论坛,与200万技术人员互动交流
&&&&&jBPM 是一个非常优秀的开源工作流引擎,虽然他不是一个一站式的工作流平台,不过它已经为我们提供了比较丰富的底层操作,为了满足特定的项目需求,我们一般需要对其进行二次开发,才能适用于具体的业务需求。其中一个主要的扩展点是针对 TaskNode 进行的用户的分配。TaskNode 是 jBPM 中一个非常重要的概念,一个任务节点可以包含若干个任务,不同的任务可以由不同的人来完成,任务实例被分配给 actorId 来完成,其中指定到人的分配工作就是 Assignment 要处理的,这也是我们需要定制的功能,为了实现用户的分配,我们需要实现 AssignmentHandler 接口,接口原型如下。public interface AssignmentHandler extends Serializable {void assign(Assignable assignable, ExecutionContext executionContext) throws E}通常用代码实现的话,我们可以让一个类实现这个接口,并在 swimlane 或者 tasknode 中的 assignment 指定该类。但是,这样的灵活性是显然不够的,在系统的使用过程中,分配策略会不断的进行调整,因此我们需要更为灵活的解决方案,jBPM 本身可以使用基于 Bean
的脚本来写分配策略,但是 Bean
不是那么强大,我们需要更为强大的解决方案,因此,我们选用了已经被 JBoss 收为旗下的 JBoss Drools 4.0 规则引擎 (在 3.0 的时候曾经改名为 JBoss Rules,4.0 又改回来了)jBPM 和 Drools 虽然同在 JBoss 旗下,不过他们目前并没有很好的进行整合,所以我们还是要利用它们系统系统的一些功能来做整合,同样也是实现 AssignmentHandler 接口,不过另外我们利用了 jBPM 里面的一个小小的技巧。看一下这段配置:AgentAssignmentRule红色标注的这段配置,我们可以理解为,在 RulesAssignmentHandler 这个类里有一个 ruleName 这样的属性,在初始化这个类的时候,jBPM 会把配置中 ruleName 的值 set 给 RulesAssignmentHandler 中 ruleName 的属性。public class RulesAssignmentHandler implements AssignmentHandler {protected String ruleNpublic String getRuleName() {return ruleN}public void setRuleName(String ruleName) {this.ruleName = ruleN}protected RuleBase readRule(String ruleName) throws Exception {// 到 classes 下的 /rules 下加载相应的文件String rulePath = "/rules/" + ruleName + ".drl";Resource resource = new ClassPathResource(rulePath);Reader reader = new InputStreamReader(resource.getInputStream());PackageBuilder builder = new PackageBuilder();builder.addPackageFromDrl(reader);Package pkg = builder.getPackage();RuleBase ruleBase = RuleBaseFactory.newRuleBase();ruleBase.addPackage(pkg);return ruleB}protected void initRuleContextData(ExecutionContext executionContext, WorkingMemory workingMemory) {ContextInstance ci = executionContext.getContextInstance();Map vars = ci.getVariables();workingMemory.insert(ci);workingMemory.insert(vars);}public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {RuleBase ruleBase = readRule(ruleName);WorkingMemory workingMemory = ruleBase.newStatefulSession();// 为了简便操作,我只是拿了放入 ExecuteContext 中的 variable 进行逻辑处理initRuleContextData(executionContext, workingMemory);workingMemory.insert(assignable);workingMemory.fireAllRules();}}对应的 AgentAssignmentRule.drl 文件内容如下,假定 ExecutionContext 中有 price 这个 variable,我们判定当这个值 & 5000 的时候,我们将此任务分配给 senior_agent 来处理。package org.agile.workflowimport .util.Mapimport org.jbpm.taskmgmt.exe.Assignablerule "Assign Agent"whena : Assignable()Map(this['price'] &= 5000)thena.setActorId("senior_agent");end就这样,我们就完成了最为简单的 jBPM 和 Drools 的整合,当然这种方式只是简单的利用了 jBPM 的一些特性来做的,我们每次都得指定这个 RulesAssignmentHandler,还是很麻烦的,更好的方式就是我们改写 ProcessDefinition.xml 的 parser,让 Drools 的规则定义成为和 swimlane, actor-id, expression 这样的分配方式同样级别的,让 Drools 成为 jBPM 的一等公民,这个以后研究好了再来和大家分享。
相关资料:|||||||JBPM 整合 Drools(JBoss Rule)来源网络,如有侵权请告知,即处理!编程Tags:                &                    --JBoss jBPM工作流定义部署
&&&&&&&&&&&& &&&
January 2017日一二三四五六12345678910111213141516171819202122232425262728293031公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。
我的分类(专题)
blog名称:日志总数:1304评论数量:2242留言数量:5访问次数:6695813建立时间:日
jBPM工作流部署的基本部署是:首先将工作流定义文件(processdifinition.xml)和相关的一些资源文件打包成pde文件,然后将生成的pde包部署到jBPM数据库中。pde文件的格式是jar文件格式,可以用winrar、winzip打开。&&&&&&&&jBPM发行包中定义了ant任务来完成这个部署任务,具体步骤如下:(1)修改jBPM根目录下的build.properties,jbpm.home指明jbpm所在的目录;ant.home指明ant所在目录;jboss.home指明jboss所在目录;jbpm.pde指明生成pde文件的工作目录。(2)在jbpm根目录下执行命令:ant create.pde,生成pde工作目录;工作目录层次如下:jbpm.pde----------------&&&&&& ----lib&&&& 所需库文件,包括jdbc驱动。&&&&&& ----src&&&&&&&&&&&&&&&& -----config&& jbpm.properties和log4j.properties&&&&&&&&&&&&&&&& -----java&&&& java文件&&&&&&&&&&&&&&&& -----process& 工作流定义文件和相关资源文件&&&&&&&&&&&&&&&& -----test &&&&&测试代码&&&&&& -----target&&&& &&&&&&&&&&&&&&&&&-----classes&& &&&&&&&&&&&&&&&& -----pde&&&& &&生成的pde包所在目录&&&&&&&&&&&&&&&& -----test-classes& &&&&&&&&&&&&&&&& -----test-reports &&(3)修改jbpm.properties,设置具体的数据库连接信息,将数据库jdbc驱动放在lib目录下;(4)将生成pde所需文件放在上述制定的目录;(5)修改jbpm.pde目录下的build.xml文件,主要是修改build.process.archives任务定义,指定工作流定义文件名称和相应的资源文件。(6)在jbpm.pde目录下运行ant deploy.process.archives 命令;修改了工作流定义文件后,要先运行ant clean,再运行ant deploy.process.archives。(7)如果要单独生成pde文件,可运行ant build.process.archives命令。
回复:JBoss&jBPM工作流定义部署,&&
最爱喝可乐(游客)发表评论于 18:47:21
ant create.pde命令中的create pde命令是那里定义出来的?
个人主页 |
发表评论:
Sponsored By W3CHINA Blog 0.8&Processed in 0.047 second(s), page refreshedA JBoss Project
Business Process Suite
jBPM is a flexible Business Process Management (BPM) Suite.
A business process allows
you to model your business goals by describing the steps that need to be executed to
achieve that goal and the order, using a flow chart.
This greatly improves the
visibility and agility of your business logic, results in higher-level and
domain-specific representations that can be understood by business users and is
easier to monitor.
For more details, check out the .
Getting started
The aim of the new project wizard is to set up an executable sample project
to start using processes immediately. This will set up a basic structure, the
classpath, sample process and a test case to get you started.
Supports selecting
a jBPM runtime for your project, or using Maven to get the jBPM core dependencies.
BPMN2 Modeler
Create your BPMN 2.0 processes
Edit your processes (using the BPMN 2.0 specification) using the Eclipse BPMN2 Modeler.
Debug your processes
Debugging support to look at process instances, their current state, associated data, etc.
Process Repository
Integration using Git
Integrate with the process repository (as part of the jBPM console, also known as
Guvnor repository or business central) using Git tooling.
Contribute
Most plugins are available under the Eclipse Public License (EPL) others Lesser General Public License (LGPL).
They may also contain some libraries licensed under certain open source licenses such as ASL, BSD, and/or certain other open source licenses. 对于各种动作如流程概念建 模、定义、实例化、流程...曾是 ERP 软件开发中广泛应用的工作流框架,JBpm 的...Activiti5 是 JBoss jBpm 架构师加入 Alfresco 后的...  JBoss jBPM 为设计及开发工作流和业务流程管理系统提供了一个先进的平台。 由 ...以下示子表明了 process-definition.xml 文件的例子: & ?xml version=&1.0&...  OA 系统开发的模块学习 OA 系统开发中工作流的开发...① jBPM 的一个特色是采用了它自己定义的 JBoss ...2、启动流程 创建流程实例的过程。具体创建实例的...  JBPM工作流开发指南_IT/计算机_专业资料。JBPM 工作流开发指南 v1.0 JBPM ...流程设 计器的 Eclipse 插件,和一个用 JBOSS 作为服务器的示例流程等相关文件...  Willow 由 Huihoo Power 开发详细可到其中文主页查看...cern 工作流引擎基于扩展的案例(case)处理方法,流程...JBOSS-JBPM 引擎的开源工作流工作平台它是一个跨 ...  ???jBPM 的一个特色是采用了它自己定义的 JBossjBPM Process definition ...4、 工作流数据与业务数据结合一般通过在流程实例中添加相应的一笔数据的标识...  报告应用工作流技术分离传统企业级应用系统开发中的...本课题采用的是 JBOSS 公司的 JDPL(JBOSSJBPM ...流定义,即全局工作流、 局部工作流和工作流实例。...  工作流系统技术可行性分析v1.1_计算机软件及应用_...管理控制台加入了对简单的案例和任务的统计功能 3....4) jbpm4 官方提供的控制台必须要基于 jboss 服务...  降低系统开发和维护成本 工作流框架有:Jbpm、...了插件:Window Preference 中是否有 Jboss jBPM 项...Process instance ProcessInstance,流程实例: 代表流程...JBoss 系列七十九: jBPM 6 示例之 Evaluation
jBPM Evaluation 示例具有悠久的历史,也是传统的jBPM示例,jBPM首页(http://www.jboss.org/jbpm)就有Evaluation 示例的介绍,jBPM默认安装完成Evaluation 示例也被默认安装,Evaluation 示例流程如下图:
Evaluation流程有7个节点:
vcD4KClN0YXJ0IEV2ZW50IC0gse3KvsH3s8y/qsq8VXNlciBUYXNrIC0gU2VsZiBFdmFsdWF0aW9uIDxicj4KR2F0ZXdheSAtIERpdmVyZ2luZ6Osse3KvsH3s8zWtNDQtb20y7fWv6rBvdanVXNlciBUYXNrIC0gSFIgTWFuYWdlciBFdmFsdWF0aW9uPGJyPgpVc2VyIFRhc2sgLSBQcm9qZWN0IE1hbmFnZXIgRXZhbHVhdGlvbjxicj4KR2F0ZXdheSAtIENvbnZlcmdpbmcsILHtyr7B97PM1rTQ0LW9tMu6z7KiPGJyPgpFbmQgRXZlbnQgLSCx7cq+wfezzNa00NC94cr4CkV2YWx1YXRpb27D6Mr2tcTKx9K7uPbGwLnAwfezzKOsytfPyNfUztLGwLnAo6zIu7rzt9ax8MrHSFLGwLnAus1QTcbAucCho7G+yr7A/dbQyei8xrW9yP3W1r3HyaujrGtyaXN2zqrG1c2o1LG5pKOsam9obs6qUE2jrG1hcnnOqkhSo6y908/CwLTO0sPHt9ax8NHdyr7U2kVjbGlwc2Ug1tDUy9DQRXZhbHVhdGlvbiDKvsD9o6y6zdTaakJQTSBjb25zb2xl1tDUy9DQRXZhbHVhdGlvbiDKvsD9oaM8YnI+CjxwPjwvcD4KPGgzPtTaRWNsaXBzZSDW0NTL0NBFdmFsdWF0aW9uIMq+wP08L2gzPgo8cD64+b7dakJQTSA2ILeisryjrL/sy9mwstewo6zQwrmmxNy96cnc1tC96cnctcSyvdbosLLXsGpCUE0gNqOsamJwbS1pbnN0YWxsZXLEv8K8z8K74dPQc2FtcGxlxL/CvKOsuMPEv8K81tC1xHNhbXBsZc6qakJQTSBFdmFsdWF0aW9uIMq+wP2ho87Svau0y8q+wP3V+7rPtb1HaXRodWIgakJQTSA2yr7A/aOsz+rPuLT6wuu8+6O6aHR0cHM6Ly9naXRodWIuY29tL2t5bGluc29vbmcvamJwbS02LWV4YW1wbGVzL3RyZWUvbWFzdGVyL2V2YWx1YXRpb248L3A+CjxwPrj5vt3I7bz+sLLXsLyw18rBz8/C1NjW0MPoyva1xLe9t6jPwtTYakJQTSBFdmFsdWF0aW9uIMq+wP21vbG+tdi1vMjrRWNsaXBzZaOs1MvQ0G9yZy5qYnBtLmRlbW8uZXZhbHVhdGlvbi5Qcm9jZXNzTWFpbr/J0tTWtNDQRXZhbHVhdGlvbsH3s8yho1Byb2Nlc3NNYWlutPrC68jnz8KjujwvcD4KPHA+PHByZSBjbGFzcz0="brush:">package org.jbpm.demo.
import java.util.HashM
import java.util.L
import java.util.M
import javax.persistence.EntityManagerF
import javax.persistence.P
import org.jbpm.services.task.identity.JBossUserGroupCallbackI
import org.jbpm.test.JBPMH
import org.kie.api.KieB
import org.kie.api.KieS
import org.kie.api.runtime.KieC
import org.kie.api.runtime.KieS
import org.kie.api.runtime.manager.RuntimeE
import org.kie.api.runtime.manager.RuntimeEnvironmentB
import org.kie.api.runtime.manager.RuntimeM
import org.kie.api.runtime.manager.RuntimeManagerF
import org.kie.api.task.TaskS
import org.kie.api.task.model.TaskS
public class ProcessMain {
public static void main(String[] args) {
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieBase kbase = kContainer.getKieBase("kbase");
RuntimeManager manager = createRuntimeManager(kbase);
RuntimeEngine engine = manager.getRuntimeEngine(null);
KieSession ksession = engine.getKieSession();
TaskService taskService = engine.getTaskService();
// start a new process instance
Map params = new HashMap();
params.put("employee", "krisv");
params.put("reason", "Yearly performance evaluation");
ksession.startProcess("org.jbpm.demo.evaluation", params);
System.out.println("Process started ...");
// complete Self Evaluation
List tasks = taskService.getTasksAssignedAsPotentialOwner("krisv", "en-UK");
TaskSummary task = tasks.get(0);
System.out.println("'krisv' completing task " + task.getName() + ": " + task.getDescription());
taskService.start(task.getId(), "krisv");
Map results = new HashMap();
results.put("performance", "exceeding");
plete(task.getId(), "krisv", results);
// john from HR
tasks = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK");
task = tasks.get(0);
System.out.println("'john' completing task " + task.getName() + ": " + task.getDescription());
taskService.start(task.getId(), "john");
results = new HashMap();
results.put("performance", "acceptable");
plete(task.getId(), "john", results);
// mary from PM
tasks = taskService.getTasksAssignedAsPotentialOwner("mary", "en-UK");
task = tasks.get(0);
System.out.println("'mary' completing task " + task.getName() + ": " + task.getDescription());
taskService.start(task.getId(), "mary");
results = new HashMap();
results.put("performance", "outstanding");
plete(task.getId(), "mary", results);
System.out.println("Process instance completed");
manager.disposeRuntimeEngine(engine);
manager.close();
System.exit(0);
private static RuntimeManager createRuntimeManager(KieBase kbase) {
JBPMHelper.startH2Server();
JBPMHelper.setupDataSource();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");
RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory.get().newDefaultBuilder().entityManagerFactory(emf).userGroupCallback(new JBossUserGroupCallbackImpl("classpath:/usergroups.properties")).knowledgeBase(kbase);
return RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(builder.get(), "org.jbpm.demo:evaluation:1.0");
运行ProcessMain输出的结果如下:
Process started ...
'krisv' completing task Self Evaluation: Please perform a self-evalutation.
'john' completing task Project Manager Evaluation: You need to evaluate krisv.
'mary' completing task HR Manager Evaluation: You need to evaluate krisv.
Process instance completed
另外JUnit运行org.jbpm.demo.evaluation.ProcessTest同样可以运行流程,同样输出结果:
Process started ...
'krisv' completing task Self Evaluation: Please perform a self-evalutation.
'john' completing task Project Manager Evaluation: You need to evaluate krisv.
'mary' completing task HR Manager Evaluation: You need to evaluate krisv.
Process instance completed
在jBPM console中运行Evaluation 示例
任意根据jBPM 6 发布,快速安装,新功能介绍中介绍的步骤,或jBPM 6 使用 Mysql 替换默认的
H2 中介绍的步骤启动jBPM 6,登录jBPM console(http://localhost:8080/jbpm-console)。我们通过如下步骤运行示例。
启动流程并进行Self Evaluation
使用krisv/krisv登录jBPM console:
Authoring -> Project Authoring,在Project Explorer中选择jbpm-playground,在jbpm-playground中选择Evaluation,在右边Project栏点击Build & Deploy:
选择Deploy -> Deployments会显示部署的流程,选择Process Management -> Process Definitions会列出所有定义部署的流程,在最右端点击开始按钮,开始执行流程,在弹出的输入如下信息点击开始:
选择Task-> Task List,可以列出krisv所有权限的Self Evaluation,在列表右边点击Start图标,Start图标会变化为Complete图标,点击Complete图标,在流程右边输入good点击Complete按钮:
选择Process Management -> Process Instance,接着在右边Instance Details栏选择Views -> Process Model,查看流程执行状况:
如上图Self Evaluation为灰色,表示已经执行完成。
HR Manager Evaluation
退出当前登录,使用mary/mary登录jBPM console,选择Task-> Task List,可以列出mary所有权限的HR Manager Evaluation,在列表右边点击Cliam图标,Start图标会变化为Complete图标,点击Complete图标,在流程右边输入good点击Complete按钮:
Project Manager Evaluation
退出当前登录,使用john/john登录jBPM console,选择Task-> Task List,可以列出mary所有权限的Project Manager Evaluation,在列表右边点击Cliam图标,Start图标会变化为Complete图标,点击Complete图标,在流程右边输入good点击Complete按钮:
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 jbpm工作流 的文章

 

随机推荐