浏览 3187 次
锁定老帖子 主题:jBPM的学习(一)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-02-01
其实很多东西早已存在,只是大家忽视它的存在而已。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(...); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |