jBPM(三):Spring 集成 jBPM4.3 (jBPM4+Hibernate4)
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" />
@Bean(name="processEngine") @DependsOn("sessionFactory")public ProcessEngine getProcessEngine() throws Exception{ processEngine = new ConfigurationImpl().springEnabled() .setHibernateSessionFactory(this.getSessionFactory()) .springInitiated(applicationContext) .buildProcessEngine(); return processEngine;} @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;} 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; }
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;}