`
jessdy
  • 浏览: 60266 次
  • 性别: Icon_minigender_1
  • 来自: 上海虹口区
社区版块
存档分类
最新评论

jBPM的学习(一)

阅读更多
随着SOA的发展BPM渐渐成为人民关注的部分。
其实很多东西早已存在,只是大家忽视它的存在而已。BPM就是这样,其实有程序出现的时候,BPM就已经出现了,只是没有名字而已。
关于BPM,许多独立的厂商给出了不少的误导:
1)BPM系统可以实现无需维护代码,甚至有些厂商鼓吹无需写一行代码就能,只需要画画图就能完成工作。
2)BPM能和系统分开,我觉得适度松耦合是可以做到的,但是完全和业务代码分开是不现实的。否则BPM也不是嵌入式的了。

在目前BPM的市场上出现了诸侯割据的场面,各大厂商都维护着自己的一套标准。开源方面出现了两大阵营SHARK和jBPM,然而我选择了后者,主要原因是jBPM是JBOSS家庭成员,JBOSS家庭已渐渐成为了标准和规范的代名词。另外jBPM也有一个很好的Eclipse插件。

说完废话开始学习
jBPM由核心组件,web控制台,调度组件,身份组件,BPEL扩展组件几大组件组成,核心组件是由纯JAVA编写,所以能很好的和J2SE程序,JAVAEE程序结合。jBPM的持久层采用符合JPA标准的Hibernate框架,身份组件用于管理用户,当对于大部分程序,希望自己维护用户的管理,你大可用自己的身份管理程序。

主要涉及以下几个概念
process definition(流程定义):工作流的流程的完整定义,包括节点和节点之间的走向等关键信息。通常以xml格式提供。一个具体的系统往往是由许多个流程组成的。

process instance(流程实例):每个process defination生成的业务层的实例。当process instance创建以后,代表流程的执行路径,并被定义到开始节点。

token(令牌):表示了一个执行的路径,它是运行时产生的。当实例建立以后,令牌也就产生了。

node:表示流程中的一个节点。

transition:关联两个节点,用于表示节点的走向

signal:让一个token执行下一步。process instance也有signal,当用process instance的signal时,其实就是运行process instance根令牌(root token)的signal

当token进入到一个node时,node会被执行,并产生一些事件,比如进入、离开节点等,这也是执行业务逻辑的地方。事件由action来表示。

下面介绍一下流程的定义和持久
//解析一个xml为一个ProcessDefinition对象
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(...);
//打开session
JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();
//开启事务
jbpmSession.beginTransaction();
//持久化流程定义到数据库
jbpmSession.getGraphSession().saveProcessDefinition(processDefinition);
//提交事务
jbpmSession.commitTransaction();
//关闭session
jbpmSession.close();

这样,一个流程就被持久化到数据库,可以看到有hibernate的影子。当你需要使用这个流程时:
JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();
jbpmSession.beginTransaction();
//找到刚刚那个流程,processname是流程的名字,在XML文件中定义,findLatestProcessDefinition方法是找到该流程的最新版本,jBPM允许多个流程同样的名字,以版本号区别
ProcessDefinition processDefinition = jbpmSession.getGraphSession()
.findLatestProcessDefinition(processname);
//创建该流程的实例
ProcessInstance processInstance = new ProcessInstance(processDefinition);
//得到实例上下文,上下文用来保存一些属性信息,比如审核流程中的,审核人、审核信息等
ContextInstance contextInstance = 
processInstance.getContextInstance();
//上下文添加属性,这些信息将和上下文绑在一起
contextInstance.setVariable(varName,varValue);
//得到令牌
Token token = processInstance.getRootToken();
/**
操作令牌
//token.signal();
**/
//保存实例
jbpmSession.getGraphSession().saveProcessInstance(processInstance);
jbpmSession.commitTransaction();
jbpmSession.close();
当需要再次操作这个实例的时候,只需要把
ProcessInstance processInstance = new ProcessInstance(processDefinition);
改成
List processInstances = 
graphSession.findProcessInstances(...);

分享到:
评论
1 楼 xiemingfeng_ 2014-04-30  
执行token.signal()就会报以下的错误,是什么原因,楼主请指教啊


org.jbpm.JbpmException: transition condition  evaluated to non-boolean: java.lang.String
at org.jbpm.graph.def.Transition.take(Transition.java:123)
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:597)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
at org.jbpm.graph.def.Node_$$_javassist_123.leave(Node_$$_javassist_123.java)
at org.jbpm.graph.exe.Token.signal(Token.java:192)
at org.jbpm.graph.exe.Token.signal(Token.java:140)
at org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:270)
at com.oyi.jbpm.commonface.topbpm.TOPBPMWIFlow.start(TOPBPMWIFlow.java:90)
at com.oyi.jbpm.commonface.topbpm.TOPBPMWIWorkflow.startFlow(TOPBPMWIWorkflow.java:602)

相关推荐

    jbpm学习笔记.docx

    个人学习jbpm的文档,其中包括一些bug的修改。主要以《jbpm流程》一书为参考

    jbpm学习.doc

    jbpm学习资料 1. 新建一个项目 2. 在项目里面添加流程定义,如下图所示:

    jbpm 4.4 学习笔记

    最近通过使用jbpm,学习了一下,自己整理的一份jbpm的学习笔记,,希望对你们有帮助

    JBPM5.1入门学习

    3.4 学习使用JBPM控制台 11 3.5 学习使用drools-guvnor设计器 13 4 用TOMCAT+SSH+JOTM+MYSQL+JBPM移植DEMO 14 4.1 环境准备 14 4.1.1 安装JDK 14 4.1.2 安装Ant 14 4.1.3 安装Eclipse 15 4.1.4 安装Tomcat 15 4.1.5 ...

    一个Jbpm实例代码

    Jbpm实例代码,供学习参考。里面包含源代码!

    jbpm4.4学习笔记

    一.配置Spring相关文件: 42 二、配置Hibernate相关文件: 44 三、整合需要jbpm提供的jar包: 44 17 HelloWorld 45 Xml: 45 Code: 45 18 从数据库中取出xml文件和png图片 48 19 向页面输出图片 49 20 页面显示图片 ...

    jsp jbpm 做的一个小实例

    这是我自己在这里几天学习jbpm做的一个小实例,完全用JSP+JBPM,接下来我会和spring结合在一起,希望在学习的你有帮助

    jbpm4.4学习

    jBPM 即java Business Process Management,是基于java的业务流程管理系统,它是一组J2SE组件,可以作为J2EE应用集群部署。jBPM是公开源代码项目。jBPM是市面上相当流行的一款开源工作流引擎,引擎底层基于Active ...

    jbpm 学习介绍,工作流的一种方式主要就是配置xml'

    我感觉还不错,拿来和大家分享一下,通过xml配置实现

    一个经典的jbpm例子,学jbpm必备的例子

    这是本人学习jbpm以来看过的写的最有条理的一个例子,基于现在网上jbpm的例子比较的少,所以上传上来和大家一起分享

    JBPM4学习经验总结第1季

    JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,它使用要遵循 Apache ...

    JBPM工作流学习资料

    jbpm学习资料,对你有帮助!近几年来,工作流管理技术迅速发展,其产品广泛应用于办公自动化OA(Office Automation)、电子政务、计算机集成制造系统CIMS(Computer Integrated Manufacturing System)等领域。工作流...

    JBPM学习笔记—框架设计简介

    相关资料:《jBPM学习笔记(V3.2环境部署)》《jBPM学习笔记(流程设计与控制)》概述:jBPM(JBossBusinessProcessManagement业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易...

    jbpm4 学习笔记 心得

    jbpm是一款免费开源的工作流引擎,虽然现在还不完善,但是用起来还是不错的..... 我学习jbpm的一些笔记心得

    jBPM-jPDL学习笔记

    jBPM(JBoss Business Process Management业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。  jPDL是构建于jBPM框架上的流程语言之一。在jPDL...

    ssh与jbpm完整报销例子

    本例子网上也有,只是有点问题,本人经过修改后想留给第一次学习jbpm的人,希望不让他们为一个问题而花费很长时间. 由于所有的jar包已上传,所以不在用QQ发jar包给各位下载的朋友, 请在以下页面下载本项目的jar包: ...

    jbpm4.4学习分享

    里面有关于jbpm4.4相关的文档,api,操作手册已经一个简单的web工程实例, 刚接触的人很有帮助

    Jbpm5.4整合springMVC+spring3+hibernate4的请假流程

    在学习jbpm5的过程中,发现很难找到一个合适的,能跑的起来的,整合ssh的例子,之前在csdn上花费不少分下了好多个,能跑起来的好像就1个,不是jar包不匹配就是些其他的莫名奇妙的错误,对应刚刚接触jbpm的人来说,一...

    JBPM工作流开发指南

    三、学习JPDL 11 3.1 、简介 11 3.2 、流程版本(Version) 11 3.3 、流程定义 12 3.3.1 process-definition(流程定义) 12 3.3.2 node(自动节点) 13 3.3.3 start-state(开始状态) 13 3.3.4 end-state(结束节点) 14 ...

Global site tag (gtag.js) - Google Analytics