<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    沉睡森林@漂在北京

    本處文章除注明“轉(zhuǎn)載”外均為原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處。

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      152 隨筆 :: 4 文章 :: 114 評(píng)論 :: 0 Trackbacks

    1. 將osworkflow與spring和hibernate結(jié)合的原因

        1)簡(jiǎn)化對(duì)osworkflow的配置

        2)利用hibernate框架的一些特性,如持久化,緩存等

        3)事務(wù)管理,osworkflow本身是不支持事務(wù)的,而事務(wù)是作為一個(gè)產(chǎn)品的基本功能

        4)可以利用spring加入其它的擴(kuò)展功能,如用戶認(rèn)證和鑒權(quán)。這點(diǎn)本文沒有介紹。

    2、準(zhǔn)備

        下載osworkflow-2.8.0版本 ,下載hibernate-3.2版本,下載spring-framework-2.5.5版本

    3、搭建eclipse環(huán)境

      測(cè)試的工程目錄如下:

    src  源代碼目錄

       oswf  包路徑

           Test.java 測(cè)試類,后面會(huì)給出源代碼

    bin  編譯目的目錄

        oswf 包路徑

             Test.class  編譯生成的class文件

       //下面的幾個(gè)配置文件位于bin目錄下

        log4j.properties 這是log4j的配置文件,這可以不需要

        //下面三個(gè)hbm.xml文件是osworkflow持久化的o/r映射文件,這是從osworkflow的源代碼目錄com"opensymphony"workflow"spi"hibernate3下拷出來的。

        HibernateCurrentStep.hbm.xml

        HibernateHistoryStep.hbm.xml

        HibernateWorkflowEntry.hbm.xml

        //下面三個(gè)文件直接從osworkflow自帶的例子中獲取的,其中example.xml是流程定義文件。osuser.xml是osuser的配置文件。workflows.xml是osworkflow配置有哪些流程定義的配置文件。

        example.xml

        osuser.xml

        workflows.xml

    osworkflow-spring.xml  //這是spring 的配置文件,位于根目錄下,后面會(huì)給出源代碼

    //下面兩個(gè)是eclipse的工程文件

    .project

    .classpath

    4、編寫spring 的beans.xml配置文件

      文件名如osworkflow-spring.xml,內(nèi)容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <!-- 下面配置數(shù)據(jù)源datasource,這里用的是spring 自帶的一個(gè)測(cè)試用的連接池。也可以用開源的連接池Jakarta Commons DBCP。
    如果程序是運(yùn)行在servlet容器中,如tomcat中,可直接使用在tomcat中配置的數(shù)據(jù)庫(kù)連接池jdni。
    這里給出的是oracle數(shù)據(jù)庫(kù)驅(qū)動(dòng),可以換成任意的數(shù)據(jù)庫(kù),如mysql等。 -->

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
        <property name="driverClassName">
            <value>oracle.jdbc.driver.OracleDriver</value>
        </property>
        <property name="url">
            <value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>
        </property>
        <property name="username">
            <value>test</value>
        </property>
        <property name="password">
            <value>test</value>
        </property>
    </bean>
        
    <!-- 配置hibernate的sessionFactory以及相關(guān)的配置,這是使用hibernate的入口-->
     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
      <property name="dataSource"><ref local="dataSource"/></property>
      <property name="mappingResources">
       <list>
        <value>HibernateCurrentStep.hbm.xml</value>
        <value>HibernateHistoryStep.hbm.xml</value>
        <value>HibernateWorkflowEntry.hbm.xml</value>    
       </list>
      </property>
      <property name="hibernateProperties">
       <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop>
        <prop key="hibernate.current_session_context_class">thread</prop>
        <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
       </props>
      </property>
     </bean>

    <!-- 配置osworkflow中所用的propertyset,這里配置的是默認(rèn)的內(nèi)存方式的propertyset。-->
     <bean id="propertySetDelegate" class="com.opensymphony.workflow.util.PropertySetDelegateImpl"> 
     </bean>

    <!-- 配置osworkflow的存儲(chǔ)工廠WorkflowStore -->
     <bean id="workflowStore" class="com.opensymphony.workflow.spi.hibernate3.SpringHibernateWorkflowStore">
      <property name="sessionFactory"><ref local="sessionFactory"/></property>
      <property name="propertySetDelegate"> <ref bean="propertySetDelegate"/> </property>
     </bean>

        <!-- 配置osworkflow的工廠類 -->
     <bean id="workflowFactory" class="com.opensymphony.workflow.spi.hibernate.SpringWorkflowFactory" init-method="init">
            <property name="resource"><value>workflows.xml</value></property>
            <property name="reload"><value>false</value></property>
     </bean>

     <bean id="osworkflowConfiguration" class="com.opensymphony.workflow.config.SpringConfiguration">
      <property name="store"><ref local="workflowStore"/></property>
      <property name="factory"><ref local="workflowFactory"/></property>  
     </bean>

       <!-- 配置osworkflow的工作流接口。注意下面的構(gòu)造函數(shù)參數(shù)值test是用戶名 -->
     <bean id="workflowTarget" class="com.opensymphony.workflow.basic.BasicWorkflow">
      <constructor-arg><value>test</value></constructor-arg>
      <property name="configuration"><ref local="osworkflowConfiguration"/></property> 
     </bean>

        <!-- 下面的配置是配置讓oswrorkflow使用spring的事務(wù)框架 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!-- 應(yīng)用程序在代碼中唯一要關(guān)注的就只有這一個(gè)Bean,其它不用關(guān)注 -->
    <bean id="workflow" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
     <property name="transactionManager" ref="transactionManager"/>
     <property name="target" ref="workflowTarget"/>

     <property name="transactionAttributes">
      <props>
       <prop key="*">PROPAGATION_REQUIRED</prop>
      </props>
     </property>
    </bean>

    </beans>

    5、編寫測(cè)試代碼,只有一個(gè)類,代碼如下:

    package oswf;

    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.core.io.Resource;

    import com.opensymphony.user.Group;
    import com.opensymphony.user.User;
    import com.opensymphony.user.UserManager;
    import com.opensymphony.workflow.Workflow;

    public class Test {


     public static void main(String[] args) {
      
      try{
      UserManager um = UserManager.getInstance();
         User test = um.createUser("test");
         test.setPassword("test");

         Group foos = um.createGroup("foos");
         Group bars = um.createGroup("bars");
         Group bazs = um.createGroup("bazs");

         test.addToGroup(foos);
         test.addToGroup(bars);
         test.addToGroup(bazs);
      }
      catch(Exception e){
       System.out.println("create user error,app exit");
       return;
      }
      System.out.println("create user success");

      Resource res = new FileSystemResource("osworkflow-spring.xml");
      XmlBeanFactory beanFactory =new XmlBeanFactory(res);
      Workflow workflow = (Workflow) beanFactory.getBean("workflow"); 
      
      try { 
       workflow.initialize("example", 100, null); 
      } catch (Exception e) 
      { 
       e.printStackTrace(); 
      }
     }
    }
    代碼是,首先要?jiǎng)?chuàng)建一個(gè)用戶(這里使用的是osworkflow默認(rèn)綁定的osuser框架)。然后獲取workflow  bean,再調(diào)用initialize方法創(chuàng)建一個(gè)新的流程。

    6、問題

        1)osworkflow使用了propertyset框架,但propertyset框架和osworkflow都是opensymphony下的一個(gè)開源項(xiàng)目。osworkflow中提供的propertyset jar包不支持hibernate3,因此本例子中是使用內(nèi)存化的propertyset,沒有持久化propertyset。

    2)osworkflow中的BasicWorkflow類的構(gòu)造函數(shù)必須提供一個(gè)參數(shù),參數(shù)是osuser中的用戶。而且沒有提供設(shè)置用戶的set方法,這樣就只能在配置文件中把用戶名寫死。這只能用在測(cè)試環(huán)境中。在實(shí)際中需要修改這個(gè)代碼,支持動(dòng)態(tài)設(shè)置用戶。

    3)osuser框架不支持通過hibernate持久化,如果要支持,需要自己下載源代碼改寫。但osuser支持通過jdbc持久化。

    posted on 2010-05-06 15:47 王總兵 閱讀(1871) 評(píng)論(0)  編輯  收藏 所屬分類: Workflow
    主站蜘蛛池模板: 2021在线观看视频精品免费| 免费国产怡红院在线观看| 91亚洲视频在线观看| 日美韩电影免费看| 两个人看的www免费视频中文| 亚洲欧洲日本国产| 免费吃奶摸下激烈视频| 91精品免费不卡在线观看| 久久亚洲精品成人无码| 亚洲国产高清在线| 免费观看四虎精品国产永久| 久久aⅴ免费观看| 老司机午夜性生免费福利| 亚洲精品韩国美女在线| 亚洲AV中文无码乱人伦| 日韩国产免费一区二区三区| 国产乱妇高清无乱码免费| 亚洲色欲色欲www| 亚洲av日韩av不卡在线观看| 免费看小12萝裸体视频国产| 永久免费在线观看视频| 一级有奶水毛片免费看| 亚洲乱码日产精品一二三| 亚洲电影在线播放| 亚洲熟妇无码另类久久久| 免费99热在线观看| 毛片免费观看视频| 99热在线精品免费播放6| 国产高潮久久免费观看| 亚洲av无码一区二区三区人妖| 亚洲最大中文字幕| 亚洲国产成人片在线观看| 一本色道久久88亚洲综合| 在线观看av永久免费| 最近中文字幕免费2019| 热99RE久久精品这里都是精品免费| 亚洲AV香蕉一区区二区三区| 亚洲国产精品久久网午夜| 亚洲国产精品不卡在线电影| 亚洲高清国产拍精品26U| 亚洲精品偷拍视频免费观看 |