該網(wǎng)站完全基于JFox進(jìn)行構(gòu)建,采用JFox MVC作為表現(xiàn)層框架,JFox EJB3作為邏輯層框架,JFox JPA作為持久層框架,上線之后,ChinaBrands一直穩(wěn)定和高效地運(yùn)行,感興趣的朋友可以訪問一下:www.chinabrands.net.
2007年4月1日 #
該網(wǎng)站完全基于JFox進(jìn)行構(gòu)建,采用JFox MVC作為表現(xiàn)層框架,JFox EJB3作為邏輯層框架,JFox JPA作為持久層框架,上線之后,ChinaBrands一直穩(wěn)定和高效地運(yùn)行,感興趣的朋友可以訪問一下:www.chinabrands.net.
這本書從策劃到創(chuàng)作再到定版發(fā)行,經(jīng)歷了半年多的時(shí)間,每一個(gè)參與者都付出了艱辛的努力,就在定稿之際,四川汶川突然發(fā)生的地震災(zāi)害,所有的參與者又一致同意將第一次發(fā)行的版稅以組委會(huì)的名義統(tǒng)一捐獻(xiàn)給災(zāi)區(qū),以參與開源協(xié)作來為賑災(zāi)貢獻(xiàn)一份力量,我想是每一個(gè)開源愛好者覺得最有意義的事情了。
從這次參與寫作《開源技術(shù)選型手冊》以及之前的幾件事情,我切身的感覺到國內(nèi)的開源環(huán)境正在逐漸向好的方向改變,不僅有越來越多的個(gè)人參與開源的項(xiàng)目的開發(fā),也有企業(yè)不斷加入到開源運(yùn)動(dòng)中來,更重要的是,還有越來越多的媒體開始主動(dòng)為開源搖旗吶喊,官方機(jī)構(gòu)也不斷主辦各種活動(dòng)來促進(jìn)開源運(yùn)動(dòng),完善的開源環(huán)境的形成將促進(jìn)國內(nèi)開源運(yùn)動(dòng)快速發(fā)展。
希望《開源技術(shù)選型手冊》能夠成為開源選型的黃頁,也希望國內(nèi)能夠涌現(xiàn)出更多優(yōu)秀的開源項(xiàng)目,成為《開源技術(shù)選型手冊》中的一員;希望我們早日實(shí)現(xiàn)開源大國向開源強(qiáng)國的轉(zhuǎn)變 :)
更多有關(guān)該書的資訊可以參考:
博文視點(diǎn)博客 http://blog.csdn.net/bvbook/archive/2008/05/22/2468977.aspx

1. Velocity升級至1.5
2. 支持提供多套數(shù)據(jù)庫腳本以適配多種數(shù)據(jù)庫
3. 增加 Request Token,防止 Form 重復(fù)提交
4. EJBContextExt提供Session訪問接口,方便在EJB中訪問Sesison數(shù)據(jù)
5. @ActionMethod增加name屬性,可以指定Action Method訪問名稱
6. 修正了一系列bug
訪問JFox網(wǎng)站: www.jfox.org.cn
下載 JFox 3.1
《JFox 3.1 參考指南》 下載PDF
在線演示 - 管理控制臺(tái)
在線演示 - Petstore
對話中,你可以詳細(xì)了解JFox 3.0新特性、JFox基礎(chǔ)架構(gòu)、JFox特色、OSGi相關(guān)內(nèi)容,以及如何加入JFox開源項(xiàng)目等內(nèi)容。
歡迎訪問InfoQ專題: 對話JFox 3.0核心開發(fā)人員
部分摘錄:
...應(yīng)用服務(wù)器輕量化,確實(shí)是個(gè)值得關(guān)注的問題,老一代的應(yīng)用服務(wù)器,WebSphere、WebLogic,甚至包括JBoss,都在離 lightweight越來越遠(yuǎn),而用戶總是喜歡簡單、輕量的東西,當(dāng)前工業(yè)設(shè)計(jì)以追求“簡約實(shí)用”為原則,軟件的設(shè)計(jì)也應(yīng)該如此。JFox確實(shí)在這方面做了很多的考慮,因?yàn)槲覀儽仨氝@么做,否則我們無法完成整個(gè)項(xiàng)目的開發(fā),我們的目標(biāo)就是“The most lightweight Java EE Application Server(最輕量級的JavaEE應(yīng)用服務(wù)器)”...
全文請看InfoQ文章:JFox主開發(fā)者楊泳解析3.0特性和設(shè)計(jì)架構(gòu)
更多JFox內(nèi)容請?jiān)L問 www.jfox.org.cn
作為一個(gè)架構(gòu)師,我對EJB是既愛且恨,對Spring又恨又愛,現(xiàn)在我們來也把這兩大技術(shù)體系來做一個(gè)全面分析和對比,希望能給大家在進(jìn)行技術(shù)選型時(shí)一個(gè)更好的參考。
1. 法制 VS “民主”
EJB規(guī)范一直由國際組織jcp(www.jcp.org)來制定,一經(jīng)通過,即作為官方標(biāo)準(zhǔn),且各廠商都會(huì)不遺余力的推動(dòng),所以對于企業(yè)應(yīng)用來說,EJB就是法,以EJB為企業(yè)應(yīng)用的基礎(chǔ)架構(gòu)暫且稱為法治; Spring來自開源社區(qū),由眾多的開源軟件開發(fā)者參與,逐步形成的一種流行的體系標(biāo)準(zhǔn),它的設(shè)計(jì)以IoC(反轉(zhuǎn)控制)為核心,提倡所謂的”零”侵入設(shè)計(jì)原則,這里暫且稱之為民主。
支持EJB的應(yīng)用服務(wù)器一般是一個(gè)大而全的產(chǎn)品,包括了構(gòu)建企業(yè)應(yīng)用需要的方方面面,如果需要額外擴(kuò)展一般不容易,如果對一個(gè)應(yīng)用服務(wù)器不滿意的話,那么可以且也只能更換整個(gè)應(yīng)用服務(wù)器了,好在由于應(yīng)用服務(wù)器市場百花齊放,從免費(fèi)到低端再到高端,您可以任意選擇;
Spring從IoC容器發(fā)展而來,通過不斷集成AOP、MVC、OR/Mapping以及幾乎您能想到的各項(xiàng)服務(wù)而提供完善的企業(yè)應(yīng)用架。對于一個(gè)應(yīng)用,你可以自由選擇具體的技術(shù)框架的實(shí)現(xiàn),SSH就是最常用一套組合,然而且不說是否每個(gè)架構(gòu)師擁有正確選擇的能力,無論如何,最終的選擇在設(shè)計(jì)之初一旦確定,要想更換便不那么容易,你不可能輕松的將一個(gè)基于Spring + Structs的應(yīng)用輕松的移植到Spring + WebWork,更不能輕松的將一個(gè)基于Spring + Hibernate的應(yīng)用輕松的移植到Spring + iBatis,所以對于需要長期維護(hù)和發(fā)展的應(yīng)用來說,將只能寄希望于你采用的框架都能夠很好的發(fā)展,并且能在升級的同時(shí)保證向前的兼容性。
綜上所述,EJB由于對于整個(gè)世界是標(biāo)準(zhǔn)的,就好像是一部國際法,一旦遵循,全球通用,你可以比較輕松的在WebSphere、WebLogic甚至JBoss之間進(jìn)行切換,所以如果選擇EJB,你將在一個(gè)”法制”的環(huán)境下獲得最大的民主;而Spring對于整個(gè)世界看似民主的,然而一旦整套架構(gòu)確定下來,卻成了專制,猶如美國式的民主,一旦被它征服,就成為它的專政統(tǒng)治了,想掙脫它的控制可就不那么容易了,其中的利害,大家細(xì)細(xì)品味吧。
2. 輕量級組件 VS 輕量級內(nèi)核 VS輕量級容器
關(guān)于輕量級內(nèi)核,不論屬實(shí)是否,現(xiàn)今的應(yīng)用服務(wù)器都宣稱采用了微內(nèi)核技術(shù),在此基礎(chǔ)上建立Java EE的各項(xiàng)服務(wù)構(gòu)建成完善的應(yīng)用服務(wù)器;而Spring本身就是一個(gè)基于IoC的輕量內(nèi)核,然后通過集成第三方的服務(wù)器來提供完整的架構(gòu)。
EJB組件曾經(jīng)被認(rèn)為是一個(gè)重量級的組件,而備受批評,EJB3規(guī)范的重要目標(biāo)就是簡化EJB的開發(fā),提供一個(gè)容器管理的輕量級的組件方案。
但是有必要提醒一下,輕量級的組件,并不意味著提供服務(wù)的容器是輕量的,不管是EJB2還是EJB3,應(yīng)用服務(wù)器因?yàn)樾枰芾斫M件的負(fù)責(zé)生命周期以及行為,并且內(nèi)置提供了各項(xiàng)服務(wù),容器自然是一個(gè)重量級的服務(wù);至少現(xiàn)在看來,現(xiàn)有的Application Server提供的容器都還不足夠的輕量,從個(gè)人偏好來說,我就非常喜歡JBoss 2.4這個(gè)版本,它有我需要的功能,同時(shí)又夠簡單,而現(xiàn)在, JBoss 4的啟動(dòng)速度已經(jīng)逐漸讓我對它對失去了耐心。
而對于Spring,也有同樣的問題,輕量級的內(nèi)核,也不意味著整個(gè)框架是輕量的,更不意味著基于Spring的整個(gè)應(yīng)用架構(gòu)是輕量的。對于Spring,你需要去尋找并粘合各種服務(wù),然后讓他們能夠穩(wěn)定的在一起工作,如果應(yīng)用對技術(shù)的需求較多,伸縮性要求也較高,你就會(huì)不斷的在應(yīng)用服務(wù)中加入其他服務(wù),如:資源池、消息隊(duì)列、集群等。當(dāng)加入這些后,Spring的解決方案已經(jīng)和Java EE Application Server解決方案一樣重量級了。
追求簡單、輕量,是每一個(gè)應(yīng)用架構(gòu)的目標(biāo),對于企業(yè)應(yīng)用的構(gòu)建來說,輕量級組件標(biāo)準(zhǔn)+輕量的內(nèi)核+輕量級的容器,并以此構(gòu)建輕量級的應(yīng)用平臺(tái),才是最終需要的。如果有輕量級的容器出現(xiàn),將幫助EJB3在企業(yè)應(yīng)用中重新占據(jù)有利的地位。
3. 可管理性與可控性
這個(gè)問題對于一次性交付的項(xiàng)目也許不是問題,但是對于質(zhì)量要求更高、生命周期更長的產(chǎn)品,卻是衡量平臺(tái)和架構(gòu)的重要因素。
基于 Spring 架構(gòu)的應(yīng)用,由于過分的自由和靈活,隨著項(xiàng)目的進(jìn)展,逐漸集成的第三方框架越來越多,很難保證集成的服務(wù)和編寫的組件中有沒有漏洞,甚至相互之間有嚴(yán)重的沖突,那么,掌控整個(gè)項(xiàng)目的質(zhì)量成了難題,光是一頁接一頁的配置文件,就知道今后的維護(hù)成本也就隨之增高,回想一下EJB2.0時(shí)代的ejb-jar.xml吧;而EJB因?yàn)榧傻亩际菢?biāo)準(zhǔn)服務(wù),而且組件模型也是固定的,加之應(yīng)用服務(wù)器一般提供控制臺(tái),用來查看運(yùn)行時(shí)的各項(xiàng)屬性,并可對服務(wù)進(jìn)行實(shí)時(shí)的管理,顯然比Spring開發(fā)的應(yīng)用可控性更好。
4. 功能性對比
4.1 IoC容器,AOP能力
在IoC的能力Spring要略強(qiáng)一些,但是在EJB3中可以完全用Annotation方式進(jìn)行注入,在開發(fā)上要簡單很多,對于一些相對比較固定的注入,采用Annotation更好,而對于一些可能需要經(jīng)常變動(dòng)的注入,XML更加靈活,EJB3剛好提供了這樣的兩種解決方案。如果你已經(jīng)患有XML恐懼癥,那么EJB3無疑將給您以解脫。
同時(shí),EJB3組件中,支持多種方式注入,比如依賴于名稱、接口或者JNDI名,另外還支持使用@PersistenceContext注入EntityManager,@Resource注入服務(wù)器資源,如EJBContext、TimerService等,而一些Annotation已經(jīng)成為JDK6的一部分,將來可能直接被JDK支持。
AOP方面,如果您需要徹底的AOP,并且在Spring中集成了AspectJ, 那么EJB3自然無法比擬,但是如果您的項(xiàng)目以夠用為原則,只需要一般方法攔截意義上的AOP,EJB3提供的各種回調(diào)方法應(yīng)該可以滿足您的要求了。
4.2 事務(wù)處理
EJB的看家本領(lǐng),Spring也通過提供TransactionTemplate以及集成第三方事務(wù)處理器來支持JTA,都支持申明式事務(wù),可以BMT,CMT,但無論如何,移植的器官總也沒有自身長的好吧。
4.3 分布式能力
一般使用Java EE體系的公司都認(rèn)為這是EJB的最大長處,但是實(shí)施并不如想象那樣,一來絕大多數(shù)都是Web應(yīng)用,依賴Web提供的分布式能力已經(jīng)可以滿足90%的需要了,二來大家基本上都是Web容器和EJB容器整體部署,EJB組件的分布部署少之又少。當(dāng)然如果您需要Web層和應(yīng)用層分開部署,那么Spring一定不在你的考慮范圍之內(nèi)了。
4.4 Cluster能力
Cluster也是EJB的傳統(tǒng)優(yōu)勢,但是老師說,能夠發(fā)揮EJB集群優(yōu)勢的地方并不多,因?yàn)榧词鬼?xiàng)目中采用了EJB,一般也采用Stateless SessionBean,而使用HttpSession Cluster,既然如此,無論EJB還是Spring,大家都是平等的。當(dāng)然,如果您正在構(gòu)建一個(gè)大型的應(yīng)用,對集群的能力要求非常高,比如需要事務(wù)級的Cluster,而且還有分布式的需求,那么估計(jì)沒有多少因素會(huì)讓您考慮Web Server + Spring的架構(gòu)了。
4.5 Web Service
EJB3中的Web Service和EJB組件集成得如此之好,使用起來再簡單不過了,如下面實(shí)例所示,JAX-WS也將逐步成為Java Web Service事實(shí)標(biāo)準(zhǔn);至于Spring可以實(shí)現(xiàn)各種基于Http的遠(yuǎn)程調(diào)用方法,其優(yōu)勢并不明顯。
@Stateless
@Remote
@Local
@WebService(endpointInterface =
"jfox.test.ejb3.webservice.Calculator")
public class CalculatorBean
implements CalculatorRemote, CalculatorLocal {
public int add(int x, int y) {
return x + y;
}
public int subtract(int x, int y) {
return x - y;
}
}
4.6 集成第三方框架
如果需要集成第三方框架的時(shí)候,估計(jì)您需要Spring了,當(dāng)然前提是Spring 已經(jīng)給出很好的集成方案;而如果采用EJB,則需要視特定的應(yīng)用服務(wù)器了,推薦當(dāng)類庫來用,或者使用context listener來啟動(dòng),是在不行,只能基于特定的應(yīng)用服務(wù)器來進(jìn)行集成,一般來說,應(yīng)用服務(wù)器均提供了JMX集成能力。
5. 總結(jié)
縱觀人類歷史,官方過于強(qiáng)勢,則必然官逼民反;而民間力量過于強(qiáng)大,社會(huì)必將不穩(wěn)定,這都是我們不愿看到的,在技術(shù)世界里也一樣。對于EJB3和Spring這兩種方案,Spring現(xiàn)在處于壓倒性的優(yōu)勢一方,希望EJB3的出現(xiàn),一來能為官方挽回一些失去的領(lǐng)地,二來也能繼續(xù)引發(fā)更多的探討,不再拘束于一家之言,只有百家爭鳴的環(huán)境,才能讓開發(fā)人員和架構(gòu)人員對企業(yè)應(yīng)用的構(gòu)建認(rèn)識得更加完善,所以最好的方式是EJB3和Spring互相促進(jìn),和諧發(fā)展。
期待一個(gè)輕量的真正以開發(fā)需求為中心的EJB3應(yīng)用服務(wù)器的出現(xiàn),為疲軟的EJB市場注入新的活力!
Infoq鏈接: http://www.infoq.com/cn/articles/ejb3-spring-compare