使用OFBIZ的理由和不使用OFBIZ的理由
生活随笔
收集整理的這篇文章主要介紹了
使用OFBIZ的理由和不使用OFBIZ的理由
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 使用OFBIZ的理由
1.1 什么是OFBIZ
OFBIZ是由Sourceforge維護(hù)的一個(gè)最著名的開源項(xiàng)目之一,提供創(chuàng)建基于最新J2EE/XML規(guī)范和技術(shù)標(biāo)準(zhǔn),構(gòu)建大型企業(yè)級(jí)、跨平臺(tái)、跨數(shù)據(jù)庫(kù)、跨應(yīng)用服務(wù)器的多層、分布式電子商務(wù)類WEB應(yīng)用系統(tǒng)的框架。OFBIZ 的Web應(yīng)用框架以MVC模式搭建而成,整體采用了很多被大多數(shù)企業(yè)級(jí)應(yīng)用系統(tǒng)公認(rèn)的位于業(yè)務(wù)邏輯層和集成層(Business Tier and Integration Tier)的設(shè)計(jì)模式。許多表示層(Presentation Tier)的設(shè)計(jì)模式也被引入進(jìn)OFBIZ,但是僅僅體現(xiàn)在Servlet控制器(the servlet controller)中,沒(méi)有包括在實(shí)體引擎中。在實(shí)體引擎中使用的設(shè)計(jì)模式包括:業(yè)務(wù)代理(Business Delegate),值對(duì)象(Value Object), 復(fù)合實(shí)體(Composite Entity(variation)),值對(duì)象組裝器(Value Object Assembler),服務(wù)定位器(Service Locator)和數(shù)據(jù)訪問(wèn)對(duì)象(Data Access Object)。OFBIZ正在計(jì)劃逐步引入其它設(shè)計(jì)模式和完善已經(jīng)引入的設(shè)計(jì)模式的實(shí)現(xiàn)。
使用OFBIZ的框架和組件,可以大大縮短開發(fā)企業(yè)級(jí)WEB應(yīng)用系統(tǒng)的進(jìn)度和成本。了解詳細(xì)情況請(qǐng)參見: http://sourceforge.net/project/ofbiz ?
1.2 OFBIZ和其它項(xiàng)目的比較?
與ofbiz 類似的項(xiàng)目還有很多,ofbiz與這些項(xiàng)目的最主要的不同點(diǎn)是ofbiz提供了一整套的開發(fā)基于Java的web應(yīng)用程序的組件和工具。一個(gè)優(yōu)秀的web 應(yīng)用程序應(yīng)該是至少三層結(jié)構(gòu):表示層,業(yè)務(wù)邏輯層和數(shù)據(jù)層。大多數(shù)應(yīng)用框架,比如Struts, Cocoon, 和 Velocity 將主要精力都集中在了表示層。比如Struts,遵循了(MVC)構(gòu)架,使用Java Bean和Action類與JSP頁(yè)面進(jìn)行通訊。Struts是一個(gè)很好的web應(yīng)用框架,但它并沒(méi)有提供訪問(wèn)數(shù)據(jù)庫(kù)的組件,也沒(méi)有提供控制工作流的組 件。如果要使用,你必須自己創(chuàng)建這些組件。如果已經(jīng)在利用其它的應(yīng)用框架(如Struts),你也可以很容易的將ofbiz的組件添加到自己的工程中。與其它類似開源項(xiàng)目相比,OFBIZ是一套有血有肉的包含編譯打包部署工具、應(yīng)用組件、示例應(yīng)用等內(nèi)容的企業(yè)級(jí)Web應(yīng)用系統(tǒng)實(shí)現(xiàn)框架。
1.3 開源的優(yōu)勢(shì)
OFBIZ是一個(gè)開源項(xiàng)目,由幾個(gè)牛人在維護(hù),它具有開源項(xiàng)目的一切優(yōu)勢(shì),如免費(fèi)(隨時(shí)下載);集市式開發(fā)方式;成千上萬(wàn)的人在維護(hù),也在測(cè)試等等。也具備開源項(xiàng)目的所有缺點(diǎn),如缺乏技術(shù)文檔,提交的系統(tǒng)沒(méi)有全面測(cè)試;不穩(wěn)定等等,但無(wú)論如何,我們要清醒的認(rèn)識(shí)到:1、 OFBIZ是一個(gè)開源項(xiàng)目。
2、 OFBIZ只僅限于系統(tǒng)開發(fā)者使用。
1.4 完善的實(shí)體引擎
OFBIZ 實(shí)體引擎提供了一組工具和設(shè)計(jì)模式來(lái)對(duì)現(xiàn)實(shí)世界中特定的實(shí)體(數(shù)據(jù)對(duì)象)進(jìn)行建模和管理。在本系統(tǒng)的上下文環(huán)境中,一個(gè)實(shí)體就是一個(gè)由多個(gè)數(shù)據(jù)域 (fields)和該實(shí)體與其它實(shí)體之間的關(guān)系所組成的一個(gè)數(shù)據(jù)對(duì)象。這個(gè)定義來(lái)自于關(guān)系型數(shù)據(jù)庫(kù)對(duì)實(shí)體關(guān)系模型(Entity-Relation modeling)概念的標(biāo)準(zhǔn)定義。實(shí)體引擎的目標(biāo)是簡(jiǎn)化企業(yè)級(jí)應(yīng)用中對(duì)實(shí)體數(shù)據(jù)(對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫(kù)表)的大量操作,包括定義、維護(hù)、通用操作(增、刪、 改、查實(shí)體和實(shí)體之間的關(guān)系)的開發(fā)工作實(shí)體引擎采用了很多被大多數(shù)企業(yè)級(jí)應(yīng)用系統(tǒng)公認(rèn)的位于業(yè)務(wù)邏輯層和集成層(Business Tier and Integration Tier)的設(shè)計(jì)模式。許多表示層(Presentation Tier)的設(shè)計(jì)模式也被引入進(jìn)OFBIZ,但是僅僅體現(xiàn)在Servlet控制器(the servlet controller)中,沒(méi)有包括在實(shí)體引擎中。在實(shí)體引擎中使用的設(shè)計(jì)模式包括:業(yè)務(wù)代表(Business Delegate),值對(duì)象(Value Object), 符合實(shí)體(Composite Entity(variation)),值對(duì)象組裝器(Value Object Assembler),服務(wù)定位器(Service Locator)和數(shù)據(jù)訪問(wèn)對(duì)象(Data Access Object)。OFBIZ正在計(jì)劃逐步引入其它設(shè)計(jì)模式和完善已經(jīng)引入的設(shè)計(jì)模式的實(shí)現(xiàn)。
實(shí) 體引擎的一個(gè)主要目標(biāo)是盡可能的提供一種通用的代碼結(jié)構(gòu),來(lái)消除在針對(duì)每一個(gè)實(shí)體的事物處理過(guò)程中,所有寫死(hard code)的代碼。 這種系統(tǒng)抽象所關(guān)注的問(wèn)題,與那些把數(shù)據(jù)從數(shù)據(jù)庫(kù)中提取出來(lái),并以報(bào)表的形式進(jìn)行輸出和顯示處理的報(bào)表管理或類似系統(tǒng)是不同的,而是類似于每日都可能發(fā)生 很多事物處理的商業(yè)應(yīng)用系統(tǒng),實(shí)體引擎能大量節(jié)省構(gòu)建類似應(yīng)用系統(tǒng)的開發(fā)費(fèi)用和戲劇性的減少因?yàn)橄到y(tǒng)存在大量寫死的事務(wù)處理代碼所產(chǎn)生的bug。這種類型 的應(yīng)用系統(tǒng)目前在OFBIZ中實(shí)現(xiàn)了一些,如電子商務(wù),入庫(kù)、出庫(kù)的帳目管理,任務(wù)分配資源管理等等。這些工具能夠用來(lái)報(bào)告和分析系統(tǒng),但是并不意味著, 它能包容千差萬(wàn)別的客戶的應(yīng)用需求,在實(shí)際應(yīng)用中,我們可以基于它來(lái)做一些二次開發(fā)。
為了達(dá)到盡可能少的在系統(tǒng)中出現(xiàn)與針對(duì)特定實(shí)體操作有關(guān)的代 碼, 存儲(chǔ)實(shí)體屬性值的對(duì)象結(jié)構(gòu)必須設(shè)計(jì)成通用的,可以用一個(gè)MAP對(duì)象來(lái)存貯實(shí)體的所有域(也可以叫字段或?qū)傩?#xff09;,通過(guò)實(shí)體的名稱來(lái)區(qū)分它們是哪個(gè)實(shí)體的。根 據(jù)字段的名稱,用一個(gè)簡(jiǎn)單操作String數(shù)據(jù)的方法,來(lái)從值對(duì)象中讀出或?qū)懭肽匙侄蔚闹?#xff0c;并且還可以驗(yàn)證給定名稱的字段是否是該值對(duì)象的一個(gè)合法域。在 實(shí)體引擎和應(yīng)用系統(tǒng)之間建立了一個(gè)約定(體現(xiàn)實(shí)體結(jié)構(gòu)定義文件和字段類型、Java數(shù)據(jù)類型、SQL字段類型映射關(guān)系的定義中),這個(gè)約定被定義在特定的 XML文件中,以減少這種靈活性可能存在對(duì)系統(tǒng)不利的風(fēng)險(xiǎn)(如數(shù)據(jù)類型問(wèn)題可能引起數(shù)據(jù)庫(kù)系統(tǒng)崩潰等)。
代替不在系統(tǒng)中書寫針對(duì)特定實(shí)體操作的的 代碼的方法之一,是把實(shí)體的定義放在XML文件中,在系統(tǒng)啟動(dòng)的時(shí)候,由實(shí)體引擎負(fù)責(zé)把這些結(jié)構(gòu)定義加載進(jìn)內(nèi)存,并且在應(yīng)用程序和數(shù)據(jù)源(通常指一個(gè)數(shù)據(jù) 庫(kù)或其它資源)之間建立一些對(duì)這些定義的使用規(guī)則。在這些XML實(shí)體定義中,對(duì)實(shí)體和屬于它們的域,以某種規(guī)則和數(shù)據(jù)庫(kù)中的表和表的字段建立映射關(guān)系。而 且實(shí)體與實(shí)體之間的關(guān)系,實(shí)體域的數(shù)據(jù)類型,Java語(yǔ)言的數(shù)據(jù)類型,SQL 數(shù)據(jù)類型之間的映射關(guān)系,也被定義在XML文件中。 實(shí)體之間的關(guān)系還可以被命名,以用來(lái)區(qū)分不同實(shí)體組合之間的特定關(guān)系。
基于實(shí)體引擎這個(gè)抽象層,與特定實(shí)體操作有關(guān)的代碼的編寫就變的很容易創(chuàng)建 和修改。 使用實(shí)體引擎所提供的APIs,編寫處理實(shí)體持久性(增、刪、改、查)的代碼,可以不同的方式來(lái)配置,以便于實(shí)現(xiàn)針對(duì)實(shí)體持久性操作(增、刪、改、查)有 變化時(shí),可以不改變代碼本身,因?yàn)樗](méi)有寫死。這種抽象的一個(gè)典型應(yīng)用場(chǎng)景就是你既可以通過(guò)JDBC直連方式,也可以通過(guò)調(diào)用運(yùn)行在EJB服務(wù)器上的實(shí) 體Bean(Entity Beans)的方式或者以其它方式,甚至在系統(tǒng)所提供的框架范圍內(nèi),使用者運(yùn)用自己擴(kuò)充的方式去完成對(duì)實(shí)體持久性的改變等等。這些不同方式的切換并不需要 對(duì)代碼做任何改動(dòng),只需要修改配置文件。
OFBIZ已經(jīng)完全實(shí)現(xiàn)了自己設(shè)計(jì)的一套實(shí)體引擎,可以直接使用。project/ofbiz
實(shí)體引擎的好處舉例說(shuō)明如下:
以前的問(wèn)題背景。
1、 你需要借助工具或手工去維護(hù)已經(jīng)存在的或新增加的數(shù)據(jù)庫(kù)結(jié)構(gòu)(庫(kù)結(jié)構(gòu),表結(jié)果等的定義和更新),如果要修改表結(jié)構(gòu)和定義的話,怎么做?
2、 假設(shè)你的應(yīng)用涉及200張表(實(shí)體),假設(shè)每張表(實(shí)體)都存在增、刪、改、查,則需要在你的應(yīng)用中靜態(tài)構(gòu)造(硬編碼)800個(gè)sql語(yǔ)句。
3、 假設(shè)這200張表之間存在100種關(guān)系,維護(hù)每一種關(guān)系的增、刪、改、查,又需要400個(gè)靜態(tài)構(gòu)造的sql語(yǔ)句。
4、 假設(shè)這些sql語(yǔ)句由10個(gè)不同水平的程序員來(lái)構(gòu)造,構(gòu)造出來(lái)的sql語(yǔ)句在執(zhí)行性能上可能存在巨大差異,而且形態(tài)各異。
5、 這些硬編碼的sql語(yǔ)句分布在大量Java程序的各個(gè)角落,一旦某張表的結(jié)構(gòu)發(fā)生變化或者修改某一字段名或表名,意味著什么?意味著混亂!
OFBIZ是如何解決這些問(wèn)題的:
OFBIZ拒絕這種混亂,一套EntityEngine機(jī)制輕松解決上述所有問(wèn)題。
1、 涉及1張表(實(shí)體)的增、刪、改、查,它提供一套處理機(jī)制(不到12個(gè)類,大約5千行代碼),應(yīng)用的規(guī)模是10000張表,它還是這套處理機(jī)制(不到12個(gè)類,大約5千行代碼),而且這些處理機(jī)制由JAVA程序高手生成和維護(hù),可以保證其合理性、可靠性和安全性。
2、 EntityEngine提供了一個(gè)構(gòu)造復(fù)雜sql操縱語(yǔ)句的機(jī)制,你可以根據(jù)需要隨時(shí)構(gòu)造任意復(fù)雜的sql語(yǔ)句,完成你想要做的事情,這樣你可以在開發(fā)過(guò)程中,隨時(shí)修改你的數(shù)據(jù)庫(kù)定義,OFBIZ在系統(tǒng)啟動(dòng)時(shí)會(huì)自動(dòng)加載并檢測(cè)數(shù)據(jù)庫(kù)中的不一致性和參考完整性。
3、 實(shí)體引擎大大簡(jiǎn)化了涉及關(guān)系型數(shù)據(jù)庫(kù)的管理和維護(hù),但這還只是一小塊好處,大的好處是你在實(shí)現(xiàn)一個(gè)復(fù)雜需求的應(yīng)用時(shí),實(shí)體引擎用為數(shù)不多的幾個(gè)類解決了你所有的問(wèn)題,實(shí)現(xiàn)任意復(fù)雜的數(shù)據(jù)庫(kù)存取業(yè)務(wù)和商業(yè)邏輯,而且與需求的復(fù)雜度和數(shù)量無(wú)關(guān)。
4、 好處太多了,在使用的過(guò)程中,會(huì)進(jìn)一步的體會(huì)到。
1.5 錦上添花的服務(wù)引擎
服 務(wù)框架(Services Framework)是OFBiz2.0 新增加的內(nèi)容。服務(wù)(Services)被定義成一些相對(duì)獨(dú)立的邏輯處理單元(服務(wù)具有業(yè)務(wù)邏輯處理的原子性),能夠被靈活的組合成不同的形式去實(shí)現(xiàn)不同 的商業(yè)邏輯需求。服務(wù)有多種類型的實(shí)現(xiàn)形式:工作流(Workflow),(規(guī)則) Rules, Java程序(Java), 簡(jiǎn)單對(duì)象訪問(wèn)控制協(xié)議(SOAP), 輕量級(jí)Java程序腳本語(yǔ)言解釋器(BeanShell)等等。 如果一個(gè)服務(wù)被定義成"java"類型,意味著實(shí)現(xiàn)該服務(wù)的機(jī)制可能就是Java類的一個(gè)static方法, 而且,OFBIZ提供的服務(wù)框架不限于使用在一個(gè)基于Web的應(yīng)用程序系統(tǒng)中。服務(wù)需要輸入一個(gè)Map形式的參數(shù),服務(wù)處理完畢后,返回的也是一個(gè)Map 形式的結(jié)果集。這個(gè)思路是非常好的,因?yàn)镸ap類型的數(shù)據(jù)格式很容易被序列化(serialized,序列化成字節(jié)流),并且通過(guò)HTTP(或SOAP) 的協(xié)議進(jìn)行存儲(chǔ)和傳輸。在OFBIZ里,服務(wù)被定義XML文件里,定義后的服務(wù)被分派給一個(gè)特定的 服務(wù)引擎(Service Engine) 。 服務(wù)引擎 具體負(fù)責(zé)以合適的方式進(jìn)行服務(wù)的定義、管理和調(diào)用。 因?yàn)榉?wù)不一定被綁定在某基于Web的應(yīng)用程序運(yùn)行環(huán)境中,所以服務(wù)處理的結(jié)果也就不一定會(huì)和某erquest請(qǐng)求的響應(yīng)reponse聯(lián)系在一起,這樣 就允許服務(wù)可以在預(yù)先設(shè)置好的和時(shí)間點(diǎn)上定時(shí)觸發(fā)(因?yàn)樗恍枰粋€(gè)Http Request請(qǐng)求),一般是通過(guò)系統(tǒng)提供的 工作日程管理器(Job Scheduler) 運(yùn)行環(huán)境觸發(fā)(用定時(shí)器來(lái)控制對(duì)服務(wù)的調(diào)用)。?服務(wù)還可以互相調(diào)用調(diào)用,即一個(gè)服務(wù)被設(shè)置去調(diào)用任何其它的服務(wù)。這 樣,我們可以用更小粒度的已經(jīng)定義好的服務(wù)組合成一個(gè)服務(wù)鏈,來(lái)完成一個(gè)比較大的任務(wù),而且這種組合是任意的,從已經(jīng)定義好的服務(wù)本身來(lái)講,是很容易復(fù)用 的。使用不同的應(yīng)用程序系統(tǒng)中的服務(wù),可以通過(guò)創(chuàng)建一個(gè)"全局服務(wù)定義文件"只被定義一次(因?yàn)榉?wù)本身是實(shí)現(xiàn)了特定的商業(yè)邏輯,它和具體應(yīng)用的關(guān)系應(yīng)該 是松耦合的),當(dāng)然,服務(wù)也可以通過(guò)一些限制,被指定為特定的應(yīng)用程序所用。?
在一個(gè)基于Web的應(yīng)用系統(tǒng)中,服務(wù)可以被用來(lái)實(shí)現(xiàn)基于Web的 事件(web events),利用服務(wù)實(shí)現(xiàn)事件處理,可以在服務(wù)框架內(nèi)最大可能的復(fù)用相對(duì)固定的一些業(yè)務(wù)邏輯。而且,服務(wù)還可以被定義成對(duì)可輸出的 (exportable),意思是它們可以被系統(tǒng)外部的東西(可能是一個(gè)應(yīng)用系統(tǒng)或其它)遠(yuǎn)程訪問(wèn)。 目前系統(tǒng)實(shí)現(xiàn)了一個(gè)基于簡(jiǎn)單對(duì)象訪問(wèn)控制協(xié)議(SOAP)的事件處理器,該事件處理器,就允許外部應(yīng)用通過(guò)SOAP協(xié)議對(duì)運(yùn)行(或定義)在其上的服務(wù)進(jìn)行 遠(yuǎn)程訪問(wèn) 。在將來(lái),會(huì)有更多的遠(yuǎn)程調(diào)用形式被加到服務(wù)框架里
1.6 雙管齊下
實(shí)體引擎和服務(wù)引擎各有利弊,在實(shí)際應(yīng)用中,可以把服務(wù)引 擎和實(shí)體引擎結(jié)合起來(lái)使用,實(shí)體引擎主要用于處理實(shí)體(Entities)對(duì)象的增、刪、改、查,服務(wù)引擎主要用于處理商務(wù)邏輯,這種商務(wù)邏輯的定義范 圍,不大會(huì)遇到上面所說(shuō)的要求一次查詢返回一個(gè)結(jié)果集這樣的服務(wù)定義(這完全可以用實(shí)體引擎來(lái)處理)。服務(wù)引擎可以用處理跨平臺(tái)、跨操作系統(tǒng)、跨應(yīng)用系統(tǒng)之間的業(yè)務(wù)邏輯。把實(shí)體引擎和服務(wù)引擎結(jié)合起來(lái),可以這解決企業(yè)級(jí)Web應(yīng)用系統(tǒng)的絕大部分需求所涉及到的技術(shù)實(shí)現(xiàn)細(xì)節(jié)。
1.7 其它甜餅
OFBIZ的野心太大,幾乎想通吃所有最新的關(guān)于企業(yè)級(jí)、多層、分布式應(yīng)用系統(tǒng)的構(gòu)建技術(shù)。除最成熟的實(shí)體引擎和服務(wù)引擎之外,它還涉及到以下系統(tǒng)實(shí)現(xiàn)引擎。1、 工作流引擎
2、 規(guī)則引擎
3、 消息引擎
這三項(xiàng)工作,除工作流引擎尚為alpha版本之外,其它兩個(gè)都在建設(shè)之中,看來(lái),已經(jīng)把這幾個(gè)人累的夠嗆。
1.8 主流技術(shù)的采用和跟蹤
OFBIZ 的框架中引入了最先進(jìn)的主流開發(fā)技術(shù)Web應(yīng)用系統(tǒng)構(gòu)建技術(shù),如:Xerces (xml.apache.org) ;Xalan (xml.apache.org) ;Axis (xml.apache.org) ;Log4J (jakarta.apache.org) ;Castor (www.exolab.org) ;ORO (jakarta.apache.org) ;BeanShell (beanshell.org) ;J2EE1.3,XML1.2等,而且整個(gè)系統(tǒng),在原來(lái)的基礎(chǔ)上不斷的被重構(gòu)和修訂。1.9 擴(kuò)展性和可移植性
OFBIZ 所提供的系統(tǒng)框架,是一個(gè)純Java的應(yīng)用程序,在具體實(shí)現(xiàn)中采用了大良的設(shè)計(jì)模式,本身系統(tǒng)的實(shí)現(xiàn)完全符合面向?qū)ο蟮脑O(shè)計(jì)原則中的幾乎所有要求,除采用 J2EE核心設(shè)計(jì)模式、數(shù)據(jù)庫(kù)設(shè)計(jì)模式之外,OFBIZ的實(shí)現(xiàn)代碼中,大量引入和Java設(shè)計(jì)模式,其應(yīng)用系統(tǒng)本身的擴(kuò)展性和可移植性已經(jīng)沒(méi)有問(wèn)題。OFBIZ開發(fā)者同時(shí)維護(hù)和Weblogic,Tomcat,Jboss,Resin,orion等16個(gè)廠商的Web和App應(yīng)用服務(wù)器的兼容版本.
OFBIZ開發(fā)者同時(shí)維護(hù)和oracle,Mysql,Sybase,PostgreSQL,Hsql等數(shù)據(jù)庫(kù)產(chǎn)品的兼容支持,包括編譯、打包、部署到這些數(shù)據(jù)庫(kù)產(chǎn)品或應(yīng)用服務(wù)器產(chǎn)品的運(yùn)行環(huán)境下。
OFBIZ開發(fā)者同時(shí)在Unix和Windiws兩大操作系統(tǒng)上進(jìn)行開發(fā)和測(cè)試,而且具備Java應(yīng)用系統(tǒng)的所有跨平臺(tái)的特點(diǎn)。
有了這些,對(duì)于大型企業(yè)級(jí)應(yīng)用系統(tǒng)的具體、特定實(shí)現(xiàn)來(lái)說(shuō),你有信心實(shí)現(xiàn)所謂的“一次開發(fā),到處運(yùn)行”。
1.10 改進(jìn)的事務(wù)處理功能
目前OFBIZ提供4種數(shù)據(jù)庫(kù)連接方式的支持(在“EntityEngine.xml”文件中配置,被“EntityConfigUtil”類裝載進(jìn)內(nèi)存)。用在:
GenericDelegator ——> GenericHelper.
GenericHelper ——>GenericHelperDAO
GenericHelperDAO ——>GenericDAO
GenericDAO ——> SQLProcessor
SQLProcessor ——> ConnectionFactory類的get Collection()方法得到數(shù)據(jù)庫(kù)連接。然后構(gòu)造PrepareStatement來(lái)實(shí)施數(shù)據(jù)庫(kù)操作。
OFBIZ2.0 改進(jìn)了GenericDAO和SQLProcessor,綜合利用JDBC的事務(wù)管理和應(yīng)用服務(wù)器的事務(wù)管理功能實(shí)現(xiàn)多層分步式事務(wù)管理功能,因?yàn)椴煌?實(shí)體操作可以對(duì)應(yīng)不同的實(shí)體引擎(在EntityEngine.xml中通過(guò)實(shí)體所在的組了配置),這樣可以在OFBIZ的主運(yùn)行環(huán)境下,通過(guò)實(shí)體引擎的 配置實(shí)現(xiàn)對(duì)遠(yuǎn)程數(shù)據(jù)源的訪問(wèn)操作,而一旦連接上遠(yuǎn)程數(shù)據(jù)源,OFBIZ就提供一套機(jī)制,把針對(duì)本地和遠(yuǎn)程數(shù)據(jù)源的操作納入到同一事務(wù)管理范圍內(nèi),實(shí)現(xiàn)分布 式事務(wù)處理。
OFBIZ利用JDBC提供的數(shù)據(jù)庫(kù)操作事務(wù)管理API(commit,rollback等)和第三方工具所實(shí)現(xiàn)的數(shù)據(jù)庫(kù)操作事務(wù)管理API,實(shí)現(xiàn)了OFBIZ的實(shí)體引擎對(duì)事務(wù)的控制。
2 不使用OFBIZ的理由
2.1 系統(tǒng)過(guò)于龐雜
確實(shí)如此!!它用到了XXX,XXX,XXX標(biāo)準(zhǔn),體現(xiàn)著XXX,XXX,XXX技術(shù),維護(hù)著諸多的概念、理念、包含著這么多的設(shè)計(jì)模式,光配置文件就有30個(gè)之多,涉及到的配置項(xiàng)不下200種,它要用到很多工具,這一個(gè)理由足以讓大多數(shù)人望而卻步!OFBIZ太復(fù)雜,把基礎(chǔ)、公用的東西和特殊應(yīng)用混到一塊,特別在實(shí)體定義的時(shí)候(考慮關(guān)聯(lián)關(guān)系)。
2.2 夸夫追日
如 果把OFBIZ比做太陽(yáng)的話,使用OFBIZ的人就是夸父,因?yàn)橐坏┠悴捎昧薕FBIZ ,它就會(huì)誘惑你,永遠(yuǎn)跟蹤下去,和其保持同步,和它保持同步的同時(shí),意味著你必須不端的充電,和XXX,XXX,XXX規(guī)范保持一致;和XXX,XXX, XXX標(biāo)準(zhǔn)保持一致;和XXX,XXX,XXX工具保持一致,這樣你會(huì)很累,那有我用JDK寫的東西維護(hù)起來(lái)的輕松?可是純粹使用JDK,你又能寫出什么東西?
2.3 它不適合我的應(yīng)用規(guī)模
的確如此,你如果是開發(fā)一個(gè)。。。。,或者。。。。或者。。。。這都用不上OFBIZ,OFBIZ是用在什么規(guī)模上的(大家自己領(lǐng)悟吧)。2.4 關(guān)于自帶的應(yīng)用
OFBIZ自帶的應(yīng)用,美國(guó)化的東西太多,應(yīng)用背景和我們差距太大。除用戶管理,系統(tǒng)維護(hù),知識(shí)管理幾大塊之外,其它的基本上用不到。2.5 它有bug?
祝 賀你,你竟然發(fā)現(xiàn)了OFBIZ的一個(gè)BUG,但這是開源項(xiàng)目最為常見的一個(gè)問(wèn)題,你可以想想,再回頭看看“開源項(xiàng)目的維護(hù)方式”,這些BUG本身就是希望 你發(fā)現(xiàn)并改正(或提修改建議)的,所以BUG不是什么大事。在使用開源項(xiàng)目,來(lái)縮短開發(fā)周期和降低開發(fā)成本的應(yīng)用前提下,更需要一種“楊棄”的理念。2.6 它連個(gè)論壇都沒(méi)有?
OFBIZ的開發(fā)者沒(méi)想到企業(yè)級(jí)應(yīng)用關(guān)注的卻是一個(gè)論壇?這不是他們關(guān)心的內(nèi)容,而且你完全可以利用OFBIZ提供的一切,迅速構(gòu)建一個(gè)論壇(前提是論壇的需求必須清楚)。2.7 其它理由
考慮一下,OPENSOURCE的東西可能存在其它問(wèn)題,如版權(quán)問(wèn)題?協(xié)議問(wèn)題等等。這好象對(duì)于我們來(lái)說(shuō),并不是問(wèn)題。3 簡(jiǎn)化OFBIz2.0
本著實(shí)際應(yīng)用的目的,我在OFBIZ最新版本的基礎(chǔ)上,進(jìn)行了簡(jiǎn)化,主要包括如下措施。3.1 數(shù)據(jù)模型改造
1、 數(shù)據(jù)模型只保留:common,content,party,security。2、 改造所有實(shí)體定義文件,把DTD包含在每一個(gè)文件里。
3、 首先整理entityGroup.xml文件,確定將要?jiǎng)h除的實(shí)體定義,包括保留的數(shù)據(jù)模型包和在保留的包中刪除不需要的,如下:
(1)common和security沒(méi)動(dòng)。
(2)content,保留大部分內(nèi)容(如文檔管理,支持網(wǎng)站統(tǒng)計(jì)的實(shí)體等,其它的刪除),刪除content.preference,content.subscription,content.website。
(3)party。刪除一部分和party無(wú)關(guān)的實(shí)體模型定義,如party.agreement,party.communication,party.need等。
4、 根據(jù)刪除的實(shí)體名稱,查詢確定被刪除的實(shí)體所有的關(guān)聯(lián)(包括實(shí)體和基礎(chǔ)數(shù)據(jù)定義,java文件,jsp,xml,properties文件中出現(xiàn)這些實(shí)體的地方,逐一進(jìn)行清除和改造)
5、 修改entityengine.xml,刪除加載的實(shí)體定義文件(eccomerence里)
6、 刪除加載的與應(yīng)用有關(guān)的服務(wù)定義文件。
7、 修改serviceengine.xml,刪除加載的與應(yīng)用有關(guān)的服務(wù)定義文件,刪除加載的基礎(chǔ)數(shù)據(jù)(與應(yīng)用有關(guān)的)。
3.2 刪除特殊應(yīng)用
1、 刪除accounting;catalog;ecommerce;facility;marketing;partymgr;workeffort應(yīng)用及 與應(yīng)用有關(guān)的存在于core和commonapp里的程序文件。commonapp/src目錄下只保留:common,party,content, security。如果有類似被刪除應(yīng)用的應(yīng)用背景,再考慮引進(jìn)。2、 修改setup/ofbiz/build.xml文件,把這些特殊應(yīng)用有關(guān)的內(nèi)容全部清除,把images應(yīng)用從ecommerce應(yīng)用里移到content應(yīng)用里。
3、 修改setup/catalina41/conf/server.xml文件。
4、 修改部署環(huán)境,保留目前ofbiz支持的最好的部署環(huán)境:bea,jboss,resin,catalina41.其它以后再說(shuō)。
3.3 簡(jiǎn)化后的系統(tǒng)
其實(shí)簡(jiǎn)化后的系統(tǒng), OFBIZ的內(nèi)核并沒(méi)有動(dòng),只是把它自帶的應(yīng)用全部刪除(包括和應(yīng)用相關(guān)的一切痕跡),但保留下來(lái)了常用的應(yīng)用1、 內(nèi)核管理系統(tǒng)——Commonapp應(yīng)用。
2、 用戶管理——PartyMgr應(yīng)用。
3、 知識(shí)管理——Content應(yīng)用。
4、 系統(tǒng)維護(hù)工具——WebTools應(yīng)用。
精簡(jiǎn)后的內(nèi)核框架具備如下功能
(1) 全面支持EntityEngine,ServiceEngine;workflowEngine。
(2) 支持用戶管理,權(quán)限管理,知識(shí)管理(信息發(fā)布就是小意思了),聯(lián)系方式管理,還具備一些通用基礎(chǔ)數(shù)據(jù)的定義和數(shù)據(jù)本身。
這是我們目前所面臨或即將面臨的大多數(shù)“基于J2EE/XML技術(shù)的多層、分部式企業(yè)級(jí)Web應(yīng)用系統(tǒng)”所必須具備的功能。
簡(jiǎn)化或的框架可以作為我們開發(fā)自己應(yīng)用的一個(gè)原始內(nèi)核。在該原始內(nèi)核的基礎(chǔ)上,可迅速開發(fā)和部署我們自己的應(yīng)用。
這個(gè)和適用于培訓(xùn)體系的OFBIZ版本的研究不沖突,可同時(shí)進(jìn)行。
簡(jiǎn)化后的好處,直接體現(xiàn)在系統(tǒng)規(guī)模大大減少,系統(tǒng)外觀復(fù)雜度大大降低,系統(tǒng)中我們琢磨不定的東西,但可能永遠(yuǎn)都用不上的垃圾基本被清除了。
3.4 系統(tǒng)規(guī)模
統(tǒng)計(jì)規(guī)則:每行80字節(jié),10%空行率。3.4.1 簡(jiǎn)化前
jsp+java文件,共05083 bytes。
Java文件,共4197776 bytes。
約4.5萬(wàn)行代碼;497張表24個(gè)視圖。
3.4.2 簡(jiǎn)化后
jsp+java文件,共3104918 bytes。
Java文件,共4197776 bytes。
約2.8772萬(wàn)行代碼;107張表8個(gè)視圖。
4 客戶程序編寫者需要了解的類和接口
如果有一個(gè)完整的基于OFBIZ2.0的開發(fā)過(guò)程定義和OFBIZ資深顧問(wèn)做基礎(chǔ),一個(gè)開發(fā)團(tuán)隊(duì)中的開發(fā)者只需要了解以下類所提供的接口即可在OFBIZ2.0框架的基礎(chǔ)上,開發(fā)基于實(shí)體引擎和服務(wù)引擎的應(yīng)用程序。4.1 實(shí)體引擎核心應(yīng)用類(客戶端API)
涉 及到12個(gè)類,GenericDelegator,GenericValue,GenericPK,EntityCondition, EntityExpr,EntityFieldMap,EntityConditionList,EntityWhereString, EntityOperator,EntityOperator,EntityListIterator,這些類都是為GenericDelegator的 接口服務(wù)的。用戶端程序和數(shù)據(jù)庫(kù)之間的所有交往多是通過(guò)“GenericDelegator”完成的。4.2 服務(wù)引擎應(yīng)用類(服務(wù)器端API)
涉及LocalDispatcher, GenericDispatcher; ServiceDispatcher;ServiceUtil;DispatchContext ;ServiceConfigUtil等6個(gè)類。4.3 常用工具類
工具類主要在包org.ofbiz.core.util中。1、 屬性文件訪問(wèn)工具類:UtilProperties。
2、 Map、List對(duì)象操作工具類:UtilMisc。
3、 UtilFormatOut :通用格式化輸出工具類(主要用在 Jsp文件或View Helper中)。
4、 UtilURL:得到文件流的URL地址類。
5、 UtilCache:緩存管理類。
6、 UtilValidate:通用數(shù)據(jù)輸入輸出數(shù)據(jù)校驗(yàn)(合法性和有效性)類,可任意擴(kuò)展。.
7、 UtilDateTime:java.util.Date和java.sql.Date格式的日期/時(shí)間處理類。
8、 StringUtil:增強(qiáng)的字符串處理類。
9、 UtilXML:增強(qiáng)的符合JAXP & DOM 規(guī)范的XMl解析器處理工具類。
10、 SiteDefs:常數(shù)定義類,定義所有Web 程序用到的和環(huán)境有關(guān)的常量。
11、 Debug:格式化輸出程序調(diào)試信息類。
12、 HttpClient:模擬一個(gè)HttpServlet請(qǐng)求類。
13、 HttpRequestFileUpload:接受一個(gè)通過(guò)Http上傳的文件工具類。
14、 SendMailSMTP:符合SMTP協(xié)議的郵件發(fā)送處理類(實(shí)現(xiàn)發(fā)送郵件服務(wù)器的功能)。
4.4 其它
作為一個(gè)初級(jí)的開發(fā)者來(lái)說(shuō),用好上述這些類加上基于OFBIZ的開發(fā)過(guò)程定義就可以了;但對(duì)于一個(gè)真正要用好OFBIZ的開發(fā)者,遠(yuǎn)不止上面這些,需要全面理解和掌握OFBIZ的流程、框架和代碼。總結(jié)
以上是生活随笔為你收集整理的使用OFBIZ的理由和不使用OFBIZ的理由的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常用DOS命令(jAVA开发时大多数用不
- 下一篇: Java程序基础——异常