Posted on 2005-12-07 15:54
笨笨 閱讀(2742)
評(píng)論(2) 編輯 收藏 所屬分類(lèi):
Java
With or Without EJB?
EJB 運(yùn)行時(shí)所享受的 J2EE 基礎(chǔ)服務(wù)
1 參與AppServer 提供分布式事務(wù)管理(JTA,JTS)。
2 AppServer 提供高性能通訊框架(基于RMI 或 IIOP實(shí)現(xiàn))和大并發(fā)處理。
1) AppServer 如 WebLogic/WebSphere 替換了 Sun 標(biāo)準(zhǔn) RMI 實(shí)現(xiàn)(基于著名的多線(xiàn)程阻塞IO),國(guó)內(nèi)的 Apusic 4 則基于純 NIO 的 IIOP通訊協(xié)議實(shí)現(xiàn)EJB 遠(yuǎn)程通訊。
2) AppServer 提供 EJB 實(shí)例池、請(qǐng)求隊(duì)列、執(zhí)行線(xiàn)程池等等服務(wù)。
3 AppServer 提供透明 EJB 集群管理(負(fù)載均衡、故障恢復(fù)),保證應(yīng)用的處理能力能夠水平擴(kuò)展。
4 J2EE 安全體系
5 AppServer 特有的附加增值服務(wù)
1) 如 WebLogic WTC EJB,可實(shí)現(xiàn)從TUXEDO Service(C語(yǔ)言) 高性能訪(fǎng)問(wèn) EJB。
大型項(xiàng)目所關(guān)注的重點(diǎn)
對(duì)于大型項(xiàng)目如全國(guó)集中這一級(jí)別而言,它所關(guān)注的重點(diǎn)風(fēng)險(xiǎn)反而是系統(tǒng)的性能、吞吐量、穩(wěn)定性、高可用性這樣的一些基本屬性,這里并非說(shuō)具體的業(yè)務(wù)功能就不重要;而是與上述的基本屬性相比,業(yè)務(wù)功能可以說(shuō)是相對(duì)的不重要。
基本屬性如果有某一項(xiàng)沒(méi)有達(dá)到,直接后果就是項(xiàng)目失敗,或者運(yùn)行時(shí)存在高風(fēng)險(xiǎn)。
業(yè)務(wù)功能則主要是堆時(shí)間、堆人、堆代碼、堆測(cè)試人員的問(wèn)題,如果實(shí)在來(lái)不及了,那就放到第二期去做好了,不影響主旋律么。
對(duì)于大型項(xiàng)目而言,采用新技術(shù)的關(guān)注點(diǎn)主要是:
1 能否滿(mǎn)足基本質(zhì)量屬性,無(wú)重大運(yùn)行時(shí)風(fēng)險(xiǎn)。
比如說(shuō),數(shù)據(jù)訪(fǎng)問(wèn)層,從性能和穩(wěn)定性角度而言,還算直接采用 JDBC 編碼合適,最多采用SQL映射型JDO。對(duì)于帶緩沖的JDO實(shí)現(xiàn)則不宜采用,會(huì)帶來(lái)水平擴(kuò)展和穩(wěn)定性風(fēng)險(xiǎn)。
2 項(xiàng)目組相關(guān)人員是否有此技術(shù)的經(jīng)驗(yàn),最好不要付出學(xué)習(xí)成本,避免因不熟悉所帶來(lái)的風(fēng)險(xiǎn)。
EJB 和 IoC 框架如 Spring 的定位比較
Spring IoC/Context/AOP 可以認(rèn)為是一個(gè)代碼組織(Assembler)框架,關(guān)注代碼如何組織和去耦。
EJB 則是運(yùn)行結(jié)構(gòu),關(guān)注我們的應(yīng)用如何運(yùn)行,如何做集群,系統(tǒng)計(jì)算資源如何分配等等。
EJB 3 的改進(jìn)主要還是從代碼組織角度做出的,對(duì)于 EJB 運(yùn)行時(shí)架構(gòu)并沒(méi)有多少變化(如果說(shuō)錯(cuò)了,還請(qǐng)指正);BEA 還有過(guò)將 EJB 3的代碼翻譯為 EJB 2.1 運(yùn)行時(shí)架構(gòu)的考慮(參見(jiàn) BEA 的關(guān)于 EJB 3 的一篇文章http://www.javaworld.com/javaworld/jw-08-2004/jw-0809-ejb_p.html)。
從上述角度來(lái)看,EJB 和 Spring 是從不同的角度看待應(yīng)用,我們完全可以做到用 Spring 組織代碼實(shí)現(xiàn)EJB。
With or Without EJB?
從上述討論可以看出,用Spring還是用EJB并不是個(gè)問(wèn)題,最終還是看用戶(hù)的實(shí)際需求而定。小Web項(xiàng)目多半不關(guān)注性能、并發(fā)、集群等等屬性,出于開(kāi)發(fā)過(guò)程簡(jiǎn)單和學(xué)習(xí)成本的考慮,完全可以不用EJB;而大型項(xiàng)目可能還是得用EJB。