![]() Entity非常類似EJB中的實(shí)體bean,它負(fù)責(zé)系統(tǒng)中所有數(shù)據(jù)庫(kù)部分,就類似在內(nèi)存中建立數(shù)據(jù)庫(kù)的表,有兩個(gè)重要類GenericDelegator,專門負(fù)責(zé)數(shù)據(jù)源; GenericValue 是具體product的抽象類。 我們?cè)倏磗ervice,GenericEngine是核心,包括同步服務(wù)和異步服務(wù),這兩種service在J2EE中就是servlet/session bean的同步處理和JMS的異步服務(wù)。 所有的service通過(guò)ServiceDispatcher進(jìn)行分配,需要同步服務(wù)的,分配GenericAsyncEngine出來(lái)服務(wù),同時(shí)檢查該用戶是否擁有這類服務(wù)的權(quán)限。每個(gè)GenericDelegator都對(duì)應(yīng)一個(gè)ServiceDispattcher。 ModelService 這是將request信號(hào)分解后,根據(jù)requestHanlder取出相應(yīng)service后的一個(gè)承前啟后的類,它有IN/OUT/INOUT三個(gè)mode。 我們看看下面service配置類:
上 面的service名稱是userLogin,它是采用java engine. 這個(gè)服務(wù)需要兩個(gè)輸入?yún)?shù)(來(lái)自request): login.username and login.password. 如果這兩個(gè)參數(shù)不符合名稱和對(duì)象類型,這個(gè)service將不會(huì)調(diào)用,有些參數(shù)可以不發(fā)往給service,這些參數(shù)需要定義為optional. 在這個(gè)service被調(diào)用以后, 輸出OUT參數(shù)將被檢測(cè)一下,當(dāng)然只有標(biāo)記為required才會(huì)被檢測(cè),當(dāng)然這個(gè)服務(wù)也可以不返回任何參數(shù)。 ofbiz也有自己一套類似struts的MVC模型。 ofbiz的Entity引擎雖然不錯(cuò),可以在上面掛很多具體應(yīng)用,但是我感覺(jué)似乎復(fù)雜點(diǎn),不如使用Jbuilder CMP來(lái)開發(fā)更方便。 ofbiz的service framework是最值得借鑒的。 步驟大概是這樣: 1. 編寫xpdl文件 2. 把xpdl文件用webtools下提供的xpdl reader 導(dǎo)入到數(shù)據(jù)庫(kù) 3. 在service定義文件里添加上你寫的workflow的表示, service type是workflow 4. 寫好你在xpdl文件里用到的一些自定義的Implementation Tool, 我都是用PROCEDURE, 即service, 用來(lái)實(shí)現(xiàn)對(duì)應(yīng)用數(shù)據(jù)的操作. 5. 如果你有用到ExtendedAttribute的limitAfterStart, 還要寫limitService, 通常我用limitService來(lái)實(shí)現(xiàn)超時(shí)處理. 6. 最后是寫一些test unit利用service engine來(lái)做一些測(cè)試, 主要目的是看定義在xpdl里的Transitions是否正確. 我的文檔向來(lái)寫得很差, 以上只是一些要點(diǎn), 希望對(duì)你有用. 我道建議你先看看ofbiz中的XPDL,從這里入手你會(huì)決定容易一點(diǎn)。 ofbiz_home\commonapp\src\org\ofbiz\commonapp\order\order\orderProcessXPDL.xml 讀懂它可能你還要參看WFMC關(guān)于接口一的文章 |
|