[英]Should I use EJB3 or Spring for my business layer?
我的團隊正在開發一個帶有Web前端的面向服務的新產品。 在討論我們將使用哪些技術時,我們決定運行JBoss應用程序服務器和Flex前端(可能使用Adobe AIR進行桌面部署),以及用於連接客戶端和服務器的Web服務。
當涉及到我們的業務邏輯使用哪種服務器技術時,我們陷入了僵局。 EJB3和Spring之間的爭論很大,我們最關心的是可擴展性和性能,以及代碼庫的可維護性。
這是我的問題:
基於Performance,EJB3和Spring之間沒有太大區別。 我們選擇Spring的原因如下(問題中未提及):
顯然,EJB3和Spring之間的差距遠小於它。 也就是說,現在EJB3的一個缺點是你只能注入一個bean,所以你最終可以將組件轉換成不需要的bean。
關於單元測試的爭論現在相當無關緊要 - EJB3顯然是為了更容易進行單元測試。
上面的兼容性參數也是無關緊要的:無論您使用EJB3還是Spring,您仍然依賴於第三方提供的事務管理器,JMS等實現。
然而,為我提供的是社區的支持。 去年在EJB3項目上工作,並沒有很多人在那里使用它並談論他們的問題。 Spring,無論是正確還是錯誤,在企業中都非常普遍,特別重要,這使得找到遇到同樣問題的人更容易解決。
對於EJB3和Spring有什么爭論? Spring始終在創新並認識到現實世界的限制。 Spring為Java 1.4應用程序服務器提供了簡單和優雅,並且不需要在2004 - 2006年沒有人可訪問的J2EE規范版本。此時這幾乎是一個宗教辯論,你可以被吸引到 - Spring +抽象+開源與Java企業版(Java EE)5.0規范。
我認為Spring 補充的不僅僅是與Java EE規范的競爭 。 由於Spring曾經獨有的功能繼續被納入規范,許多人會爭辯說EJB 3為大多數內部業務應用程序提供了“足夠好”的功能集。
我可以期待哪些陷阱? 如果你把它視為持久性問題(Spring + JPA)而不是EJB3,你真的沒有做出那么大的選擇。
我在哪里可以找到好的基准信息? 我有一段時間沒有遵循specj基准測試結果 ,但它們很受歡迎。 似乎每個供應商(IBM,JBOSS,Oracle和Sun)對擁有兼容服務器的興趣越來越小。 從1.3,1.4開始,這些列表的認證供應商越來越短。 1.5 Java企業版。 我認為完全符合所有規范的巨型服務器的時代已經結束。
我肯定會推薦EJB3超過春天。 我們發現它更加簡化,編碼更好,更好地支持。 我過去使用Spring並發現它非常令人困惑,並沒有像EJB3那樣詳細記錄(或者我認為在一天結束時的JPA)
我不能說春天這么多,因為我只試了幾個星期。 但我對它的整體印象非常糟糕。 這並不意味着它是糟糕的框架,但我們的團隊發現EJB3是持久性/業務層的最佳選擇。
我傾向於選擇Spring而不是EJB3,但我的建議是采用哪種方法,盡可能堅持編寫POJO並盡可能使用標准注釋,例如@PostConstruct,@ PreDestroy和@Resource等JSR注釋,它們都適用於EJB3或Spring,以便您可以選擇您喜歡的任何框架。
例如,您可以決定使用Guice代替IoC。
如果你想在Web應用程序中使用預請求注入,你可能會發現Guice比依賴Spring注入要快得多。
會話bean主要歸結為依賴注入和事務; 所以EJB3和Spring真的有點類似。 Spring的優勢在於更好的依賴注入和更好的抽象,如JMS
我過去使用過非常相似的架構。 與Flex Data Services結合使用時,Spring + Java 1.5 + Actionscript 2/3使代碼變得非常簡單(而且很有趣!)。 但是,Flex前端意味着您需要功能強大的客戶端計算機。
關於你的問題:
對於EJB3和Spring有什么爭論?
我建議閱讀專家的回復: 回應:Mark 3的EJB 3和SPRING比較分析 。 閱讀評論以查找Reza Rahman的評論(EJB 3.0)。
支持spring的另一個好處是,大多數其他工具/框架都有更好的支持與spring集成,大多數內部也使用spring(例如activemq,camel,CXF等)。
它也更成熟,有更多的資源(書籍,文章,最佳實踐等)和經驗豐富的開發人員可用,而不是EJB3。
我認為EJB是一個很好的組件技術,但不是一個好的框架.Spring是迄今為止最好的框架。所以我認為Spring是框架意義上的最佳JEE實現,我的建議是每個都使用spring該項目使我們能夠輕松地與任何組件技術集成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.