傳統 CMP 實體 Bean 通常映射單一關係表,但企業級應用常面臨跨數據庫、跨異構數據源(Oracle、Sybase、SQL Server、甚至非關係型數據)的整合需求。IBM DB2 聯合數據庫技術提供虛擬數據庫視圖,屏蔽底層 API 差異,讓 EJB 開發者透明訪問全域異構數據,是構建跨數據源實體 Bean 的理想基礎設施。
UPDATE DBM CFG USING FEDERATED YESrdjdb)djdb)db2java.zipjdbc/Federated,URL: jdbc:db2:djdb使用 WSADIE 自頂向下建模:
Top-down modelingdjdb) 與模式 (user1)jdbc/Federated),生成部署代碼流程類似場景一,關鍵差異:
Table.ddlCREATE SCHEMA,列級定義主鍵,添加 OPTIONS (REMOTE_SERVER '...', REMOTE_SCHEMA '...')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');
步驟 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:關鍵代碼修改 —— 禁用寫操作
setter 方法findByPrimaryKey() Access Intent 設為 ReadOnly_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 技能時,此架構價值最大。