首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
wangchinaking (80)
Jaredz (1)
nhconch (35)
dogbear2000 (24)
Drate (75)
coofucoo (127)
tangl_99 (62)
qdzx2008 (57)
holy_phoenix (10)
baggio785 (66)
CSDN - 文档中心 - 其他开发语言 阅读:9   评论: 0    参与评论
标题   SPRING+HIBERNATE3+JBPM+OC4J(初步实现整合)      选择自 tutugogo 的 Blog
关键字   SPRING+HIBERNATE3+JBPM+OC4J(初步实现整合)
出处  

 

整合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;
  
 }

 

 


相关文章
对该文的评论