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

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

          一個(gè)流程定義有一個(gè)TaskMgmtDefinition;一個(gè)TaskMgmtDefinition對應(yīng)多個(gè)swimlane,同時(shí)對應(yīng)多個(gè)task;一個(gè)swimlane有多個(gè)task,可以  TaskMgmtDefinition中通過task的名稱直接獲取相應(yīng)的task;

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

          task對象主要的屬性:taskMgmtDefinition、swimlane、assignmentDelegation、taskNode,需要注意的是swimlane和assignmentDelegation中間只是可以一個(gè)屬性有值,因?yàn)樗鼈兌己腿蝿?wù)的分配有關(guān)系。

          一個(gè)流程實(shí)例有一個(gè)TaskMgmtInstance;一個(gè)TaskMgmtInstance對應(yīng)多個(gè)swimlaneInstance,同時(shí)對應(yīng)多個(gè)taskInstance;一個(gè)swimlaneInstance有多個(gè)taskInstance,可以從TaskMgmtInstance中直接獲取相應(yīng)的taskInstance;

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

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

          posted @ 2005-11-11 16:39 ronghao 閱讀(3517) | 評論 (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 導(dǎo)入

          配置連接 MySQL

          1. 在 'jbpm-3.0\lib' 目錄下 創(chuàng)建 'mysql' 目錄

          2. 將 mysql數(shù)據(jù)庫驅(qū)動(dòng) (mysql-connector-java-3.1.7-bin.jar) 拷貝到 'mysql' 目錄

          3. 在 mysql 中創(chuàng)建一個(gè)數(shù)據(jù)庫,數(shù)據(jù)庫名字

          4. 在 'jbpm-3.0\src\resources'目錄下創(chuàng)建 'mysql' 目錄

          5. 把兩個(gè)配置文件 (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. 另一個(gè)文件 'identity.db.xml'不做改動(dòng)

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

          9. 運(yùn)行ANT ant create.db -buildfile build.deploy.xml 運(yùn)行完畢后就會(huì)發(fā)現(xiàn)mysql中多出很多表,這是jbpm保持狀態(tài)用的

          創(chuàng)建 jbpm.war 使其在tomcat中運(yùn)行

          默認(rèn)的打war包時(shí),掉了一些庫文件

          1. 在 eclipse中, 編輯ant腳本 'build.deploy.xml' 在目標(biāo)塊 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.因?yàn)?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);
          }
          同時(shí)加入下面的代碼

          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. 運(yùn)行腳本命令 ant build ant build.webapp -buildfile build.deploy.xml

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

          7. 啟動(dòng) tomcat

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

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

          關(guān)注工作流和企業(yè)業(yè)務(wù)流程改進(jìn)。現(xiàn)就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

          常用鏈接

          留言簿(38)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          常去的網(wǎng)站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汾阳市| 凉城县| 泰顺县| 临高县| 西盟| 墨玉县| 福州市| 贵阳市| 徐州市| 仁怀市| 达孜县| 山东| 故城县| 海宁市| 小金县| 五家渠市| 青岛市| 黄冈市| 新野县| 吴江市| 西乌珠穆沁旗| 天镇县| 乐至县| 济源市| 五常市| 克拉玛依市| 桦川县| 个旧市| 滨州市| 游戏| 上犹县| 桑日县| 安丘市| 柞水县| 新巴尔虎右旗| 墨竹工卡县| 沛县| 三门县| 泰宁县| 绥阳县| 喜德县|