2007-08-20
jBPM学习(八)----liferay4.2.2下的jBPM开发
关键字: liferay八、liferay4.2.2下的jBPM开发
liferay4.2.2中对jBPM3.1.2进行了集成,并且多jpdl语言做了扩展,主要表现在对表单数据类型的支持。表现形式为在原有变量表示的基础上为每个变量名加上前缀。下面我们通过一个稍微复杂的例子来具体讲解。(这里liferay在eclipse下的工程名为portal,扩展工程名为ext)
1. 数据库的迁移
数据库的生成这里不再赘述,请参考前面章节建立数据库。数据库建立之后,修改portal\jbpm-web\docroot\WEB-INF\classes\hibernate.cfg.xml文件,此文件为liferay下的jbpm数据库配置文件,注释掉<!-- Hypersonic -->下的属性,根据数据库配置<!-- SQL Server -->下属性,我的配置如下:
xml 代码
- <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
- <property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
- <property name="hibernate.connection.url">jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=lportal</property>
- <property name="hibernate.connection.username">liferay</property>
- <property name="hibernate.connection.password"></property>
2. 流程定义
在portal\jbpm-web\docroot\WEB-INF\definitions下右键新建一个流程,命名为MessageSend。按照下图所示建立基本流程,具体过程参照前面。

3. 定义泳道
定义一个名为user的泳道:

4. 定义任务
对照下图为各个节点创建任务,并将所有任务赋予泳道user。

5. 定义任务变量
下面分别介绍各个任务中的变量:
任务comment:

任务input-name:

任务input-message-one:

任务input-message-two:

任务show-message:

这里说明一下:liferay的workflow portlet对jbpm的变量定义经行了扩展,可以看到每个变量的名字都由多部分组成其中用冒号分隔,workflow portlet会根据变量的前缀自动为该变量生成html中的表单。
值得注意的是jbpm并不会区分前缀与变量名,而是将这个字符串作为该变量的名字。如:上图中text:message name,变量名就为“text:message name”。在程序中对该变量的引用也应使用“text:message name”。
具体每种数据类型的表示方法如下表:


6. 定义Handler及Action
在流程中我们有一个decision节点,这里需要自定义一个类来对decision逻辑进行处理。首先,我们切换到source视图,找到decision标签,在标签中添加一个handler标签,该标签用来指定处理逻辑的类,具体内容如下:
xml 代码
- <decision name="more message">
- <handler class="com.liferay.jbpm.handler.MessageSendDecision"></handler>
- <transition name="no" to="end"></transition>
- <transition name="yes" to="message-name-input"></transition>
- </decision>
我们在portal工程中新建一个java文件
portal\jbpm-web\docroot\WEB-INF\src\com\liferay\jbpm\handler\MessageSendDecision.java,内容如下:
java 代码
- package com.liferay.jbpm.handler;
- import org.jbpm.context.exe.ContextInstance;
- import org.jbpm.graph.exe.ExecutionContext;
- import org.jbpm.graph.node.DecisionHandler;
- public class MessageSendDecision implements DecisionHandler {
- public String decide(ExecutionContext executionContext) throws Exception {
- //获取当前令牌所处的上下文
- ContextInstance instance = executionContext.getContextInstance();
- String decision = null;
- //获取该上下文中的变量radio:more info:yes,no
- String response = (String) instance.getVariable("radio:more info:yes,no");
- //对该变量进行判断
- if (response.equalsIgnoreCase("yes") || response.equalsIgnoreCase("no"))
- decision = response;
- else
- decision = "no";
- System.out.println(decision);
- //返回decision
- //返回的decision必须与定义的transition名相对应,否则执行默认transition
- return decision;
- }
- }
保存该文件,至此该流程的定义结束,我们可以看到jbpm-web目录下多了4个文件:

7. 部署流程
Jboss提供的IDE没有支持在liferay下自动部署流程,因此通过jbpm-web下的ant命令进行部署。
将jbpm-web下的build.xml文件拖入ant窗口,依次执行命令compile编译我们定义的 java类。之后执行deploy命令,将类和流程的定义部署到web应用中。打开tomcat下的webapp/jbpm-web,就可以找到新添加的相应文件。
启动tomcat,登录liferay,添加workflow portlet,点击definition选项,点击add:

将刚才定义的流程的processdenfinition.xml中的内容全部拷贝到文本框中,点击save new version,如下:

提交成功后,可以看到列表中多了一项:

点击add instance,为该流程添加一个新实例,对该流程进行验证。
发表评论
- 浏览: 14620 次
- 性别:

- 来自: 自己输入

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
jBPM学习(七)----jBPM相 ...
不错,博主辛苦了。
-- by dones -
jBPM学习(二)----数据库 ...
我也没有这个jbpm.3/deploy/目录,手动加的,我的出错了啊:> Bu ...
-- by ljh0242 -
jBPM学习(二)----数据库 ...
我也没有这个jbpm.3/deploy/目录,手动加的,我的出错了啊:> Bu ...
-- by ljh0242 -
jBPM学习(二)----数据库 ...
操作同上,出现如下错误: Buildfile: D:\workspace\jbp ...
-- by ljh0242 -
jBPM学习(一)----环境搭 ...
我也是按博主操作的,出现问题,可否技术交流:我的QQ:178070373,msn ...
-- by ljh0242






评论排行榜