`
jacky6024
  • 浏览: 81280 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

jbpm工作流引擎介绍

阅读更多

自己写的一份jbpm工作流引擎介绍的PPT文档,希望对大家有帮助.

分享到:
评论
27 楼 chengguogen 2011-09-30  
请您给我们作个培训吧,如何?我们需要专业支持。chenggg@founder.com
26 楼 chengguogen 2011-09-30  
请您给我们作个培训吧,如何?我们需要专业支持。
25 楼 xyz20003 2010-05-21  
jbpm4还没有完全成熟,jbpm3上的一些特性还没有完全迁移过来。因为它与jbpm3比较起来更易用,现在才有很多公司选择使用jbpm4。也有一层原因是jbpm4的图形比jbpm3漂亮了。
选择jbpm3还是jbpm4,还是应该根据你们公司本身的技术底子,如果以前有人做过jbpm3,那当然应该选择jbpm3,如果两样都没用过,建议用jbpm4,起码入手会快一点儿。如果公司有钱,建议还是用jbpm3,因为可以买red hat的官方培训和技术支持。
24 楼 qnjian 2010-05-19  
想问一下,现在JBPM4是否已经成熟,可以用于生产环境了?因为现在有一个新项目,在决定使用JBPM3还是4上面临抉择。谢谢!
23 楼 northwind1 2010-03-19  
LZ,我按照你在书中说的方法,使用MyEclipse发布流程,当无论哪种方式,都报如下错误
org.hibernate.MappingException: Could not determine type for: string_max, for columns: [org.hibernate.mapping.Column(MESSAGE_)]
这是怎么回事?我用的数据库是MS SQL2005,JBPM的映射文件中将varchar类型映射为string_max,我想这是
Hibernate不能识别的原因吧,你没遇到过这种问题么?我的邮箱是xjtshine@yahoo.com.cn,希望LZ能为我解惑
22 楼 northwind1 2010-03-19  
LZ,我按照你在书中说的方法,使用MyEclipse发布流程,当无论哪种方式,都报如下错误
org.hibernate.MappingException: Could not determine type for: string_max, for columns: [org.hibernate.mapping.Column(MESSAGE_)]
这是怎么回事?我用的数据库是MS SQL2005,JBPM的映射文件中将varchar类型映射为string_max,我想这是
Hibernate不能识别的原因吧,你没遇到过这种问题么?我的邮箱是xjtshine@yahoo.com.cn,希望LZ能为我解惑
21 楼 alfan001 2010-01-08  
请问高老师,jBPM的并行处理能力如何,能否用来开发有十几万用户的大型工作流系统?也就是说jBPM能否支持大批量用户同时发起工作流程实例,或是数量巨大的流程实例同时运行?谢谢
20 楼 flyinglogs 2009-12-29  
if(param>100)  上面刚写错了!
19 楼 jacky6024 2009-12-29  
您好,我在书里犯的错,SOORY,
    <expression>
     transitionNames = new ArrayList();
     if(param>10){
        transNames.add("to node1");
        transNames.add("to node2");
     }else{
        transNames.add("to node2");
        transNames.add("to node3");
     }
     </expression>

这里的transitionNames = new ArrayList();其中的transitionNames 应该为transNames
18 楼 flyinglogs 2009-12-29  
高哥: <fork name="fork1">
    <script >
    <variable name="transNames" access="write"></variable>
    <expression>
     transitionNames = new ArrayList();
     if(param>10){
        transNames.add("to node1");
        transNames.add("to node2");
     }else{
        transNames.add("to node2");
        transNames.add("to node3");
     }
     </expression>

我也是这样写的,为什么报错?


17:57:29,296 [main] DEBUG NullableType : returning '
      
            transitionNames=new ArrayList();
           if(param>100){
              transNames.add("to node1");
              transNames.add("to node2");
           }else{
              transNames.add("to node3");
              transNames.add("to node4");
           }
       ' as column: EXPRESSION11_4_0_
17:57:29,296 [main] DEBUG NullableType : binding '26' to parameter: 1
17:57:29,296 [main] DEBUG NullableType : returning '6' as column: ID1_8_0_
17:57:29,296 [main] DEBUG NullableType : returning 'transNames' as column: VARIABLE2_8_0_
17:57:29,296 [main] DEBUG NullableType : returning 'write' as column: ACCESS3_8_0_
17:57:29,296 [main] DEBUG NullableType : returning null as column: MAPPEDNAME4_8_0_
17:57:29,296 [main] DEBUG NullableType : returning '26' as column: SCRIPT5_1_
17:57:29,296 [main] DEBUG NullableType : returning '6' as column: ID1_1_
17:57:29,312 [main] DEBUG Script : script input: {taskInstance=null, node=Fork(fork1), param=60, token=Token(/), task=null, executionContext=ExecutionContext[Token(/)]}
17:57:29,453 [main] WARN  Script : exception during evaluation of script expression
Sourced file: inline evaluation of: ``                     transitionNames=new ArrayList();            if(param>100 . . . '' : Attempt to resolve method: add() on undefined variable or class name: transNames : at Line: 8 : in file: inline evaluation of: ``                     transitionNames=new ArrayList();            if(param>100 . . . '' : transNames .add ( "to node3" )

at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHIfStatement.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at org.jbpm.graph.action.Script.eval(Script.java:130)
at org.jbpm.graph.action.Script.eval(Script.java:73)
at org.jbpm.graph.action.Script.eval(Script.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
at org.jbpm.graph.action.Script$$EnhancerByCGLIB$$5d7ac8d1.eval(<generated>)
at org.jbpm.graph.node.Fork.execute(Fork.java:104)
at org.jbpm.graph.def.Node.enter(Node.java:318)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$fb36a297.enter(<generated>)
at org.jbpm.graph.def.Transition.take(Transition.java:151)
at org.jbpm.graph.def.Node.leave(Node.java:393)
at org.jbpm.graph.node.StartState.leave(StartState.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$fb36a297.leave(<generated>)
at org.jbpm.graph.exe.Token.signal(Token.java:192)
at org.jbpm.graph.exe.Token.signal(Token.java:140)
at test.TestForkJion.main(TestForkJion.java:24)
org.jbpm.graph.def.DelegationException: Sourced file: inline evaluation of: ``                     transitionNames=new ArrayList();            if(param>100 . . . '' : Attempt to resolve method: add() on undefined variable or class name: transNames
at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:382)
at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:373)
at org.jbpm.graph.node.Fork.execute(Fork.java:106)
at org.jbpm.graph.def.Node.enter(Node.java:318)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)17:57:29,453 [main] DEBUG NullableType : binding '86' to parameter: 1

at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$fb36a297.enter(<generated>)
at org.jbpm.graph.def.Transition.take(Transition.java:151)
at org.jbpm.graph.def.Node.leave(Node.java:393)
at org.jbpm.graph.node.StartState.leave(StartState.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$fb36a297.leave(<generated>)
at org.jbpm.graph.exe.Token.signal(Token.java:192)
at org.jbpm.graph.exe.Token.signal(Token.java:140)
at test.TestForkJion.main(TestForkJion.java:24)
Caused by: Sourced file: inline evaluation of: ``                     transitionNames=new ArrayList();            if(param>100 . . . '' : Attempt to resolve method: add() on undefined variable or class name: transNames : at Line: 8 : in file: inline evaluation of: ``                     transitionNames=new ArrayList();            if(param>100 . . . '' : transNames .add ( "to node3" )

at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHIfStatement.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at org.jbpm.graph.action.Script.eval(Script.java:130)
at org.jbpm.graph.action.Script.eval(Script.java:73)
at org.jbpm.graph.action.Script.eval(Script.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
at org.jbpm.graph.action.Script$$EnhancerByCGLIB$$5d7ac8d1.eval(<generated>)
at org.jbpm.graph.node.Fork.execute(Fork.java:104)
... 19 more
17:57:29,468 [main] DEBUG JbpmContext : closing jbpmContext org.jbpm.JbpmContext@1cde100
17 楼 jacky6024 2009-10-19  
dongyeyun  根据您的需求,我想您的流程模版可能是下面的样子:
                                        __________
                                       |         |
开始节点-->部门负责人审批-->其他相关部门审批-->decision节点-->中心负责人审批-->结束节点。

这其中,到达“部门负责人审批”节点,在结束该结点的任务时,可以为下面的节点“其他相关部门审批”分配一个任务处理人,可能是“教务部”、“学术部”或“研究部”,在“其他相关部门审批”结束时,可以向流程当中传递两个变量,其中一个变量是决定decision节点是直接到“中心负责人审批”还是回退到“其他相关部门审批”,另一个变量决定如果是回退到“其他相关部门审批”的话,那么这个审批人是“教务部”、“学术部”还是“研究部”。

思路就是这样,供您参考!

       
16 楼 dongyeyun 2009-10-19  
高老师您好:
     我有一个审批流程,其中有一环节是这样的:部门负责人审批---->其他相关部门审批------>中心负责人审批。其中需要依据不同的部门类型(部门类型我已经保存到流程上下文当中)可以流转到不同的“其他”部门。例如:“教务部”需要到“学术部”“研究部”;而“调研部”需要到其他的对应部门,不同的部门流转的节点不一样。总之就是想依据部门的类型动态的生成它的任务节点和转向。您可以给我提供些解决的方案吗?谢谢您宝贵的意见。
15 楼 jacky6024 2009-09-25  
    1、关于findActiveNodesByProcessInstance()方法指获取的该流程实例的什么样的节点啊?ActiveNode指的是什么样的节点啊?
答:ActiveNode指的是当前Node对应的Token没有被Suspend,也就它当前token的Suspended != true,同时当前Node对应的Token没有被end,也就是end is null。

    2、获取处于某一节点处的所有流程实例列表,方法定义如下:
List getProcessInstanceList(String nodeName)这我找了一下相关的方法,好像利用jbpm提供的API并不能获取到,是不需要自己操作jbpm数据库呀?请您指点。
答:这个方法默认是没有的,如果要用,需要自己写。
14 楼 dongyeyun 2009-09-24  
高老师您好:
    我还有些问题要请教您
    1、关于findActiveNodesByProcessInstance()方法指获取的该流程实例的什么样的节点啊?ActiveNode指的是什么样的节点啊?
    2、获取处于某一节点处的所有流程实例列表,方法定义如下:
List getProcessInstanceList(String nodeName)这我找了一下相关的方法,好像利用jbpm提供的API并不能获取到,是不需要自己操作jbpm数据库呀?请您指点。
13 楼 jacky6024 2009-09-23  
dongyeyun 写道
高老师您好:
    在一个流程管理当中,我通过怎样的方法可以实时的查看每一个节点的审批状态那。
例如我现在登录某一节点,这时通过点击“查看”可以看到当前节点之前和之后的节点状态
如:已审核、正在审核、未审核。还请高老师指点。

dongyeyun 您好,在书中有关于流程监控的简单实现,您可以参考一下。
12 楼 dongyeyun 2009-09-23  
高老师您好:
    在一个流程管理当中,我通过怎样的方法可以实时的查看每一个节点的审批状态那。
例如我现在登录某一节点,这时通过点击“查看”可以看到当前节点之前和之后的节点状态
如:已审核、正在审核、未审核。还请高老师指点。
11 楼 jacky6024 2009-08-03  
跟我一起拽 写道
<fork name="fork1">
    <script >
    <variable name="transNames" access="write"></variable>
    <expression>
     transitionNames = new ArrayList();
     if(param>10){
        transNames.add("to node1");
        transNames.add("to node2");
     }else{
        transNames.add("to node2");
        transNames.add("to node3");
     }
     </expression>
呵呵,上面加粗的地方是高老师在书中写错了!正确的应该是流程变量的名称和下面表达式中的变量名称相同哦。

非常感谢您指出我的错误!
10 楼 跟我一起拽 2009-08-03  
<fork name="fork1">
    <script >
    <variable name="transNames" access="write"></variable>
    <expression>
     transitionNames = new ArrayList();
     if(param>10){
        transNames.add("to node1");
        transNames.add("to node2");
     }else{
        transNames.add("to node2");
        transNames.add("to node3");
     }
     </expression>
呵呵,上面加粗的地方是高老师在书中写错了!正确的应该是流程变量的名称和下面表达式中的变量名称相同哦。
9 楼 jacky6024 2009-07-30  
你的操作从表面上看是对的,没有发现有什么错误地方。

这里的transitionNames变量是jBPM在fork节点处理的时候使用的变量名,同时它会将其强转成List类型,所以我们这里要将transitionNames声明为ArrayList,强转完成后它会从这个名为transitionNames的List里取所有的item作为向下流转的Transition名称。
8 楼 eddianliu 2009-07-30  
杰哥,你好,正在看你的那本《深入浅出jbpm》,在fork那里出现一个问题,
你在fork的事例中使用了beanshell来确定流程走向,可是我发布流程的时候,processdefinition.xml报错,定义的transNames的这个variable不识别。如:
<fork name="fork1">
    <script >
    <variable name="transNames" access="write"></variable>
    <expression>
     transitionNames = new ArrayList();
     if(param>10){
        transNames.add("to node1");
        transNames.add("to node2");
     }else{
        transNames.add("to node2");
        transNames.add("to node3");
     }
     </expression>
这一段,请问是否我的jbpm的版本不正确引起还是什么其他原因,另外,这里的transitionNames这个list有什么用意了,整个程序中似乎都没有用到这个变量。还请答复,谢谢!

相关推荐

    jbpm工作流引擎介绍.ppt

    【jbpm工作流引擎介绍】 工作流引擎是用于自动化业务流程的软件,它负责定义、执行和管理这些流程。在企业环境中,常见的业务流程包括请假、报销、公文审批等。工作流引擎通过内置的人工任务功能,确保在流程自动化...

    jbpm工作流引擎总结文档

    jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。

    JBPM工作流引擎内核设计思想及构架笔记分享

    JBPM 工作流引擎内核设计思想及构架笔记分享 上文提到,工作流引擎内核是一种微内核的流程引擎架构,它只包含最基本的对象和服务,以及用于解决流程运行问题的调度机制和执行机制。引擎内核的设计思想是围绕着如何...

    李腾飞JBPM工作流引擎代码test01到test04

    【李腾飞JBPM工作流引擎代码test01到test04】是一系列关于使用JBPM工作流引擎进行程序开发的示例代码。JBPM(Java Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行和管理业务流程...

    Jbpm工作流引擎使用例子

    在这个"Jbpm工作流引擎使用例子"中,我们可以深入学习如何利用Jbpm进行流程的创建、流程实例的启动与管理,以及如何将其与Java、Hibernate等技术结合使用。以下是关于这些知识点的详细讲解: 1. **Jbpm工作流引擎**...

    jbpm工作流引擎——jbpm-3.1.4.jar

    jbpm-3.1.4.jar,jbpm工作流引擎jbpm工作流引擎

    JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子

    JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...

    JBPM工作流引擎

    JBPM工作流引擎是一种基于Java的开源工作流管理系统,它允许开发者和企业构建、部署和管理业务流程。JBPM提供了全面的工作流解决方案,包括流程设计、执行、监控和优化,旨在提高工作效率,简化复杂的业务操作。 ...

    jbpm工作流整合

    jbpm工作流整合是一个关键的主题,它涉及到企业级业务流程管理(BPM)系统的实施与集成。jbpm是一个开源的工作流管理系统,它提供了一套全面的工具和框架,用于设计、执行、监控和优化业务流程。这个压缩包可能包含...

    JBPM工作流引擎技术内幕

    我写的一份工作流教程,ppt格式。 JBPM工作流引擎技术内幕2.1。 介绍了主流的开源工作流引擎,并深入探讨了JBPM工作流引擎的技术内幕。 这篇文档是为了向我逝去的工作流岁月致敬!

    jbpm 工作流引擎

    ### jBPM 工作流引擎关键知识点解析 #### 一、概述 - **jBPM**:全称为 JBoss Business Process Management,是由 JBoss 开发的一款开源工作流管理系统。该系统提供了高度灵活且易于扩展的功能,适用于各种复杂的...

    李腾飞JBPM工作流引擎代码test01到test02

    【李腾飞JBPM工作流引擎代码test01到test02】这个项目主要涉及的是使用JBPM(Java Business Process Management)框架实现的工作流引擎的代码示例,包括了jbpm-test01和jbpm-test02两个阶段的代码。JBPM是一款开源的...

    工作流引擎开发包jbpm

    jbpm工作流引擎是一款强大的开源工作流管理系统,用于构建企业级的应用程序,它允许开发者定义、执行和管理工作流程。jbpm的核心功能包括流程定义、流程实例管理、任务管理和监控。这款开发包是针对版本3.2.GA的,这...

Global site tag (gtag.js) - Google Analytics