刚开始学习JBPM,按照陈刚的博客跑了跑,碰到了几个问题。写在这里,给自己提个醒。
我用的是JBPM3.3,server是JBOSS AS 4.2.3,数据库是mysql。
陈刚的博客是
http://www.blogjava.net/chengang/category/12967.html
按着他的例子作,遇到了以下几个问题:
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 参考我的提问,发现每次部署流程,总会删除数据库中的所有数据,然后再部署。
http://jbpm.group.iteye.com/group/topic/9078
后来发现是hibernate.cfg.xml中
<property name="hibernate.hbm2ddl.auto">update</property>的值不同引起的。这个属性有四个值可供选择。网上查了下:
它包含4个属性:
* create : 会根据你的model类来生成表,但是每次运行都会删除上一次的表,重新生成表,哪怕2次没有任何改变
* create-drop : 根据model类生成表,但是sessionFactory一关闭,表就自动删除
* update : 最常用的属性,也根据model类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行。则在运行应用程序时(第一次),会自动建立起表的结构(前提是先建立好数据库)。要注意的是,当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会
* validate : 只会和数据库中的表进行比较,不会创建新表,但是会插入新值
分享到:
相关推荐
为了充分利用JBPM的强大功能,建议开发者们从以下几个方面入手: 1. **熟悉BPMN规范**:了解BPMN的基本概念和符号,这将有助于更好地设计和理解业务流程图。 2. **研究官方文档**:JBPM的官方文档是学习的重要...
这个压缩包包含了几个关键的学习资源,可以帮助初学者快速掌握jBPM的基础知识和实践应用。 首先,"jBPM 开发入门指南"提供了一个系统性的引导,涵盖了jBPM的基本概念、安装配置、工作流设计、任务管理和事件处理等...
环境搭建的步骤通常包括以下几个部分: 1. **Java环境**:jbpm3要求Java运行环境(JRE)和Java开发工具集(JDK)的安装。确保你的系统上已经安装了JDK 1.4或更高版本,并设置了正确的`JAVA_HOME`环境变量。 2. **...
如果遇到问题,可以利用JBPM提供的调试工具来进行故障排查。 #### 七、总结 通过这个报销申请实例的学习,我们不仅了解了JBPM的基本使用方法,还掌握了如何利用JBPM来实现一个完整的业务流程。这对于日后在实际工作...
手册也可能包含故障排查和优化技巧,帮助用户解决在实际应用中遇到的问题。 总的来说,jBPM-side流程设计器提供的资料是全面且深入的,无论是初学者还是经验丰富的开发者,都能从中受益。通过系统学习和实践,你...
文档中可能涵盖了以下几个关键知识点: 1. **jbPM介绍**:jbPM的基本概念、架构和设计原理,以及它在业务流程管理中的作用。理解jbPM如何通过BPMN(Business Process Modeling Notation)模型来表达复杂的业务流程...
- 鼓励用户在遇到问题时及时反馈,提供了一个官方的渠道用于提交bug报告或功能请求。 - 有助于社区及时了解并解决各种问题,从而推动项目的持续发展。 #### 二、安装配置 - **2.1 发布包介绍** - 描述了jBPM4的...
jBPM4 的架构设计考虑到了灵活性和可扩展性,主要包括以下几个方面: **5.1 API** API 是 jBPM4 的核心,提供了与流程交互的各种接口。 **5.2 Activity API** Activity API 是用于处理活动的核心 API。 **5.3 ...
**参考资料**\n对于初学者,可以通过官方文档、教程和社区论坛获取更多关于JBPM和Spring集成的信息,包括示例代码、最佳实践和常见问题解答。\n\n总之,JBPM与Spring的集成开发为构建高效、灵活的业务流程管理系统...
JBoss是一款开源的应用服务器,由Red Hat公司开发并维护,它基于Java EE(Enterprise Edition)标准,支持多种服务和框架,包括Servlet、...在实际操作中,可能还会遇到其他问题,建议查阅官方文档或社区论坛寻求帮助。
本文将根据给定的文件信息,详细阐述几个关键的学习步骤,并深入探讨.NET与Java这两种编程语言的学习路径。 #### 1. 确定兴趣与目标 在开始学习编程之前,最重要的是确定自己是否对这一领域感兴趣以及是否有明确的...