JBoss5迎來可配置時(shí)代
面向?qū)ο蟮旎酥籊rady Booch說:The great thing about objects is they can be replaced.對(duì)象最偉大的之處是其可被替代(這也是使用OO的主要原因之一)。
每個(gè)對(duì)象都是可替代意味著高度的靈活性,我們?cè)?jīng)夢(mèng)想的“按需裝配”時(shí)代已經(jīng)來臨,由Ioc模式/依賴注射組成微容器可以幫助我們實(shí)現(xiàn)對(duì)象的可替代性。
Spring/HiveMind 包括Jdon Framework都是Ioc組成的一種微容器,在Java企業(yè)系統(tǒng)架構(gòu)選擇考量一文中,我已經(jīng)在靈活性方面對(duì)幾個(gè)組件架構(gòu)進(jìn)行了比較。
其中一個(gè)重要的疑問:EJB3是POJO嗎?這里面有兩個(gè)概念:EJB3是否支持POJO?EJB3本身是否是POJO?前者答案是肯定的,但是后者則曾經(jīng)是否定的。
在回答之前,我們必須對(duì)POJO有一個(gè)詳細(xì)了解,最初POJO是相對(duì)EJB提出的,Martin Fowler 對(duì)POJO定義是:我發(fā)現(xiàn):人們已經(jīng)忘記了原來正常的Java Object,因?yàn)檫@些對(duì)象還沒有一個(gè)很特殊的名字,....這樣我?它們?nèi)∶麨镻OJO(Plain Old Java Object), 一個(gè)POJO domain model容易放在一起,快速build,在EJB容器以外運(yùn)行和測(cè)試,并且不依賴EJB。
但是,隨著EJB3支持POJO,POJO的概念從原來相對(duì)EJB的定義已經(jīng)引申開來,代指一種相當(dāng)靈活的對(duì)象,也就是可被隨時(shí)替換的對(duì)象,不因?yàn)橐栏饺魏慰蚣芏荒鼙惶鎿Q。
那么,EJB3本身是否是POJO?實(shí)際意義是EJB container是否是POJO,也就是說:EJB本身組件是否可被替換?
正如我在Java企業(yè)系統(tǒng)架構(gòu)選擇考量一文中所寫,當(dāng)我們只需要EJB3的集群,而事務(wù)等基礎(chǔ)功能都不需要時(shí),EJB服務(wù)器是否支持我們這種任意配置和切割?或者我想替代其中一個(gè)基礎(chǔ)功能,是否可任意供我們切換,也就是Grady Booch那句話:對(duì)象是否可替換?
當(dāng)然,在這場(chǎng)“EJB3是否是POJO”討論中,有人引用一些老外名言:EJB3本身是否是POJO沒有討論意義,可惜說這話的老外自己的概念沒有達(dá)到最新理念上。
那么,作為一種組件結(jié)構(gòu),是否可以既支持應(yīng)用系統(tǒng)的任何一個(gè)組件對(duì)象可替換,而且也支持框架本身的組件也是可替換,這個(gè)境界是否可以達(dá)到呢?
完全沒有問題,目前,開源軟件HiveMind和Jdon框架都是支持徹底的可替換,所謂徹底的可替換就是框架本身一些功能也是可配置,可嵌入的,而不只是應(yīng)用程序是可替換的。
這就實(shí)現(xiàn)了組件架構(gòu)的完全的、徹底的可配置性,是一種Embeddable或Plug-in架構(gòu),這樣的架構(gòu)可允許開發(fā)者介入任何一個(gè)層次進(jìn)行拓展和維護(hù),從而形成強(qiáng)大的可定制性和可拓展性,可以使用建筑的一個(gè)比喻,這種Embeddable架構(gòu)類似鋼筋結(jié)構(gòu)建筑,它只有固定幾個(gè)框架和板筋,你喜歡劃分什么樣的房間完全由你來決定。唯一的限制是你的想像了。
JBoss微容器將是徹底的反轉(zhuǎn)控制,依賴注射的輕量容器,它允許你通過XML配置POJO,這些POJO有自己的生命周期,能夠作為服務(wù) Service,它并不需要JBoss的應(yīng)用服務(wù)器,..大多數(shù)JBoss提供的功能將都會(huì)轉(zhuǎn)為POJO,并且可配置...這些都將在2006年的 JBoss5版本中完全實(shí)現(xiàn)。
對(duì)于現(xiàn)在大部分初學(xué)者來說,首先需要從Jsp中嵌入Java代碼的壞習(xí)慣中改變過來,將你的Java代碼使用組件JavaBeans來實(shí)現(xiàn),然后逐步走上面向組件(面向構(gòu)件)的開發(fā)方式,進(jìn)而上升到可徹底配置的組件化編程層次。
在JBoss5推出之前,J2EE曾經(jīng)被指責(zé)為In-House,也就是說,很多功能被綁定在J2EE服務(wù)器上,誕生很多基于JBoss、基于Weblogic的、基于Oracle的、甚至基于JMX的J2EE應(yīng)用系統(tǒng),當(dāng)這樣的J2EE應(yīng)用系統(tǒng)需要移植時(shí),那些依附特性因?yàn)楹腿萜?服務(wù)器粘性太牢,而無法跟著應(yīng)用系統(tǒng)跑。
因此多年來,應(yīng)用者業(yè)界一直呼吁Out-of-Box,Spring/HiveMind/Jdon等框架應(yīng)呼而生,并且Rod Johnson在2005 JavaOne大會(huì)上演講上預(yù)言:J2EE/Java EE將走向一個(gè)以框架為中心的新的開發(fā)時(shí)代。這樣,應(yīng)用系統(tǒng)依賴的很多功能在框架中實(shí)現(xiàn),而框架是可以和應(yīng)用系統(tǒng)到處移植的。
顯然,這種Out-of-Box的倡導(dǎo)對(duì)JBoss路線提出了挑戰(zhàn),JBoss奮起反應(yīng),你們既然指責(zé)我的容器是一個(gè)Box,那么我們就一不做二不休息,打破這個(gè)Box,JBoss5即將誕生,因?yàn)镴Boss5本身是可肢解可配置的,因此,使用JBoss5編制的Java EE應(yīng)用系統(tǒng)需要移植時(shí),可以將應(yīng)用系統(tǒng)依賴的那些功能從JBoss5容器中分離出來,帶著跑,這樣你的應(yīng)用系統(tǒng)又符合Java EE標(biāo)準(zhǔn),在特殊之處,也可以將容器作為一種框架帶了跑。
當(dāng)然,因?yàn)槟壳暗腏2EE標(biāo)準(zhǔn)包括EJB離實(shí)際開發(fā)還有一段路,它沒有提出一種編程模型,因此作為符合標(biāo)準(zhǔn)的應(yīng)用服務(wù)器JBoss在實(shí)際應(yīng)用中還是需要開發(fā)框架輔助的,Spring提供強(qiáng)大全面的API庫(kù);HiveMind提供靈活的配置功能;而Jdon框架在徹底可配置基礎(chǔ)上,瞄準(zhǔn)應(yīng)用開發(fā)中的增刪改查這些功能進(jìn)行缺省實(shí)現(xiàn),提高開發(fā)效率,避免大規(guī)模開發(fā)中這些純勞動(dòng)量的低層次工作。
圍繞Out-of-box 和break the box,未來組件(構(gòu)件)架構(gòu)領(lǐng)域?qū)⒂幸环瑺?zhēng)奪,有人說,你怎么忘記談Weblogic和Websphere了?有一點(diǎn)我忘記說了,這場(chǎng)完全可配置運(yùn)動(dòng)是由開源領(lǐng)域挑起的,也就是說,在組件架構(gòu)設(shè)計(jì)上,開源運(yùn)動(dòng)已經(jīng)走在了工業(yè)界前面,工業(yè)界巨頭們都跑去搞他們賺錢的強(qiáng)項(xiàng):集成和SOA了。
【編輯推薦】