首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

EJB 3.x 基礎知識入門指南:核心特性、容器服務與新特性全解析

     編輯:Java 相關知識

什麼是 EJB?

Enterprise JavaBeans (EJB)** 是 Java EE 標準的**服務端組件模型**,提供可移植、可重用、可伸縮的業務應用開發平台。EJB 組件運行在 EJB 容器中,容器提供企業級服務,開發者專注業務邏輯。

為什麼選擇 EJB?

優勢說明
易用性容器提供事務、安全、持久化等服務,開發者零配置/少配置使用
集成解決方案應用服務器(WebLogic、WildFly、WebSphere)內置完整 Java EE 技術棧
開放標準Java EE/Jakarta EE 規範,避免廠商鎖定
廣泛廠商支持Oracle、IBM、Red Hat、TomEE 等主流服務器實現
高質量代碼基礎經過大規模生產驗證的成熟技術
集群與高可用內置負載均衡、故障轉移、會話複製
可重用組件業務邏輯封裝為組件,跨應用復用

EJB 容器提供的 13 大核心服務

  1. 集成:JNDI、JMS、JCA、Web Services 統一接入
  2. 池化:無狀態 Bean、數據源、連接池自動管理
  3. 線程安全:容器保證 Bean 實例單線程訪問,無需手動同步
  4. 狀態管理:有狀態會話 Bean 自動激活/鈍化
  5. 消息服務:消息驅動 Bean (MDB) 異步處理
  6. 事務管理:聲明式事務(CMT)、程序化事務(BMT)、分布式事務 (JTA/XA)
  7. 安全:聲明式授權(`@RolesAllowed`)、認證整合、傳播身份
  8. 攔截器:AOP 風格橫切關注點(日誌、審計、性能監控)
  9. 遠程訪問:RMI/IIOP、HTTP/REST 透明遠程調用
  10. Web 服務:JAX-WS/JAX-RS 無縫發布為 SOAP/REST 端點
  11. 持久化:JPA 實體 Bean、實體管理器自動注入
  12. 緩存:二級緩存、查詢結果緩存
  13. 性能優化:懶加載、批量操作、預取策略

EJB 3.x 核心新特性(對比 2.x 跳躍式簡化)

特性EJB 2.xEJB 3.x
程式設計模型接口 + Home/Remote + XML 配置**POJO + 註解**,無接口可選
依賴注入JNDI 手動查找**@EJB/@Resource/@Inject** 自動注入
持久化Entity Bean (CMP/BMP) 複雜**JPA 標準 ORM**,EntityManager 簡潔
單元測試需容器環境**POJO 可獨立測試**,Mock 友好
攔截器無**@AroundInvoke** 方法攔截
異步調用無**@Asynchronous** + Future
定時服務無**@Schedule** 聲明式定時

三類核心 Bean 類型

Bean 類型註解核心特徵典型場景
無狀態會話 Bean@Stateless無會話狀態、池化、高併發業務邏輯、服務外觀、Web Service 端點
有狀態會話 Bean@Stateful維護客戶會話狀態、激活/鈍化購物車、多步驟向導、會話上下文
單例 Bean@Singleton應用級單例、啟動順序控制、併發管理緩存管理、配置中心、全局序列號生成
消息驅動 Bean@MessageDrivenJMS 消費者、異步處理、事務性消費訂單處理、郵件發送、日誌收集、事件驅動

最簡 EJB 3.x 示例


// 無狀態會話 Bean
@Stateless
public class OrderService {
    @PersistenceContext
    EntityManager em;
    
    @Resource
    SessionContext ctx;
    
    @EJB
    InventoryService inventory;
    
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public Order createOrder(OrderRequest req) {
        // 業務邏輯:扣庫存、創建訂單、發送消息
        inventory.reserve(req.getItems());
        Order order = new Order(req);
        em.persist(order);
        return order;
    }
}

// 本地接口(可選,無接口視圖)
@Local
public interface OrderServiceLocal { ... }

部署與調用

  • 打包為 `.jar` (EJB 模塊) 或 `.war` (Web 模塊內嵌 EJB)
  • 部署至 Java EE 兼容服務器
  • 客戶端通過 `@EJB` 注入、JNDI 查找、遠程 EJB 調用

現狀與建議

Jakarta EE 9+ (原 Java EE) 持續演進,**EJB 仍是核心組件**。但 Spring 生態提供了輕量級替代方案(Spring Transaction、Spring Data JPA、@Async、@Scheduled)。選型建議:

  • **標準化要求高、應用服務器標準化環境** → EJB
  • **雲原生、微服務、容器化部署、技術棧靈活** → Spring Boot + JPA
  • **遷移策略**:EJB 可漸進式遷移至 Spring(共享 JPA 實體、JTA 事務管理器)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved