`
stta04
  • 浏览: 112827 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

第四课 JBPM简单实例入门

    博客分类:
  • jbpm
阅读更多

1、新建项目<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

主菜单“文件->新建->项目”,在弹出的对话框里,选中JBoss jbpm节点下的“ Process Project ”项。输入项目名:JbpmProject,项目建好后结构如图所示:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 189.75pt; HEIGHT: 277.5pt" type="#_x0000_t75"><imagedata o:title="TestJbpm2结构图" src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C13%5Cclip_image003.jpg"></imagedata></shape>

这个项目和通常 Eclipse 的项目结构有点不同,不过 这是一个现在非常流行的项目结构, src/java 存放源文件, test/java 存放相应的 JUnit 单元测试代码。

下面介绍一下各个文件:

l MessageActionHandler ,自动生成的一个 ActionHandler 。不想要可以删掉。

l ehcache.xml cache 的配置文件,里面有很详解的英文说明。没有必要可以不用改它。

l hibernate.cfg.xml   jBPM 是用 Hibernate 进行工作流的数据存储的,这个就是 Hibernate 的配置文件。后面我们将讲到如何配置这个文件。

l jbpm.cfg.xml   jbpm 本身的配置文件。现在是空的,它用的是缺省配置,你想知道有哪些配置就去看这个文件E:\software\jbpm-starters-kit-3.1.2\jbpm\src\java.jbpm\org\jbpm\default.jbpm.cfg.xml

l log4j.properties  这个是日志 API log4j 的配置文件,用过 log4j 的都知道。

l SimpleProcessTest.java  这个是对最重要的流程配置文件的 processdefinition.xml 单元测试代码。这里表扬一点, jBPM 的优良设计使得它的可测试性非常之高,喜欢写 t 单元测试的人有福了。

l gpd.xml  用于生成流程图的定义文件。都是一些方框的坐标和长宽

l processdefinition.xml  这个是对最重要的流程配置文件,以后写流程要经常和它打交道。

l processimage.jpg  一个流程图

2、修改hibernate.cfg.cml配置文件

hibernate.cfg.xml 的默认设置是用 HSQL ,这是一个内存数据库,这种内存数据库用来代替项目实际所用的数据库来做单元测试挺不错的。

注:配置值可参考jbpm-starters-kit-3.1.2\jbpm-db 对应子目录下的 hibernate.properties 文件。

一、网上朋友给我mysqloracle的配置如下:

1 MySQL 的更改如下:

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">123456</property>

2 Oracle 的更改如下:

<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>

<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

<property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.123.10:1521:wxxrDB</property>

<property name="hibernate.connection.username">chengang</property>

<property name="hibernate.connection.password">chengang</property>

如果你装了 Oracle 的客户端,并且 D:\oracle\ora92\network\ADMIN\tnsnames.ora 里做了如下的设置

WXXRDB_192.168.123.10 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.123.10)(PORT = 1521))

)

(CONNECT_DATA =

(SID = wxxrDB)

(SERVER = DEDICATED)

)

)

Oracle hibernate.connection.url 项也可以设为: jdbc:oracle:oci:@WXXRDB_192.168.123.10

二、我的配置修改

1sqlserver

<!-- hibernate dialect -->

<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>

<!-- JDBC connection properties (begin) -->

<property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:jtds:sqlserver://localhost:1433/jbpm</property>

<property name="hibernate.connection.username">sa</property>

<property name="hibernate.connection.password">admin</property>

<!-- JDBC connection properties (end) -->

3、完善库引用

主要是把你所用的数据库的 JDBC 库引用进来,如果你是下载的jbpm-starters-kit-3.1.2可能还要 Hibernate hibernate3.jar 加入到项目的库引用中。

4、开始流程

这里是一个很简单的请假流程,请假人提交假单给经理审批,经理审批后结束。

1 、定义流程

流程的定义文件是 processdefinition.xml ,这个是一个关键文件, jBPM 的很大一部份内容都是关于它的。在这里我们把原来自动生成的内容,稍做改动:

<?xml version="1.0" encoding="UTF-8"?>

<process-definition

xmlns="urn:jbpm.org:jpdl-3.2"

name="helloworld">

<!-- 申请 -->

<start-state name="request">

<task>

<controller>

<variable name="name"/>

<variable name="day"/>

<variable name="note"/>

</controller>

</task>

<!-- 流程转向 -->

<transition name="to_confirm" to="confirm">

<action name="requestAction" class="com.stt.jbpm.RequestAction">

<reason>我要请假</reason>

</action>

</transition>

</start-state>

<!-- 审批 -->

<state name="confirm">

<transition name="to_end" to="end">

<action name="finishAction" class="com.stt.jbpm.ConfirmAction"/>

</transition>

</state>

<!-- 结束 -->

<end-state name="end"></end-state>

</process-definition>

说明:

流程的名称改成了 helloworld 。(呵呵,也就是这里和 helloworld 有关了)

<controller> 标签定义了三个数据:姓名、请假天数、说明。

<transition> 标签定了 request 节点的一个流程转向,这里是转到 confirm 节点。

<action> 标签定义了流程由一个节点转到另一个节点时,所要执行的动作,动作封装在一个 ActionHandler 类中。比如这里当 request confirm 结点时将执行 RequestAction 类的 execute 方法。

RequestAction下面还有一个 <reason> (请假理由),它对应于RequestAction 的属性 String reason

5、编写 ActionHandler

在上面 processdefinition.xml 里我们定义了两个 ActionHandler RequestAction ConfirmAction 。其代码如下:

package com.stt.jbpm;

import org.jbpm.graph.def.ActionHandler;

import org.jbpm.graph.exe.ExecutionContext;

public class RequestAction implements ActionHandler {

private static final long serialVersionUID = 1L;

private String reason;

@Override

public void execute(ExecutionContext context) throws Exception {

context.getContextInstance().setVariable("note", reason);

}

public String getReason() {

return reason;

}

public void setReason(String reason) {

this.reason = reason;

}

}

说明: ExecutionContext 是一个贯通流程的容器。它是个大宝箱,里面啥玩意都有,后面将更深入的提到。这里的 reasion 就是 processdefinition.xml 中的我要请假

package com.stt.jbpm;

import org.jbpm.graph.def.ActionHandler;

import</b

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics