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

EJB 3 開發指南(5):使用 XML 配置檔部署 Session Bean

     編輯:Java 相關知識

EJB 3 雖以註解配置為主,但 XML 部署描述檔 (ejb-jar.xml、jboss.xml) 仍被完整支援,適用於:註解不支援的進階配置、部署時動態調整、團隊規範要求集中管理。本文詳細說明兩個核心配置檔的結構與對應關係。

一、ejb-jar.xml:標準 EJB 部署描述檔

位於 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>

核心元素對照註解

二、jboss.xml:JBoss 專屬 JNDI 綁定配置

位於 META-INF/jboss.xml,指定 JNDI 名稱:

<?xml version="1.0"?>
<jboss xmlns:xs="https://www.jboss.org/j2ee/schema"
       xs:schemaLocation="https://www.jboss.org/j2ee/schema jboss_5_0.xsd"
       version="5.0">
  <enterprise-beans>
    <session>
      <ejb-name>Greeter</ejb-name>
      <jndi-name>mygreeter</jndi-name>
      <local-jndi-name>mygreeter_local</local-jndi-name>
    </session>
  </enterprise-beans>
</jboss>

關鍵元素

  • <ejb-name>:必須與 ejb-jar.xml 中的 <ejb-name> 完全一致
  • <jndi-name>:遠端 JNDI 綁定名稱 (全域 JNDI)
  • <local-jndi-name>:本地 JNDI 綁定名稱 (同 JVM 內查詢)

三、客戶端查詢與呼叫

Properties prop = new Properties();
prop.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
prop.setProperty(Context.PROVIDER_URL, "192.168.17.105:1099");
InitialContext ctx = new InitialContext(prop);

Greeter greeter = (Greeter) ctx.lookup("mygreeter");  // 使用 jboss.xml 定義的 jndi-name
System.out.println(greeter.greet("bill"));

四、註解 vs XML:優缺點與選擇

XML 元素對應註解說明
<ejb-name>無 (邏輯名稱)EJB 邏輯名稱,供 jboss.xml 參考
<business-remote>@Remote遠端業務介面完整類名
<business-local>@Local本地業務介面完整類名
<ejb-class>類別本身Bean 實作類完整類名
<session-type>@Stateless/@StatefulStateless 或 Stateful
<transaction-type>@TransactionManagementContainer (CMT) 或 Bean (BMT)
維度註解XML
可讀性程式碼內聚、一目瞭然集中管理、需切換檔案
類型安全編譯期檢查部署期驗證、易拼錯類名
靈活度重新編譯才能修改不改程式碼即可調整 JNDI、交易屬性
版本控制程式碼與配置綁定配置獨立版本、支援多環境差異部署
工具支援IDE 完美支援IDE 支援較弱、易遺漏

五、混合使用最佳實踐

  • 預設用註解:@Stateless、@Remote、@Local、@PersistenceContext 等
  • XML 覆蓋特定屬性:JNDI 名稱、安全角色、特定交易屬性
  • ejb-jar.xml 中 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 升級

EJB 2.x 強制使用 XML (Home/Remote/Component 介面、ejb-jar.xml、jboss.xml)。升級至 EJB 3 可:

  1. 保留 XML 檔案不變
  2. Bean 類別移除 implements SessionBean、ejbCreate 等回呼方法
  3. 業務介面改為 POJO 介面 + @Remote/@Local
  4. 逐步以註解取代 XML 配置
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved