程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在WebSphere Application Server V7上使用IBM solidDB V6.3和OpenJPA

在WebSphere Application Server V7上使用IBM solidDB V6.3和OpenJPA

編輯:關於JAVA

Java Persistence API(JPA)是 Enterprise JavaBean (EJB) 3.0規范的一部分。JPA可用於Java Standard Edition(Java SE)和Java Enterprise Edition(Java EE)應用程序。IBM solidDB 是一個內存關系數據庫,它的速度最高可達常規數據庫的10倍。solidDB支持Java Database Connectivity (JDBC) 2.0規范。許多Java SE和 Java EE 應用程序可以利用使用 JDBC 的內存數據庫的性能優勢。

簡介

Java Persistence API(JPA)作為 EJB 3.0 規范 (JSR220) 的一部分引入,其目的是使整個 Java 社區基於一個單一的、標准的、持久的 API。JPA 吸收了 Hibernate、TopLink、Java Data Objects (JDO) 和 Container Managed Persistence (EJB-CMP) 2.1 規范的精華。

JPA 可用於 Java Standard Edition (Java SE) 和 Java Enterprise Edition (Java EE) 環境,因為它將實體表示為可以被一個 JPA 持久性提供者(如 Apache OpenJPA)管理的 Plain Old Java Objects (POJOs)。關於這個實體的對象關系映射的元數據使用 Java 5 注釋或 XML 描述符指定。實體用於將 Java 對象持久化保存在數據庫中。

有幾種 JPA 持久性提供者。IBM 的 JPA 解決方案基於 Apache OpenJPA 項目。隨著這些 JPA 持久性提供者的發布,您現在可以對一個標准的 API 編碼,而不必在不兼容的非標准持久性框架(如 Hibernate 或 JDO)之間抉擇。

IBM solidDB 是一個內存數據庫,它的速度最高可達常規數據庫的 10 倍。solidDB 不僅具有高速度,還具有高可用性和故障轉移特性,這使它成為許多性能關鍵型應用程序的數據管理組件的自然選擇。

solidDB 可以部署為一個獨立的內存數據庫,供應用程序直接使用。它也可以部署為一個緩存,用於加速 IBM DB2®、Oracle 和 SQL Server 等傳統數據庫。solidDB 支持標准 Java Database Connectivity (JDBC) 2.0 規范。solidDB JDBC Driver 是一個類型 4 驅動程序(即它是 JDBC 2.0 標准的一個 100% 的 Java™ 實現),可用於支持 JDK 1.4.2 或更高版本的所有 Java 環境。由於 solidDB 支持 JDBC,您也可以通過 solidDB 使用 JPA。這就意味著編寫需要良好性能的應用程序的 Java 程序員可以通過 solidDB 使用 JDBC、JPA 或者同時使用兩者。

其他文章 已經介紹了如何通過 solidDB 使用 JDBC,如何將 solidDB 用作傳統數據庫的一個緩存(參見 “參考資料”)。本文將介紹如何通過 solidDB 將 OpenJPA 用作一個獨立的內存數據庫。首先,您將定義一個示例應用程序(包含在本文中),用於展示如何通過 solidDB 使用 OpenJPA。這個示例應用程序作為一個 Java EE 應用程序實現,在 IBM WebSphere Application Server 7.0 上運行。(這個應用程序也可以作為一個 Java SE 應用程序實現(沒有無狀態會話 bean),在獨立的 OpenJPA 持久性提供者之上運行。)定義這個應用程序之後,本文將指導您逐步安裝和配置一些基本組件,這些組件是您使用 OpenJPA 和 solidDB 在 WebSphere Application Server 上構建一個性能關鍵型應用程序所需的組件。最後,您將看到針對 JPA 規范編寫的 Java 應用程序如何通過 OpenJPA 連接到 solidDB。

示例應用程序

許多 Java 應用程序都可以受益於內存數據庫的使用,比如 solidDB。例如,一些電子商務網站整合來自幾個後端應用程序的信息,一些財務服務公司對貿易商提供實時警告,一些通信運營商監視移動電話使用和呼叫方案以進行計費。

對於本文的目的來說,您在這裡使用的示例應用程序是一個計算機電話集成(CTI)應用程序。假設這個 CTI 應用程序通過將呼叫者路由到最有資格處理每種呼叫類型的代理處來處理所有接入呼叫。這個應用程序建立一個與代理的電話的連接並在代理的工作站上填充呼叫者的帳戶數據(如帳戶編號、姓名等)。這些交互包含在圖1 展示的示例應用程序的主要設計元素之中。

圖1. CTI 設計模型

在這個應用程序中:

Message Façade 從 PBX/ACD(專用交換機/自動呼叫分配器)接收異步消息。它從消息有效載荷中創建 Value Object 並異步將消息分發到 Session Façade 來滿足請求。消息驅動 bean(MDB)實現 Message Facade。

Session Façade 提供從數據庫創建、檢索、更新和刪除 Value Object 的操作。例如,它擁有 createCaller、updateAgent 和 deleteCaller 等操作。它使用 Data Access Object 存儲來自 solidDB 的 Value Objects。Stateless Session Beans(無狀態會話 Bean,SLSB)實現 Session Façade。

Value Object 持有代理和呼叫者的屬性值。它作為一個 POJO 實現,帶有獲取和設置屬性值的方法。它還提供一個從 XML 字符串創建 Value Object 的方法(valueOf)和一個將 Value Object 轉換為 XML 字符串的方法(toString)。這些 POJO 通過 Message Façade 創建,作為參數傳遞給 Session Façade 和 Data Access Object。

Data Access Object 封裝了對用於在數據庫中存儲 Value Objects (POJOs) 的持久性技術(JDBC、JPA 等)的所有訪問。在這個應用程序中,JPA APIs 用於將 Value Objects 持久化到 solidDB 中。

要將接入的呼叫者智能地路由到最好的可用代理,關鍵是能夠使 CTI 應用程序中呼叫者狀態和代理狀態的副本與 PBX 一致。為此,CTI 應用程序通過 JMS 消息收到來自 PBX/ACD 的狀態更改,並且 CTI 應用程序使用 solidDB 將代理狀態和呼叫者狀態緩存到內存中。

建立開發環境

本文附帶的壓縮文檔 包含一個 Project Interchange 文件,它包含這個示例的所有的源。下面的說明簡要介紹如何導入和利用這個 Project Interchange 文件。

啟動 IBM Rational® Application Developer V7.5。您可以使用 Rational Application Developer 的一個許可版本,獲取和安裝一個 試用版,您也可以使用 WebSphere Application Server V7.0 中捆綁的 Rational Application Developer 版本。

導航到 Project => Build Automatically,取消自動構建選項。

從菜單欄導航到 File => Import => Other => Project Interchange,然後單擊 Next 按鈕。將顯示 Import Projects(如圖2 所示)。

浏覽到項目交換文件,選擇所有列出的項目,然後單擊 Finish 按鈕。

圖2. 導入項目

通過選擇 Window => Preferences => Java 設置 Rational Application Developer 中的 WAS_HOME 類路徑變量。添加一個名為 WAS_HOME 的新類路徑變量,該變量包含您的 WAS_Home 目錄名值(如圖3 所示),比如 d:\IBM\SDP75\runtimes\base_v7。

圖3. 類路徑變量

通過選擇 Window => Preferences => Run/Debug => String Substitution 設置 Rational Application Developer 中的 WAS_HOME 字符串替代。添加一個名為 WAS_HOME 新的字符串替代變量,它的值仍然指向您的 WAS_HOME 目錄(如圖4 所示)。

圖4. 字符串替代

在 build.properties 文件中設置 was.home 值。展開 CTIServices 項目,雙擊 build.properties 文件,並將 was.home 屬性設置為您的 AS_HOME 目錄(如圖5 所示)。

圖5. 構建屬性

現在您已經准備好在您的 Rational Application Developer 工作空間中構建所有項目了。選擇 Project => Clean...,確保選中 Clean all projects 和 Start a build immediately。構建完成後,您應該只看見警告(如圖6 所示)。如果您看見任何錯誤,修正錯誤之後再繼續。

圖6. 構建項目

建立solidDB 獨立數據庫

根據下載說明獲取並安裝 solidDB 的二進制發行版。在本文寫作時,當前版本是 6.3 版。安裝後,服務器文件將解壓到一個文件夾(比如 d:\IBM\SolidDB)。

創建 solidDB 數據庫。打開一個命令窗口並從 solidDB 安裝目錄運行以下命令:

.\bin\solid -c eval_kit\standalone

根據提示輸入系統目錄名稱、用戶名和密碼;對於這個示例,所有值都可以使用 “dba”。

使用本文包含的下載文件中提供的腳本創建一些表格。打開一個 shell 並運行以下命令:

.\bin\solsql "tcp localhost 1315" dba dba <WS>\CTIEntities\dml\createTablesSolid.ddl

<WS> 是 Rational Application Developer 工作空間地址,例如 d:\workspaces\usingjpawithsoliddb。

通過從 solidDB 安裝目錄運行以下命令使用示例數據填充這些表格:

.\bin\solsql "tcp localhost 1315" dba dba <WS>\CTIEntities/dml/createDataSolid.sql

<WS> 仍然是 Rational Application Developer 工作空間地址。

建立 WebSphere Application Server 測試環境

啟動 Rational Application Developer,如果它沒有啟動的話。

通過選擇 Window => Show View => Servers 打開服務器視圖。打開 Server 選項卡,在服務器面板中右鍵單擊,選擇 New => Server。選擇 WebSphere Application Server V7.0 並單擊 Finish 按鈕。服務器已經被添加到 Rational Application Developer。

確保服務器啟動沒有錯誤。為此,右鍵單擊該服務器,選擇 Start。如果有錯誤,修復錯誤之後再繼續。

本文包含的測試程序是一個獨立的 Java 應用程序,它訪問運行在 WebSphere Application Server 上的 CTI 服務(SLSBs)。要訪問那些 SLSBs,測試程序必須指定 JNDI 命名服務的特定於實現的位置(端口號)。要發現那個地址,通過選擇 Administration => Run administrative console => Application servers => server1 => Ports 打開管理控制台,記錄下 Bootstrap Address 的端口號。

這個示例應用程序的源代碼包含一個 jndi.properties 文件。在這個屬性文件中指定您在步驟 4 中發現的端口號,以便測試程序能夠發現這個 JNDI 命名服務(如圖7 所示)。為此,展開 CTIServices => ejbModule,打開這個 jndi.properties 文件,將 “2815” 更改為您的 Bootstrap Address(如果實際值與這個值不同的話)。

圖7. JNDI 命名服務

運行示例應用程序

在服務器視圖中,右鍵單擊 WebSphere Application Server V7.0 並選擇 Add and Remove Projects。這將打開 Add and Remove Projects 面板。

從 Available 項目面板選擇 CTIApplication,選擇 Add 以將它移動到 Configured 項目面板,單擊 Finish 按鈕。

監視控制台,您將看到如下內容:WSVR0037I: Starting EJB jar: CTIServices.jar
CNTR0167I: The server is binding ... 
WSVR0057I: EJB jar started: CTIServices.jar
WSVR0221I: Application started: CTIApplication

當您看到 “Application started” 提示後,就可以運行示例應用程序了。從 Package Explorer 面板選擇 StateManagerTest.java 文件,該文件包含您要測試的主要例程。為此,展開 CTIServices => ejbModule => com.ibm.issw.service.statemanager,右鍵單擊 StateManagerTest.java 文件,選擇 Run As => Run Configurations。這將打開 Run Configurations 面板。

在 Run Configurations 面板內,右鍵單擊 JUnit 並選擇 New。在 Test 選項卡中,輸入 Name、Project 和 Test 類(如圖8 所示)。(這些值可能已經自動填充好了。)

圖8. 創建 JUnit 測試

選擇 Classpath 選項卡並確保類路徑已經像圖9 顯示的那樣被設置好。您需要添加客戶機存根 JAR 文件,這樣這個獨立的客戶機才能調用遠程 EJB。為此,單擊 User Entries,單擊 Add JARs... 按鈕,然後選擇 CTIServices_withStubs.jar 文件。

圖9. 設置類路徑

完成這個配置之後,單擊 Run。如果成功,您將看到三個測試用例在 JUnit 視圖中成功運行(如圖10 所示)。

圖10. 測試結果

持久性參數

最後,讓我們看看 persistence.xml 文件中的配置參數的一些細節,該文件是結合使用 solidDB 和 OpenJPA 所必需的。persistence.xml 文件必須放置在類路徑上的 META-INF 文件夾中(您可以在 下載文件 中發現該文件的一個副本)。這個文件定義數據庫連接、映射位置、登錄級別等。通過 solidDB 使用 OpenJPA 需要以下配置參數:

openjpa.ConnectionDriverName

openjpa.ConnectionURL

openjpa.ConnectionUserName

openjpa.ConnectionPassword

另外,openjpa.jdbc.DBDictionary 是建立一個數據庫連接的另一個重要參數。這個屬性使持久性提供者不必處理特定於供應商的 SQL 差異。這個參數是可選的,因為 OpenJPA 通常可以通過 URL 和 DriverName 參數確定要使用的特定於供應商的詞典(參見下面的清單)。

<persistence ...>
<persistence-unit name="CTIPU">
<properties>
<property
name="openjpa.ConnectionDriverName"
value="solid.jdbc.SolidDriver">
</property>
<property
name="openjpa.ConnectionURL"
value="jdbc:solid://localhost:2315/dba/dba">
</property>
<property
name="openjpa.ConnectionUserName"
value="dba">
</property>
<property
name="openjpa.ConnectionPassword"
value="dba">
</property>
</properties>
</persistence-unit>
</persistence>

但是,因為 solidDB 不是通過一個特定於供應商的詞典支持的,且 OpenJPA 不能確定供應商,所以恢復為對 solidDB 使用一個通用的 JDBC 詞典。盡管這將導致有限的功能,但是我們在測試這個 CTI 示例應用程序時沒有遇到任何問題。

結束語

本文向您展示了如何安裝和配置在 WebSphere Application Server V7.0 上通過 solidDB 6.3 使用 OpenJPA 所需要的組件。本文還通過在 WebSphere Application Server 上設計、部署和運行一個示例 Java 應用程序,向您展示了如何利用 solidDB 內存數據庫的性能優勢。

總之,對 IBM solidDB 的正式支持已經被作為 OpenJPA 的一個需求。我們強烈鼓勵向 OpenJPA 項目貢獻一個真正的、獨立的 solidDB 詞典。同時,本文將幫助您立即在 WebSphere Application 上通過 solidDB 使用 JPA。

本文源代碼下載:download.boulder.ibm.com/ibmdl/pub/software/dw/wes/techjournal/0906_vines/usingjpawithsoliddb.zip

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved