今天演示的JBPM的启动,说明一下JBPM的启动过程。以及简单的和Spring集成。
程序采用的是TestCase方式来演示的,当然Web应用是很重要的,但是其实在Web应用上只要自己写几个类就可以把Spring和JBPM对接起来使用了,所以后面大部分都将使用TestCase,小部分会有Web的例子,希望大家理解。
所有的例子我都会做在一个工程里,所以这个工程的打包文件,我会不断的更新,请大家下载。
需要准备的东西:
JBPM SDK,从JBPM官网上下载。
Eclipse,开发环境,插件(可选)包括:Spring、M2Eclipse(Maven)、WST(WebStandardTools)
jar依赖,如果多ant和maven熟悉的朋友推荐用maven下载,如果不熟悉的,请看附件包里面的dependencies.txt文件列表,然后去下载,谢谢。
数据库,采用HSQLDb来演示,已经包含在工程的lib下了。
范例工程:JBPMSamples.zip
JBPM启动过程简要说明:
- JBPM启动,其实就是JBPM获取需要的配置以及依赖的组件(主要是Hiberante)的配置。
- 环境中一些文件来源和修改的说明:
- src/hibernate.cfg.xml:jbpm-jpdl-3.2.GA\config\hibernate.cfg.xml,由于不使用identity部分所以,注释掉配置里“identity mappings”的部分
- src/log4j.xml:jbpm-jpdl-3.2.GA\config\log4j.cfg.xml,修改了部分配置。
- res/jbpm.jpdl.hsqldb.sql:拷贝自jbpm-jpdl-3.2.GA\db\jbpm.jpdl.hsqldb.sql,给每句后面加上逗号,然后使用build.xml中任务initDb.hsqldb对数据库执行初始化。
- 样例代码:com.cnblogs.seewood.s01.ConfigurationTests:基于JUnit的测试范例,载入配置文件。
- 样例代码:com.cnblogs.seewood.s02.ConfigurationSpringTests:结合Spring的调用。
下面贴一些代码的样例:
com.cnblogs.seewood.s01.ConfigurationTests
1
package com.cnblogs.seewood.s01;
2
3
import org.apache.commons.logging.Log;
4
import org.apache.commons.logging.LogFactory;
5
import org.hibernate.Session;
6
import org.jbpm.JbpmConfiguration;
7
import org.jbpm.JbpmContext;
8
9
import junit.framework.TestCase;
10
11
public class ConfigurationTests extends TestCase {
12
private final Log logger = LogFactory.getLog(this.getClass());
13
14
public void testSimpleProcessInMemory() {
15
JbpmConfiguration cfg;
16
/*
17
// 载入配置的方法有很多,这里仅举几个常见例子
18
// JbpmConfiguration构造时,会先载入
19
// classpath:org/jbpm/default.jbpm.cfg.xml中的配置,
20
// 然后根据用户指定位置载入配置信息
21
// 用户自定义配置信息将会覆盖default.jbpm.cfg.xml的内容。
22
// 默认配置读取classpath:hiberante.cfg.xml
23
24
// 默认名称的载入配置,即classpath:jbpm.cfg.xml,
25
cfg = JbpmConfiguration.getInstance();
26
27
// 先载入classpath:org/jbpm/default.jbpm.cfg.xml中的配置
28
// 再从指定名称的载入配置
29
cfg = JbpmConfiguration.getInstance("jbpm-cfg.xml");
30
31
// 从XML字符串构造配置
32
cfg = JbpmConfiguration.parseXmlString(
33
"<jbpm-configuration>" +
34
" <string name=\"resource.hibernate.cfg.xml\" " +
35
" value=\"cn/horncomb/bpm/jbpm/hibernate.cfg.xml\" />" +
36
"</jbpm-configuration>");
37
*/
38
// Spring测试类,默认采用Auto-wire,即从ApplicationContext中获取名称匹配的bean,
39
// 自动注入。jbpmConfiguration就会自动注入的。
40
// applicationContext-jbpm.xml 中定义了bean: jbpmConfiguration.
41
42
cfg = JbpmConfiguration.getInstance("com/cnblogs/seewood/s01/jbpm.cfg.xml");
43
assertNotNull(cfg);
44
this.logger.info("成功创建Jbpm配置信息");
45
46
JbpmContext ctx = cfg.createJbpmContext();
47
assertNotNull(ctx);
48
this.logger.info("成功创建JbpmContext");
49
50
// 注意日志的输入,当第一次获取session的时候才初始化hibernate的配置。
51
Session s = ctx.getSession();
52
assertNotNull(s);
53
this.logger.info("成功创建Hibernate Session");
54
55
// 以后获取时,hibernate不会需要再初始化,所以这种情况用spring就更好了
56
ctx.getSession();
57
this.logger.info("再次获取Session");
58
}
59
}
60
package com.cnblogs.seewood.s01;2

3
import org.apache.commons.logging.Log;4
import org.apache.commons.logging.LogFactory;5
import org.hibernate.Session;6
import org.jbpm.JbpmConfiguration;7
import org.jbpm.JbpmContext;8

9
import junit.framework.TestCase;10

11
public class ConfigurationTests extends TestCase {12
private final Log logger = LogFactory.getLog(this.getClass());13
14
public void testSimpleProcessInMemory() {15
JbpmConfiguration cfg;16
/*17
// 载入配置的方法有很多,这里仅举几个常见例子18
// JbpmConfiguration构造时,会先载入19
// classpath:org/jbpm/default.jbpm.cfg.xml中的配置,20
// 然后根据用户指定位置载入配置信息21
// 用户自定义配置信息将会覆盖default.jbpm.cfg.xml的内容。22
// 默认配置读取classpath:hiberante.cfg.xml23
24
// 默认名称的载入配置,即classpath:jbpm.cfg.xml,25
cfg = JbpmConfiguration.getInstance();26
27
// 先载入classpath:org/jbpm/default.jbpm.cfg.xml中的配置28
// 再从指定名称的载入配置29
cfg = JbpmConfiguration.getInstance("jbpm-cfg.xml");30
31
// 从XML字符串构造配置32
cfg = JbpmConfiguration.parseXmlString(33
"<jbpm-configuration>" +34
" <string name=\"resource.hibernate.cfg.xml\" " +35
" value=\"cn/horncomb/bpm/jbpm/hibernate.cfg.xml\" />" +36
"</jbpm-configuration>");37
*/38
// Spring测试类,默认采用Auto-wire,即从ApplicationContext中获取名称匹配的bean,39
// 自动注入。jbpmConfiguration就会自动注入的。40
// applicationContext-jbpm.xml 中定义了bean: jbpmConfiguration.41
42
cfg = JbpmConfiguration.getInstance("com/cnblogs/seewood/s01/jbpm.cfg.xml");43
assertNotNull(cfg);44
this.logger.info("成功创建Jbpm配置信息");45
46
JbpmContext ctx = cfg.createJbpmContext();47
assertNotNull(ctx);48
this.logger.info("成功创建JbpmContext");49
50
// 注意日志的输入,当第一次获取session的时候才初始化hibernate的配置。51
Session s = ctx.getSession();52
assertNotNull(s);53
this.logger.info("成功创建Hibernate Session");54
55
// 以后获取时,hibernate不会需要再初始化,所以这种情况用spring就更好了56
ctx.getSession();57
this.logger.info("再次获取Session");58
}59
}60

1
package com.cnblogs.seewood.s02;
2
3
import org.hibernate.Session;
4
import org.hibernate.SessionFactory;
5
import org.jbpm.JbpmConfiguration;
6
import org.jbpm.JbpmContext;
7
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
8
9
/**
10
* 简单流程测试
11
* @author seewood
12
* @version $LastChangedRevision$
13
*/
14
public class ConfigurationSpringTests
15
extends AbstractTransactionalDataSourceSpringContextTests {
16
private JbpmConfiguration jbpmConfiguration;
17
private SessionFactory sessionFactory;
18
19
@Override
20
protected String getConfigPath() {
21
// 返回配置文件路径(相对与classpath)
22
return "/applicationContext.xml";
23
}
24
25
@Override
26
protected boolean isRollback() {
27
// 默认为true,即是测试完毕后事务全部rollback
28
return super.isRollback();
29
}
30
31
public void testInitJbpmConfiguration() {
32
JbpmConfiguration cfg;
33
// Spring测试类,默认采用Auto-wire,即从ApplicationContext中获取名称匹配的bean,
34
// 自动注入。jbpmConfiguration就会自动注入的。
35
// applicationContext-jbpm.xml 中定义了bean: jbpmConfiguration.
36
// 这是自定义的一个JbpmConfiguration的Factory Bean。
37
cfg = this.getJbpmConfiguration();
38
assertNotNull(cfg);
39
this.logger.info("成功创建Jbpm配置信息");
40
41
JbpmContext ctx = cfg.createJbpmContext();
42
assertNotNull(ctx);
43
this.logger.info("成功创建JbpmContext");
44
45
// 注意与不使用Spring时候的区别
46
// Spring已经初始化Hibernate配置了,所以这个时候不能使用ctx直接获取session
47
// 而必须使用Spring中配置的工厂来获取session。
48
// 后面会演示在web时,在哪里处理这个session问题比较好。
49
50
// 使用Spring的session工厂
51
ctx.setSessionFactory(this.sessionFactory);
52
Session s = ctx.getSession();
53
assertNotNull(s);
54
this.logger.info("成功创建Hibernate Session");
55
}
56
57
public void testInitProcessDefinitionXml() {
58
59
}
60
61
public JbpmConfiguration getJbpmConfiguration() {
62
return jbpmConfiguration;
63
}
64
65
public void setJbpmConfiguration(JbpmConfiguration jbpmConfiguration) {
66
this.jbpmConfiguration = jbpmConfiguration;
67
}
68
69
public SessionFactory getSessionFactory() {
70
return sessionFactory;
71
}
72
73
public void setSessionFactory(SessionFactory sessionFactory) {
74
this.sessionFactory = sessionFactory;
75
}
76
}
77
package com.cnblogs.seewood.s02;2

3
import org.hibernate.Session;4
import org.hibernate.SessionFactory;5
import org.jbpm.JbpmConfiguration;6
import org.jbpm.JbpmContext;7
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;8

9
/**10
* 简单流程测试11
* @author seewood12
* @version $LastChangedRevision$13
*/14
public class ConfigurationSpringTests15
extends AbstractTransactionalDataSourceSpringContextTests {16
private JbpmConfiguration jbpmConfiguration;17
private SessionFactory sessionFactory;18

19
@Override20
protected String getConfigPath() {21
// 返回配置文件路径(相对与classpath)22
return "/applicationContext.xml";23
}24

25
@Override26
protected boolean isRollback() {27
// 默认为true,即是测试完毕后事务全部rollback28
return super.isRollback();29
}30

31
public void testInitJbpmConfiguration() {32
JbpmConfiguration cfg;33
// Spring测试类,默认采用Auto-wire,即从ApplicationContext中获取名称匹配的bean,34
// 自动注入。jbpmConfiguration就会自动注入的。35
// applicationContext-jbpm.xml 中定义了bean: jbpmConfiguration.36
// 这是自定义的一个JbpmConfiguration的Factory Bean。37
cfg = this.getJbpmConfiguration();38
assertNotNull(cfg);39
this.logger.info("成功创建Jbpm配置信息");40

41
JbpmContext ctx = cfg.createJbpmContext();42
assertNotNull(ctx);43
this.logger.info("成功创建JbpmContext");44

45
// 注意与不使用Spring时候的区别46
// Spring已经初始化Hibernate配置了,所以这个时候不能使用ctx直接获取session47
// 而必须使用Spring中配置的工厂来获取session。48
// 后面会演示在web时,在哪里处理这个session问题比较好。49

50
// 使用Spring的session工厂51
ctx.setSessionFactory(this.sessionFactory);52
Session s = ctx.getSession();53
assertNotNull(s);54
this.logger.info("成功创建Hibernate Session");55
}56

57
public void testInitProcessDefinitionXml() {58

59
}60

61
public JbpmConfiguration getJbpmConfiguration() {62
return jbpmConfiguration;63
}64

65
public void setJbpmConfiguration(JbpmConfiguration jbpmConfiguration) {66
this.jbpmConfiguration = jbpmConfiguration;67
}68

69
public SessionFactory getSessionFactory() {70
return sessionFactory;71
}72

73
public void setSessionFactory(SessionFactory sessionFactory) {74
this.sessionFactory = sessionFactory;75
}76
}77





浙公网安备 33010602011771号