国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

將 DBMS 存儲過程封裝為會話 EJB 組件中的方法

2019-11-18 15:07:17
字體:
供稿:網(wǎng)友

  將 DBMS 存儲過程封裝為會話 EJB 組件中的方法 作者:Cynthia M. Saracco

集成 Web 應用服務(wù)器和數(shù)據(jù)庫治理 (DBMS) 技術(shù)是很多新型商業(yè)應用的常見需求。在本文中,我們將討論該集成的一個方面:如何在會話 EnterPRise javaBeans (EJB) 組件中設(shè)計與開發(fā)封裝或調(diào)用現(xiàn)有 DBMS 存儲過程的方法。您應該熟悉 EJB 技術(shù)、結(jié)構(gòu)化查詢語言 (SQL) 和 Java 數(shù)據(jù)庫連接 (JDBC) 的基本知識,以便充分理解本文。

假如您正致力于需要訪問或修改在 DMBS 中數(shù)據(jù)的 Web 應用程序開發(fā),那么可能已經(jīng)在向基于 EJB 的設(shè)計轉(zhuǎn)移。您可能會發(fā)現(xiàn),通過使會話 EJB 組件利用 DBMS 存儲過程,可以減少編碼和維護工作,并可能提高數(shù)據(jù)訪問性能。

一些公司多年來一直在使用存儲過程(stored procedure),很大程度上是因為它們可以幫助減少網(wǎng)絡(luò)通信量,并提高分布式計算環(huán)境中的性能。通常,這些過程包含涉及多數(shù)據(jù)庫操作的重要業(yè)務(wù)邏輯。遠程應用程序調(diào)用這些過程,在 DMBS 服務(wù)器上執(zhí)行它們所包含的 SQL 語句。當然,過程結(jié)束時,所有結(jié)果都返回給應用程序。

這些舊有存儲過程對 Web 應用通常是有用的。與其在 EJB 組件中復制這些邏輯,為什么不將這些過程作為方法封裝在會話 bean 中呢?這樣可以避免 DBMS 服務(wù)器和 EJB 組件中的冗余代碼 -- 在考慮開發(fā)、調(diào)試和維護開銷時,冗余代碼將損耗開發(fā)效率。這還可能帶來提高性能的好處。調(diào)用存儲過程可以減少 EJB 組件原本不得不發(fā)出的 SQL 語句數(shù)量,從而減少與遠程 DBMS 的通信開銷。

入門

現(xiàn)在明白為什么要從會話 bean 調(diào)用存儲過程了吧,下面我們看看如何開始。首先,需要使用適當?shù)拈_發(fā)環(huán)境,該環(huán)境應該包括一個帶有內(nèi)置 EJB 支持的 Java 開發(fā)工具,一個 Web 應用服務(wù)器和一個關(guān)系 DBMS。我的參考配置包括 VisualAge for Java 企業(yè)版 3.0.2,WebSphere application Server 高級版 3.0.2.1,以及 DB2 V7.1,所有這些都安裝在一個 Windows NT 系統(tǒng)上。有關(guān)如何配置該環(huán)境以支持本文所述工作的具體信息,請參閱 "Leveraging DBMS Stored Procedures through Enterprise JavaBeans"(位于參考資料中)或參考產(chǎn)品手冊。

有了正確的軟件環(huán)境,就可以開始了。雖然我們要討論的編碼模式可能適合于無狀態(tài)會話(stateless session) bean,但它也可使用有狀態(tài)會話(stateful session) bean 組件。但是,因為無狀態(tài)會話 bean 比有狀態(tài)會話 bean 消耗的系統(tǒng)資源更少,而且涉及的代碼也更少,所以通常建議使用無狀態(tài)會話 bean。

首先要考慮的設(shè)計問題是如何在存儲過程和 EJB 組件之間映射數(shù)據(jù)。存儲過程可能需要多個輸入、輸出和輸入/輸出參數(shù),并返回一個或多個結(jié)果集(代表數(shù)據(jù)行)。除非要對不同類型的過程使用不同的編碼模式,您需要編寫 EJB 組件以便處理所有這些可能性。

處理輸入(或者輸入/輸出)參數(shù)很簡單:將存儲過程需要的每個參數(shù)映射成 EJB 組件的輸入?yún)?shù)。但是,處理存儲過程的輸出比較棘手。可能有多個輸出參數(shù)和多個結(jié)果集要傳回調(diào)用程序,需要將這些作為一個可序列化的對象返回,以符合 EJB 規(guī)范。可以編寫自己的類,使其可以將這些數(shù)據(jù)打包成一個對象,并在該對象中包括所有必須的元數(shù)據(jù)。(該元數(shù)據(jù)將描述對象的內(nèi)部結(jié)構(gòu),以便客戶機知道如何處理。)但這需要大量工作。

假如正在使用 VisualAge for Java 和 WebSphere,那么,有個更好的選項:使用它們的數(shù)據(jù)訪問 Bean (DAB) 庫。該庫包含一些提供位于基本 JDBC 之上的函數(shù)層的類。可能會發(fā)現(xiàn) com.ibm.db.CallableStatement 類非凡方便,因為它答應創(chuàng)建一個可序列化的對象,該對象包含所有從存儲過程返回的輸出,包括多個結(jié)果集(假如有的話)和相關(guān)元數(shù)據(jù)。還有一個好處是,該庫設(shè)計成可以支持任何支持 JDBC 的數(shù)據(jù)源,因此,它可以使 bean“與 DBMS 無關(guān)”。有了 DAB 庫,就可以用一個編碼模式在會話 EJB 組件中封裝任何存儲過程。甚至可以在 EJB 客戶機中使用一個通用的編碼模式,來處理任何從封裝器方法返回的結(jié)果。

回顧開發(fā)任務(wù)

我們來討論一下使用通用編碼模式,來集成 EJB 組件和 DBMS 存儲過程的步驟:

確定要將哪個存儲過程封裝成 EJB 方法。假如該過程不存在,則遵循 DBMS 標準過程來創(chuàng)建和調(diào)試。

確定要使用哪個無狀態(tài)會話 EJB 組件。假如該 EJB 不存在,則遵循 Java 開發(fā)環(huán)境的標準過程來創(chuàng)建和調(diào)試。

擴展 EJB 組件的遠程接口,以包括用于封裝存儲過程的新方法。

擴展 EJB 組件的實現(xiàn),以包括封裝存儲過程的新方法的邏輯。連接到數(shù)據(jù)庫、調(diào)用存儲過程、處理所有結(jié)果集和處理所有異常是后面要解決的問題。

通過構(gòu)建一個客戶機應用或 Servlet,來調(diào)用 EJB 組件封裝器方法,以測試所做的工作。

頭兩項是基本編程任務(wù),您可能已經(jīng)熟悉。根據(jù)所用產(chǎn)品的不同,個別步驟可能會略有不同,但是大多數(shù)產(chǎn)品都有工具來提供幫助。例如,假如正在使用 VisualAge for Java 和 DB2,則可以利用“存儲過程構(gòu)建器”來完成步驟 1,以及利用 EJB 開發(fā)特性來完成步驟 2。本文將不集中講述頭兩步。但是,其余三步需要具體講解。本文將在一個實際示例的環(huán)境下討論這些步驟中的每一步。

瀏覽應用方案

假設(shè)需要構(gòu)建一個應用,該應用支持一家公司的市場營銷分部,該分部維護面向金融的 Web 站點。該站點答應人們注冊為客戶,跟蹤他們的投資總額,以及在電子公告板上發(fā)表意見。另外還假設(shè),支持該站點的數(shù)據(jù)存儲在 DB2 的表中。以下代碼樣本顯示如何創(chuàng)建這些表。

在 DB2 中創(chuàng)建樣本表的 SQL 語句

create table client (

id int not null primary key,

name varchar(30),

email varchar(30),

phone varchar(12),

regdate date,

mktg char,

constraint check1 check (mktg in (‘y‘, ‘Y‘, ‘n‘, ‘N‘))

)

create table portfolio (

id int not null,

clientID int not null references client,

ticker varchar(10) not null,

cost decimal (9,2),

qty int,

date date,

primary key (id, clientID, ticker)

)

create table boards (

msgno varchar(15) not null primary key,

subject varchar(40),

date date,

clientID int not null references client

)

該數(shù)據(jù)庫還包含一個非凡重要的存儲過程。過程 CLIENTREPORT 提供注冊站點用戶的綜合概要,包括用戶投資和他們在公告板上討論的問題。這個報告還包括客戶名稱和電子郵件地址,以便在用戶提出有關(guān)有潛在價值的附加產(chǎn)品或服務(wù)方面的建議時,市場營銷人員可以與這些用戶聯(lián)絡(luò)。要在會話 EJB 組件中封裝的就是這個過程。

因為此過程可能用多種語言(包括 Java 編程語言)編寫,這里就不顯示它的完整內(nèi)容。不管怎么說,源代碼確實不那么重要,因為您不能假設(shè)總是可獲得它們。但是,為了告訴您存儲過程有什么內(nèi)容,這里顯示了它包括的三個 SELECT 語句:

CLIENTREPORT 存儲過程中的 SQL 語句 select name, e-mail from client where id = ?

select id, ticker, cost, qty, date from portfolio where clientid = ?

select msgno, subject, date from boards where clientid = ?

問號表示,該語句將依靠運行時來自調(diào)用程序的輸入,在這種情況下,調(diào)用程序必須提供一個代表感愛好的客戶標識的有效數(shù)據(jù)值。通過這些語句,您可以猜出,存儲過程將需要一個輸入?yún)?shù)(用于客戶標識),返回兩個輸出參數(shù)(用于客戶名稱和電子郵件地址),并返回兩個結(jié)果集(一個包含有關(guān)客戶投資總額的數(shù)據(jù),另一個包含有關(guān)客戶公告板發(fā)表內(nèi)容的數(shù)據(jù))。

修改 EJB 組件的遠程接口

現(xiàn)在我們來開始 EJB 組件代碼工作。

既然要使封裝器方法對 EJB 組件客戶機可用,我們需要擴展 bean 的遠程接口。將使用一個名為 Analysis 的無狀態(tài)會話,并包括一個 lookupClient 方法,以用于存儲過程封裝器。該方法需要一個整數(shù)作為輸入,以代表要報告的客戶標識,它返回一個 DAB CallableStatement 對象(位于 com.ibm.db.* 包中)。將把該過程返回的任何異常轉(zhuǎn)換成 RemoteExceptions(這適用于與 EJB 1.0 兼容的會話 bean)。

以下編碼示例顯示了 EJB 組件遠程接口的修改部分。

EJB 組件遠程接口 // Enterprise JavaBean Remote Interface for Analysis session bean

public interface Analysis extends javax.ejb.EJBObject {

// remote interface for our lookupClient method

com.ibm.db.CallableStatement lookupClient(java.lang.Integer clientId)

throws java.rmi.RemoteException;

. . .

}

請注重,假如使用 VisualAge EJB 組件向?qū)В瑒t無需對此進行手工編碼。替代方法是,在 bean 的實現(xiàn)類中對此方法編碼之后,通過菜單項來將該方法提升(promote)到 bean 的遠程接口,然后,將自動添加必需的代碼。

編碼存儲過程封裝器方法

現(xiàn)在可以集中講述 bean 實現(xiàn)類本身,將在該實現(xiàn)類中包括調(diào)用存儲過程的代碼,并將其所有輸出作為 com.ibm.db.CallableStatement 對象返回。包含調(diào)用 CLIENTREPORT 存儲過程的 lookupClient(...) 方法的完整實現(xiàn)。將在后續(xù)章節(jié)中具體講解每個代碼塊(參考代碼中的注釋)的邏輯,以便您更好地理解如何為自己的存儲過程實現(xiàn)類似的方法。

連接到數(shù)據(jù)庫

讓我們更具體地查看此代碼的各部分。

在調(diào)用存儲過程之前,需要建立一個到 DBMS 的連接。有兩種方法做得到:使用 1.0 樣式的連接,或者使用 JDBC 2.0 樣式的 DataSource。在 WebSphere 環(huán)境中,通常選用后者,因為它提供連接池(connection pooling),這可以更有效地使用系統(tǒng)資源。出于這種原因,我們的編碼模式使用 DataSource。

除了確定要建立的連接類型之外,還應該考慮要將連接邏輯放在 bean 中的什么地方。有多個選擇:

直接放在封裝器方法(wrapper method)中

放在私有輔助方法(helper method)中

放在 ejbCreate() 方法中(并將相應的斷開邏輯放在 ejbRemove() 方法中)

這些方法的利弊超出了本文的范圍。為簡單起見,樣本代碼將所有連接/斷開邏輯直接放在方法中。

代碼塊 1 顯示了在使用 VisualAge for Java 3.0.2 和 WebSphere 3.0.2.1 時,如何使用 DataSource 進行連接。我們創(chuàng)建了一個散列表,在其中填充適合于 WebSphere 環(huán)境的值,然后建立一個 InitialContext。代碼的以下幾行利用該初始上下文和 Java 命名和目錄接口 (JNDI) 服務(wù),來獲得期望的 DataSource 的索引,我們以前在 WebSphere 中用“治理控制臺”創(chuàng)建了該 DataSource。本例中的 DataSource 名為 LocalDB2Sample。下一步,使用該 DataSource 來獲得一個連接,并向其傳遞合適的數(shù)據(jù)庫用戶標識和口令。從連接池獲得連接之后,可以將該信息提供給 DAB DatabaseConnection 對象,來設(shè)置它所需的連接規(guī)范。最后,將 autoCommitMode 設(shè)置成 false,因為 EJB 組件負責處理事務(wù)治理服務(wù)。

測試時,在 VisualAge for Java WebSphere 測試環(huán)境中運行使用 DataSource 的 EJB 組件會很方便。有關(guān)如何在產(chǎn)品發(fā)行版 3.0.2 中這樣做的指示,請參閱 David Zimmerman 所著的 "Creating DataSources in the VisualAge for Java WebSphere Test Environment"(在參考資料中)。

調(diào)用存儲過程

建立了連接之后,可以集中講述如何調(diào)用存儲過程了。如封裝器方法編碼示例中的代碼塊 2 所示,首先創(chuàng)建一個 DAB StatementMetaData 對象,該對象中有存儲過程的規(guī)范。下一步,定義要執(zhí)行的 SQL 語句。在這里將要調(diào)用 CLIENTREPORT 過程,該過程需要一個輸入?yún)?shù)(用于客戶標識)和兩個輸出參數(shù)(用于客戶名稱和電子郵件地址)。下一步,將參數(shù)添加到規(guī)范中。對于每個過程參數(shù),都指定了參數(shù)名,其數(shù)據(jù)類型及其參數(shù)模式。

代碼塊 3 創(chuàng)建即將執(zhí)行的 DAB CallableStatement 對象。CallableStatement 代表可用來執(zhí)行存儲過程的 SQL。創(chuàng)建完對象之后,將其元數(shù)據(jù)設(shè)置成在代碼塊 2 中指定的形式。然后將 DatabaseConnection(在代碼塊 1 中創(chuàng)建)與該 CallableStatement 關(guān)聯(lián)。

下一個任務(wù)很簡單:需要執(zhí)行 CallableStatement 對象,這將使 DBMS 運行存儲過程。但是,在這樣做之前,必須通過 EJB 客戶機應用程序,將過程的輸入?yún)?shù)設(shè)置成傳入方法的值。代碼塊 4 中顯示了這種邏輯。

檢索存儲過程的輸出并返回到調(diào)用程序

在封裝器方法編碼示例的代碼塊 5 中,將檢索存儲過程返回的輸出參數(shù)。想起來了嗎?這些參數(shù)代表 Web 站點客戶的名稱和電子郵件地址。但是,不需要顯式地檢索存儲過程返回的結(jié)果集。(這些結(jié)果集包含有關(guān)客戶投資總額和公告板發(fā)表信息的數(shù)據(jù))。您可能要問:為什么會這樣呢?

某些 DBMS 要求,在獲得任何輸出參數(shù)值之前,要從存儲過程返回的結(jié)果集檢索所有需要的值。由于這種要求,在通過 getParameter() 方法進行非凡請求之前,CallableStatement bean 不從數(shù)據(jù)庫獲得任何輸出參數(shù),因為何時從結(jié)果集檢索數(shù)據(jù)是由用戶控制的。缺省情況下,在執(zhí)行存儲過程之后,將自動檢索結(jié)果集,并將其存儲在高速緩存中。但是,必須顯式檢索輸出參數(shù),并將其存儲在高速緩存。

檢索完輸出參數(shù)之后,將 DAB CallableStatement 返回給 EJB 組件的調(diào)用程序。該對象現(xiàn)在包含過程返回的所有輸出(包括結(jié)果集),和幫助調(diào)用程序正確分析對象語法的適當?shù)脑獢?shù)據(jù)。當我們查看調(diào)用會話 bean 封裝器方法的樣本客戶機應用程序時,將看到如何去做。

假如您熟悉 JDBC,可能會問:為什么不在此代碼塊中顯式發(fā)出 commit 語句。確實,假如使用的是 JDBC 1.0 樣式的連接,可能需要(否則,當在 "finally" 塊中關(guān)閉數(shù)據(jù)庫連接時,將逆序恢復所做的工作)。但是,使用 DataSource 并接受 WebSphere 缺省的 EJB 組件屬性 (TX_REQUIRED),WebSphere 將自動為我們的工作提供事務(wù)治理。因此,不再需要顯式的 commit 語句。

處理異常與關(guān)閉打開的資源

當然,在執(zhí)行會話 bean 時可能會出錯。因此,需要提供異常處理。代碼塊 6 包括適合于與 EJB 1.0 兼容的 bean 的簡單異常處理程序。它只是捕捉碰到的任何異常,包括一個適當?shù)腻e誤消息,并將異常作為新的 RemoteException 拋回給調(diào)用程序。

另外,該代碼塊還包含一個 "finally" 塊,以確保關(guān)閉所有打開的資源。在這里,釋放任何與 CallableStatement 對象關(guān)聯(lián)的資源。下一步,除去在工作中所用的任何對連接的 DAB 引用。最后,確保關(guān)閉 WebSphere 連接。

構(gòu)建客戶機應用程序

構(gòu)建了 EJB 封裝器方法之后,該集中講述客戶機應用程序了。與 EJB 組件一樣,首先展示客戶機應用程序的完整代碼樣本。然后,將具體講述個別代碼塊。

這里顯示的客戶機應用程序 -- ClientAnalysis -- 使用 RMI/IIOP 與 EJB 組件通信。其工作很簡單:創(chuàng)建會話 bean,調(diào)用它的 lookupClient(...) 方法,處理該方法返回的 DAB CallableStatement 對象,然后除去 bean。將該應用程序編寫成處理 CallableStatement 的通用客戶機,即,假設(shè)事先不知道有關(guān) CallableStatement 內(nèi)部結(jié)構(gòu)的任何信息。相反,我們嚴格依靠其中包含的元數(shù)據(jù),來分析對象的語法,并使用其相關(guān)組件,如過程返回的輸出參數(shù)和結(jié)果集。這種方法演示了通用的編碼模式,可以在處理 CallableStatement 的任何應用程序中使用。就這樣,它補充了在無狀態(tài)會話 EJB 組件中對封裝存儲過程所用的通用編碼模式。

創(chuàng)建 EJB 組件并調(diào)用其封裝器方法

客戶機應用程序的代碼塊 1 以 main(...) 方法開始。它指定感愛好的客戶標識,并調(diào)用一個私有輔助方法,來獲得正在使用的會話 EJB 組件。執(zhí)行完 bean 之后,調(diào)用 lookupClient(...) 方法。這是封裝 CLIENTREPORT 存儲過程并返回 DAB CallableStatement 的方法。

需要具體講述私有輔助方法 -- createEJB()。因為 EJB 組件創(chuàng)建工作可能會根據(jù)所用的 Web 應用程序而略有不同,所以,選擇將這個工作隔離成單獨的方法。非凡是,由于與該上下文相關(guān)的特定屬性將會改變,所以,獲得 JNDI InitialContext 的方法可能不同。

該 createEJB() 方法創(chuàng)建一個散列表,然后用適合于軟件環(huán)境的值填充。下一步,創(chuàng)建一個新的 InitialContext 對象,該對象用于通過 JNDI 服務(wù)獲得對 EJB 組件的遠程引用。因為從 JNDI 上下文返回 JNDI(這是在 IIOP 之上使用 RMI 的編碼需求),所以,限制了該遠程引用。獲得 EJB 組件宿主之后,創(chuàng)建一個無狀態(tài)會話 bean,然后將其返回給客戶機應用程序的 main 方法。

處理返回的對象

客戶機應用程序的代碼塊 2 處理 EJB 組件返回的 DAB CallableStatement 對象。首先定位與 CallableStatement 關(guān)聯(lián)的根元數(shù)據(jù)對象。因為 CallableStatements 可以獲得多個結(jié)果集,所以,多個 StatementMetaData 對象可以鏈接在一起,并包括在 CallableStatement 中。而鏈的根總包含描述 SQL 語句的元數(shù)據(jù)和相關(guān)參數(shù),因此,這就是我們的開始之處。這答應我們獲得 CallableStatement 中包括的參數(shù)數(shù)目。返回的數(shù)目將包括過程的所有 IN、INOUT 和 OUT 參數(shù)。通過使用循環(huán),可以處理所有參數(shù)并打印每個參數(shù)的相關(guān)信息,包括參數(shù)名、相應的 Java 類和模式(指明 IN、INOUT 或 OUT 模式的數(shù)字)。

下一步,查看結(jié)果集并處理它們。首先,確定 CallableStatement 對象中包括的結(jié)果集數(shù)目。通過使用循環(huán),可以獲得每個用 DAB SelectResult 對象表示的結(jié)果集。然后,使用另一個私有輔助方法 processRS(...) 來處理結(jié)果集。processRS(...) 方法確定傳遞給 SelectResult 并包含在其中的行和列的數(shù)目。假設(shè)有一些行存在,它使用嵌套循環(huán)來打印有關(guān)所有行中的所有列的信息。該信息包括列名和它的值。

目前為止,客戶機應用程序的工作幾乎完成。代碼塊 3 除去會話 bean,打印一行表明已完成,然后終止。當然,在代碼塊 3 之后的代碼處理任何碰到的異常。在這里,只打印一個堆棧跟蹤。

總結(jié)

希望您已理解會話 EJB 組件如何利用封裝在舊有 DBMS 存儲過程中的商業(yè)邏輯。這樣做的其它可能的好處包括:減少 EJB 服務(wù)器和 DBMS 之間的網(wǎng)絡(luò)通信量,提高生產(chǎn)力,以及降低總體軟件維護成本。假如遵循本文中列出的編碼模式,則無論與過程相關(guān)的參數(shù)或結(jié)果集如何,您都可以將任何類型的存儲過程作為方法封裝在無狀態(tài)會話 bean 中。而且,您將可以使用通用編碼模式來調(diào)用任何這樣的 EJB 組件,并處理它返回的對象,而不必事先知道該對象的內(nèi)部結(jié)構(gòu)。

參考資料

Bontempo、Charles J. 和 Cynthia Maro Saracco 所著的 Database Management: Principles and ProdUCts, Prentice Hall, 1995, ISBN 0-13-380189-6。該書討論了數(shù)據(jù)庫治理系統(tǒng)的基礎(chǔ),并簡述了不同商業(yè)產(chǎn)品中提供的功能。

Data Access Beans Javadoc 描述了本文所討論的數(shù)據(jù)訪問 Bean 的 API。該書可在 VisualAge for Java 聯(lián)機文檔中獲得。在運行產(chǎn)品時,選擇幫助 -> 參考資料 -> IBM API -> 數(shù)據(jù)存取 Bean -> com.ibm.db 包。

Date, C. J. 所著的 An Introduction to Database Systems, Seventh Edition, Addison-Wesley, 1999, ISBN 0-20138-590-2。該書討論了數(shù)據(jù)庫治理系統(tǒng)的基礎(chǔ),并提供有關(guān)關(guān)系數(shù)據(jù)模型的具體信息。

DB2 產(chǎn)品手冊

"Enterprise JavaBeans Specification" 的最新版本,可下載。

"JDBC API Specification" 的最新版本,可下載。

Monson-Haefal, Richard 所著的 Enterprise JavaBeans, O‘Reilly and Associates, 1999, ISBN 1-56592-605-6。該書描述 EJB 編程基礎(chǔ),并提供大量編碼示例。

Picon Joaquin 和 Patrizia Genchi、Maneesh Sahu、Martin Weiss、Alain Dessureault 所著的 Enterprise JavaBeans Development Using VisualAge for Java, IBM 紅皮書,1999 年 5 月。該紅皮書提供有關(guān)用 VisualAge for Java 開發(fā)不同種類 EJB 組件的循序漸進指示。請造訪 www.ibm.com/redbooks,并搜索 SG24-5429。

Saracco、Cynthia Maro 所著的 "Leveraging DBMS Stored Procedures through Enterprise JavaBeans," IBM 技術(shù)報告 03.723,2000 年 8 月。該報告提供十分具體地討論了本文所述的主題,還重點討論了設(shè)計問題及其利弊。可從 Database and Data Management 白皮書 或 VisualAge 開發(fā)者園地 獲得

Saracco、Cynthia Maro 所著的 Universal Database Management: A Guide to Object/Relational Technology, Morgan Kaufmann Publishers, Inc., 1998, ISBN 1-55860-519-3。該書描述了關(guān)系 DBMS 供給商已經(jīng)集成到,或可能要集成到其產(chǎn)品中的面向?qū)ο髷U展。它提供了大量 SQL 示例。

Ueno、Ken 和 Tom Alcott、Jeff Carlson、Andrew Dunshea、Hajo Kitzhofer、Yuko Hayakawa、Frank Mogus、Colin D. Wordsworth 所著的 WebSphere V3 Performance Tuning Guide,IBM 紅皮書,2000 年 3 月。該紅皮書為 WebSphere 用戶提供調(diào)整性能的技巧。請造訪 www.ibm.com/redbooks,并搜索 SG24-5657。

聯(lián)機形式的 VisualAge for Java 產(chǎn)品手冊(與產(chǎn)品一起提供),以及位于 VisualAge 開發(fā)者園地網(wǎng)站的產(chǎn)品信息。

聯(lián)機形式的 WebSphere 產(chǎn)品手冊(與產(chǎn)品一起提供),以及可從 Web 應用程序服務(wù)器 Web 站點獲得的產(chǎn)品信息。

White、Seth 和 Maydene Fisher、Rick Cattell、Graham Hamilton、Mark Hapner 所著的 JDBC API Tutorial And Reference, 第二版, Addison-Wesley, 1999, ISBN 0-201-43328-1。該書描述了 JDBC 2.0,并提供大量編碼示例。

Zimmerman 和 Daniel 所著的 "Creating DataSources in the VisualAge for Java WebSphere Test Environment," 通過 VisualAge 開發(fā)者園地發(fā)表的技術(shù)文章,2000 年 2 月。該文章描述使用版本 3.0.2 的 VisualAge 開發(fā)人員如何創(chuàng)建和訪問 DataSource。要檢索該文章,請造訪 VisualAge 開發(fā)者園地網(wǎng)站,并在該站點的 Articles 部分搜索 Zimmerman。

感謝

感謝 Becky Nin,在我寫這篇文章時,她為我提供了幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 连江县| 岳阳市| 渑池县| 灌阳县| 无为县| 平潭县| 当雄县| 桃源县| 托克托县| 凤庆县| 乐亭县| 醴陵市| 勐海县| 武宣县| 通城县| 武山县| 长丰县| 芜湖市| 札达县| 韶山市| 阿拉善右旗| 玉环县| 巴里| 玉环县| 勐海县| 莱西市| 溧阳市| 合阳县| 奎屯市| 徐汇区| 尉氏县| 福贡县| 民乐县| 灌阳县| 庆云县| 保德县| 加查县| 清河县| 四子王旗| 新郑市| 通海县|