整合SPRING与JBPM核心就是需要将JBPM的BEAN由SPRING来管理利用IOC来展现SPRING框架的优势!

这2天在研究怎样整合两者!在整合过程中也出现了不少意想不到的问题!在这里记录下来希望可以未对此感兴趣的朋友提供些帮助!

SPRING+JBPM

1)下载SPRING-JBPM MODULE

这个模块是SPRING支持JBPM使用的必要模块!现在还没有放入SPRING的发行版本中!不过通过她基本可以实现了对JBPM的操作!代码需要从SPRING的CVS下载

地址是:pserver:anonymous@cvs.sourceforge.net:/cvsroot/springframework

从中获取SPRING-JBPM MODULE即可.

2)SPRING加载JBPM资源

SPRING-CONFIG.XML(部分)

数据源
 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" destroy-method="close">
  <property name="jndiName" value="jdbc/jbpm"/>
 </bean>

HIBERNATE SESSION FACTORY

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref local="dataSource" />
  </property>
  注意这里由于我使用的JBPM是以JAR的形式存在于CLASSPATH中的所以当加载其中的HIBERNATE实体描述文件的时候需要使用下面的写法
  <property name="mappingJarLocations">
   <list>
    <value>WEB-INF/lib/jbpm-3.0.1.jar</value>
    <value>WEB-INF/lib/jbpm-identity-3.0.1.jar</value>
   </list>
  </property>
  
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
    <prop key="hibernate.show_sql">true</prop>

为了使HIBERNATE3查询的时候使用正确的语法需要指明查询工厂类,如果不指定回出现

ClassNotFoundException: org.hibernate.hql.ast.HqlToken  的错误!

<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
   </props>
  </property>
 </bean>
 
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory"/>
  </property>
 </bean>

下面红色的部分是SPRING管理JBPM的必要配置!里面的JBPMTEMPLATE是很重要的类

SPRING中使用JBPM基本都是通过她来完成的!
 <bean id="hibernateConfiguration" factory-bean="&amp;sessionFactory" factory-method="getConfiguration"/>

<bean id="jbpmSessionFactory" class="org.springframework.workflow.jbpm.LocalJbpmSessionFactoryBean">
        <property name="hibernateSessionFactory" ref="sessionFactory"/>
        <property name="hibernateConfiguration" ref="hibernateConfiguration"/>
    </bean>
   
    <bean id="jbpmTemplate" class="org.springframework.workflow.jbpm.JbpmTemplate">
        <property name="jbpmSessionFactory" ref="jbpmSessionFactory"/>
    </bean>

这是JBPM的管理既纳入到了SPRING中!

3)使用SPRING操作JBPM

在我们的类中需要调用JBPM的功能时我们只需要将JBPMTEMPATE类注入到我们的类中

在jbpmTemplate中实现了不多的几个方法,有很多JBPM的方法没有实现不过没关系我们可以使用SPRING中最常见的CALLBACK机制来实现我们的需要,下面举出几个例子:

A)保存流程定义方法

利用SPRING将jbpmTemplate注入进我们的类中

private JbpmTemplate jbpmTemplate = null;

public void setJbpmTemplate(JbpmTemplate jbpmTemplate) {
  this.jbpmTemplate = jbpmTemplate;
 }

/**
  * 保存流程定义
  * @param xmlStr 流程定义的JPDL的XML字符串形式
  */
 public void saveWorkFlowDefinition(String xmlStr){
  
  log.debug("saveWorkFlowDefinition start");
  
  final ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(xmlStr);
  //call spring jbpm call back for save processdefinition
        jbpmTemplate.execute(new JbpmCallback(){       
            public Object doInJbpm(JbpmSession jbpmSession){
             jbpmSession.beginTransaction();
                GraphSession gSession = jbpmSession.getGraphSession();
                gSession.saveProcessDefinition(processDefinition);
                jbpmSession.commitTransaction();//这里我们只需要提交事物即可!关闭SESSION的工作JBPMTEMPLATE回帮助我们完成!
                return processDefinition;
            }});
  log.debug("saveWorkFlowDefinition end");
 }

B)取得所有的流程定义:

/**
  * 取得所有的工作流定义
  * @return 工作流定义列表
  */
 public List getAllWorkFlow(){
  
  log.debug("getAllWorkFlow start");
  List list = (List)jbpmTemplate.execute(new JbpmCallback(){       
         public Object doInJbpm(JbpmSession jbpmSession){
       GraphSession graphSession = jbpmSession.getGraphSession();
       log.debug("getAllWorkFlow end");  
       List tempList = graphSession.findAllProcessDefinitions();
       return tempList;
         }});
   log.debug("getAllWorkFlow end");
  return list;
  
 }

Jbpm+spring相关推荐

  1. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)

    昨天介绍了mybatis与spring的整合,今天我们完成剩下的springmvc的整合工作. 要整合springmvc首先得在web.xml中配置springmvc的前端控制器DispatcherS ...

  2. jbpm 4.3 与 spring 集成

    jbpm4.2与spring集成有点问题,直接跟据它自己的"开发指南"提供的方法是不能集成的.在官网查到的信息是发布4.2时,忘记更新集成spring的文件.不过4.3已经把该bu ...

  3. JBPM 4.3 + Spring 3 + jBoss + JPA + JTA

    来源:http://captaincaveman.posterous.com/jbpm-43-spring-3-jboss-jpa-jta-configuration Many an hour was ...

  4. JBPM4.4_jBPM4.4应用(与Spring集成自行控制事务等)

    1. jBPM4.4应用 1.1. 与Spring集成(jBPM4.4 Developers Guide, Chapter 17. Spring Integration) 1.1.1. 在jbpm.c ...

  5. OA中SSH+JBPM项目整合

    一,集成 Spring 与 Hibernate  1,配置SessionFactory   1,配置    ---------------------- applicationContext.xml ...

  6. 整合Struts2、Spring、Hibernate构建J2EE应用

    [论文摘要] J2EE即是以Java 2平台为基础的体系结构,又是一组旨在简化企业解决方案的开发.部署.运行.维护等相关复杂问题的技术规范与指南.Struts2.Spring.Hibernate是当今 ...

  7. wtc java 代码 tpcall(servicename_[转载]Dorado+Spring+Wtc+Tuxedo开发

    Dorado.Spring.WTC开发配置 本文档描述了如何使用WebLogic Tuxedo连接器将weblogic server8.1和tuxedo8.1互连(装好WebLogic和Tuxedo) ...

  8. 解决问题(七)——jsf+spring+hibernate整合(一)

    jsf+spring+hibernate整合,于struts+spring+hibernate整合的过程非常相似(就不截图了,可以参考第一篇文章),但是前者相对于后者稍微麻烦一些. 第一步:初步整合, ...

  9. Bert Ertman专访:将Spring及遗留应用迁移到Java EE 6平台

    本文来源于我在InfoQ中文站的采访文章,原文地址是:http://www.infoq.com/cn/articles/migrate-spring-legacy-to-javaee6 InfoQ:你 ...

最新文章

  1. 最大民科组织被取缔,鸡蛋返生、推翻相对论、量子速读都是他们干的
  2. 移动端实现PDF文件阅读的方法
  3. android progressbar 不显示_Android多线程技术选型最全指南(1)
  4. Elasticsearch6 去重
  5. 聊聊 HTTP 协议的知识点
  6. window.createPopup()用法以及短消息提示框代码
  7. ubuntu下oracle数据的导入,Ubuntu下Oracle10g的导入与导出
  8. 打开带图片的EXCEL文档反应慢 案例解析
  9. 水系图一般在哪里找得到_广东工业大学《JACS》:一种全新的高性能水系可充电铝离子电池!...
  10. python tensorflow 以图搜图_以图搜图系统工程实践
  11. 对潇潇暮雨洒江天,一番洗清秋。渐霜风凄紧,关河冷落,残照当楼。是处红衰翠减,苒苒物华休。唯有长江水,无语东流。不忍登高临远,望故乡渺邈,归思难收。叹年来踪迹,何事苦淹留?想佳人,妆楼颙望,误几回、天际
  12. java按键机nes模拟器_NES 模拟器开发教程 12 - 输入设备
  13. 【Python|Kaggle】机器学习系列之Pandas基础练习题(五)
  14. Fone Keeper Mac版,帮你轻松恢复iOS数据
  15. 【AWS云从业者基础知识笔记】——模块3:全球基础设施和可靠性
  16. 如何理解假设检验中的假设设计?
  17. 传感器i2c与arduino连接_如何在两个Arduino开发板之间使用I2C总线进行通信
  18. 面试28k职位,老乡面试官从HashCode到HashMap给我讲了一下午!「回家赶忙整理出1.6万字的面试材料」
  19. raid5数据丢失后应该怎么做才能提高数据恢复成功率?
  20. 网络安全-跨站请求伪造(CSRF)的原理、攻击及防御

热门文章

  1. php 面试常问的题目2
  2. mysql通过ip地址无法访问数据库
  3. 计算机系统中输入汉字的方法有,有关中小学计算机汉字输入方法的思考
  4. 【通用设计】分布式系统中接口的幂等性
  5. 计算机二级白盒测试和黑盒测试,白盒测试和黑盒测试
  6. scrapy教程基础篇
  7. 响应式布局与Bootstrap框架
  8. 2018年社交电商巨大风口 无忧猴布局全国
  9. 普洱熟茶发霉时应该怎样处理?
  10. LED太阳能射灯芯片-DLTAP703SA-杰力科创