目前我看过采用JBPM的工作流有web-console (JBPM 3.2.1自带)、RUNA WFE、SMART,就这三个我做一个比较:
RUNA WFE
RUNA WFE是上面提到的三个中,唯一可以直接部署应用的,当然也有它的缺点,下面我会提到。这个框架采用的是Struts作为表示层,流程管理和组织架构管理都做的不错,良好的国际化,文档很全。如果只打算研究可以看下它的permission部分,它已经实现了对流程查看、启动、结束等的权限控制,JBPM自身在这部分基本还是TODO状态。
OK,再说就偏题了,下面讲了它的Taskform实现。RUNA采用了Web-Console的forms.xml这种文件与Task的映射方法,但有它自己的特色:forms.xml里包含有variable 信息,没有采用xhtml。下面我贴一点他的Taskform代码
代码
<tr title="since" >
<td style="padding-right: 20px;">
Since <i><font size="-1"> (dd.mm.yyyy) font><i>
td>
<td>
<customtag var="since" delegation="ru.runa.wf.web.html.vartag.DateTimeInputVarTag" />
td>
tr>
不是很难吧,呵呵。值得注意的只有那个<customtag >。由于看它的代码已经过了一段时间,所以具体代码的位置已经忘了,只记得实现的原理。大致如下,从数据库把上述文件的字节流读出,通过一个匹配方法找到整个 <customtag >,根据参数Var 和一个委托delegation得到这个组件的HTML代码,用这段代码将原来的<customtag >替换掉,最后将所有的HTML一次输入到response中去。
RUNA提供了很多vartag ,通过继承它自带的几个抽象类你也可以扩展你自己的。然而它最大的缺点就是在原有的JBPM又进行了封装,产生了自己的IDE插件、流程定义语言,可以说比较封闭。
WEB-CONSOLE
web-console (3.2.1),主要使用了一个jbpm4jsf.jar来完成这部分工作。使用过JBPM的朋友都知道,在JBPM的最近流程设计器里多了一个Generate Form的按钮,通过它我们可以创建一个描述Variables的xhtml文件。在发布的时候,我们可以将它和processdefinition.xml、processimage.jpg等一起发布到数据库(多句嘴,通过简单的配置JBPM也可以从本地的文件系统读取上述文件),然后jbpm4jsf就可以通过读取这个xhtml文件产生一个很灵活的Task-form。具体如下:(所有文件来自jbpm-jpdl-3.2.1,代码都是节选的)
sa / task.xhtml
xml 代码
<j4j:includeProcessFile file="#{taskForms[task.name]}" process="# {task.processInstance.processDefinition}">
<ui:param name="var" value="#{taskVariableMap}"/>
<ui:param name="comment" value="#{comment}"/>
<ui:param name="taskName" value="#{task.name}"/>
j4j:includeProcessFile>
注意这里使用了<j4j:includeProcessFile >这个标签,对应它在jbpm4jsf.jar中
org.jbpm.jsf.core.handler.IncludeProcessFileHandler.java
java 代码
final FileDefinition fileDefinition = processDefinition.getFileDefinition();
if (fileDefinition == null) {
throw new TagException(tag, "Process has a null fileDefinition property");
}
if (! fileDefinition.hasFile(file)) {
throw new TagException(tag, "Process does not contain file '" + file + "'");
}
VariableMapper orig = ctx.getVariableMapper();
final VariableMapperWrapper newVarMapper = new VariableMapperWrapper(orig);
ctx.setVariableMapper(newVarMapper);
try {
final StringBuffer buffer = new StringBuffer();
buffer.append(processDefinition.getId());
buffer.append("/");
buffer.append(file);
nextHandler.apply(ctx, parent);
ctx.includeFacelet(parent, new URL("par", "", 0, buffer.toString(), new FileDefinitionURLStreamHandler(fileDefinition, file)));
} finally {
ctx.setVariableMapper(orig);
}
用这种方式就将数据库中的xhtml文件取出,通过创建一个URL对象,将这部分加入到当前FaceletContext中,并作为UIComponent parent的子UIComponent 。然后我们再看一个表单文件,选用自带的websale例子
examples\websale\src\main\jpdl\form.create.xhtml
xml 代码
<f:facet name="header">
<h:outputText value="Quantity:"/>
f:facet>
<h:inputText
value="#{var['quantity']}"
converter="javax.faces.Integer"
converterMessage="The quantity must be numeric."
validatorMessage="The quantity must be at least 1.">
<f:validateLongRange minimum="1"/>
h:inputText>
有点JSF基础的应该很容易看出上面的代码,转换、验证、FORM组件都可以在这里定义。这里使用了JSF RI <xmlns:h="http://java.sun.com/jsf/html>,我们有理由相信使用第三方的UIComponent以及定义自己的UIComponent(来满足一些国内的BT需求)将不是什么难事。
jbpm4jsf要求JSF 1.2,所以目前无法使用Myfaces(JSF 1.1),本人喜欢的Tomahawk 、Tobago 一并被毙了,非常.十分以及极其不爽。 目前只好慢慢等Myfaces出1.2 release,
总之相对于其他2个流程框架我还是看好JBPM4JSF。喜欢struts的朋友也不用急,JBPM 好象计划在3.3版本的时候推出支持Struts的东东,不过目前在CVS上还没有看到JBPM4STRUTS这个项目
分享到:
- 2007-12-12 16:45
- 浏览 2207
- 评论(0)
- 论坛回复 / 浏览 (0 / 2816)
- 查看更多
相关推荐
如何将原有的H2数据库修改为指向mysql或者postgresql数据库。附实例
1:一个JBPM4.4+SSH2的完整例子 含jar包; 2:业务流,非审批流; 3:绑定表单
jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍
JBPM3.2与Spring结合时任务调度的实现.doc
基于LigerUI+JBPM5自定义表单+Node.js的J2EE大型金融项目《财务预算系统》开发全程实录——课程分为三季: 第一季:基础篇,主要内容包括:基础设置,主要是对整个框架的搭建,对流程的控制,对所用到的技术进行...
\jbpm简介\jbpm简介\jbpm简介\jbpm简介\jbpm简介
jbpm jbpm4.3.jar DDDDDDDD
jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
jbpm任务分配管理.doc,介绍任务是如何分配的
jbpm使用案例,非常不错,大家都来看看吧。
阿里巴巴的 x_jbpm 讲述了 动态表单的开发 还有一些相关表的设计
JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——...
jbpm应用开发指面(胡奇) jbpm4.3表结构和表字段说明 [jBPM开发指南].高杰.文字版 jBPM5_用户手册-中文版
管理控制台支持流程实例管理,任务列表和任务表单管理以及报告。 部署流程的可选流程仓库(和其他相关知识)。 历史记录(用于查询/监视/分析)。 与Seam,Spring,OSGi等集成 BPM通过以业务用户和开发人员喜欢的...
JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请...
本文件从JBPM的原理、实现方法、实例等方面详细讲解了JBPM的原理,包括以下内容: 1、JBPM特色: 3 2、流程图的组成: 3 2.1流转 (TRANSITION) 3 2.2活动 (ACTIVITY) 3 3、所用到的表: 4 3.1资源库与运行时表结构:...
流程配置类数据库表 JBPM_NODE:流程节点表 JBPM_ TRANSITION:流程迁移表 JBPM_ACTION:流程动作表 JBPM_EVENT:流程事件表
1.8 JBPM_TASKCONTROLLER:流程任务控制器 7 1.9 JBPM_VARIABLEACCESS:流程变量表 7 1.10 JBPM_MODULEDEFINITION:流程模块定义表 8 1.11JBPM_EXCEPTIONHANDLER:流程异常处理器表 8 1.12 JBPM_DECISIONCONDITION:...
jbpm4源码jbpm4源码jbpm4源码