top
Loading...
EJB3實體組件在J2SE中的使用
前言:

越來越多的企業將越來越多的業務轉向自動化或半自動化平臺,他們通過這個過程,進一步優化企業資源與管理方法,另一方面大大提升業務執行的效率與精確性。因此軟件工程所需解決的實際問題,業務越來越復雜,規模越來越大,新舊系統配合使用的需求越來越多。軟件工程技術和其它領域的生產力發展,就這樣相互促進!

對系統進行合理分解,是軟件工程(也是其它領域)降低系統復雜性的常用手段和唯一的基本方法,今天的企業級應用系統一般由如下部份組成:
    1. 用戶交互模塊,
    2. 基于行業規范的業務中間件,
    3. 基于軟件工程技術規范的系統中間件,
    4. 軟硬件基礎平臺組成。

以上其實是由上到下的 4 個層次,系統復雜度被分解到各層次的各個組件中。系統中間件就是其中對軟件技術進行歸納的一個層次,該層次將一些常用的系統功能,從業務邏輯中剝離出來,并分門別類。本例即涉及系統中間件的使用。

對中間件而言,開發人員只需要熟悉它們的使用方法,然后運用 "拿來主義",直接拿來,合理使用即可,是相當不錯的開發資源。今天 "拿來" 的是 EJB3 持久層規范的 Hibernate 實現版本。交互代碼就是在主程序中對規范中的接口的調用,很簡單的示例。

應該在這里提出"配置文件" 這一設計模式了 ---- 一定有人發笑:配置文件與設計模式何干?在系統維護過程中,當系統需要靈活變更組件或策略時,以配置文件代替硬編碼來處理這種 "替換",大大減免了實現該邏輯的代碼重新經歷 "修改,編譯,測試,發布" 等軟件過程的機率 (配置文件中的內容需合理規劃,否則將導致復雜性上升。 EJB 2.x 的部署描述文件就是最好佐證。 Log4J 配置文件則堪稱典范)。 配置文件在組件裝配方面更是功勛卓著。本文示例包含2個配置文件。

諸多贅述,只是希望能使入門級朋友有個思想準備:為何本文示例并非一段代碼,而由這么多松散的部份組成。下面言歸正傳。

基礎平臺:

  • IBM T23 / PIII-M 1.13G/ 512M / 5400 rpm, 8M
  • Windows 2003
  • Postgresql 8.1.x
  • JDK 5.0 - update 4 ( 或 JRE 5.0 - update 4)

中間件:

  • Hibernate-EntityManager 3.1beta6 :
    說明:這是 EJB3 持久層規范的 hibernate 實現。(若未集成 hibernate core, 必須另行獲取。)

  • Postgresql 8.1.x JDBC Driver
    說明: postgresql 客戶端 JDBC 驅動程序。

  • 以下可選內容源于 www.apache.org :
    common-dbcp: JDBC 數據源連接池中間件( hibernate 缺省情況下采用C3P0),依賴于 :
    common-collections
    common-pool

    說明: hibernate core 對 JDBC 連接池的使用處理得相當好,當代碼在乎數據庫連接的性能時, hibernate core 會根據配置文件 persistence.xml 中的相關配置,透明地配備連接池;若不需要該連接池,將配置文件中與相關的內容取消即可, hibernate core "自適用" 這種情形。
開發工具:
  • Eclipse 3.1.x 以上版本
  • Eclipse WTP
  • Hibernate Tools
  • Subclipse: subversion 的 eclipse 客戶端插件
開發步驟:

導讀:

本例的操作內容為:1,清除數據庫中各表內容; 2,向數據庫添加用戶 hedan, 角色 friend, 并將新角色賦予新用戶; 3,查詢數據庫中所有用戶及其角色,并將之一一打印。這 3 個步驟分別對應 TestIt 類中的 removeAll, insert, query 三個方法。
下文中步驟 3、4 和 5 的內容是與 EJB3 – Persistence 規范相關的要點所在(請閱讀這些小篇幅的源文件或配置文件中的說明),其它內容相對次要。

本文假設讀者能熟練使用 Eclipse JDT 及 Hibernate Tools, 并熟悉 POSTGRESQL 的基本操作。
  1. 創建 java project

  2. 將 JDBC 驅動程序及 Hibernate EntityManager 相關類庫的 Jar 壓縮包添加到 Project 的 Libraries 中

  3. 建數據庫 , 標準 SQL 腳本如下( 持久層配置文件中所有數據庫名稱為 testdb, 數據庫帳號/密碼分別為 test/test,可按需修改 ):
    CREATE TABLE _USER
    (
    USERID INT PRIMARY KEY,
    USERNAME VARCHAR(64) NOT NULL DEFAULT '',
    COMMENT VARCHAR(256)
    );

    CREATE TABLE _ROLE
    (
    ROLEID INT PRIMARY KEY,
    ROLENAME VARCHAR(32),
    COMMENT VARCHAR(128),
    CONSTRAINT NQ_ROLE UNIQUE(ROLENAME)
    );

    CREATE TABLE _USERROLE
    (
    USERID INT,
    ROLEID INT,
    CONSTRAINT PK_USERROLE PRIMARY KEY(USERID, ROLEID),
    CONSTRAINT FK_UR_USER FOREIGN KEY(USERID) REFERENCES _USER(USERID),
    CONSTRAINT FK_UR_ROLE FOREIGN KEY(ROLEID) REFERENCES _ROLE(ROLEID)
    );

  4. 為 java project 添加 EJB3 實體類
    如 User.java , Role.java , Userrole.java , UserroleId.java 所示, 這幾個源文件中包含了 EJB 3 annotations,閱讀其中的標記需要參考規范。
    可以參照數據庫中各表手動創建各類,最方便地辦法是利用 CASE 工具,本例實體類由 Hibernate Tool beta 4 自動生成。

  5. 為 java project 創建主程序類 TestIt,本例的 "業務" 實現于其中 , 代碼如附錄 TestIt.java 所示。請閱讀源代碼行中的注釋說明。

  6. 創建 EJB 3 持久層配置文件 META-INF/persistence.xml

  7. 創建 Log4j 配置 log4j.properties , 此時, 示例工程結構最后如下圖所示 ( 前文中描述了示例工程必要的文件,下圖中包含而前文中未提到的文件不是必須的 ) :


  8. 啟動 TestIt 中的 main 方法,運行結果如下圖中高亮部份所示

     

結束語:

若需完整的示例工程,請訪問: svn://simsol.vicp.net/ejb3_persistence_hem , 在下使用的并發版本管理系統為 subversion ,而不是 cvs, 您可能需要從 http://subversion.tigris.org/ 去獲取相關資源,為此可能給您帶來稍許麻煩,在此表示歉意。

文中不周之處,請多多指教!


作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗