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

利用 DB2 聯合技術構建跨異構數據源的 CMP 實體 EJB 完整指南

     編輯:Java 相關知識

前言:為何需要聯合數據庫技術

傳統 CMP 實體 Bean 通常映射單一關係表,但企業級應用常面臨跨數據庫、跨異構數據源(Oracle、Sybase、SQL Server、甚至非關係型數據)的整合需求。IBM DB2 聯合數據庫技術提供虛擬數據庫視圖,屏蔽底層 API 差異,讓 EJB 開發者透明訪問全域異構數據,是構建跨數據源實體 Bean 的理想基礎設施。

核心優勢

  • 擴展數據源範圍:支援非關係型數據源,可通過封裝器接入舊系統、文件系統等。
  • 簡化部署:無需在應用服務器安裝各數據源客戶端軟件。
  • 跨數據源實體建模:單一 CMP Bean 可映射多數據源聯合視圖(唯讀)。

開發環境搭建

伺服器端配置 (DB2 Federated Server)

  1. 安裝 DB2 V8 伺服器實例
  2. 啟用聯合模式:UPDATE DBM CFG USING FEDERATED YES
  3. 建立聯合資料庫 (如 rdjdb)
  4. 為每個遠程數據源建立 Wrapper、Server、User Mapping
  5. 建立遠程表別名及聯合視圖

客戶端與 WSADIE 配置

  • 安裝 DB2 Client,編目遠程節點與資料庫 (本地別名 djdb)
  • WSADIE 專案加入 db2java.zip
  • 建立 JNDI DataSource:jdbc/Federated,URL: jdbc:db2:djdb

三種 CMP 實體 Bean 建模場景

場景一:映射現有別名

使用 WSADIE 自頂向下建模:

  1. 建立 CMP Entity Bean,名稱與別名一致
  2. 添加屬性對應別名欄位,指定主鍵
  3. 啟動 EJB 數據建模向導,選擇 Top-down modeling
  4. Mapping Editor 中設定資料庫 (djdb) 與模式 (user1)
  5. 取消勾選 Generate DDL
  6. 綁定 DataSource (jdbc/Federated),生成部署代碼

場景二:為新別名建立 Bean 並自動生成遠程表

流程類似場景一,關鍵差異:

  • 勾選 Generate DDL,WSADIE 生成 Table.ddl
  • 修改 DDL:移除 CREATE SCHEMA,列級定義主鍵,添加 OPTIONS (REMOTE_SERVER '...', REMOTE_SCHEMA '...')
  • 在 DB2 命令行執行修改後的 DDL,自動建立遠程表與別名

DDL 修改範例:

-- 原始生成
CREATE TABLE user1.FOOBAR (ID INTEGER NOT NULL, NAME VARCHAR(250));
ALTER TABLE user1.FOOBAR ADD CONSTRAINT FOOBARPK PRIMARY KEY (ID);

-- 修改後
CREATE TABLE user1.FOOBAR
(ID INTEGER PRIMARY KEY NOT NULL, NAME VARCHAR(250))
OPTIONS (REMOTE_SERVER 'ORACLE8', REMOTE_SCHEMA 'ORACLEUSER1');

場景三:跨越多數據源的唯讀 CMP 實體 Bean (核心價值)

步驟 1:建立聯合視圖

-- 在 Oracle 與 SQL Server 分別建表並建立別名 ORAREST, MSREST
CREATE VIEW multirest (id, name, cuisine, budget) AS
SELECT id, name, cuisine, budget FROM orarest
UNION
SELECT id, name, cuisine, budget FROM msrest;

步驟 2:建立映射視圖的 CMP Bean (同場景一,取消 Generate DDL)

步驟 3:關鍵代碼修改 —— 禁用寫操作

  • 移除 Remote Interface 所有 setter 方法
  • 將 findByPrimaryKey() Access Intent 設為 ReadOnly
  • 修改生成的 Home Stub (_MultiRestHome_Stub) 與 Bean Stub (_MultiRest_Stub):
// Home Stub 中的 create()
public MultiRest create(...) throws ... {
    throw new CreateException("This EJB is mapped to a view. New instances cannot be created.");
    // 註釋生成代碼
}

// Home Stub 中的 remove()
public void remove(Object arg0) throws ... {
    throw new RemoveException("This EJB is mapped to a view and cannot be removed.");
    // 註釋生成代碼
}

// Bean Stub 中的 remove()
public void remove() throws ... {
    throw new RemoveException("This EJB is mapped to a view and cannot be removed.");
    // 註釋生成代碼
}

注意:每次重新生成部署代碼需重複修改。WSADIE 無法保留手工修改。

結語

DB2 聯合技術結合 CMP 實體 Bean,賦予 Java EE 應用跨異構數據源整合的新能力:擴展數據源邊界、簡化多源數據建模、減少客戶端軟件依賴。當核心業務數據分散於多系統、且具備 DBA 技能時,此架構價值最大。

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