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

EJB 3.0 三大核心類型詳解:會話、實體與訊息驅動 Bean 完全指南

     編輯:Java 相關知識

EJB 3.0 以 POJO 與元資料註解重新定義企業級組件開發。無論執行獨立任務、映射資料庫實體、還是處理非同步訊息,皆可透過標準 Java 類別與註解輕鬆實現。本文系統解析會話 Bean、實體 Bean、訊息驅動 Bean 三大類型的特性、註解用法與客戶端存取模式。

一、會話 Bean:業務流程的執行單元

會話 Bean 代表業務流程操作(如「處理訂單」),依對會話狀態保持性分類:

無狀態會話 Bean (@Stateless)

  • 無內部狀態,方法調用相互獨立(如試算稅費、運費)。
  • 容器維護實例池,少量實例服務大量客戶,極致可擴展。
  • 僅需 @Stateless(name="CalculateEJB") 註解即可部署。
@Stateless(name="CalculateEJB")
public class CalculateEJBBean implements CalculateEJB {
    int value = 0;
    public String incrementValue() {
        value++;
        return "value incremented by 1";
    }
}

有狀態會話 Bean (@Stateful)

  • 保持對會話狀態(如購物車),方法間共享實例欄位。
  • 客戶端專屬實例,容器管理鈍化/活化與狀態持久化。
  • @Remove 註解標記移除實例的方法。

二、實體 Bean:持久化領域模型的核心

實體 Bean 管理持久化資料,對應資料庫記錄(如客戶表的一行),支援多客戶端共享。核心註解:

  • @Entity:標記實體類別。
  • @Table(name="EMPLOYEES"):指定資料表映射。
  • @Id + @Column(name="EMPNO", primaryKey=true):主鍵欄位映射。
  • 未標註 @Transient 的欄位皆視為持久化欄位。

EJB 3.0 亮點:註解式 O/R 映射,開發期可脫離容器測試(Oracle 應用伺服器實體測試工具)。


@Entity
@Table(name = "EMPLOYEES")
public class Employee implements Serializable {
    private int empId;
    @Id @Column(name="EMPNO", primaryKey=true)
    public int getEmpId() { return empId; }
    // 其他 getter/setter...
}

三、訊息驅動 Bean (MDB):非同步訊息處理器

MDB 簡化 JMS 非同步通訊,容器處理隊列/主題設置,自動分派訊息。實作要點:

  • 實作 javax.jms.MessageListener 介面。
  • @MessageDriven 註解配置連線工廠、目的地、選擇器等屬性。
  • onMessage(Message) 為核心處理邏輯入口。

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName="connectionFactoryJndiName", propertyValue="jms/TopicConnectionFactory"),
    @ActivationConfigProperty(propertyName="destinationName", propertyValue="jms/myTopic"),
    @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"),
    @ActivationConfigProperty(propertyName="messageSelector", propertyValue="RECIPIENT = 'MDB'")
})
public class MessageLogger implements MessageListener, TimedObject {
    @Inject MessageDrivenContext mc;
    public void onMessage(Message message) {
        // 解析訊息、列印、建立 Timer...
    }
    public void ejbTimeout(Timer timer) { /* Timer 回調 */ }
}

四、EJB 客戶端存取模式

客戶端(獨立應用、JSP、Servlet、另一 EJB)透過遠端/本地介面存取 Bean。容器生成代理(Remote/Local Object)攔截請求、委派實例、返回結果。查找範例:


Context context = new InitialContext();
CalculateEJB myejb = (CalculateEJB) context.lookup("java:comp/env/ejb/CalculateEJB");
myejb.incrementValue();

遠端/本地取決於客戶端與 Bean 是否同 JVM。介面定義契約,Bean 類別實作邏輯,容器負責中介與服務編排。

總結

EJB 3.0 三大類型分工明確:會話 Bean 執行流程、實體 Bean 映射持久化、MDB 處理非同步訊息。註解取代部署描述符,POJO 化降低門檻,容器服務(事務、安全、遠端、生命週期)透明賦能,讓開發者聚焦業務核心。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved