ofbiz工作流程原始碼學習(1)–WfRequester介面

來源:互聯網
上載者:User

 WfRequester介面是一個和工作流程流程的執行及結果有直接關係的介面,它代表了對要做的工作的請求。

 知識點:WfRequester介面的performer是WfProcess,一個WfRequester介面可以對應好幾個WfProcess

程式碼範例:

          protected Map performers = null;

          this.performers = new HashMap(); //構造proces與requester的Map

          performers.put(process, requester);// registerProcess( )為requester註冊process

下面的方法與performer有關:

    /**

*@see org.ofbiz.core.workflow.WfRequester#howManyPerformer()

*擷取performer的size

     */   

    public int howManyPerformer() throws WfException {

        return performers.size();

    }

      /**

     * @see org.ofbiz.core.workflow.WfRequester#getIteratorPerformer()

*擷取performer的Iterator

*/

    public Iterator getIteratorPerformer() throws WfException {

        return performers.keySet().iterator();

    }

       /**

     * @see org.ofbiz.core.workflow.WfRequester#getSequencePerformer(int)

*擷取List形式的performer

*/

    public List getSequencePerformer(int maxNumber) throws WfException {

        if (maxNumber > 0)

            return new ArrayList(performers.keySet()).subList(0, (maxNumber - 1));

        return new ArrayList(performers.keySet());

    }

 知識點:WfRequester介面常作為啟動process的對象的介面

作為流程的啟動者它通常做三件事情:

1) setting up the context

2)       start the process

3)       get the status and results

 知識點:WfRequester介面和WfProcess的關聯,一般有兩種應用場合:

1)  工作流程過程的演化 :在這種場合下,WfActivity被精化為WfRequester,這樣,它有一個執行者WfProcess。WfProcess執行一個請求就是執行一個活動。

2)  WfRequester將WfProcess串連到其它應用。

 知識點:WfProcess一般用void receiveEvent(WfEventAudit event)方法來將工作流程事件(event)通知給request

在發生活動的完成,中斷,中止等事件時,流程必須通知requester

程式碼範例:

       /**

        *@see org.ofbiz.core.workflow.WfRequester#receiveEvent()

        */

    public synchronized void receiveEvent(WfEventAudit event) throws WfException, InvalidPerformer {

        // Should the source of the audit come from the process? if so use this.

        WfProcess process = null;

         try {

            process = (WfProcess) event.source();  //事件來源於process

        } catch (SourceNotAvailable sna) {

            throw new InvalidPerformer("Could not get the performer", sna);

        } catch (ClassCastException cce) {

            throw new InvalidPerformer("Not a valid process object", cce);

        }

        //如果事件來源不是與requester關聯的process,則拋出異常

        if (process == null)

            throw new InvalidPerformer("No performer specified");

        if (!performers.containsKey(process))

            throw new InvalidPerformer("Performer not assigned to this requester");

         GenericRequester req = null;

        //如果事件來源是與requester關聯的process,則擷取狀態和結果

        if (performers.containsKey(process))

            req = (GenericRequester) performers.get(process);

        if (req != null)

            req.receiveResult(process.result());

    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.