EJB 3 雖以註解配置為主,但 XML 部署描述檔 (ejb-jar.xml、jboss.xml) 仍被完整支援,適用於:註解不支援的進階配置、部署時動態調整、團隊規範要求集中管理。本文詳細說明兩個核心配置檔的結構與對應關係。
位於 META-INF/ejb-jar.xml,符合 Java EE 5 標準:
<?xml version="1.0" encoding="ASCII"?>
<ejb-jar xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://java.sun.com/xml/ns/javaee"
xmlns:ejb="https://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0">
<display-name>MyEJB</display-name>
<enterprise-beans>
<session>
<ejb-name>Greeter</ejb-name>
<business-local>service.GreeterBeanLocal</business-local>
<business-remote>service.GreeterBeanRemote</business-remote>
<ejb-class>service.GreeterBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
| XML 元素 | 對應註解 | 說明 |
|---|---|---|
<ejb-name> | 無 (邏輯名稱) | EJB 邏輯名稱,供 jboss.xml 參考 |
<business-remote> | @Remote | 遠端業務介面完整類名 |
<business-local> | @Local | 本地業務介面完整類名 |
<ejb-class> | 類別本身 | Bean 實作類完整類名 |
<session-type> | @Stateless/@Stateful | Stateless 或 Stateful |
<transaction-type> | @TransactionManagement | Container (CMT) 或 Bean (BMT) |
| 維度 | 註解 | XML |
|---|---|---|
| 可讀性 | 程式碼內聚、一目瞭然 | 集中管理、需切換檔案 |
| 類型安全 | 編譯期檢查 | 部署期驗證、易拼錯類名 |
| 靈活度 | 重新編譯才能修改 | 不改程式碼即可調整 JNDI、交易屬性 |
| 版本控制 | 程式碼與配置綁定 | 配置獨立版本、支援多環境差異部署 |
| 工具支援 | IDE 完美支援 | IDE 支援較弱、易遺漏 |
@Stateless、@Remote、@Local、@PersistenceContext 等metadata-complete="true":若設為 true,容器忽略所有註解,完全依賴 XML(不建議預設開啟)
MyEJB.jar
├── service/
│ ├── Greeter.class
│ ├── GreeterBean.class
│ ├── GreeterBeanLocal.class
│ └── GreeterBeanRemote.class
└── META-INF/
├── MANIFEST.MF
├── ejb-jar.xml
└── jboss.xml
EJB 2.x 強制使用 XML (Home/Remote/Component 介面、ejb-jar.xml、jboss.xml)。升級至 EJB 3 可:
implements SessionBean、ejbCreate 等回呼方法@Remote/@Local