jBPM4开发入门指南
------------------------------------------------------------------------------------------
1.1、安装JDK
------------------------------------------------------------------------------------------
1.2、安装Ant
Ant 是使用 jBPM 必须的一个工具。 jBPM 中的很多操作都要用到 Ant 。
安装方法:
( 1 )先下载: 为了执行ant脚本,你需要1.7.0或更高版本的apache ant:
http://ant.apache.org/bindownload.cgi
( 2 )解压到 D:/ant (当然其他目录也可以)。
( 3 )设置如下系统变量: ANT_HOME=d:/ant 。
( 4 )把 %ANT_HOME%/bin 加入到系统变量 PATH 中。
安装 jBPM
jBPM 的下载地址: http://sourceforge.net/project/showfiles.php?group_id=70542&package_id=268068
------------------------------------------------------------------------------------------
2 、建库
MySQL 中创建一个库,库名: jbpmdb
3 、生成建表的 SQL 语句并建表
这个构建文件${jbpm.home}/db/build.xml包含了脚本 用来创建和删除数据库结构的操作。
进入到这个目录下,运行ant -p 可以获得更多细节。
在你的数据库中创建表结构:
首先,更新${jbpm.home}/db/jdbc中的数据库配置文件。
然后,在D:/jbpm-4.0/db/build.xml
<!-- DEFAULT PROPERTY VALUES -->
<property name="database" value="mysql" />
更改为
mysql
然后在db目录下执行ant create.jbpm.schema
可以看到 MySQL 客户端中执行“ mysql.create.sql ”脚本,这样
将在 jbpmdb 库中创建一个个的数据表。
------------------------------------------------------------------------------------------
4
安装 jBPM 4的 Eclipse 开发插件
jBPM 4的 Eclipse 开发插件 只有GPD
流程设计器(GPD)
图形化流程设计器(GPD)使用Eclipse作为其平台, 并把GPD插件安装到eclipse上。
使用Eclipse软件升级(Software Update)机制安装设计器是非常简单的。
在gpd目录下有一个gpd/jbpm-gpd-site.zip文件, 这就是更新站点(archived update site)的 压缩包。
在Eclipse里添加更新站点的方法:
帮助 --> 安装新软件...
点击 添加...
在 添加站点 对话框中,单击 压缩包...
找到 gpd/jbpm-gpd-site.zip 并点击 '打开'
点击 确定 在 添加站点 对话框中,会返回到 '安装'对话框
选择出现的 jPDL 4 GPD 更新站点
点击 下一步.. 然后点击 完成
接受协议
当它询问的时候重启eclipse
5
配置jBPM运行时
点击 Window --> Preferences
选择 JBoss jBPM --> jBPM 4 --> Runtime Locations
点击 Add...
在 Add Location 对话框中,输入一个名字,比如 jbpm-4.0 然后点击 Search...
在 Browse For Folder 对话框中,选择你的jbpm根目录,然后点击 OK
点击 OK 在 Add Location 对话框中
6
定义jBPM用户库
如何在你的工作空间定义一个用户库, 用来放置jBPM的库文件。 如果你创建一个新工程, 只需要将用户库全部添加到build path下
点击窗口 --> 属性(Windows --> Preferences)
选择Java --> 创建路径 --> 用户类库(Java --> Build Path --> User Libraries)
点击新建(New)
类型名字jBPM Libraries
点击添加JARs(Add JARs...)
找到jBPM安装程序下的lib目录
选择lib下的所有jar文件并点击打开(Open)
选择jBPM Libraries作为入口
重新点击添加JARs(Add JARs)
在jBPM的安装程序的根目录下选择jbpm.jar文件
点击打开(Open)
在jbpm.jar下选择源码附件(Source attachment)作为入口
点击编辑(Edit)
在源码附件的配置(Source Attachment Configuration)对话框中,点击目录(External Folder...)
找到jBPM安装程序下的src目录
点击选择(Choose)
点击两次'确定'(Ok)会关闭所有对话框
7 jBPM 的 demo
新建jBPM项目
主菜单“文件->新建->项目”,在弹出的对话框里,有“ java Project ”项
选上好,单击“下一步”,起个名“ myjbpm ”,然后就可以单击“完成”了。然后手动
创建src/test/config
copy
D:/jbpm-4.0/examples/src
2009-07-07 15:40 546 jbpm.cfg.xml
2009-07-07 15:40 1,085 jbpm.hibernate.cfg.xml
2009-07-07 15:40 72 jbpm.mail.properties
2009-07-07 15:40 418 jbpm.mail.templates.examples.xml
2009-07-07 15:40 637 logging.properties
到
config下
8 修改jbpm.hibernate.cfg.xml
hibernate.cfg.xml 的默认设置是用 HSQL ,这是一个内存数据库,这种内存数据库用来代替项
目实际所用的数据库来做单元测试挺不错的。不过我们这里是要试试用 MySQL 、 Oracle ,那就改一下
设置吧。
注:配置值可参考 D:/jbpm-4.0/db/hibernate.cfg对应子目录下的 hibernate.properties 文
件。
8.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>
8.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">xiong</property>
<property name="hibernate.connection.password">xiong</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
9 开始demo
10定义流程
流程的定义文件是 pd.jpdl.xml ,这个是一个关键文件, jBPM 4的很大一部份内容都是关于
它的。
------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<process name="pd" xmlns="http://jbpm.org/4.0/jpdl ">
<start name="start1" g="207,62,48,48">
<transition name="to state1" to="state1" g="-59,-17"/>
</start>
<end name="end1" g="208,293,48,48"/>
<state name="state1" g="185,155,92,52">
<transition name="to end1" to="end1" g="-47,-17"/>
</state>
</process>
------------------------------------------------------------------------------------------
说明:
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
OK ,后台的程序就算写完了(前台客户端的程序还没写),下面开始部署。
11部署pd.jpdl.xml
我们要把pd.jpdl.xml 的流程定义的数据部署到数据库中,因为 jBPM 在正式运行
的时候不是去读 pd.jpdl.xml 文件,而是去读数据库中的流程定义。 这里写了一个
JUnit 程序来部署 processdefinition.xml ,当然你用普通的 Java Main 也可以。
参考
D:/jbpm4/src/org/jbpm/examples/services/ServicesTest.java
------------------------------------------------------------------------------------------
在本方法执行完毕后,检查jbpm4_deployment表会多了一条记录
jbpm4_deployprop表会多了三条记录,对应id,key,version
jbpm4_lob 表会多了一条记录,保存流程图
package deploy;
import junit.framework.TestCase;
import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ManagementService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
public class ServicesTest extends TestCase {
public void testObtainServicesAndDeployProcess() {
Configuration configuration = new Configuration();
ProcessEngine processEngine = configuration.buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ExecutionService executionService = processEngine.getExecutionService();
TaskService taskService = processEngine.getTaskService();
HistoryService historyService = processEngine.getHistoryService();
ManagementService managementService = processEngine.getManagementService();
// 开始部署一个新的流程文件
String deploymentId = repositoryService.createDeployment()
// .addResourceFromClasspath("org/jbpm/examples/services/Order.jpdl.xml")
.addResourceFromClasspath("pd.jpdl.xml")
.deploy();
// repositoryService.deleteDeployment(deploymentId);
}
}
------------------------------------------------------------------------------------------
运行此程序,在控制台打印了一些日志,通过。如果出错,仔佃阅读出错信息以判断错误原因
12 从数据库中的查看部署效果
无论是 MySQL 还是 Oracle ,查询 jbpm4_deployment表,你会发现多了一条记录
jbpm4_deployprop表会多了三条记录,对应id,key,version
jbpm4_lob 表会多了一条记录,保存流程图
Service就是PVM对外发布的服务,包括RepositoryService(比如部署jpdl文件),
ExecutionService(负责管理执行),TaskService,ManagementService等等.可以说这是给用户调用的API.比如我们看下他们的一些方法.
RepositoryService接口的一些方法:
public interface RepositoryService {
NewDeployment createDeployment();
ProcessDefinitionQuery createProcessDefinitionQuery();
...
}
ExecutionService的一些方法:
public interface ExecutionService {
ProcessInstance startProcessInstanceById(String processDefinitionId);
ProcessInstance signalExecutionById(String executionId);
...
}
ManagementService的接口:
public interface ManagementService {
void executeJob(long jobDbid);
JobQuery createJobQuery();
}
------------------------------------------------------------------------------------------
13 jBPM4 的客户端开发
有了前面的 后台流程,我们就要开始客户端程序了。正如前面提到的,本文不写 JSP ,而
改采用 JUnit 的形式,输出则用 System.out.println 。举一反三,知道在方法中输入及用 println
输出,在 JSP 和 SWING 等 GUI 界面还不是一样嘛。
这个 JUnit 客户端,我们就借用创建项目时自动生成的 SimpleProcessTest.java 了,改写后如下:
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
这个例子还是很简单
不过没关系。下面的
内容我将完成一个更完整的实例。
------------------------------------------------------------------------------------------