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

Apache Geronimo 部署 J2EE 應用實戰:從 EJB 到 Web 模組完整指南

     編輯:Java 相關知識

Apache Geronimo 採用 OpenEJB 作為 EJB 容器,部署描述符與傳統 J2EE 伺服器(WebSphere、JBoss、WebLogic)大同小異,但結合 Maven + XDoclet 可將樣板代碼生成自動化,大幅降低開發負擔。本文以電話簿範例完整演示:JSP/Servlet(Struts)、CMP Entity Bean、Stateless Session Bean、資料源配置、應用打包部署全流程。

專案結構與建構

  • 建構工具:Apache Maven(產出 EAR)。
  • 部署指令:java -jar bin/deployer.jar deploy phonebook.ear
  • 原始碼結構:

原始碼目錄樹

Web 層:JSP + Struts Servlet

  • Struts Action 類位於 org.acme.phonebook.struts。
  • JSP 頁面置於 src/webapp/pages。
  • 唯一 Servlet 為 Struts ActionServlet,透過 servlet-mappings.xml、servlets.xml 定義,Maven 建構時合併為 web.xml。
<!-- servlet-mappings.xml -->
<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>
<session-config>
  <session-timeout>120</session-timeout>
</session-config>

<!-- servlets.xml -->
<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param><param-name>config</param-name><param-value>/WEB-INF/conf/struts-config.xml</param-value></init-param>
  <load-on-startup>2</load-on-startup>
</servlet>

EJB 層:XDoclet 驅動零樣板開發

1. CMP Entity Bean — PhoneBookEntry

單一 Java 類 + Javadoc 標籤即可生成 Home/Remote/Local 介面、ejb-jar.xml、openejb-jar.xml、數據表映射。

/** @ejb.bean type="CMP" cmp-version="2.x" name="PhoneBookEntry"
 *  local-jndi-name="org.acme.phonebook.ejb/PhoneBookEntryLocalHome"
 *  view-type="local" primkey-field="name"
 *  @ejb.finder signature="Collection findAll()" query="SELECT OBJECT(o) FROM PhoneBookEntry o"
 *  @ejb.persistence table-name="PhoneBookEntry"
 *  @ejb.transaction type="Required" @ejb.permission unchecked="true" */
public abstract class PhoneBookEntryBean implements EntityBean {
  /** @ejb.pk-field @ejb.persistence column-name="NAME" jdbc-type="VARCHAR" sql-type="VARCHAR(250)"
   *  @ejb.interface-method view-type="local" */
  public abstract String getName(); public abstract void setName(String v);

  /** @ejb.persistence column-name="PHONE_NUMBER" jdbc-type="VARCHAR" sql-type="VARCHAR(250)"
   *  @ejb.interface-method view-type="local" */
  public abstract String getPhoneNumber(); public abstract void setPhoneNumber(String v);
  // ejbCreate/ejbPostCreate...
}

2. OpenEJB 專用部署描述符 openejb-jar.xml

<openejb-jar xmlns="https://www.openejb.org/xml/ns/openejb-jar"
  configId="org/acme/PhonebookEJB" parentId="MysqlDatabase">
  <cmp-connection-factory><resource-link>MysqlDataSource</resource-link></cmp-connection-factory>
  <enterprise-beans>
    <entity>
      <ejb-name>PhoneBookEntry</ejb-name>
      <jndi-name>PhoneBookEntry</jndi-name>
      <local-jndi-name>java:comp/env/ejb/PhoneBookEntryLocal</local-jndi-name>
      <table-name>phone</table-name>
      <cmp-field-mapping><cmp-field-name>name</cmp-field-name><table-column>name</table-column></cmp-field-mapping>
      <cmp-field-mapping><cmp-field-name>phoneNumber</cmp-field-name><table-column>phone</table-column></cmp-field-mapping>
    </entity>
    <session> ... PhoneBookSession 定義 ... </session>
  </enterprise-beans>
</openejb-jar>

關鍵點:cmp-connection-factory 綁定資料源、table-name 指定實體表、cmp-field-mapping 對應 CMP 欄位至資料庫欄位。

3. Stateless Session Bean — PhoneBookSession

同樣以 XDoclet 標籤定義 JNDI 名稱、事務屬性、EJB 參考(@ejb.ejb-ref 指向 PhoneBookEntry)、Web 層引用(@web.ejb-local-ref)。業務邏輯直接呼叫 PhoneBookEntryUtil.getLocalHome() 完成 CRUD,XDoclet 自動生成 Util 工具類,免寫 JNDI Lookup 樣板碼。

應用級部署描述符 application.xml

<application version="1.4" xmlns="https://java.sun.com/xml/ns/j2ee">
  <module><ejb>phonebook-ejb.jar</ejb></module>
  <module>
    <web>
      <web-uri>phonebook.war</web-uri>
      <context-root>/phonebook</context-root>
    </web>
  </module>
  <module><connector>tranql-connector-1.0-SNAPSHOT.rar</connector></module>  <!-- JDBC 資源適配器 -->
</application>

部署驗證

  1. 配置 Maven、下載依賴(含 XDoclet、OpenEJB、TranQL)。
  2. 執行 maven ear:ear 產出 phonebook.ear。
  3. 啟動 Geronimo,執行部署指令。
  4. 瀏覽 https://localhost:8080/phonebook/ 測試 Struts 流程:新增、查詢、刪除電話簿條目。

遷移與相容性提示

  • Geronimo 1.0 (M5) 基於 J2EE 1.4,EJB 2.x 模型與 WebSphere/JBoss/WebLogic 高度相容。
  • 若遷移既有專案,僅需替換伺服器專用描述符(如 ibm-ejb-jar.xmi、jboss.xml)為 openejb-jar.xml,並調整資料源 JNDI 名稱。
  • Maven + XDoclet 組合可同步生成多伺服器描述符,實現「一次編碼、多平台部署」。

總結

Geronimo + OpenEJB + Maven + XDoclet 形成高生產力 J2EE 開發棧:

  • Entity/Session Bean 僅需一個帶註解的抽象類。
  • 部署描述符自動生成,手寫內容極少(openejb-jar.xml、application.xml)。
  • 部署流程與主流 J2EE 伺服器一致,學習曲線平緩。
  • 開源免費,適合中小型專案快速交付。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved