- 浏览: 921842 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (322)
- Hibernate研究&源码 (27)
- Server (10)
- Coder碎语 (64)
- EnglishMulling (11)
- About XML (1)
- persistence (12)
- Core Java & OO (23)
- Java EE (6)
- JavaScript/JSON/Ajax/ext... (22)
- 我的读书笔记 (16)
- Source Codes Study (29)
- workFlow/jBPM (22)
- OFBiz: Open For Business (1)
- 项目积累 (21)
- srcStudy_acegi (1)
- Cache/Ehcache... (9)
- Java Test/JUnit.. (7)
- maven/ant (2)
- 设计模式 (1)
- SOA/cxf/ws-security (2)
- Android (4)
- 云计算/Hadoop (2)
- 加密/签名 (1)
- 正则表达式 (1)
- htmlparser (1)
- 操作系统 (5)
- DB (1)
最新评论
-
天使建站:
这里这篇文章更详细 还有完整的实例演示:js跳出循环 ...
jQuery中each的break和continue -
heshifk:
刚刚我也遇到同样的问题,然后就在纠结为什么不能直接使用brea ...
jQuery中each的break和continue -
masuweng:
不错写的.
集万千宠爱于一身的SessionImpl:get研究(四): Hibernate源码研究碎得(8) -
muzi131313:
这个老是忘,做一下笔记还是挺好的
jQuery中each的break和continue -
lg068:
data = data.replace("\n&qu ...
项目小经验: eval与回车符
通过前面几篇博客,我们看到了jBPM自带例子webSale可以在Tomcat+Mysql的环境中运行了. 这也是我研究jBPM的第一步.
希望对jBPM有个目无全牛地了解/理解/掌握,这里有必要介绍下这个webSale例子, 毕竟它是通往"全牛"的引子,
同时也可以作为项目中调用jBPM的一个不错practice.
这里采用"页面流"
方式(也就是顺着页面的跳转)来展开对webSale的介绍,及其背后调用的jBPM的相关API.另由于这个webSale是用JSF来作显示的,对JSF不熟悉的看官可找些文档看下,以下的介绍中不会再做JSF方面的介绍.
第一步, 进入登录界面. 这时页面上以下拉菜单方式给出webSale支持的用户名, 这些用户名也正是流程中task的执行者. 那这些用户名是如何获得的? UserBean的getUsers方法里, 执行了这样调用:
new IdentitySession(JbpmContext.getCurrentJbpmContext().getSession()).getUsers(). // 注,为了行文方便,我这里更紧凑地改写了原代码, 以下同.
第二步, 选一个用户后, 点"Log In"按钮时, 对应的login方法是,
执行JbpmContext.getCurrentJbpmContext().setActorId(userName)设置actor.
跳转到home页面(对应着home.jsp文件).
在home页面中, webSale做了两件事: 显示当前登录用户负责的Tasklist, 显示已经发布的流程. 下面看这些数据库是怎么来的.
显示当前登录用户负责的Tasklist时,
背后执行了taskMgmtSession.findTaskInstances(currentUserName)语句,
这个返回一个装有TaskInstance的list,
再在页面上遍历list以
"taskInstance.taskMgmtInstance.taskMgmtDefinition.processDefinition.name/version"
方式取出流程定义中的name和version信息,
并给每一个taskInstance的Name加了一个执行链接调用homeBean中的selectTaskInstance方法.
显示已经发布的流程时, 背后执行graphSession.findLatestProcessDefinitions(),
在JSP页面里,
以processDefinition.taskMgmtDefinition.startTask.name方式获得流程的首任务名,并给些任务名加链
接去执行homeBean的startProcessInstance方法.
第三步, 在上一步返回的home页面中,
点任务名链接, 调用startProcessInstance方法来启动流程处理. 此方法中先执行"new
ProcessInstance(graphSession.loadProcessDefinition(processDefinitionId)).
getTaskMgmtInstance().createStartTaskInstance()"来启动流程,
再通过"jbpmContext.save(processInstance)"保存上面new出来的processInstance.
调用taskBean中的initialize(taskInstance)处理前面createStartTaskInstance方法返回的
taskInstance为下一页面的显示做准备. 跳转到task页面.
第四步, task页面中展现数据/流程定义图片.
先说这里简单的(调用简单,但背后的实现还是挺复杂的)图片展现: <jbpm:processimage task="${taskBean.taskInstanceId}"/>.
接着看数据显示, 其实这一块的工作都是在上面taskBean中的initialize(taskInstance)方法做好的.
那这个方法又做了些什么呢? 两件事:
显示跟当前taskInstance绑定的variable信息及当前taskInstance的transition(也就是针对当前
taskInstance都有什么样的控制).
variable信息这样得到:
taskInstance.getTask().getTaskController().getVariableAccesses(){variableAccess
| variableAccess .getMappedName ==> mappedName,
taskInstance.getVariable(getMappedName) => value, new
TaskFormParameter(variableAccess, value)}.
好像是用了类似于python/groovy/ruby那样的可执行的伪代码. 这些可执行的伪代码也打开了设计新编程语言的可能性.
当前taskInstance的transition又是这样得到: taskInstance.getAvailableTransitions.
第五步, 在上一步的基础上, 从本质上来看,填写必要信息后有两种操作:保存当前信息并不结束当前taskInstance,
保存当前信息并结束当前taskInstance使流程进入下一taskInstance.
这两个操作分别对应着两个方法save和saveAndClose-- 这个saveAndClose方法中有调用save方法.
先看save方法,它做了两件事: "taskFormParameter.isWritable &&
taskFormParameter.getValue ==>
taskInstance.setVariable(taskFormParameter.getLabel(),
taskFormParameter.getValue())" 更新taskInstance中相应的variable信息;
jbpmContext.save(taskInstance).
saveAndClose方法中三件事:
调用taskInstance.end结束当前taskInstance;
processInstance.getLoggingInstance().getLogs(TaskAssignLog.class){ |
getTaskNewActorId}显示下一taskInstance的负责人; jbpmContext.save(taskInstance).
至此, 我们采用第二步返回页面中的startProcessInstance走了一遍, 若采用selectTaskInstance的话,"页面流"
会直接跳到第四步中的task页面, 就不再另行介绍.
--------------------------------
快要写完本博客了, 有些感悟:
0, 为什么要整理这么个文字版的webSale描述呢? 一是为了把现在的记忆以文字形式保存下来,
以后查看时不必再去看webSale中JSP到JavaBean的跳转. 更重要的是为了后续博客的引用, 也即当要描述一个jBPM
API时不必再介绍它的应用场景,直接给出这里是第几步即可.
1, 上面这些描述用时序图来表达会简洁明了的多.
2, 体会到像Python那样的可执行伪代码的好处: 直接用Python这样的动态语言来"写"文档.
发表评论
-
jBPM研究整理 (1-20)
2010-10-24 19:16 22831, jBPM零起点体验(一):感受下卖面包 the f ... -
jbpm4(1):jBPM4环境搭建
2009-08-01 19:24 3858下载jbpm4,解压。在此,我们称之为JBPM4_HO ... -
jBPM(20):JbpmContext类自身属性
2009-04-30 08:36 2176jBPM(19):JbpmContext类 ... -
jBPM(19):JbpmContext类构造方法需要什么?
2009-04-29 08:29 1932在前几篇博客(jBPM(十三): 从ObjectFact ... -
jBPM(十七): popJbpmConfiguration的错误理解及纠正
2009-04-19 12:12 1947有几天没写jBPM方面的博客了, 这方面有些生疏了. ... -
jBPM(十六): 记录JbpmContext实例的诞生
2009-04-16 08:36 1679在jBPM(十一): ... -
jBPM(十五):配置文件到ObjectFactory
2009-04-14 09:14 1738在jBPM(十四): 见证一ObjectInfo实例的 ... -
jBPM(十四): 见证一ObjectInfo实例的诞生
2009-04-12 11:05 1587在jBPM(十三): 从ObjectFactory到O ... -
jBPM(十三): 从ObjectFactory到ObjectInfo
2009-04-11 07:57 1569在jBPM(十一): 从JbpmContextFi ... -
jBPM(十二): 流程运行的历史和轨迹与ProcessLog
2009-04-05 17:03 1705接触jBPM一段时间后, ... -
jBPM(十一): 从JbpmContextFilter说起
2009-04-04 12:32 1729在jBPM(十):webSale ... -
jBPM(九):jBPM的webSale在Tomcat下怎么连上的数据库?
2009-04-02 08:24 1747在jBPM(八) ... -
jBPM(八): 也说jBPM + Tomcat + MySQL
2009-03-26 05:39 2141经过几天的梳理总结, 现在到了jBPM系列里一个具有里 ... -
jBPM(七): 如何让jBPM自带例子运行在指定数据库?
2009-03-24 08:21 2567我们知道jBPM自带例子是运行在其默认的HSQL ... -
jBPM(六): 由手动建表想到一个教训
2009-03-23 08:45 1848在jBPM(四): 部署jBPM所用表到数据库_1 ... -
jBPM(五): 部署jBPM所用表到数据库_2
2009-03-21 06:51 1989在jBPM(四) 中, 笔者介绍了如 ... -
jBPM(四): 部署jBPM所用表到数据库_1
2009-03-19 08:25 2530... -
jBPM(三): 如何在Eclipse搭建jBPM环境?
2009-03-18 08:23 6083在jBPM(二) 里我们做了个简单介绍, 其中包括&q ... -
jBPM(二): 一点简单介绍
2009-03-08 18:53 29291, jBPM是个什么东东及其它? ... -
jBPM(一): 开场白, 想从jBMP中学点什么?
2009-03-07 10:32 3389终于静下心来开始写jBPM系列博客了. ...
相关推荐
【jbpm_websale.rar】是一个包含JBPM(Business Process Management)网上销售示例的压缩包,这个实例对于初学者理解和掌握JBPM技术及其在Java Web应用中的实践非常有帮助。该实例结合了JSF(JavaServer Faces)前端...
jbpm jbpm4.3.jar DDDDDDDD
【标题】"chen-jbpm_websale.zip_jbmp_jbmp_java_jbpm_jbpm_websale_网上销售系统" 提供的是一个基于JBPM(Java Business Process Management)技术的网上销售系统的示例项目。JBPM是一个开源的工作流管理系统,它...
JBPM数据库表说明 2 1 流程配置类数据库表: 2 1.1 JBPM_PROCESSDEFINITION:流程模版表 2 1.2 JBPM_NODE:流程节点表 2 1.3 JBPM_TRANSITION:流程迁移表 3 1.4 JBPM_ACTION:流程动作表 4 1.5 JBPM_EVENT:...
### jBPM开发:配置EclipseIDE开发环境详解 #### 一、配置开发工具 **1. 安装 Eclipse Designer到 Myeclipse6** - **步骤**: - 将`jbpm-jpdl-suite-3.2.3/designer/eclipse/plugins`目录下的所有文件及文件夹...
- 开发jBPM项目时,需要编写相关的业务逻辑代码,配置工作流,并使用jBPM提供的API和组件。 - 部署jBPM项目,可以通过Eclipse IDE的导出功能将项目导出为WAR文件,然后部署到JBoss服务器上。 - 可以使用jBPM提供...
- **基础概念:** 介绍工作流、BPMN(业务流程建模符号)、jBPM4中的关键术语和概念,帮助开发者建立基础知识体系。 - **流程定义:** 深入讲解jPDL、流程图的创建和编辑,让开发者学会如何定义业务流程。 - **...
JBPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,用于设计、执行和管理业务流程。在这个压缩包中,我们可以看到几个重要的JAR文件,分别是: 1. **juel-api.jar**: 这是Java ...
jbpm开发指南 jbpm开发指南 jbpm 工作流 自定义
在`jbpm工作流引擎介绍.ppt`文件中,可能包含了对这些步骤的详细图解,展示了每个步骤如何在jbpm中建模,以及流程实例在不同阶段的变化。此外,还可能涵盖了如何配置工作流规则、如何定义和分配任务,以及如何使用...
JBPM4工作流介绍 本篇文章将对JBPM4工作流进行详细的介绍,涵盖工作流的概念、工作流引擎、工作流管理系统等方面的知识点。 一、工作流的概念 工作流是指在一个工作群组中,为了达成某一个共同目的而需要多人协力...
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...
jbpm是Java Business Process Management(Java业务流程管理)的缩写,它是一个开源的工作流管理系统,主要用于设计、执行和管理业务流程。jbpm4是jbpm的第四个主要版本,而jbpm4.3则是该版本的一个具体迭代,带来了...
jbpm工作流整合是一个关键的主题,它涉及到企业级业务流程管理(BPM)系统的实施与集成。jbpm是一个开源的工作流管理系统,它提供了一套全面的工具和框架,用于设计、执行、监控和优化业务流程。这个压缩包可能包含...
jbpm是一款开源的工作流管理系统,主要面向Java开发者,它提供了强大的流程定义和执行能力,帮助企业或组织实现自动化的工作流程。jbpm-2.0-beta1是该系统的早期版本,其核心功能包括工作流引擎、流程建模工具以及一...
**jBPM工作流详解** jBPM,全称Java Business Process Management,是Red Hat公司开发的一款开源的工作流管理系统,它提供了对业务流程的建模、执行和监控能力。jBPM不仅支持传统的工作流标准,如BPMN 2.0,还集成...
"【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5" 这个标题表明这是一个关于jBPM发展历程的综合分析,涵盖了从jBPM3到jBPM5的变迁,并且提到了Activiti5,这是一款与jBPM相关的流程管理框架。标题暗示了文章...
jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。
JBPM5是Business Process Management(业务流程管理)的开源框架,它提供了对企业级工作流和业务流程的全面支持。JBPM5允许开发者定义、执行和监控复杂的业务流程,通过图形化的流程设计工具,可以方便地创建和修改...