前面我讲过的使用部署文件连接mysql的方式只是创建了基础数据库,在实际环境中我发现并不能将jbpm的流程持久化到数据库中,下面我又研究了下如何将jbpm的流程持久化到数据库中.
这次我使用的环境是jbpm3.2.6.sp1的环境(主要是考虑到以后要使用eclipse3.4的开发环境)
首先将mysql的驱动程序mysql-connector-java-5.1.7-bin.jar与jta-1.1.jar(hibernate持久化需要用到这个jar,否则报错)放在classpath路径下。
修改src/main/config/hibernate.cfg.xml配置文件,修改过程同我原来的文章。
编辑src/main/config/jbpm.cfg.xml,注意,这个文件是关键,这个文件是整个jbpm的主配置文件,其缺省什么都没有,主要根节点,所以你可以运行jbpm的流程,但是不能做持久化,要做持久化必须配置这个文件,其默认配置如下:
<jbpm-configuration>
<jbpm-context>
<service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
<service name='persistence' factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' />
<service name='message' factory='org.jbpm.msg.db.DbMessageServiceFactory' />
<service name='scheduler' factory='org.jbpm.scheduler.db.DbSchedulerServiceFactory' />
<service name='logging' factory='org.jbpm.logging.db.DbLoggingServiceFactory' />
<service name='authentication' factory='org.jbpm.security.authentication.DefaultAuthenticationServiceFactory' />
</jbpm-context>
<!-- configuration resource files pointing to default configuration files in jbpm-{version}.jar -->
<string name='resource.hibernate.cfg.xml' value='hibernate.cfg.xml' />
<!-- <string name='resource.hibernate.properties' value='hibernate.properties' /> -->
<string name='resource.business.calendar' value='org/jbpm/calendar/jbpm.business.calendar.properties' />
<string name='resource.default.modules' value='org/jbpm/graph/def/jbpm.default.modules.properties' />
<string name='resource.converter' value='org/jbpm/db/hibernate/jbpm.converter.properties' />
<string name='resource.action.types' value='org/jbpm/graph/action/action.types.xml' />
<string name='resource.node.types' value='org/jbpm/graph/node/node.types.xml' />
<string name='resource.parsers' value='org/jbpm/jpdl/par/jbpm.parsers.xml' />
<string name='resource.varmapping' value='org/jbpm/context/exe/jbpm.varmapping.xml' />
<string name='resource.mail.templates' value='jbpm.mail.templates.xml' />
<int name='jbpm.byte.block.size' value="1024" singleton="true" />
<bean name='jbpm.task.instance.factory' class='org.jbpm.taskmgmt.impl.DefaultTaskInstanceFactoryImpl' singleton='true' />
<bean name='jbpm.variable.resolver' class='org.jbpm.jpdl.el.impl.JbpmVariableResolver' singleton='true' />
<string name='jbpm.mail.smtp.host' value='localhost' />
<bean name='jbpm.mail.address.resolver' class='org.jbpm.identity.mail.IdentityAddressResolver' singleton='true' />
<string name='jbpm.mail.from.address' value='jbpm@noreply' />
<bean name='jbpm.job.executor' class='org.jbpm.job.executor.JobExecutor'>
<field name='jbpmConfiguration'><ref bean='jbpmConfiguration' /></field>
<field name='name'><string value='JbpmJobExecutor' /></field>
<field name='nbrOfThreads'><int value='1' /></field>
<field name='idleInterval'><int value='5000' /></field>
<field name='maxIdleInterval'><int value='3600000' /></field> <!-- 1 hour -->
<field name='historyMaxSize'><int value='20' /></field>
<field name='maxLockTime'><int value='600000' /></field> <!-- 10 minutes -->
<field name='lockMonitorInterval'><int value='60000' /></field> <!-- 1 minute -->
<field name='lockBufferTime'><int value='5000' /></field> <!-- 5 seconds -->
</bean>
</jbpm-configuration>
然后你再运行你的junit应用,看看是不是被持久化了呢?