帶你走進EJB--EJB和Spring對比(轉)

来源:http://www.cnblogs.com/Zyf2016/archive/2017/02/18/6414262.html
-Advertisement-
Play Games

http://blog.csdn.net/jnqqls/article/details/17723417 通過對EJB系列的總結和學習我們已經對EJB有了基本的瞭解,但是為了更進一步的去深入學習EJB,我們很有必要將它拿出來跟之前非常熟悉的spring進行一下對比,通過對比來瞭解這兩個內容的相同與不 ...


http://blog.csdn.net/jnqqls/article/details/17723417

通過對EJB系列的總結和學習我們已經對EJB有了基本的瞭解,但是為了更進一步的去深入學習EJB,我們很有必要將它拿出來跟之前非常熟悉的spring進行一下對比,通過對比來瞭解這兩個內容的相同與不同之處,更有利於我們對兩者進行深入的瞭解.

 

      我們都有過這樣的經歷,在開發應用程式的時候,選擇哪個技術是比較有學問的.在我最近的面試過程中也有很多問道關於技術選型的問題,舉一個比較典型的例子比如:為什麼你們的系統要選擇EJB3.0而不選用Spring或者為什麼選擇Spring不選擇EJB.

 

      一般而言我們會針對特定的問題會採用哪種技術能夠最有效的解決它?這樣的決定並不是很輕易的就能做出來的.我們需要瞭解各自的優勢和劣勢.接下來我們將會對SpringEJB進行一系列的對比.

 

    我們首先需要瞭解的一個概念是Spring是一個具體的實現,EJB3.0J2EE的規範,這是大的概念上的不同.但是在具體的一些地方他們兩個又有著許多的共同點.例如,他們都提供把中間件服務傳遞到 Java 應用。如果看一下歷史會更清楚明瞭一些,Spring 被開發出來就是為了反對 EJB ,當然,那時候的EJB2的確有著自身很多的不足,但是隨著新版本的 EJB 發佈, EJB3.0 究竟剋服了以前版本的一些缺點,並且借鑒了Spring的相關內容.

  

  SpringEJB他們各自都提供了那些功能?從這個最直接的問題入手能夠直觀的看到他們各自的特點.Spring定義成分層的J2EE應用框架.EJB則是針對面向對象,分散式的企業級應用開發和部署組件架構.一個是框架,一個是架構.框架更多的是實現,而架構更多的是定義.

  

     關於數據持久化

     

        關於數據持久化這一個關鍵的部分,SpringEJB3.0都對其提供了良好的支持。Spring把眾多流行的持久化框架集成進來,包括JDBChibernateJDOiBatisJPAEJB3.0的出現將實體beanJPA取代。JPA致力於提供一個簡單的、輕量級的OR映射框架。這個規範定義了兩個介面,一個用於在persistence provider間交互,另一個用於在實體和關係資料庫之間建立映射。

 

       在EJB3中通過使用@PersistenceContext註釋提供的entityManager對象來獲得JPA的數據訪問,而在Spring中,通過對SessionFactory對象的註入獲得Hibernate數據訪問。我們很多人會預設為EJB使用JPA來操作數據對象,而Spring使用Hibernate來操作數據對象。但實際上,Spring同樣支持使用JPA來操作數據對象,並且Spring可以通過@PersistenceContext註釋來支持JPA。

 

 

關於輕量級和重量級

 

     輕量級框架和重量級框架解決問題的側重點是不同的。

      Spring為代表的輕量級框架側重於減小開發的複雜度,相應的它的處理能力便有所減弱(比較適用於開發中小型企業應用。採用輕量框架一方面因為儘可能的採用基於POJOs的方法進行開發,使應用不依賴於任何容器,這可以提高開發調試效率;另一方面輕量級框架多數是開源項目,開源社區提供了良好的設計和許多快速構建工具以及大量現成可供參考的開源代碼,這有利於項目的快速開發。

 

     而作為重量級框架EJB強調高可伸縮性,適合與開發大型企業應用。在EJB體繫結構中,一切與基礎結構服務相關的問題和底層分配問題都由應用程式容器或伺服器來處理,且EJB容器通過減少資料庫訪問次數以及分散式處理等方式提供了專門的系統性能解決方案,能夠充分解決系統性能問題。

 

       輕量級框架的產生並非是對重量級框架的否定,甚至在某種程度上可以說二者是互補的。輕量級框架在努力發展以開發具有更強大,功能更完備的企業應用;而新的EJB規範EJB3.0則在努力簡化J2EE的使用以使得EJB不僅僅是擅長處理大型企業系統,也利用開發中小型系統,這也是EJB輕量化的一種努力。對於大型企業應用以及將來可能涉及到能力擴展的中小型應用採用結合使用輕量級框架和重量級框架也不失為一種較好的解決方案。

     

   

  提供商無關性

 

   開發者選擇JAVA平臺的一個最重要的原因就是它的提供廠商無關性。EJB3.0是一個被設計為對提供商沒有依賴性的開放的標準。EJB 3.0規範由企業JAVA社區的主流開源組織和廠商共同編寫和支持的。EJB3.0框架使開發者的應用程式實現可以獨立於應用伺服器。

 

   比如,JBoss的EJB3.0的實現是基於Hibernate的,Oracle的EJB3.0實現是基於TopLink的,但是,在JBoss或者Oracle上跑應用程式,開發者既不需要去學習Hibernate,也不需要學習TopLink提供的獨特API。廠商無關性使EJB3.0框架區別於當前其他任何的POJO中間件框架。

 

   很多人認為,儘管在任何應用伺服器都上可以使用Spring框架,但基於Spring的應用仍然被限制於Spring本身,以及在應用中使用到的Spring提供的各種特別服務。但事實上是不是如此呢?大家應該知道,Spring的應用程式中,JtaTransactionManager使用了自動檢測機制,不管是MBeans應用伺服器還是Tomcat應用伺服器。同理,當使用JPA時,Spring自動檢測persistence.xml文件,並且創建EntityManagerFactory對象。在上面這些機制中,Spring不管是採用註釋還是採用XML,都可以像EJB應用一樣的與應用伺服器提供商無關。

 

    

參考文章:Make the Right Decision with Our Side-by-Side Comparison of Springand EJB 3.0


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本來不想寫的網上的東西羅嗦死了 ...
  • 首先引入下麵這段生產者和消費者的程式,店員類作為生產產品和消費產品的中介,其中的數據product為共用數據,產品最多只能囤積5個,當產品達到5個還在生產時,就會提示“產品已滿!”,類似地,如果產品只有0個了還在消費,會提示“缺貨!”: 運行程式,結果如下: 這是一種不好的情況,因為當產品已滿時,還 ...
  • package com.open1111.jsoup; import org.apache.http.HttpEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.clien ...
  • 在 "java註解生成xml和包含CDATA問題" 裡面做了介紹,這裡直接貼代碼。 1:生成xml的java文件 setEscapeText 設置為false,最為重要 2:生成後的xml,上面的第三種才能生成正確的結果! 文件:在D:/test.xml 3: 參考文章 (1): "Dom4j格式化 ...
  • 百度java生成xml,有一大推的文章,主要的生成方式一種使用Dom4J ,還有一種使用Jdk自帶註解類! 下麵主要整理我註解類的使用,(可以參考這篇文章 "Dom4J生成xml和包含CDATA問題" )和xml中CDATA 問題的解決方法! 1:要生成的xml原始文件! 2:xml對應的model ...
  • 不少新改進。 https://blog.golang.org/go1.8 不過據說有issue:http服務比上個版本慢些。對於普通用戶來說影響應該不大,繼續關註。 創意設計,版權所有 :) ...
  • 使用new初始化對象中的指針成員時遇到的問題 在構造函數中使用new初始化指針成員,那麼析構函數中就必須使delete,並且new對應delete, new[]則對應於delete[]。 在有多個構造函數的情況下,必須以相同的方式使用new,要不用new,要不用new[],因為只存在一個析構函數,所 ...
  • cookie,很多網站都會用的一個機制,可以保存用戶的相關信息,token等等,很多人熟知的應該是第一方cookie,可以針對二級功能變數名稱進行信息的保存,如果遇到跨域的情況,那麼第一方cookie是沒有用的,因為他做不到跨域。但是可以利用第三方cookie來實現這一的機制,第三方cookie不僅可以存儲 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...