- 浏览: 262350 次
- 性别:
- 来自: 南通
文章分类
最新评论
-
u011684694:
方便提供一源码?初学者
jBPM(三):Spring 集成 jBPM4.3 (jBPM4+Hibernate4) -
backtracker:
niubility
MongoDB基础 -
lijiejava:
<?xml version="1.0&qu ...
MongoDB基础 -
u010214546:
握着橄榄枝的人 写道在一对多关联中,在多的一方设置invers ...
Hibernate中inverse="true"的理解 -
ycy1003757:
请教一下,在BlobStrategyBlob类中session ...
jBPM(三):Spring 集成 jBPM4.3 (jBPM4+Hibernate4)
http://www.muxuanli.com/lmx/
Spring 集成 jBPM4.3 主要工作有2点:
1. 将jbpm默认的hibernate事务换成spring事务,即在jbpm.cfg.xml文件中将
<import resource="jbpm.tx.hibernate.cfg.xml" />
替换成:
<import resource="jbpm.tx.spring.cfg.xml" />
2. jBPM的核心控件processEngine由Spring生成、管理。
这2方面的内容,网上有很多资料查询,但基本都是在xml文件中进行配置,而我是在之前的代码中集成jBPM,之前的代码采用的是注解的方式(Spring注解,Hibernate注解),所以采用编码的方式获得了processEngine对象,即:
@Bean(name="processEngine") @DependsOn("sessionFactory") public ProcessEngine getProcessEngine() throws Exception{ processEngine = new ConfigurationImpl().springEnabled() .setHibernateSessionFactory(this.getSessionFactory()) .springInitiated(applicationContext) .buildProcessEngine(); return processEngine; }
从上述代码中可以看到,生成processEngine对象需要设置SessionFactory对象。查看jBPM4.3源码SpringProcessEngine.java类,发现其获取的是LocalSessionFactoryBena对象,而我在代码中采用的是注解方式,所以生成的是AnnotationSessionFactoryBean对象,即:
@Bean(name="annotationSessionFactoryBean") @DependsOn("dataSource") public AnnotationSessionFactoryBean getAnnotationSessionFactoryBean() throws Exception { Properties properties = new Properties(); properties.put("hibernate.dialect", dialect); properties.put("hibernate.show_sql", showSql); properties.put("hibernate.hbm2ddl.auto", hbm2ddl); properties.put("hibernate.max_fetch_depth", max_fetch_depth); properties.put("hibernate.temp.use_jdbc_metadata_defaults", "false"); properties.put("hibernate.jdbc.fetch_size", "50"); properties.put("hibernate.jdbc.batch_size", "25"); AnnotationSessionFactoryBean a = new AnnotationSessionFactoryBean(); a.setDataSource(this.getDataSource()); a.setHibernateProperties(properties); a.setPackagesToScan(models.split(",")); // jbpm文件 a.setMappingResources(new String[]{"jbpm.repository.hbm.xml","jbpm.execution.hbm.xml","jbpm.history.hbm.xml","jbpm.task.hbm.xml","jbpm.identity.hbm.xml"}); a.afterPropertiesSet(); return a; }
解决的办法是在本地源码中新建一个对应的SpringProcessEngine类,用以覆盖jBPM源码。修改其中的代码,获取AnnotationSessionFactoryBean对象。以下是修改的create方法:
public static ProcessEngine create(ConfigurationImpl configuration) { SpringProcessEngine springProcessEngine = null; ApplicationContext applicationContext = null; if (configuration.isInstantiatedFromSpring()) { applicationContext = (ApplicationContext) configuration.getApplicationContext(); springProcessEngine = new SpringProcessEngine(); springProcessEngine.applicationContext = applicationContext; springProcessEngine.initializeProcessEngine(configuration); // 原先的代码 // LocalSessionFactoryBean localSessionFactoryBean = springProcessEngine.get(LocalSessionFactoryBean.class); // Configuration hibernateConfiguration = localSessionFactoryBean.getConfiguration(); // springProcessEngine.processEngineWireContext // .getWireDefinition() // .addDescriptor(new ProvidedObjectDescriptor(hibernateConfiguration, true)); // // springProcessEngine.checkDb(configuration); // 将LocalSessionFactoryBean 换成 AnnotationSessionFactoryBean AnnotationSessionFactoryBean annotationSessionFactoryBean = springProcessEngine.get(AnnotationSessionFactoryBean.class); Configuration hibernateConfiguration = annotationSessionFactoryBean.getConfiguration(); springProcessEngine.processEngineWireContext .getWireDefinition() .addDescriptor(new ProvidedObjectDescriptor(hibernateConfiguration, true)); springProcessEngine.checkDb(configuration); } else { String springCfg = (String) configuration.getProcessEngineWireContext().get("spring.cfg"); if (springCfg==null) { springCfg = "applicationContext.xml"; } applicationContext = new ClassPathXmlApplicationContext(springCfg); springProcessEngine = (SpringProcessEngine) applicationContext.getBean("processEngine"); } return springProcessEngine; }
本地新建的类:
评论
12 楼
u011684694
2018-01-29
方便提供一源码?初学者
11 楼
ycy1003757
2015-03-16
请教一下,在BlobStrategyBlob类中session.getLobHelper() 使用Spring注入SessionFactory 如何获取SessionFactory,有没有代码示例参考下,急求!!!
10 楼
fuyanchao
2015-02-13
aqaqaeae1234 写道
lb250028 写道
chenjl 写道
楼主,还有一个问题想请问你一下。
我在布署流程的时候,读入zip文件,DEBUG进去发现BlobStrategyBlob这个类中,使用Hibernate.createBlob(bytes);这个在hibernate4中是没有。请问一下要怎么修改呢?
还有JBPM4.4集成hibernate4还会出现什么问题呢?
谢谢!!
//1.布署流程 RepositoryService repositoryService = processEngine .getRepositoryService(); ZipInputStream zis = new ZipInputStream(this.getClass() .getResourceAsStream("/omaterial.zip")); repositoryService.createDeployment() .addResourcesFromZipInputStream(zis).deploy(); /** ExecutionService接口,用来管理流程实例 */ ExecutionService executionService = processEngine.getExecutionService();
我在布署流程的时候,读入zip文件,DEBUG进去发现BlobStrategyBlob这个类中,使用Hibernate.createBlob(bytes);这个在hibernate4中是没有。请问一下要怎么修改呢?
还有JBPM4.4集成hibernate4还会出现什么问题呢?
谢谢!!
同楼主提到的方法一样,重写org/jbpm/pvm/internal/lob/BlobStrategyBlob 类,因为原代码中使用的是hibernate3的Hibernate.createLob(),这个方法在h4中已经取消了,可以使用 session.getLobHelper() 得到一个帮助类操作Bolb。我使用的是Spring注入SessionFactory 然后获取currentSession,暂时没出现什么问题 ,有其他方法的同学可以交流探讨下.
我是通过看HIBERNATE3中源码发现,Hibernate.createLob()相当于
NonContextualLobCreator.INSTANCE.wrap(NonContextualLobCreator.INSTANCE.createBlob(bytes))但是在之后使用的过程中发现仍然会抛出异常
java.lang.AbstractMethodError
at org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(DelegatingPreparedStatement.java:318)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(DelegatingPreparedStatement.java:318)
不知道该怎么解决··
我也这样操作,org/jbpm/pvm/internal/lob/BlobStrategyBlob重写了,添加了一个SessionFactory成员变量,setter方法,然后通过Spring配置中注入SessionFactory了,但是为什么没有注入进去呢,总是空呢
9 楼
fuyanchao
2015-02-12
从头看到尾,看了不下10遍了,从刚开始的什么都看不懂,直到把jbpm4.4差不多学完了,又返回来看,这次比每一次都仔细,尤其是其他人提的问题(sessionImpl问题)把困扰我的问题终于给解决了,太感谢了
8 楼
passlicense
2014-12-24
楼主你好,我也是用hibernate4去集成jbpm4, 出现了:HibernateException: No Session found for current thread错误,于是我在hibernate里面又配置了hibernate.current_session_context_class为thread,结果又出现了:JbpmException: no jBPM DB schema: no JBPM4_EXECUTION table. 的错误,经代码跟踪,是因为checkDb时在ThreadLocal里面获取不到hibernate的session导致的。
hibernate3和4处理session的方式完全不一样了,请问你们集成的时候怎么会没出现这个问题? 求帮助,谢谢了!
hibernate3和4处理session的方式完全不一样了,请问你们集成的时候怎么会没出现这个问题? 求帮助,谢谢了!
7 楼
aqaqaeae1234
2014-02-28
lb250028 写道
chenjl 写道
楼主,还有一个问题想请问你一下。
我在布署流程的时候,读入zip文件,DEBUG进去发现BlobStrategyBlob这个类中,使用Hibernate.createBlob(bytes);这个在hibernate4中是没有。请问一下要怎么修改呢?
还有JBPM4.4集成hibernate4还会出现什么问题呢?
谢谢!!
//1.布署流程 RepositoryService repositoryService = processEngine .getRepositoryService(); ZipInputStream zis = new ZipInputStream(this.getClass() .getResourceAsStream("/omaterial.zip")); repositoryService.createDeployment() .addResourcesFromZipInputStream(zis).deploy(); /** ExecutionService接口,用来管理流程实例 */ ExecutionService executionService = processEngine.getExecutionService();
我在布署流程的时候,读入zip文件,DEBUG进去发现BlobStrategyBlob这个类中,使用Hibernate.createBlob(bytes);这个在hibernate4中是没有。请问一下要怎么修改呢?
还有JBPM4.4集成hibernate4还会出现什么问题呢?
谢谢!!
同楼主提到的方法一样,重写org/jbpm/pvm/internal/lob/BlobStrategyBlob 类,因为原代码中使用的是hibernate3的Hibernate.createLob(),这个方法在h4中已经取消了,可以使用 session.getLobHelper() 得到一个帮助类操作Bolb。我使用的是Spring注入SessionFactory 然后获取currentSession,暂时没出现什么问题 ,有其他方法的同学可以交流探讨下.
我是通过看HIBERNATE3中源码发现,Hibernate.createLob()相当于
NonContextualLobCreator.INSTANCE.wrap(NonContextualLobCreator.INSTANCE.createBlob(bytes))但是在之后使用的过程中发现仍然会抛出异常
java.lang.AbstractMethodError
at org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(DelegatingPreparedStatement.java:318)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(DelegatingPreparedStatement.java:318)
不知道该怎么解决··
6 楼
lb250028
2014-01-02
chenjl 写道
楼主,还有一个问题想请问你一下。
我在布署流程的时候,读入zip文件,DEBUG进去发现BlobStrategyBlob这个类中,使用Hibernate.createBlob(bytes);这个在hibernate4中是没有。请问一下要怎么修改呢?
还有JBPM4.4集成hibernate4还会出现什么问题呢?
谢谢!!
//1.布署流程 RepositoryService repositoryService = processEngine .getRepositoryService(); ZipInputStream zis = new ZipInputStream(this.getClass() .getResourceAsStream("/omaterial.zip")); repositoryService.createDeployment() .addResourcesFromZipInputStream(zis).deploy(); /** ExecutionService接口,用来管理流程实例 */ ExecutionService executionService = processEngine.getExecutionService();
我在布署流程的时候,读入zip文件,DEBUG进去发现BlobStrategyBlob这个类中,使用Hibernate.createBlob(bytes);这个在hibernate4中是没有。请问一下要怎么修改呢?
还有JBPM4.4集成hibernate4还会出现什么问题呢?
谢谢!!
同楼主提到的方法一样,重写org/jbpm/pvm/internal/lob/BlobStrategyBlob 类,因为原代码中使用的是hibernate3的Hibernate.createLob(),这个方法在h4中已经取消了,可以使用 session.getLobHelper() 得到一个帮助类操作Bolb。我使用的是Spring注入SessionFactory 然后获取currentSession,暂时没出现什么问题 ,有其他方法的同学可以交流探讨下.
5 楼
cz271882889
2013-12-03
请问jbpm4能否和hibernate4整合?能否给出整合方案,万分感谢,我的qq271882889
4 楼
chenjl
2013-11-06
楼主,还有一个问题想请问你一下。
我在布署流程的时候,读入zip文件,DEBUG进去发现BlobStrategyBlob这个类中,使用Hibernate.createBlob(bytes);这个在hibernate4中是没有。请问一下要怎么修改呢?
还有JBPM4.4集成hibernate4还会出现什么问题呢?
谢谢!!
//1.布署流程 RepositoryService repositoryService = processEngine .getRepositoryService(); ZipInputStream zis = new ZipInputStream(this.getClass() .getResourceAsStream("/omaterial.zip")); repositoryService.createDeployment() .addResourcesFromZipInputStream(zis).deploy(); /** ExecutionService接口,用来管理流程实例 */ ExecutionService executionService = processEngine.getExecutionService();
我在布署流程的时候,读入zip文件,DEBUG进去发现BlobStrategyBlob这个类中,使用Hibernate.createBlob(bytes);这个在hibernate4中是没有。请问一下要怎么修改呢?
还有JBPM4.4集成hibernate4还会出现什么问题呢?
谢谢!!
3 楼
chenjl
2013-09-11
非常感谢!可以了。
lijiejava 太厉害了。
lijiejava 太厉害了。
2 楼
lijiejava
2013-09-11
chenjl 写道
你好,请问一下,我用的是hibernate4,在集成jbpm4.4的时候,报如下异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine' defined in class path resource [spring-hibernate.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine()] threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/impl/SessionImpl
按照你的方法,新建了一个类SpringProcessEngine类,覆盖了jBPM源码。
这里的LocalSessionFactoryBean是org.springframework.orm.hibernate4.LocalSessionFactoryBean;
不清楚问题出在哪里,请指教一下,谢谢。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine' defined in class path resource [spring-hibernate.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine()] threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/impl/SessionImpl
按照你的方法,新建了一个类SpringProcessEngine类,覆盖了jBPM源码。
public static ProcessEngine create(ConfigurationImpl configuration) { SpringProcessEngine springProcessEngine = null; ApplicationContext applicationContext = null; if (configuration.isInstantiatedFromSpring()) { applicationContext = (ApplicationContext) configuration .getApplicationContext(); springProcessEngine = new SpringProcessEngine(); springProcessEngine.applicationContext = applicationContext; springProcessEngine.initializeProcessEngine(configuration); LocalSessionFactoryBean localSessionFactoryBean = springProcessEngine .get(LocalSessionFactoryBean.class); Configuration hibernateConfiguration = localSessionFactoryBean .getConfiguration(); springProcessEngine.processEngineWireContext.getWireDefinition() .addDescriptor( new ProvidedObjectDescriptor( hibernateConfiguration, true)); springProcessEngine.checkDb(configuration); } else { String springCfg = (String) configuration .getProcessEngineWireContext().get("spring.cfg"); if (springCfg == null) { springCfg = "applicationContext.xml"; } applicationContext = new ClassPathXmlApplicationContext(springCfg); springProcessEngine = (SpringProcessEngine) applicationContext .getBean("processEngine"); } return springProcessEngine; }
这里的LocalSessionFactoryBean是org.springframework.orm.hibernate4.LocalSessionFactoryBean;
不清楚问题出在哪里,请指教一下,谢谢。
org/hibernate/impl/SessionImpl 是Hibernate3中的,Hibernate4中是org.hibernate.internal.SessionImpl 。 jbpm4中默认是hibernate3,我看了源码是在HibernateSessionDescriptor类中用到了SessionImpl,所以你再新建一个HibernateSessionDescriptor类覆盖。我已经试过了,是可以的。
1 楼
chenjl
2013-09-10
你好,请问一下,我用的是hibernate4,在集成jbpm4.4的时候,报如下异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine' defined in class path resource [spring-hibernate.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine()] threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/impl/SessionImpl
按照你的方法,新建了一个类SpringProcessEngine类,覆盖了jBPM源码。
这里的LocalSessionFactoryBean是org.springframework.orm.hibernate4.LocalSessionFactoryBean;
不清楚问题出在哪里,请指教一下,谢谢。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine' defined in class path resource [spring-hibernate.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine()] threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/impl/SessionImpl
按照你的方法,新建了一个类SpringProcessEngine类,覆盖了jBPM源码。
public static ProcessEngine create(ConfigurationImpl configuration) { SpringProcessEngine springProcessEngine = null; ApplicationContext applicationContext = null; if (configuration.isInstantiatedFromSpring()) { applicationContext = (ApplicationContext) configuration .getApplicationContext(); springProcessEngine = new SpringProcessEngine(); springProcessEngine.applicationContext = applicationContext; springProcessEngine.initializeProcessEngine(configuration); LocalSessionFactoryBean localSessionFactoryBean = springProcessEngine .get(LocalSessionFactoryBean.class); Configuration hibernateConfiguration = localSessionFactoryBean .getConfiguration(); springProcessEngine.processEngineWireContext.getWireDefinition() .addDescriptor( new ProvidedObjectDescriptor( hibernateConfiguration, true)); springProcessEngine.checkDb(configuration); } else { String springCfg = (String) configuration .getProcessEngineWireContext().get("spring.cfg"); if (springCfg == null) { springCfg = "applicationContext.xml"; } applicationContext = new ClassPathXmlApplicationContext(springCfg); springProcessEngine = (SpringProcessEngine) applicationContext .getBean("processEngine"); } return springProcessEngine; }
这里的LocalSessionFactoryBean是org.springframework.orm.hibernate4.LocalSessionFactoryBean;
不清楚问题出在哪里,请指教一下,谢谢。
发表评论
-
jBPM(二):jbpm4 请假demo
2013-09-04 10:51 6603一. 请假流程如下图,即:申请人申请-->部门负责人审批 ... -
jBPM(一):jbpm 基础
2013-09-04 10:49 1374BPM:Business Process Management ... -
jbpm 任务分配处理器 20130707
2013-07-07 14:13 0流程定义文件如下: <?xml version=& ... -
jbpm 任务分配处理器 20130707
2013-07-07 14:12 0流程定义文件如下: <?xml version=& ... -
jbpm 任务分配处理器
2013-07-07 14:10 1流程定义文件如下: <?xml version=& ... -
jbpm基础
2013-07-08 15:27 1BPM:Business Process Management ...
相关推荐
将JBPM5、Spring、Hibernate和MySQL整合在一起,可以实现一个完整的业务流程管理系统。JBPM5负责流程的定义和执行,Spring作为应用的框架,提供依赖注入和事务管理,使得各组件间协作顺畅;Hibernate作为ORM层,负责...
标题中的"spring+struts1+hibernate+jbpm实例"揭示了这是一个基于Java技术栈的Web应用程序开发实例,其中涉及四大核心技术:Spring、Struts1、Hibernate和JBPM。接下来,我们将深入探讨这些技术及其在实际项目中的...
- `jbpm-4.3/install/src/cfg/jbpm/spring.jbpm.cfg.xml`:JBPM与Spring集成的关键配置文件。 #### 三、配置文件调整 接下来,我们将对这些配置文件进行必要的修改。 1. **调整`hibernate.cfg.xml`**:在`...
这是一个基于Java技术栈,采用Spring、Struts、Hibernate、jbpm和DWR等多种框架整合开发的OA(Office Automation)办公系统源码项目。这个系统的构建旨在实现企业的日常办公自动化,提高工作效率,简化工作流程,...
在"struts+hibernate+spring+jbpm 智能工作流系统"中,这些框架协同工作,实现了以下关键功能: 1. **用户界面**:Struts 处理用户的输入和输出,提供友好的交互界面。 2. **数据持久化**:Hibernate 负责将业务对象...
【jbpm4整合struts2+spring2.5+hibernate3.3】的集成是企业级应用开发中常见的技术栈组合,旨在利用各框架的优势实现高效、灵活的业务流程管理。jbpm4是一个开源的工作流管理系统,用于定义、执行和管理业务流程。...
【jbpm4+spring+hibernate】是一个集成示例,展示了如何将业务流程管理工具Jbpm4与Spring框架和Hibernate ORM库协同工作。这个示例主要关注于在企业级应用中实现工作流管理和数据持久化。让我们深入探讨这三个技术...
Struts、Hibernate、Spring、JPA、Lucene、JBPM和Compass是Java开发中常用的一系列技术,它们各自在不同的领域发挥着重要作用。这里我们将深入探讨这些技术以及如何将它们整合在一起进行配置。 1. **Struts**:...
在这个“基于struts+spring+hibernate+jbpm的外贸服装企业的工作流系统”中,开发者可能设计了以下功能: 1. **用户管理**:包括用户注册、登录、权限管理等,确保不同角色的用户只能访问其权限范围内的功能。 2. *...
在这个“struts2+spring+hibernate+jbpm工作流实例”中,主要展示了如何利用这些技术实现一个公文审批流转的过程。 首先,Struts2是一个基于MVC设计模式的Web应用框架,它负责处理HTTP请求,并将这些请求映射到相应...
**Jbpm4.4整合Spring Hibernate4详解** Jbpm4.4是一个流程管理系统,它结合了业务流程管理(BPM)和工作流服务,提供了强大的流程定义、执行和监控能力。在这个版本中,Jbpm与Spring框架和Hibernate ORM工具进行了...
### Spring + Hibernate + jBPM 整合知识点详解 #### 一、项目背景与整合目的 在企业级应用开发中,通常需要实现业务流程管理、数据持久化以及服务层等功能。Spring框架因其强大的依赖注入(DI)和面向切面编程...
SSH+JBPM4.3的整合是企业级应用开发中的一种常见组合,SSH指的是Spring、Struts和Hibernate这三个开源框架的集成,而JBPM4.3则是一个强大的工作流管理系统,用于实现业务流程自动化。这篇内容将深入探讨这两个技术...
Jbpm+Spring+hibernate+struts2+mysql+c3p0项目部署
【标题】"jbpm4.3+struts2+spring3+hibernate3整合(一)"涉及的是一个常见的Java企业级应用架构整合实践,其中jbpm4.3是业务流程管理(Business Process Management)框架,Struts2是MVC(Model-View-Controller)...
在这个"struts+hibernate+spring+jbpm"的例子中,开发者可能创建了一个能够处理用户请求、持久化数据、执行业务流程并进行流程控制的应用。Ch 20 文件可能包含了这个示例的源代码或相关文档,包括Struts配置文件、...
1. **引入Spring-JBPM4依赖**:Spring社区提供了Spring-JBPM4模块,可以直接集成到Spring应用中。添加相应的Maven或Gradle依赖。 2. **配置jbpmContext**:创建一个jbpmContext的bean,它会自动配置jBPM4所需的服务...
SSH是Java Web开发中的经典框架组合,包括Struts、Spring和Hibernate,它们分别负责MVC模式的展现层、业务逻辑层和数据持久化层。在这个最新的SSH项目中,结合了Jbpm工作流引擎和FreeMarker模板引擎,使得项目的功能...