EJB知識

EJB(Enterprise JavaBeans)是 Java EE(現稱 Jakarta EE)平臺的核心技術之一,用于開發分布式、可擴展、事務性的企業級應用。以下從基礎到高級全面解析 EJB:

一、EJB 基礎概念

1.?定義與角色

EJB 是服務器端組件模型,提供事務管理、安全控制、遠程訪問等企業級服務,無需手動編寫底層代碼。

2.?EJB 類型
  • 會話 Bean(Session Bean)
    • 無狀態會話 Bean(Stateless):不保存客戶端狀態,適合批量處理、數學計算等。
    • 有狀態會話 Bean(Stateful):保存客戶端會話狀態,如購物車。
    • 單例會話 Bean(Singleton):全局唯一實例,適合緩存、配置管理。
  • 實體 Bean(Entity Bean):已被 JPA(Java Persistence API)取代。
  • 消息驅動 Bean(Message-Driven Bean, MDB):異步處理 JMS 消息,解耦服務。

二、EJB 核心組件

1.?接口與實現
  • 業務接口:定義客戶端調用的方法(如Calculator接口)。
  • 實現類:使用@Stateless/@Stateful/@Singleton注解(如CalculatorBean)。
2.?生命周期管理
  • 容器管理 Bean 的創建、池化、銷毀,無需手動管理內存。
3.?事務管理
  • 容器管理事務(CMT):通過@TransactionAttribute注解控制事務邊界(如REQUIREDREQUIRES_NEW)。
  • Bean 管理事務(BMT):手動控制事務(UserTransaction)。
4.?安全機制
  • 聲明式安全:通過@RolesAllowed注解限制方法訪問權限。
  • 編程式安全:通過EJBContext.isCallerInRole()檢查權限。

三、EJB 開發流程

1.?開發步驟示例

定義業務接口

實現無狀態會話 Bean

import javax.ejb.Stateless;@Stateless
public class CalculatorBean implements Calculator {@Overridepublic int add(int a, int b) {return a + b;}
}

客戶端調用

import javax.naming.Context;
import javax.naming.InitialContext;public class Client {public static void main(String[] args) throws Exception {Context ctx = new InitialContext();Calculator calculator = (Calculator) ctx.lookup("java:global/ejb-demo/CalculatorBean!com.example.Calculator");int result = calculator.add(5, 3);System.out.println("Result: " + result);}
}

四、高級特性

1.?遠程與本地訪問
  • 本地接口:同一 JVM 內調用(@Local)。
  • 遠程接口:跨 JVM 調用(@Remote),需配置 JNDI 和網絡協議。
2.?攔截器(Interceptor)
  • 通過@AroundInvoke注解實現方法調用前后的切面邏輯(如日志、性能監控)。
3.?定時器服務(Timer Service)
  • 使用@Schedule注解創建定時任務(如每日數據備份):
@Singleton
public class SchedulerBean {@Schedule(hour = "0", minute = "0")public void dailyBackup() {// 執行備份邏輯}
}
4.?依賴注入(DI)
  • 通過@EJB注解注入其他 EJB:
@Stateless
public class OrderService {@EJBprivate InventoryService inventoryService; // 注入另一個EJB
}
5.?異步方法調用
  • 使用@Asynchronous注解實現異步處理:
@Asynchronous
public Future<String> processLargeFile() {// 長時間任務...return new AsyncResult<>("處理完成");
}

五、EJB 與其他技術的關系

  1. 與 JPA 的結合:通過@PersistenceContext注入 EntityManager 管理數據庫操作。
  2. 與 JMS 的結合:MDB 監聽 JMS 隊列 / 主題,實現消息驅動架構。
  3. 與 CDI 的結合:使用 CDI(Contexts and Dependency Injection)替代部分 EJB 功能。

六、部署與容器

  • 應用服務器:WildFly、GlassFish、WebLogic 等。
  • 部署描述符ejb-jar.xml(可選,推薦使用注解)。

七、最佳實踐

  1. 優先使用無狀態 Bean:提高可擴展性。
  2. 細粒度事務控制:避免長事務。
  3. 避免 EJB 循環依賴:通過接口解耦。
  4. 性能優化:合理配置池大小、使用異步處理。

八、常見問題

  1. 遠程調用性能:網絡開銷大,優先使用本地調用。
  2. 事務超時:通過@TransactionTimeout調整超時時間。
  3. JNDI 查找復雜性:使用依賴注入簡化查找。

九、EJB 3.2+ 新特性

  • 輕量級 EJB:支持嵌入式容器,減少對重量級應用服務器的依賴。
  • WebProfile:簡化 EJB 規范,適用于 Web 應用。

十、與微服務對比

  • EJB:適合單體應用,依賴 Java EE 容器,強事務一致性。
  • 微服務:分布式架構,松耦合,語言無關,需額外實現服務發現、熔斷等機制。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86125.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86125.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【項目管理】項目管理資料文檔模板(ZIP,PPT,WORD)

項目交付文檔 01項目詳細調研計劃編寫規范V1.0.doc 03項目詳細調研報告編寫規范V1.0.doc 07軟件需求規格說明書評審規范V1.0.doc 10.軟件需求規格說明.doc 產品檢查單,xls 工程評審.zip 軟件標準過程集.zip 系統測試管理規程.docx 四)項目管理計劃.doc 項目管理系統實施項目管理…

CentOS 6 Linux 系統添加永久靜態路由的方法詳解!

全文目錄&#xff1a; 開篇語 **【詳解】**1. **靜態路由的概念與應用場景**1.1 **靜態路由簡介**1.2 **靜態路由的應用場景** 2. **臨時添加靜態路由**2.1 **使用 route 命令臨時添加靜態路由**示例&#xff1a;添加一個臨時路由 2.2 **查看當前路由表**2.3 **臨時路由的局限性…

(mysql、oracle、pgsql、mongodb、redis、es)主流數據庫的核心差異

以下是主流數據庫的核心差異及適用場景的全面對比&#xff0c;結合技術特性和實際應用需求整理&#xff1a; &#x1f4ca; 一、數據庫分類與核心差異 1. 關系型數據庫&#xff08;RDBMS&#xff09; 數據庫核心特點適用場景MySQL開源、讀寫性能均衡&#xff0c;易用性高&…

第8章:智能菜譜生成器——語言模型如何解析烹飪秘方

第8章:智能菜譜生成器——語言模型如何解析烹飪秘方 從語義理解到操作執行的完整技術解密 工業案例背景: 法國里昂的Bocuse d’Or國際烹飪大賽選手手冊中記載這樣一道經典指令:“將醬汁熬煮至Napp狀態(即勺子劃過痕跡緩慢回填)”。當傳統NLP系統將其簡單譯為"煮濃&q…

零基礎學前端-傳統前端開發(第四期-JS基礎)

經過前面學過的HTML,CSS的學習&#xff0c;相信大家已經可以使用進行常用的頁面開發&#xff0c;接下來我們就要學習JavaScript&#xff0c;鑒于內容過多&#xff0c;需要長期練習 流程為&#xff1a;數據類型>>運算>>語法&#xff0c;語句>>對象>>數組…

機器學習-- 數據、數據集、評價模型

處理數據 相比于構建模型&#xff0c;機器學習從業者需要花更多的時間來評估、清理和轉換數據。 數值數據表示整數或浮點值 其行為方式與數字類似的函數。也就是說&#xff0c;它們是可累加的、可數的、有序的&#xff0c; 依此類推。 盡管有些數據是是以數字方式存在&#…

Contos7 切換Yum源

最近朋友接了個活&#xff0c;需要部署的服務器是Contos7的&#xff0c;然后需要安裝Docker&#xff0c;無法通過yum命令安裝&#xff0c;Contos7的yum源已經不能使用了&#xff0c;那怎么辦呢&#xff0c;我們可以切換為阿里云的yum源&#xff0c;具體操作如下 1.備份 mv /e…

本地編譯LibreHardwareMonitor

剛更換了內存條和加裝了一塊固態硬盤&#xff0c;想看看更換和加裝的硬件有沒有問題&#xff0c;于是想到了使用軟件監控硬件的溫度是否有異常。在網上查了相關資料&#xff0c;看到了LibreHardwareMonitor這個工具。 1、下載LibreHardwareMonitor 源碼 打開git 命令窗口&…

windows11 + ubuntu2204雙系統+ros2 humble安裝

文章目錄 win11 ubuntu22 雙系統準備工作步驟 1&#xff1a;使用 Rufus 制作 Ubuntu 啟動盤步驟 2&#xff1a;設置 BIOS/UEFI 啟動項步驟 3&#xff1a;安裝 Ubuntu 22.04步驟 4&#xff1a;后續配置常見問題 ROS2 Humble 安裝一、準備工作二、安裝 ROS 2三、設置環境變量四、…

基于StarRocks的指標平臺查詢加速方案

項目背景 指標管理平臺按指標查詢類型可以劃為落表指標和即席查詢指標。 落表指標&#xff1a;可選擇不同的維度生成多個結果表(每天提交任務寫入結果表)&#xff0c;對指標進行取數的時候會根據查詢條件自動匹配最合適的結果表進行查詢。 即席查詢指標&#xff1a;不產生結果…

Javaweb - 5 事件的綁定

目錄 什么是事件 常見事件 鼠標事件 鍵盤事件 表單事件 事件的綁定方式 通過元素的屬性綁定 通過 DOM 編程動態綁定 總結&#xff1a; 什么是事件 HTML 事件可以是瀏覽器行為&#xff0c;也可以是用戶和行為。當一些行為發生時&#xff0c;可以自動觸發對應的 JS 函數…

怎么讓二級域名綁定到wordpesss指定的頁面

要將二級域名(如 beijing.wodepress.com)綁定到 WordPress 指定頁面(如 wodepress.com/beijing)&#xff0c;可以通過以下步驟實現&#xff1a; 1. 設置泛域名解析 在域名注冊商的管理后臺&#xff0c;添加一條泛域名解析記錄&#xff1a; 主機記錄&#xff1a;輸入 *(星號)…

Ragflow源碼:launch_backend_service.sh

流程圖 #mermaid-svg-hRqGAXWC651HHOLZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hRqGAXWC651HHOLZ .error-icon{fill:#552222;}#mermaid-svg-hRqGAXWC651HHOLZ .error-text{fill:#552222;stroke:#552222;}#me…

前端的跨域問題

前端新手也能看懂的跨域問題詳解 在前端開發中&#xff0c;我們經常會聽到“跨域問題”。尤其是在本地調試前端和后臺接口時&#xff0c;瀏覽器突然拋出一堆報錯信息&#xff0c;比如&#xff1a; Access to XMLHttpRequest at [http://api.xxx.com/data](http://api.xxx.com…

TCP 連接在異常情況下的斷開機制

文章目錄 一、進程(客戶端)被 kill 掉1、kill [-15]2、kill -9 二、進程(客戶端) core 掉 一、進程(客戶端)被 kill 掉 詳細驗證流程 1、kill [-15] 2、kill -9 二、進程(客戶端) core 掉

【甲方安全建設】持續滲透測試(一)

持續滲透測試是一種現代安全方法&#xff0c;它對針對組織數字資產的網絡攻擊進行實時或近實時模擬&#xff0c;確保在漏洞出現時識別并解決漏洞… 文章目錄 行業洞察持續滲透測試不是什么&#xff1f;1. 非單一自動化漏洞掃描2. 非傳統人工滲透測試的替代品3. 非萬能解決方案4…

LOCAL PATTERNS GENERALIZE BETTER FOR NOVEL ANOMALIES

標題&#xff1a;局部模式在新穎異常上的泛化能力更強 原文鏈接&#xff1a;https://openreview.net/forum?id4ua4wyAQLm 源碼鏈接&#xff1a;https://github.com/AllenYLJiang/Local-Patterns-Generalize-Better/ 發表&#xff1a;ICLR-2025 摘要 視頻異常檢測&#xff08;…

ABP vNext + Azure Application Insights:APM 監控與性能診斷最佳實踐

ABP vNext Azure Application Insights&#xff1a;APM 監控與性能診斷最佳實踐 &#x1f680; &#x1f4da; 目錄 ABP vNext Azure Application Insights&#xff1a;APM 監控與性能診斷最佳實踐 &#x1f680;1?? 集成目標與環境要求 2?? 安裝 SDK 與注入服務 3?? 日…

OPENGLPG第九版學習 - 紋理與幀緩存 part1

文章目錄 6.1 紋理綜述6.2 基木紋理類型6.3 創建并初始化紋理代理紋理 6.4 指定紋理數據6.4.1 顯式設置紋理數據將靜態數據載入到紋理對象 6.4.2 從緩存(目標對象GL_PIXEL_UNPACK_BUFFER)中加載紋理6.4.3 從文件加載圖像(DDS為例)讀取一個圖像文件并返回內存中的紋素數據將紋素…

誰來定義未來座艙?新一代車載顯示「C位」之戰開啟

在汽車智能網聯化轉型過程中&#xff0c;車載顯示屏幕作為人車交互的重要載體&#xff0c;已經站上了迅猛發展的新起點。 一方面&#xff0c;伴隨著汽車智能化的加速滲透與發展&#xff0c;傳統中控屏與儀表顯示屏的單一顯示模式已經難以匹配智能化交互需求&#xff0c;車載顯…