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

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

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

    posts - 193,  comments - 520,  trackbacks - 0
     
    1、task-node
      一個task-node可以包含一個或多個task,這些task分配給特定的user。當流程執行到task-node時,task instance將會被創建,一個task對應一個task instance。task instances 創建后,task-node就處于等待狀態。當所有的task instances被特定的user執行完畢后,將會發出一個新的signal 到token,即流程繼續執行。
    2、state
      state是一個純粹的wait state(等待狀態)。它和task-node的區別就是它不會創建task instances。很典型的用法是,當進入這個節點時(通過綁定一個action到node-enter event),發送一條消息到外部的系統,然后流程就處于等待狀態。外部系統完成一些操作后返回一條消息,這個消息觸發一個signal 到token,然后流程繼續執行。(不常用)
    3、decision
      當需要在流程中根據不同條件來判斷執行不同路徑時,就可以用decision節點。兩種方法:最簡單的是在transitions里增加condition elements(條件),condition是beanshell script寫的,它返回一個boolean。當運行的時候,decision節點將會在它的 leaving transitions里循環,同時比較 leaving transitions里的condition,最先返回'true'的condition,那個leaving transitions將會被執行;作為選擇,你可以實現DecisionHandler接口,它有一個decide()方法,該方法返回一個String(leaving transition的名字)。
    4、fork
      fork節點把一條執行路徑分離成多條同時進行(并發)的執行路徑,每條離開fork節點的路徑產生一個子token。
    5、join
      默認情況下,join節點會認為所有到達該節點的token都有著相同的父token。join 節點會結束每一個到達該節點的token,當所有的子token都到達該節點后,父token會激活。當仍然有子token處于活動狀態時,join 節點是wait state(等待狀態)。
    6、node
      node節點就是讓你掛自己的action用的(注意:不是event觸發?。。?,當流程到達該節點時,action會被執行。你的action要實現ActionHandler接口。同樣,在你的action里要控制流程!
    posted @ 2005-11-14 16:59 ronghao 閱讀(789) | 評論 (0)編輯 收藏
    1、process definition
       一個process definition代表了一個正式的業務流程,它以一個流程圖為基礎。這個流程圖由  許多node和transition組成。每個node在這個流程圖里都有著各自特殊的類型,這些不同的類型決定了node在運行時的不同行為。一個process definition只有一個start state 。
    2、token
       一個token代表了一條執行路徑,它包含了這條執行路徑的當前的執行狀態(current state)。
    3、process instance
       一個process instance(流程實例)即一個process definition(流程定義)的流程執行實例。一個process definition可以對應多個process instance。當一個process instance被創建的時候,一個主執行路徑token同時被創建,這個token叫做root token,它指向流程定義的start state(processDefinition.getStartState()==token.getNode())。
    4、signal
       一個signal 發送給token通知token 繼續流程的執行。如果signal 沒有指定transition,token將沿缺省的transition離開當前狀態,如果signal 指定transition,token將沿指定的transition離開當前的狀態??丛创a可以看到發給process instance的signal 其實都是發送給了root token。
    5、Actions
       jbpm提供了靈活的action ,當流程執行,token 進入node和transition時,會觸發相應的一些event(事件)。在這些event上附上我們自己寫的action,就會帶動action 的執行。action里是我們自己的相關java操作代碼,非常方便。注意的是event(事件)是內置的,無法擴展。另外,action也可以直接掛在node上,而不依賴于event(事件)的觸發,這個很重要!
    posted @ 2005-11-12 09:46 ronghao 閱讀(2306) | 評論 (3)編輯 收藏

    一個Task instance(任務實例)可以被分配給一個actorId (java.lang.String)。所有的Task instance都被保存在數據庫中的表jbpm_taskinstance里。當你想得到特定用戶的任務清單時,你就可以通過一個與用戶關聯的actorId來查詢這張表。

    一個流程定義有一個TaskMgmtDefinition;一個TaskMgmtDefinition對應多個swimlane,同時對應多個task;一個swimlane有多個task,可以  TaskMgmtDefinition中通過task的名稱直接獲取相應的task;

    swimlane對象有四個屬性,分別是name(名字)、assignmentDelegation(分配代理類)、taskMgmtDefinition、tasks(Set 對應多個task),可以增加task

    task對象主要的屬性:taskMgmtDefinition、swimlane、assignmentDelegation、taskNode,需要注意的是swimlane和assignmentDelegation中間只是可以一個屬性有值,因為它們都和任務的分配有關系。

    一個流程實例有一個TaskMgmtInstance;一個TaskMgmtInstance對應多個swimlaneInstance,同時對應多個taskInstance;一個swimlaneInstance有多個taskInstance,可以從TaskMgmtInstance中直接獲取相應的taskInstance;

    swimlaneInstance對象主要有五個屬性,分別是name、actorId、pooledActors(Set)、swimlane、taskMgmtInstance。
    taskInstance對象的主要屬性:name、actorId、task、swimlaneInstance、taskMgmtInstance、pooledActors。

    當對任務進行分配時,一般需要實現AssignmentHandler這個接口,這個接口的方法只有一個:
      void assign( Assignable assignable, ExecutionContext executionContext ) throws Exception;
    一個典型的實現(把名字是'change nappy'的任務交給NappyAssignmentHandler這個類來分配)
       <task name='change nappy'>
          <assignment class='org.jbpm.tutorial.taskmgmt.NappyAssignmentHandler' />
       </task>
    NappyAssignmentHandler類:
      public void assign(Assignable assignable, ExecutionContext executionContext) {
        assignable.setActorId("papa");
      }
    同樣,Assignable只是一個接口,它有兩個方法:setActorId()和setPooledActors(),Assignable的具體實現類也是兩個
      swimlaneInstancehe和taskInstance。這樣就不不難理解整個任務分配流程了:
      1、流程進入TaskNode節點,執行TaskNode類的execute()方法,該方法首先獲得TaskMgmtInstance實例,然后通過它來創建TaskInstance。taskMgmtInstance.createTaskInstance(task, executionContext);
      2、在上面的createTaskInstance(task, executionContext)里,該方法調用了taskInstance.assign(executionContext)對taskInstance進行分配。
      3、在assign(executionContext)方法里,首先會判斷task屬性里是否存在swimlane,如果有的話,這個taskInstance就會分配給swimlane指定的ActorId或 PooledActors;如果不存在,再去找task屬性里 assignmentDelegation(分配代理類)通過代理類(即我們自己寫的實現AssignmentHandler這個接口的類)指定ActorId或 PooledActors。

    posted @ 2005-11-11 16:39 ronghao 閱讀(3513) | 評論 (3)編輯 收藏

    1. 從 http://www.jboss.com/products/jbpm/downloads 下載 jbpm-3.0.zip

    2. 解壓縮 jbpm-3.0.zip 到 'temp' 目錄

    3. 使用 eclipse, 將 'temp\jbpm-3.0' 作為 an existing project into workspace 導入

    配置連接 MySQL

    1. 在 'jbpm-3.0\lib' 目錄下 創建 'mysql' 目錄

    2. 將 mysql數據庫驅動 (mysql-connector-java-3.1.7-bin.jar) 拷貝到 'mysql' 目錄

    3. 在 mysql 中創建一個數據庫,數據庫名字

    4. 在 'jbpm-3.0\src\resources'目錄下創建 'mysql' 目錄

    5. 把兩個配置文件 (create.db.hibernate.properties, identity.db.xml) 從 'hsqldb' 目錄下 拷貝到 'mysql' 目錄

    6. 按下面所示編輯 'create.db.hibernate.properties' 文件: hibernate.dialect=org.hibernate.dialect.MySQLDialect

    hibernate.connection.driver_class=com.mysql.jdbc.Driver

    hibernate.connection.url=jdbc:mysql://localhost:3306/

    hibernate.connection.username= hibernate.connection.password=

    hibernate.show_sql=true hibernate.query.substitutions=true 1, false 0

    hibernate.c3p0.min_size=1 hibernate.c3p0.max_size=3

    7. 另一個文件 'identity.db.xml'不做改動

    8. 在 'jbpm-3.0' 根目錄, 編輯ANT的腳本 'build.deploy.xml' 找到 target name="create.db", 刪除 db.start, db.stop 在這個目標塊中將所有的'hsqldb' 替換為 'mysql'

    9. 運行ANT ant create.db -buildfile build.deploy.xml 運行完畢后就會發現mysql中多出很多表,這是jbpm保持狀態用的

    創建 jbpm.war 使其在tomcat中運行

    默認的打war包時,掉了一些庫文件

    1. 在 eclipse中, 編輯ant腳本 'build.deploy.xml' 在目標塊 target name="build.webapp" 中在

    <copy todir="build/jbpm.war.dir/WEB-INF/lib"> 下將

    <fileset dir="build" includes="jbpm-webapp-${jbpm.version}.jar" /> 替換為

    <fileset dir="build" includes="jbpm*.jar" />

     另外加入新的兩行

    <fileset dir="lib/hibernate" includes="*.jar" />
    <fileset dir="lib/bsh" includes="*.jar" />

    2.因為 Hibernate 不能將它的SessionFactory與tomcat的jndi 綁定 , 我們直接在源碼中修改

    3. 打開源文件 JbpmSessionFactory.java, 在 getInstance() 方法里, 刪除下面代碼

    InitialContext initialContext = new InitialContext(); Object o = initialContext.lookup(jndiName);

    將下面這行

    instance = (JbpmSessionFactory) PortableRemoteObject.narrow
    (o, JbpmSessionFactory.class);

    替換為 instance = (JbpmSessionFactory) PortableRemoteObject.narrow
    (new JbpmSessionFactory(createConfiguration()), JbpmSessionFactory.class);

    4.在 createConfiguration(String configResource) 方法里, 注釋掉這段代碼

    String hibernatePropertiesResource = JbpmConfiguration.getString("jbpm.hibernate.properties");

    if (hibernatePropertiesResource!=null) { Properties hibernateProperties =
    new Properties();

    try { hibernateProperties.load( ClassLoaderUtil.getStream(hibernatePropertiesResource) ); }

    catch (IOException e) {
          e.printStackTrace();
          throw new RuntimeException
       ("couldn't load the hibernate properties from resource      '"hibernatePropertiesResource"'", e);
    }
    log.debug("overriding hibernate properties with "+ hibernateProperties); configuration.setProperties(hibernateProperties);
    }
    同時加入下面的代碼

    configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");

    configuration.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");

    configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/";);

    configuration.setProperty("hibernate.connection.username", "");

    configuration.setProperty("hibernate.connection.password", "");

    configuration.setProperty("hibernate.connection.pool_size", "15");

    5. 運行腳本命令 ant build ant build.webapp -buildfile build.deploy.xml

    6. 將jbpm.war 從 'jbpm-3.0\build' 下拷貝到 'tomcat.home\webapps'

    7. 啟動 tomcat

    8. 打開瀏覽器 'http://localhost:8080/jbpm'

    posted @ 2005-11-10 17:31 ronghao 閱讀(3418) | 評論 (5)編輯 收藏
         搬家了,最開始的Blog在JR,斷斷續續地亂寫了很多東西。JR最近一直很不穩定,Blog也一直沒有更新。站長說是由于網絡 爬蟲的原因。我也是一天到晚掛在網上,算不算一只網絡爬蟲?
    posted @ 2005-11-09 17:53 ronghao 閱讀(542) | 評論 (0)編輯 收藏
    僅列出標題
    共39頁: First 上一頁 31 32 33 34 35 36 37 38 39 下一頁 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩精品免费一区二区三区| 24小时在线免费视频| 免费无码又爽又高潮视频| 亚洲人成网站在线观看播放青青| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 国产免费MV大全视频网站| 久久亚洲色一区二区三区| a在线视频免费观看在线视频三区| 亚洲国产精品无码久久九九| 国产V片在线播放免费无码| 亚洲精品无码成人片久久| 亚洲欧洲免费视频| 亚洲youjizz| 女人张开腿等男人桶免费视频| 亚洲国产精品无码久久久秋霞1| 国产免费卡一卡三卡乱码| 青青青视频免费观看| 亚洲AV无码乱码在线观看裸奔| 少妇人妻偷人精品免费视频 | 亚洲av产在线精品亚洲第一站| 毛片免费观看的视频| 色老头综合免费视频| 亚洲AV无码久久| 老司机在线免费视频| 国产亚洲精品91| 亚洲丁香色婷婷综合欲色啪| 日韩一区二区a片免费观看 | 亚洲一区综合在线播放| 国产成人免费高清激情视频| igao激情在线视频免费| 亚洲大片免费观看| 免费人成视网站在线观看不卡| a级成人毛片免费图片| 亚洲日韩国产精品乱-久| 亚洲精品视频免费观看| 222www免费视频| 视频免费1区二区三区| 亚洲精品电影在线| 免费国产a国产片高清| 在线观看免费中文视频| 羞羞的视频在线免费观看|