初学JBPM遇到的几个问题

刚开始学习JBPM,按照陈刚的博客跑了跑,碰到了几个问题。写在这里,给自己提个醒。
我用的是JBPM3.3,server是JBOSS AS 4.2.3,数据库是mysql。
陈刚的博客是
[url]http://www.blogjava.net/chengang/category/12967.html[/url]
按着他的例子作,遇到了以下几个问题:
1 包引用的问题
利用JBOSS TOOLS开发平台开发JBPM项目,很容易。不用这个TOOLS,也可以下载JBPM的ECLIPSE的插件包,自己安装也行。
创建一个初始的JBPM项目,会有问题。主要是有的JAR包没有引入。
要用mysql,需要引入mysql的驱动包。
还有jboss-j2ee.jar包(从jboss as中找)
跑测试用例时,会出现:
java.lang.NoClassDefFoundError: javax/transaction/Synchronization
at org.hibernate.impl.SessionImpl.<init>(SessionImpl.java:213)
at org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:473)
at org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:497)
at org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:505)
at org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:117)
at org.jbpm.persistence.db.DbPersistenceService.getGraphSession(DbPersistenceService.java:351)
at org.jbpm.JbpmContext.getGraphSession(JbpmContext.java:639)
at org.jbpm.JbpmContext.deployProcessDefinition(JbpmContext.java:173)
at com.sample.DeployProcessTest.testDeployProcessDefinition(DeployProcessTest.java:66)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)


2 记得加一个服务到jbpm.cfg.xml中
<service name="tx" factory="org.jbpm.tx.TxServiceFactory"/>
如果不加它,会出现下面的错误。
好像是在jbpmContext.close()时,去处理hibernate事务。
org.jbpm.JbpmException: no jbpm tx service configured
at org.jbpm.persistence.db.DbPersistenceService.isRollbackOnly(DbPersistenceService.java:405)
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:217)
at org.jbpm.svc.Services.close(Services.java:236)
at org.jbpm.JbpmContext.close(JbpmContext.java:136)
at com.sample.DeployProcessTest.testDeployProcessDefinition(DeployProcessTest.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

3 参考我的提问,发现每次部署流程,总会删除数据库中的所有数据,然后再部署。
[url]http://jbpm.group.iteye.com/group/topic/9078[/url]
后来发现是hibernate.cfg.xml中
<property name="hibernate.hbm2ddl.auto">update</property>的值不同引起的。这个属性有四个值可供选择。网上查了下:
它包含4个属性:

* create : 会根据你的model类来生成表,但是每次运行都会删除上一次的表,重新生成表,哪怕2次没有任何改变


* create-drop : 根据model类生成表,但是sessionFactory一关闭,表就自动删除


* update : 最常用的属性,也根据model类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行。则在运行应用程序时(第一次),会自动建立起表的结构(前提是先建立好数据库)。要注意的是,当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会


* validate : 只会和数据库中的表进行比较,不会创建新表,但是会插入新值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值