Java 無處不在。如果您是一名應用程序開發人員,那麼您很可能正在使用 Java 進行開發。如果是這樣,您應該知道這樣的開發並非總是那麼有趣。
使用 Java Database Connectivity(JDBC) 創建應用程序需要很多的步驟,其中不少步驟都比較麻煩。您不僅需要創建一個 Java 數據訪問對象層,還需要處理 CRUD(create, replace, update, delete)SQL 操作。爲此,通常不得不使用兩套工具:一套用於 Java 開發,另外一套用於數據庫 CRUD 操作。如果有一套工具可以同時處理這兩種工作,不是更方便嗎?IBM 也這麼認爲,並着手創建了這樣的工具。這個名爲 pureQuery(之前的代碼名稱爲“JLINQ”)的新的高性能平臺包括用於應用程序的開發工具、API 和高級運行庫。IBM 的 pureQuery 是爲簡化訪問數據的應用程序的開發和管理而設計的。它對應用程序生命週期中的開發、部署、管理和治理等各個階段都有幫助(詳見圖 1)。
圖 1. pureQuery 體系結構概覽
pureQuery 工具、API 和運行時環境提供了對數據庫中的數據以及內存中的 Java 對象的訪問。作爲 IBM Data Studio 工具集的一個組件,一個公共的數據庫應用程序開發和管理平臺, pureQuery 提供了高級的 Java 數據訪問功能,並真正避免了 JDBC 編程,因爲它將查詢語言與 Java 相集成。
Java 開發人員可以選擇多種 Java 數據訪問 API 來構建應用程序,從 JDBC 到 Java Persistence Architecture(JPA)。這些 API 可以分爲兩大類:直接 SQL 訪問和託管對象。每種方法都有其支持者和反對者。圖 2 總結了每種方法的優缺點。
圖2. 幾種數據訪問方法比較
直接 SQL 訪問很好理解。它便於控制發出的 SQL,從而提高 SQL 的性能。但是,JDBC 開發過程會比較單調乏味,並耗時較長。在直接 SQL 訪問方法學中,Java 程序員必須將結果集從 JDBC 映射到 Java 對象,並創建語句和綁定參數佔位符。爲獲得最佳性能,開發人員必須掌握 JDBC API,並利用批處理和結果優化等特性。爲提高 JDBC 性能,有些人可能會考慮 SQLJ;但是,這種選擇要求開發人員重新編寫數據訪問層。
JDBC 開發的單調乏味促使對象關係映射(ORM) 框架問世,該框架提供一個數據訪問抽象層。利用 ORM 通常可以更輕鬆地創建數據訪問層。但是,ORM 對發出的 SQL 的控制比較有限,而且,它們給運行時性能問題的診斷加多了一層的複雜性。調優和診斷變得更加困難,因爲開發人員無法再控制將什麼樣的 SQL 發送到數據庫;因此,難以更改 SQL 或者決定由哪個應用程序發出 SQL。
IBM 創建了 pureQuery,以解決這些方法的侷限性。pureQuery 提供了一個具有 SQL 智能的 Java 編輯器,但是它並不是另一種類 SQL 的語言——它是一種可以以聲明的方式查詢關係數據庫以及 Java 集合和數據庫緩存的語言。擴展的 Java 編輯器包括一個集成的 SQL 編輯器,開發人員可以像編輯 Java 那樣利用代碼完成、驗證和執行輔助等特性。此外,IBM 正在致力於通過 pureQuery 增強對 JPA 的支持。
|
pureQuery 簡化了 Java 數據訪問應用程序整個開發週期(開發、部署、管理和問題診斷)中與數據服務器(尤其是對於 IBM 數據服務器)和 Java 對象相關的工作。pureQuery 運行時可以與所有具有 JDBC 驅動程序的數據庫打交道,並提供了與所有版本的 DB2 和 Informix Dynamic Server(IDS)的附加工具的集成。您可以選擇和 JPA(一種 J2EE 標準)或 Spring 和 iBatis 等流行的開源項目一起使用 pureQuery。pureQuery 與最近宣佈的 Project Zero 計劃 —— zero.data 中的底層技術——相集成。 pureQuery 技術將 SQL 編輯帶入到 Java 開發環境中。
簡言之,pureQuery 使很多與 Java 相關的數據訪問編程任務變得容易很多。它提供了一個良好的環境,可幫助您在開發週期中儘早發現問題,並從數據庫一直追蹤迴應用程序源代碼。可以通過相同的 Java API 同時使用靜態和動態 SQL。對靜態 SQL 的支持改善了問題診斷和治理。DB2 DBA 應該理解靜態 SQL 訪問對於應用程序性能、應用程序管理和數據訪問安全(治理)的好處。
pureQuery 簡化並統一了所有數據訪問的實現。它並沒有強迫您使用特定的 API(例如 EJB2、JPA、Spring 或 iBatis),但確實爲某些用於訪問數據的已有 API 的實現提供了便利。利用 pureQuery,可以直接在 Java 中編寫數據訪問代碼。在編寫查詢時,可以獲得設計時語法和模式檢查以及更好的工具支持(例如代碼完成/輔助)。
IBM Data Studio 解決方案將很多重複的 JDBC 和對象構造任務自動化。例如,pureQuery 的SQL 智能可以幫助您在開發過程中完成 SQL 語句。
SQL 編輯器集成(如圖 3 所示)包括了以下特性,以提供對語義和語法驗證的支持:
- 設計時編譯
- 智能內容輔助
- 語法着色
圖 3. SQL 編輯器集成
直接在 Java 編輯器中測試 SQL,這可以提高生產率;您可以在數據庫上快速地測試 SQL,並標記錯誤,就像處理 Java 編程錯誤一樣。
通過使用 pureQuery,可以縮短 Java 編輯-編譯-調試開發週期中的 SQL 週期。您不必等到運行時就可以知道一個查詢字符串是否格式良好,或者是否將返回錯誤。圖 4 顯示了 pureQuery 如何在 Eclipse Java Perspective 中像對待 Java 錯誤一樣標記 SQL 錯誤。
圖 4. Eclipse Java Perspective 中 pureQuery 的錯誤標記
這種工具集成可以像 Java 開發人員編寫代碼時一樣提供交互式的、智能的代碼輔助和即時 SQL 錯誤警告,從而大幅提升 Java 程序員的生產率。pureQuery 還使開發人員可以查詢內存中不受管的對象。它可以查詢堆上沒有副本或存儲的原始對象。這些對象可以與來自一個數據服務器查詢的結果相連接,因爲 pureQuery 使用完全標準的 SQL。例如,清單 1 中的查詢使用 pureQuery 的內存中查詢特性連接兩個 Java 集合。
清單 1. 使用 pureQuery 的內存中查詢 API 連接兩個 Java 集合
Department[ ] depts = ...; Employee[ ] emps = ...; Data qoc = DataFactory.getData(); List<Employee> e = data.queryList(“select e.firstname, e.lastname, e.empno, e.workdept from ?test.Employee as e,?test.Department as d where e.workdept = d.deptno”,Employee.class, emps, depts); |
這裏不管理、複製或更改對象,而是在內存(堆)中訪問它們。注意,? 佔位符在 WHERE 子句中用於標識謂詞值,在 FROM 子句中用於標識 Java 集合。
pureQuery 使用常規的 SQL 來查詢內存中的對象。這個功能可以緩存常被訪問的固定數據集,例如美國各州的查找表,然後,可以將這個表與其他數據相連接,以顯示州的全稱,避免與數據庫服務器之間不必要的來回訪問。
pureQuery 另一個有趣的特性是同一個 API 可同時用於 Java 靜態和動態 SQL 數據訪問。在此之前,JDBC 提供動態 SQL 數據訪問,SQLJ 提供靜態 SQL 數據訪問。pureQuery 中對靜態 SQL 的支持可以爲應用程序帶來很多好處——提高運行時性能、簡化問題和代碼錯誤的識別,以及提高管理能力。靜態 SQL 可以監視靜態 SQL 包,從而提高可管理性。靜態 SQL 不僅提供最快的數據庫訪問方法,還允許開發人員鎖定數據訪問路徑,以提供更確定的高性能(這對滿足對終端用戶的服務級別保證很重要)。最後,靜態 SQL 提供了更強大的授權模型。在部署時,可以通過運行時配置將相同的 pureQuery 代碼在動態與靜態 SQL 之間切換,從而使開發人員可以在開發時使用動態 SQL 構建應用程序,而在部署時切換到靜態 SQL,而且無需更改代碼。
|
……先有數據庫還是先有應用程序?如果先有應用程序,那麼就採用自上而下的方法設計系統,從對象域模型開始。pureQuery 支持自上而下的方法,可以從對象生成表定義;然後,它幫助您生成域對象域模型相符的 Java 數據訪問模型(持久層)。
另一方面,假設先有數據庫。在此情況下,採用自下而上的方法來設計系統,從一個已有的數據庫開始,pureQuery 可以爲之生成一個 Java 數據訪問模型。
但是,有很多已有的系統處於“中間地帶”,數據庫和對象模型都已經存在。對於這種情況, pureQuery 提供了一些工具,可以使用這些工具將 Java 數據訪問模型映射到已有的對象,以及將已有的數據庫映射到 Java 數據訪問模型。
pureQuery 支持兩種風格的 SQL 執行:一種是帶註釋的方法風格,另一種是內聯方法風格。帶註釋的方法風格使用接口中的 Java 註釋或 XML 文件中的 SQL 來定義對象到關係的映射。它創建接口(其中定義了 CRUD 方法)、接口的實現以及表示數據的 Java bean。對於帶註釋的方法風格,接口不會向使用 Java 方法調用的應用程序開發人員顯示任何持久技術。這種方法使用 Java 註釋將 SQL 映射封裝到接口中。而內聯方法風格則直接執行 SQL。例如,下面的代碼是以內聯方法風格使用 employee bean 的一個例子:
清單 2. 內聯方法使用 employee bean
employee = db.queryFirst("SELECT NAME, ADDRESS, PHONE FROM EMP WHERE NAME=:name", Employee.class,name); |
這些工具可以輕鬆生成基於 Java 集合的表、視圖和存儲過程結果集。
|
pureQuery 爲 Java 數據訪問,包括性能和問題診斷提供了一種簡單的編程模型。作爲 JDBC 之上很小的一個層,pureQuery 簡化了與 Java 訪問開發相關的大多數常見任務。它還可以比 JDBC 程序更快地執行,因爲它封裝了使用類 JDBC 批量更新的“最佳實踐”,利用特定於數據庫的 API 提供比使用標準 JDBC API 情況下更好的性能,以及爲開發人員提供最有效的 JDBC 選項。pureQuery 將靜態 SQL 的優點釋放出來,允許在不更改任何代碼的情況下生成靜態 SQL。此外,它還提供對存儲和檢索 Java bean 以及與數據庫之間的來回映射的即開即用的支持。pureQuery 是一種可擴展的平臺,擁有可插式的定製的結果處理模式。
結果怎樣?pureQuery 使 Java 中的 SQL 編程像 Java 編程本身一樣有效率。
pureQuery 和它的 IBM Data Studio 同伴 Data Web Services 協力,通過簡化這些通常比較複雜的任務,提高開發人員的效率,並縮短開發週期。請參照參考資源中,與 pureQuery 和 IBM Data Studio 解決方案相關的更多信息。
|
除了 pureQuery 之外,IBM Data Studio 解決方案還包括很多其他的特性。其中一種新特性就是 Data Web Services,它提供了無需編寫任何代碼就能生成訪問數據的 Web 服務的功能。通過使用 Data Web Services,可以將查詢(SQL 或 XQuery)和存儲過程公佈爲 Web 服務;這些服務可以構成面向服務架構(SOA)解決方案的基礎。
越來越多的公司正在將 SOA 應用於他們的應用程序,並將底層的組件向鬆散耦合的、基於服務的訪問轉移。在數據訪問端,數年來公司已經通過存儲過程、觸發器等封裝或實現了大量業務邏輯。如果能將這些數據訪問操作和底層的規則利用起來,將它們公佈爲隨時可用的 Web 服務,就可以幫助加快採納 SOA。目前,通過服務訪問數據庫需要很多應用程序開發方面的專業知識。這需要將 SQL 操作或存儲過程包裝在應用程序代碼中,然後將其部署到某種應用程序服務器上。通常,Web 開發人員不是 SQL 專家,反之亦然,因此開發和部署那樣的應用程序將比較痛苦——最終,也許只能得到一個性能糟糕的應用程序。
Data Web Services 避免了所有的編程。只需通過拖放操作,就可以以 Web 服務的方式啓用數據庫,並生成 SOAP 和 REST(Representational State Transfer)型端點,這些端點可以 GET 或 POST 數據。然後,可以通過任何 Web 服務使用者來訪問數據。Data Web Services 支持各種各樣的端點,爲調用這些服務提供了多種客戶機選項,包括 SOAP 和基於瀏覽器的客戶機及 Xforms、HTML 表單等。
服務生成過程會產生一個 WSDL(Web Service Definition Language)文件,用於描述服務。然後,可以將最終的 Data Web Service 解決方案部署到已有的 Java 應用程序服務器基礎設施上。關鍵的特性包括:
- 通過拖放操作創建 Web 服務
- 無需編程的部署
- 完整的 Web 服務接口
- HTTP 上的 SOAP 和 WSDL 生成
- REST 型服務接口
- HTTP GET/POST 綁定
- Web 2.0 功能(JSON,feeds via XSLT,AJAX)
- 將遺留應用程序組件公佈爲服務的能力
包含 Data Web Services 的 IBM Data Studio 是基於 Eclipse 的,易於集成到其他 Eclipse 解決方案中。
Data Web Services 可以避免編寫大量代碼,從而簡化 Web 服務的開發。Data Studio 工具爲 Web 服務提供了嚮導驅動的開發步驟,另外還提供了一個集成的測試環境。而且,可以將 XSLT 應用於輸入和輸出,以滿足服務格式的要求。WSDL 是在幕後自動生成的,這使用戶可以將其提供給 Web 服務客戶機使用。
|
- 本文從 DB2 Magazine 期刊取得授權並進行翻譯,參見 DB2 Magazine 站點 上的 英文原文。
- IBM Data Studio 下載:IBM Data Studio 解決方案擁有許多新特性,其中包括 Data Web Services 支持。
- pureQuery 下載:IBM Data Studio pureQuery Runtime V1.1 提供了一個高性能的 Java 數據庫訪問平臺。
- Project Zero:Project Zero 是 IBM 的一個孵化器項目,側重遵從面向服務的體系結構( Service-Oriented Architecture,SOA)的 Web 2.0 應用程序的敏捷開發。
- zero.data:Project Zero 項目中 Zero 數據訪問庫(簡稱爲 zero.data)。
0
收藏