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

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

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

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
    第6章 配置
    jBPM配置由java類org.jbpm.JbpmConfiguration來描述,獲取JbpmConfiguration的最簡單方式是使用單態實例方法JbpmConfiguration.getInstance()。
    如果你想從另外一個源加載配置,你可以使用JbpmConfiguration.parseXxxx方法。
    static JbpmConfinguration jbpmConfiguration = JbpmConfinguration.getInstance();
    JbpmConfiguration是線程安全的,因此可以在一個靜態成員中維護,所有的線程都可以把JbpmConfiguration作為一個JbpmContext對象的工廠來使用。JbpmContext表示一個事務,在一個上下文塊中JbpmContext使服務可用,上下文塊如下:
    JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
    try {
     // This is what we call a context block.
     // Here you can perform workflow operations
     
    } finally {
     jbpmContext.close();
    }
    JbpmContext使一組服務和配置為jBPM可用,這些服務在jbpm.cfg.xml配置文件中被配置,并且使jBPM無論運行在任何java環境中這些服務都可用。
    下面是JbpmContext的一個典型配置,就象你在src/config.files/jbpm.cfg.xml中看到的那樣:
    <jbpm-configuration>
     
     <jbpm-context>
        <service name='persistence' factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' />
        <service name='message' factory='org.jbpm.msg.db.DbMessageServiceFactory' />
        <service name='scheduler' factory='org.jbpm.scheduler.db.DbSchedulerServiceFactory' />
        <service name='logging' factory='org.jbpm.logging.db.DbLoggingServiceFactory' />
        <service name='authentication' factory='org.jbpm.security.authentication.DefaultAuthenticationServiceFactory' />
     </jbpm-context>
     
     <!-- configuration resource files pointing to default configuration files in jbpm-{version}.jar -->
     <string name='resource.hibernate.cfg.xml' value='hibernate.cfg.xml' />
     <!-- <string name='resource.hibernate.properties' value='hibernate.properties' /> -->
     <string name='resource.business.calendar' value='org/jbpm/calendar/jbpm.business.calendar.properties' />
     <string name='resource.default.modules' value='org/jbpm/graph/def/jbpm.default.modules.properties' />
     <string name='resource.converter' value='org/jbpm/db/hibernate/jbpm.converter.properties' />
     <string name='resource.action.types' value='org/jbpm/graph/action/action.types.xml' />
     <string name='resource.node.types' value='org/jbpm/graph/node/node.types.xml' />
     <string name='resource.parsers' value='org/jbpm/jpdl/par/jbpm.parsers.xml' />
     <string name='resource.varmapping' value='org/jbpm/context/exe/jbpm.varmapping.xml' />
     
     <int name='jbpm.byte.block.size' value="1024" singleton="true" />
     <bean name='jbpm.task.instance.factory' class='org.jbpm.taskmgmt.impl.DefaultTaskInstanceFactoryImpl' singleton='true' />
     <bean name='jbpm.variable.resolver' class='org.jbpm.jpdl.el.impl.JbpmVariableResolver' singleton='true' />
     <long name='jbpm.msg.wait.timout' value='5000' singleton='true' />
     
    </jbpm-configuration>
    在這個配置中你可以看到三部分:
    l        第一部分使用一組服務實現配置jbpm上下文,這些配置的可選項在以后描述特定服務實現的章節中做了描述。
    l        第二部分是所有配置資源的引用映射,如果你想要定制某些配置文件,這些資源引用可以被修改。典型情況下,你可以在jbpm-3.x.jar中拷貝一個默認的配置,并且把它放在classpath中的某個位置,然后在這個文件中修改引用為你自己定制版本的配置文件。
    l        第三部分是在jbpm中使用的一些別名配置,這些配置選項在包含特定主題的章節中做了描述。
    缺省配置的一組服務被定位于一個簡單的web應用環境和最小的依賴,持久化服務將獲得一個jdbc連接,所有其他服務將會使用這個相同的連接來完成它們的服務,因此,工作流的所有操作都被集中到一個JDBC連接的一個事務中,不再需要事務管理器。
    JbpmContext包含為大多流程操作所提供的方便方法:
     public void deployProcessDefinition(ProcessDefinition processDefinition) {...}
     public List getTaskList() {...}
     public List getTaskList(String actorId) {...}
     public List getGroupTaskList(List actorIds) {...}
     public TaskInstance loadTaskInstance(long taskInstanceId) {...}
     public TaskInstance loadTaskInstanceForUpdate(long taskInstanceId) {...}
     public Token loadToken(long tokenId) {...}
     public Token loadTokenForUpdate(long tokenId) {...}
     public ProcessInstance loadProcessInstance(long processInstanceId) {...}
     public ProcessInstance loadProcessInstanceForUpdate(long processInstanceId) {...}
     public ProcessInstance newProcessInstance(String processDefinitionName) {...}
     public void save(ProcessInstance processInstance) {...}
     public void save(Token token) {...}
     public void save(TaskInstance taskInstance) {...}
     public void setRollbackOnly() {...}
    記住,XxxForUpdate方法將記錄所加載的對象為自動保存的,因此不需要再調用save方法。
    指定多個jbpm上下文是可能的,但是你必須確保每個jbpm上下文的name屬性必須是唯一的,可以使用JbpmConfiguration.createContext(String name)獲取命名的上下文。
    service元素定義了一個服務名稱和此服務的服務工廠,服務將只會在使用JbpmContext.getServices().getService(String name)請求時被創建。
    工廠也可以被作為一個元素來指定,而不是用屬性。那樣可以用于在工廠對象中注入一些配置信息,負責解析XML的組件創建和裝配被調用的對象工廠。
    6.1 配置屬性
    jbpm.byte.block.size:文件附件和二進制變量被存儲到數據庫,不是作為blob,而是作為一個固定大小的二進制對象列表,這可以方便用于不同數據庫并且提高jBPM的全面嵌入能力,這個參數控制了固定長度塊的大小。
    jbpm.task.instance.factory:定制任務實例的創建方式,在這個屬性中指定一個全類名,當你想要定制TaskInstance bean并且向它添加新的屬性時,這是有必要的。請參考“11.10 定制任務實例”,指定的類必須實現org.jbpm.tskmgmt.TaskInstanceFactory。
    jbpm.variable.resolver:定制jBPM在JSF表達式中尋找第一個術語的方式。
    jbpm.msg.wait.timout:定制消息緩存的時間。
    6.2 配置文件
    下面是對在jBPM中定義的所有配置文件的簡短描述。
    6.2.1 Hibernate.cfg.xml文件
    這個文件包含hibernate配置,并且引用hibernate映射資源文件。
    位置:hibernate.cfg.xml文件如果不另外在jbpm.properties文件的jbpm.hibernate.cfg.xml屬性中指定,則jBPM工程中的默認hibernate配置文件在目錄src/config.files/hibernate.cfg.xml。
    6.2.2 Hibernate查詢配置文件
    這個文件包含jBPM會話org.jbpm.db.*Session中所使用的hibernate查詢。
    位置:org/jbpm/db/hibernate.queries.hbm.xml。
    6.2.3 節點類型配置文件
    這個文件包含了XML節點元素到節點實現類的映射。
    位置:org/jbpm/graph/node/node.types.xml。
    6.2.4 動作類型配置文件
    這個文件包含了XML動作元素到動作實現類的映射。
    位置:org/jbpm/graph/action/action.types.xml。
    6.2.5 業務日歷配置文件
    包含了業務時間和空閑時間的定義。
    位置:org/jbpm/calendar/jbpm.business.calendar.properties。
    6.2.6 變量映射配置文件
    指定了流程變量(java對象)的值怎樣轉換到用于存儲到jbpm數據庫中的變量實例。
    位置:org/jbpm/context/exe/jbpm.varmapping.xml。
    6.2.7 轉換器配置文件
    指定了id到類名的映射。id被存儲到數據庫,org.jbpm.db.hibernate.ConverterEnumType被用來映射id到單態對象。
    位置:org/jbpm/db/hibernate/jbpm.converter.properties。
    6.2.8 缺省模塊配置文件
    指定哪個模塊被缺省添加到一個新的流程定義ProcessDefinition。
    位置:org/jbpm/graph/def/jbpm.default.modules.properties。
    6.2.9 流程檔案解析器配置文件
    指定流程檔案解析的解析器。
    位置:org/jbpm/jpdl/par/jbpm.parsers.xml。
    6.3 對象工廠
    對象工廠可以依照bean的xml配置文件創建對象,配置文件指定了對象將被怎樣創建、配置以及組裝到一起形成一個完整的對象圖。對象工廠可以注入配置和其他bean到一個bean中。
    在最簡單的形式中,對象工廠可以從這樣一個配置中創建基本類型和java bean:
    <beans>
     <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance"/>
     <string name="greeting">hello world</string>
     <int name="answer">42</int>
     <boolean name="javaisold">true</boolean>
     <float name="percentage">10.2</float>
     <double name="salary">100000000.32</double>
     <char name="java">j</char>
     <null name="dusttodust" />
    </beans>
     
    ---------------------------------------------------------
     
    ObjectFactory of = ObjectFactory.parseXmlFromAbove();
    assertEquals(TaskInstance.class, of.getNewObject("task").getClass());
    assertEquals("hello world", of.getNewObject("greeting"));
    assertEquals(new Integer(42), of.getNewObject("answer"));
    assertEquals(Boolean.TRUE, of.getNewObject("javaisold"));
    assertEquals(new Float(10.2), of.getNewObject("percentage"));
    assertEquals(new Double(100000000.32), of.getNewObject("salary"));
    assertEquals(new Character('j'), of.getNewObject("java"));
    assertNull(of.getNewObject("dusttodust"));
    你也可以配置列表:
    <beans>
     <list name="numbers">
        <string>one</string>
        <string>two</string>
        <string>three</string>
     </list>
    </beans>
    以及map:
    <beans>
     <map name="numbers">
        <entry><key><int>1</int></key><value><string>one</string></value></entry>
       <entry><key><int>2</int></key><value><string>two</string></value></entry>
        <entry><key><int>3</int></key><value><string>three</string></value></entry>
     </map>
    </beans>
    Bean可以使用直接成員注入和通過屬性的setter。
    <beans>
     <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance" >
        <field name="name"><string>do dishes</string></field>
        <property name="actorId"><string>theotherguy</string></property>
     </bean>
    </beans>
    Bean可以被引用,被引用的對象不必必須是一個bean,也可以是一個字符串、整型或其他任何對象。
    <beans>
     <bean name="a" class="org.jbpm.A" />
     <ref name="b" bean="a" />
    </beans>
    Bean可以使用任何構造器構造(構造函數)。
    <beans>
     <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance" >
        <constructor>
          <parameter class="java.lang.String">
            <string>do dishes</string>
          </parameter>
          <parameter class="java.lang.String">
            <string>theotherguy</string>
          </parameter>
        </constructor>
     </bean>
    </beans>
    …或者在bean上使用工廠方法…
    <beans>
     <bean name="taskFactory"
             class="org.jbpm.UnexistingTaskInstanceFactory"
             singleton="true"/>
     
     <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance" >
        <constructor factory="taskFactory" method="createTask" >
          <parameter class="java.lang.String">
            <string>do dishes</string>
          </parameter>
          <parameter class="java.lang.String">
            <string>theotherguy</string>
          </parameter>
        </constructor>
     </bean>
    </beans>
    …或者在類上使用一個靜態工廠方法…
    <beans>
     <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance" >
        <constructor factory-class="org.jbpm.UnexistingTaskInstanceFactory" method="createTask" >
          <parameter class="java.lang.String">
            <string>do dishes</string>
          </parameter>
          <parameter class="java.lang.String">
            <string>theotherguy</string>
          </parameter>
        </constructor>
     </bean>
    </beans>
    每個命名的對象都可以使用屬性singleton=“true”標記為單態,這意味著給定的對象工廠為每個請求將總是返回相同的對象。注意,單態不能在不同對象工廠之間共享。
    單態特性導致getObjectgetNewObject方法間的區別,對象工廠的典型用戶將使用getNewObject,這意味著在一個新的對象圖被構造之前對象對象工廠首先要清除對象緩存。在構造對象圖期間,非單態對象被存儲在對象工廠的對象緩存中,允許共享引用一個對象。單態對象緩存不同于普通對象緩存,單態對象緩存不需要清除,而普通對象緩存在每個getNewObject方法被調用起始會被清除。 
    posted on 2007-09-06 17:52 禮物 閱讀(706) 評論(0)  編輯  收藏 所屬分類: Jbpm
    主站蜘蛛池模板: 日韩视频免费在线| 亚洲中文字幕一区精品自拍| 日本牲交大片免费观看| 一级毛片免费观看不卡视频| 黄色大片免费网站| 欧洲 亚洲 国产图片综合| 亚洲国产美国国产综合一区二区| 永久黄色免费网站| 中文毛片无遮挡高清免费| jzzijzzij在线观看亚洲熟妇| 亚洲国产a∨无码中文777| 亚洲一级黄色视频| 国产18禁黄网站免费观看| 手机在线毛片免费播放| 91大神免费观看| 国产亚洲免费的视频看| 日本免费精品一区二区三区| 亚洲人成图片小说网站| 国产麻豆剧传媒精品国产免费 | 男人都懂www深夜免费网站| 亚洲国产精品无码久久久秋霞1 | 一区二区三区精品高清视频免费在线播放 | 国产区图片区小说区亚洲区| 亚洲色无码一区二区三区| 日本特黄特黄刺激大片免费| 在免费jizzjizz在线播| 国产午夜成人免费看片无遮挡 | 亚洲日韩精品无码AV海量| 亚洲精品黄色视频在线观看免费资源| 香蕉视频免费在线| 亚洲视频在线不卡| 久久精品国产亚洲网站| 亚洲精品无码久久久久AV麻豆| 麻豆高清免费国产一区| 免费人成视频在线播放| 亚洲国产欧美日韩精品一区二区三区| 亚洲成色在线综合网站| 国产又大又黑又粗免费视频| 成年性羞羞视频免费观看无限| 91青青青国产在观免费影视| 久久久国产精品福利免费|