簡體   English   中英

我應該將EJB3或Spring用於業務層嗎?

[英]Should I use EJB3 or Spring for my business layer?

我的團隊正在開發一個帶有Web前端的面向服務的新產品。 在討論我們將使用哪些技術時,我們決定運行JBoss應用程序服務器和Flex前端(可能使用Adobe AIR進行桌面部署),以及用於連接客戶端和服務器的Web服務。

當涉及到我們的業務邏輯使用哪種服務器技術時,我們陷入了僵局。 EJB3和Spring之間的爭論很大,我們最關心的是可擴展性和性能,以及代碼庫的可維護性。

這是我的問題:

  1. 對於EJB3和Spring有什么爭論?
    • 我可以期待哪些陷阱?
    • 我在哪里可以找到好的基准信息?

基於Performance,EJB3和Spring之間沒有太大區別。 我們選擇Spring的原因如下(問題中未提及):

  • Spring將架構推向更容易支持單元測試的方向。 例如,注入一個模擬DAO對象來對您的業務層進行單元測試,或者利用Spring的MockHttpRequest對象對servlet進行單元測試。 我們為單元測試維護一個單獨的Spring配置,允許我們將測試與特定層隔離。
  • 最重要的驅動因素是兼容性。 如果你需要支持多個App Server(或者最終希望選擇從JBoss轉移到Glassfish等),你將基本上隨身攜帶你的容器(Spring),而不是依賴於不同實現之間的兼容性。 EJB3規范。
  • Spring允許為Persistence,對象遠程處理等提供技術選擇。例如,我們也使用Flex前端,並使用Hessian協議在Flex和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)

  1. 從EJB3開始,您不再需要處理外部配置文件,並且每個數據庫表只有一個POJO注釋。 此POJO可以毫無問題地傳遞到您的Web層。 像Netbeans這樣的IDE甚至可以為您自動生成這些POJO。 我們現在使用EJB3作為很多大型應用程序的后端,並沒有發現任何性能問題。 您可以將會話Bean輕松地公開為可以向Flex前端公開的Web服務。 會話bean很容易在方法或類級別鎖定,以便在需要時分配角色和類似的東西。

我不能說春天這么多,因為我只試了幾個星期。 但我對它的整體印象非常糟糕。 這並不意味着它是糟糕的框架,但我們的團隊發現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM