小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

SPRING+HIBERNATE3+JBPM+OC4J

 大漠落日 2006-09-19

 

整合SPRING與JBPM核心就是需要將JBPM的BEAN由SPRING來(lái)管理利用IOC來(lái)展現(xiàn)SPRING框架的優(yōu)勢(shì)!

這2天在研究怎樣整合兩者!在整合過(guò)程中也出現(xiàn)了不少意想不到的問(wèn)題!在這里記錄下來(lái)希望可以未對(duì)此感興趣的朋友提供些幫助!

SPRING+JBPM

1)下載SPRING-JBPM MODULE

這個(gè)模塊是SPRING支持JBPM使用的必要模塊!現(xiàn)在還沒有放入SPRING的發(fā)行版本中!不過(guò)通過(guò)她基本可以實(shí)現(xiàn)了對(duì)JBPM的操作!代碼需要從SPRING的CVS下載

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

從中獲取SPRING-JBPM MODULE即可.

2)SPRING加載JBPM資源

SPRING-CONFIG.XML(部分)

數(shù)據(jù)源
 <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中的所以當(dāng)加載其中的HIBERNATE實(shí)體描述文件的時(shí)候需要使用下面的寫法
  <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查詢的時(shí)候使用正確的語(yǔ)法需要指明查詢工廠類,如果不指定回出現(xiàn)

ClassNotFoundException: org.hibernate.hql.ast.HqlToken  的錯(cuò)誤!

    <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基本都是通過(guò)她來(lái)完成的!
 <bean id="hibernateConfiguration" factory-bean="&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

在我們的類中需要調(diào)用JBPM的功能時(shí)我們只需要將JBPMTEMPATE類注入到我們的類中

在jbpmTemplate中實(shí)現(xiàn)了不多的幾個(gè)方法,有很多JBPM的方法沒有實(shí)現(xiàn)不過(guò)沒關(guān)系我們可以使用SPRING中最常見的CALLBACK機(jī)制來(lái)實(shí)現(xiàn)我們的需要,下面舉出幾個(gè)例子:

A)保存流程定義方法

利用SPRING將jbpmTemplate注入進(jìn)我們的類中

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();//這里我們只需要提交事物即可!關(guān)閉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;
  
 }

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多