|
一、Cloudscape數(shù)據(jù)庫 Cloudscape數(shù)據(jù)庫是J2EE自帶的RDBMS數(shù)據(jù)庫管理系統(tǒng)。它提供了所有大型數(shù)據(jù)庫管理系統(tǒng)的大部分功能,為J2EE的初學(xué)者提供了較好的數(shù)據(jù)環(huán)境。 Cloudscape™ 是一種占用內(nèi)存少、多用戶、標(biāo)準(zhǔn)驅(qū)動的關(guān)系數(shù)據(jù)庫系統(tǒng),它完全用 Java™ 編寫,適合嵌入到 Java 應(yīng)用程序和服務(wù)器中。Cloudscape 可以在任何功能完備的 JVM 上運(yùn)行,因此同一個 Cloudscape 應(yīng)用程序不必修改就能在多種硬件平臺上運(yùn)行。 Cloudscape 支持 SQL-92E (entry) 標(biāo)準(zhǔn)和 SQL-99 的一部分,是基于 Java 和 SQL 的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(ORDBMS),Cloudscape 使用的 API 是 JDBC。 它無需進(jìn)行管理(零管理),而且無需在應(yīng)用程序之外安裝和管理數(shù)據(jù)庫。“安裝后就忘掉”,這是成功的可嵌入式組件的重要設(shè)計(jì)目標(biāo)。 Cloudscape 是作為 Java 類庫實(shí)現(xiàn)的關(guān)系數(shù)據(jù)庫管理引擎。應(yīng)用程序可以通過 JDBC API 訪問 Cloudscape 引擎管理的數(shù)據(jù)。 簡單說,Cloudscape 是一個 Java 類庫,可以很容易地將它嵌入到任何 Java 應(yīng)用程序或服務(wù)器架構(gòu)中,同時還不會損害該應(yīng)用程序的 Java 特性。當(dāng)需要擴(kuò)充數(shù)據(jù)庫時,Cloudscape 支持復(fù)雜 SQL 事務(wù)和 JDBC,該特性允許它將應(yīng)用程序遷移到其他 SQL 數(shù)據(jù)庫,例如 IBM DB2® Universal Database™(UDB)。 可以從許多技術(shù)方面來區(qū)分 Cloudscape 和其他數(shù)據(jù)庫系統(tǒng): Cloudscape 易于管理。當(dāng)嵌入到客戶機(jī)應(yīng)用程序中時,Cloudscape 系統(tǒng)不需要任何管理干預(yù)。 Cloudscape 是可嵌入的。應(yīng)用程序可以將數(shù)據(jù)庫管理系統(tǒng)(Database Management System,DBMS)引擎嵌入應(yīng)用程序進(jìn)程中,從而無需管理單獨(dú)的數(shù)據(jù)庫進(jìn)程或服務(wù)。 通過網(wǎng)絡(luò)服務(wù)器(Network Server)架構(gòu)或您選擇的服務(wù)器架構(gòu),可以將Cloudscape 作為單獨(dú)的進(jìn)程來運(yùn)行。 Cloudscape 是一個純 Java 的類庫:對于 Java 開發(fā)人員,這點(diǎn)十分重要,因?yàn)樗麄冋噲D維護(hù) Java 技術(shù)的優(yōu)點(diǎn),例如平臺無關(guān)性、易于配置以及易于安裝。 Cloudscape 不需要專有的 Java 虛擬機(jī)(Java Virtual Machine,JVM)。因?yàn)橥耆怯?Java 語言編寫的,所以它適應(yīng)所有合格的 JVM。 Cloudscape DBMS 引擎是輕量級的。類文件大小大約是 2MB,并且只使用了 4MB 的 Java 堆。 Cloudscape 支持使用 Java 編寫存儲過程和函數(shù),這些存儲過程和函數(shù)可以在應(yīng)用程序的任何層上運(yùn)行。Cloudscape 沒有專用的存儲過程語言,它使用 JDBC。 Cloudscape 與其他的關(guān)系數(shù)據(jù)庫系統(tǒng)類似。它實(shí)現(xiàn)了 SQL92E 語言標(biāo)準(zhǔn)和 JDBC API 標(biāo)準(zhǔn)。Cloudscape 也有事務(wù)(提交和回滾),能夠通過事務(wù)隔離支持多個連接,并提供了崩潰恢復(fù)。與其他數(shù)據(jù)庫一樣,它允許多個線程共享同一連接,而且,隨著對 Java 技術(shù)進(jìn)行擴(kuò)展,Cloudscape 也實(shí)現(xiàn)了許多 SQL99 特性。 這種技術(shù)功能的獨(dú)特組合允許應(yīng)用程序開發(fā)人員構(gòu)建數(shù)據(jù)驅(qū)動的應(yīng)用程序,這些應(yīng)用程序是普遍的(到處運(yùn)行)、可部署的(可下載的)、可管理的、可擴(kuò)展的和可連接的。 reference http://www-106.ibm.com/developerworks/cn/db2/library/techarticles/dm-0408anderson/ http://www-106.ibm.com/developerworks/cn/db2/library/techarticles/dm-0408anderson2/index.html http://www-106.ibm.com/developerworks/cn/db2/library/techarticles/dm-0408bradbury/index.html 二、Derby數(shù)據(jù)庫 IBM® 在舊金山的 LinuxWorld 宣布正在將 Cloudscape™(一種純關(guān)系 Java™ 數(shù)據(jù)庫)作為開放源代碼發(fā)布給 Apache Software Foundation (ASF),后者已為其建立了一個名為“Derby”的孵化器項(xiàng)目。這是繼 IBM 向開放源代碼社區(qū)作出一系列承諾以來的最新承諾。 據(jù)悉,IBM為ASF提供的“Derby”軟件是IBM公司前Cloudscape關(guān)系數(shù)據(jù)庫產(chǎn)品的一部分,此舉旨在激發(fā)負(fù)責(zé)Java應(yīng)用開發(fā)的社團(tuán)的創(chuàng)新。 IBM希望借助這次捐助活動提高使用Derby軟件進(jìn)行Java開發(fā)的速度,為開發(fā)商和客戶開發(fā)基于Java的嵌入式數(shù)據(jù)庫功能提供新的選擇。到目前為止,IBM已經(jīng)雇傭了將近4000名Java專業(yè)人員,并提供100多種Java驅(qū)動的產(chǎn)品和解決方案。 Derby是一套基于Java的關(guān)系數(shù)據(jù)庫,可完全嵌入而無需管理支持的2MB容量。同時,它還是開發(fā)商的理想軟件,在無需企業(yè)級數(shù)據(jù)庫系統(tǒng)的情況下,開發(fā)人員使用該軟件能夠方便地構(gòu)建和部署應(yīng)用和工作負(fù)載。 為了弄清楚更多關(guān)于這種數(shù)據(jù)庫的問題,以及這種數(shù)據(jù)庫如何融入到 IBM 的戰(zhàn)略和 Java 應(yīng)用程序架構(gòu)中去,Jon Prial -IBM 副總裁接受了有關(guān)方面的專門采訪,以下為訪談的部分內(nèi)容。 問: 在 LinuxWorld 上,IBM 宣布將 Cloudscape 貢獻(xiàn)給 Apache Software Foundation。那么,什么是 Cloudscape? 答:Cloudscape 是一種基于 Java 的、具有全面事務(wù)支持能力的關(guān)系數(shù)據(jù)庫技術(shù)。它是一種純嵌入式數(shù)據(jù)庫,可以用在應(yīng)用程序中,也可以作為更傳統(tǒng)的客戶機(jī)-服務(wù)器應(yīng)用程序的數(shù)據(jù)庫。它體積小,而且不需要數(shù)據(jù)庫管理員;您只需編寫應(yīng)用程序。在需要時直接調(diào)用數(shù)據(jù)庫,Cloudscape 就可以為您服務(wù)。 問: 開放源代碼版本與 IBM 的商業(yè)版本之間有什么不同? 答:我們已經(jīng)把 Cloudscape 的代碼獻(xiàn)給了 Apache Software Foundation [ASF]。在 Apache 中這個項(xiàng)目叫做“Derby”,IBM Cloudscape 的未來商業(yè)版本都將以 Derby 代碼為基礎(chǔ)。 Derby 是一個孵化器(incubator)項(xiàng)目,這也是外部項(xiàng)目成為 ASF 一部分的一種常見的方式。但是開發(fā)人員如今可以在 Apache 的許可下為 Derby 代碼作出貢獻(xiàn),或者下載 Derby 代碼,我們正在積極地與我們的合作伙伴以及 Apache 合作,以發(fā)展和形成致力于 Derby 項(xiàng)目的社區(qū)。 對于我們的 Cloudscape 項(xiàng)目,IBM 搬用 Derby 代碼,并作為 IBM Cloudscape offering 提供完全支持。您也可以免費(fèi)下載 IBM Cloudscape 代碼,并且可以從 IBM 那里購買對它的支持,但我們并不打算收取 Cloudscape 的許可費(fèi)。 問: 為什么 IBM 決定公開 Cloudscape 源代碼? 答:通過將 Cloudcape 開放源代碼,IBM 希望加快基于 Java 的應(yīng)用程序的開發(fā),并帶動 Linux 和 Java 方面的更多革新。所以,擴(kuò)大這方面的市場就等于擴(kuò)大高價(jià)值的 IBM 中間件、硬件和服務(wù)方面的市場。我們認(rèn)為這樣做尤其可以在嵌入式數(shù)據(jù)庫應(yīng)用程序、小型企業(yè)解決方案以及基于 Java 和基于 Web 的應(yīng)用程序等領(lǐng)域開辟新的商機(jī)。 開發(fā)人員能識別好的代碼。當(dāng)我們從 Informix® 取得 Cloudscape 代碼時,我們內(nèi)部的開發(fā)社區(qū)便開始談?wù)撍?,并做一些工作。?shí)際上,至今在 IBM 中已有 70 個項(xiàng)目在他們的 offering 中使用 Cloudscape -- 其中有很多項(xiàng)目已發(fā)布到市場,例如 WebSphere® Application Server、WebSphere Portal 和 IBM Workplace。所以,我們知道我們有一項(xiàng)有趣的技術(shù),而這項(xiàng)技術(shù)可以成為 Java 架構(gòu)的一部分。我們看到 Java 數(shù)據(jù)庫和 Apache 正在做的 Java 工作之間有關(guān)聯(lián),并且認(rèn)識到這是一個巨大的項(xiàng)目,適合開放源代碼來做。 現(xiàn)在,IBM 對開放源代碼社區(qū)有一個長期的承諾。我們之所以有能力建立那樣的關(guān)系,部分原因就在于我們知道不是為了開放源代碼而開放源代碼,而是開放源代碼可以使事情變得更容易。 IBM 知道必須找到正確的方式來建立社區(qū)和鼓勵革新,而我們也用了很多不同的方法,例如支持 Eclipse.org 的創(chuàng)建。通過與 Apache 合作,我們可以為使用 Derby 并幫助使其變得更好的開發(fā)人員們建立一個社區(qū)。實(shí)際上,我們希望看到 Derby 數(shù)據(jù)庫變得和 Apache HTTP 服務(wù)器一樣無所不在。 問: 使用 Cloudscape 可以做哪些事情呢? 答:Cloudscape 最有趣的一個用法就是作為一個 Java 數(shù)據(jù)存儲,直接將數(shù)據(jù)庫輸入到 Java 應(yīng)用程序中。我曾提到過,Cloudscape 數(shù)據(jù)庫非常小。它只是一個 2MB 的 .jar 文件。有了這樣一個 Java 數(shù)據(jù)庫,當(dāng)一個 Java 應(yīng)用程序想要使用它時,根本不需要做任何工作,不需要進(jìn)行任何管理。Java 應(yīng)用程序只需發(fā)出 JDBC 調(diào)用,然后訪問數(shù)據(jù),之所以可以這樣做,是因?yàn)閿?shù)據(jù)庫自始至終都是以一個 .jar 文件的形式存在。 Cloudscape 技術(shù)實(shí)際上非常通用 ― 我認(rèn)為,認(rèn)識到其他類型的應(yīng)用程序在這里也可以使用是很重要的。我曾提到過,IBM Workplace 在客戶端使用 Cloudscape,以便將數(shù)據(jù)自動復(fù)制回服務(wù)器。我們在 LinuxWorld 提供了 "IBM Workplace Data Access" 可編寫腳本桌面數(shù)據(jù)庫的技術(shù)預(yù)覽 ― 這是一種用于創(chuàng)建客戶端數(shù)據(jù)庫、查詢和報(bào)表的商業(yè)用戶工具。 人們可以使用 Cloudscape 網(wǎng)絡(luò)服務(wù)器特性,將其當(dāng)作基于服務(wù)器的數(shù)據(jù)存儲來訪問。因此,雖然我們原本期望看到圍繞 Java 應(yīng)用程序的大多數(shù)初始用法,但實(shí)際上 Cloudscape 還可以用作客戶機(jī)-服務(wù)器數(shù)據(jù)庫。 問: IBM 將提供哪些類型的 Eclipse 工具? 答:我們擁有一些用于 Eclipse 的插件,通過這些插件可以訪問數(shù)據(jù)庫。此外,我們還為那些使用 Cloudscape 并希望遷移到企業(yè)級的數(shù)據(jù)庫的人們提供了工具。例如,他們可以從 Cloudscape 移植到 DB2®。 問: 您提到了 "IBM Workplace Data Access"??梢哉劦酶敿?xì)一點(diǎn)嗎? 答:IBM Workplace Data Access 是商業(yè)用戶用于創(chuàng)建和查詢運(yùn)行在不同桌面環(huán)境(包括 Windows® 和 Linux)上的數(shù)據(jù)庫應(yīng)用程序的一種工具。我們使用 Eclipse 框架開發(fā) GUI,用 Cloudscape 作為底層數(shù)據(jù)庫。 我們認(rèn)為 IBM Workplace Data Access 將可以獨(dú)自開辟新的機(jī)遇。但它也是將輕量級、跨平臺的數(shù)據(jù)庫(例如 Cloudscape 或 Derby)與用于應(yīng)用程序開發(fā)的跨平臺客戶端框架(例如 Eclipse)相結(jié)合的一個偉大的典范。 問: Cloudscape 在 DB2 數(shù)據(jù)庫系列中處于什么樣的地位? 答:Cloudscape 能滿足新的和正在增長的市場的需求。作為面向 Java 的數(shù)據(jù)庫,Cloudscape 的定位非常恰當(dāng),它很好地彌補(bǔ)了我們的其他數(shù)據(jù)庫:DB2 Universal Database™、Informix Dynamic Server、DB2 Express 等等。又因?yàn)樗墙⒃陂_放標(biāo)準(zhǔn)基礎(chǔ)上的,任何針對 Cloudscape 編寫的應(yīng)用程序都可以很容易地遷移到 DB2 UDB 和其他數(shù)據(jù)庫上運(yùn)行,這正是企業(yè)級的解決方案所需要的。 問: Derby 與其他開放源代碼數(shù)據(jù)庫有什么不同? 答:沒有哪種開放源代碼數(shù)據(jù)庫像 Derby 這樣適合擴(kuò)展 Java 架構(gòu),并帶動整個社區(qū)的革新。IBM 非常注重滿足這一需求。我們曾看到其他公司僅僅做到數(shù)據(jù)庫源代碼開放,根本沒有提供可行的計(jì)劃來建立社區(qū)。很多開放源代碼數(shù)據(jù)庫都有許可限制,有時候 ISV 實(shí)際上不得不為取得重新發(fā)布開放源代碼數(shù)據(jù)庫的權(quán)利而付出代價(jià)。而且有時候這些數(shù)據(jù)庫并不完全是關(guān)系型數(shù)據(jù)庫或事務(wù)處理數(shù)據(jù)庫。 所以,與其他開放源代碼數(shù)據(jù)庫相比,Derby 是獨(dú)一無二的。它的確是功能豐富的關(guān)系型數(shù)據(jù)庫。而且,它完全是免費(fèi)提供的,沒有商業(yè)許可限制。 問: 您還有什么要補(bǔ)充嗎? 答:Cloudscape 技術(shù)是 IBM 更大型數(shù)據(jù)產(chǎn)品戰(zhàn)略的一個擴(kuò)展。我們的想法是集成各種不同的數(shù)據(jù)存儲 ― 從 zSeries® 到普適(pervasive)設(shè)備 ― 以支持來自 IBM 和非 IBM 數(shù)據(jù)源的結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)。我們認(rèn)為信息集成是將這些維系在一起的關(guān)鍵,而我們的 DB2 產(chǎn)品為客戶提供了實(shí)現(xiàn)這一點(diǎn)的框架。 公共的、一致的用于訪問信息的框架使人們可以做更多的事情 ― 利用數(shù)據(jù),收集更多洞察力,以及成為更能隨需應(yīng)變的企業(yè)。我們看到 Cloudscape 正是其中的關(guān)鍵部分。 cloudscape 使用入門 一、配置Cloudscape數(shù)據(jù)庫{未驗(yàn)證} 1. 安裝j2eesdk1.3.1或者j2ee的更高版本。軟件可以到sun的網(wǎng)站上去找http://java./j2ee。注意:若j2ee安裝后目錄下并沒有cloudscape子目錄,則參見下文的- derby數(shù)據(jù)庫安裝 2. 在環(huán)境變量里配置J2EE_HOME。J2EE_HOME=j2ee的安裝目錄,例如c:\j2sdkee1.3.1。 3. 在環(huán)境變量里的path里加入%J2EE_HOME%\bin 二、啟動Cloudscape 在J2EE的安裝目錄下,有cloudscape子目錄,這就是Cloudscape數(shù)據(jù)庫的主目錄。在這個目錄下面的CloudscapeDB目錄是存儲數(shù)據(jù)的目錄。 1. 啟動Cloudscape 在DOS窗口中輸入"cloudscape -start",可以啟動Cloudscape。說明:DOS窗口目錄需為j2ee的bin目錄下。 C:\>cloudscape ?Cstart 啟動cloudscape數(shù)據(jù)庫,成功啟動后出現(xiàn)如下信息: Fri Jul 16 21:24:27 CST 2004: [RmiJdbc] Starting Cloudscape RmiJdbc Server Version 1.7.2... Fri Jul 16 21:24:29 CST 2004: [RmiJdbc] COM.cloudscape.core. JDBCDriver registered in DriverManager Fri Jul 16 21:24:29 CST 2004: [RmiJdbc] Binding RmiJdbcServer... Fri Jul 16 21:24:29 CST 2004: [RmiJdbc] No installation of RMI Security Manager... Fri Jul 16 21:24:29 CST 2004: [RmiJdbc] RmiJdbcServer bound in rmi registry 2. 停止Cloudscape 在DOS窗口中輸入"cloudscape -stop",可以停止Cloudscape。 C:\>cloudscape -stop URL=[jdbc:rmi:jdbc:cloudscape:] Attempting to shutdown RmiJdbc server RmiJdbc Server RmiAddr is: //stere/RmiJdbcServer WARNING: Shutdown was successful! 3. 進(jìn)入Cloudscape數(shù)據(jù)編輯器 在DOS窗口中輸入"cloudscape -isql",可以進(jìn)入Cloudscape數(shù)據(jù)編輯器。 C:\>>cloudscape -isql ij version 4.0 (c) 1997-2001 Informix Software, Inc. WARNING 01J01: Database ‘CloudscapeDB‘ not created, connection made to existing database instead. CONNECTION0* - jdbc:cloudscape:CloudscapeDB;create=true * = current connection ij> 在"ij>"提示符下,可以使用常用的SQL語句創(chuàng)建、刪除、修改數(shù)據(jù)表和數(shù)據(jù)表中的記錄。 創(chuàng)建emp數(shù)據(jù)表: create table emp (emp_id integer,emp_name varchar(32),emp_birthdate date); 向emp數(shù)據(jù)表中插入記錄: insert into emp values ( 1, ‘Kevin Allen‘, ‘1965-2-20‘ ); insert into emp values ( 2, ‘Jean Doyle‘ , ‘1978-4-4‘ ); insert into emp values ( 3, ‘Lynn Dennis‘, ‘1975-5-15‘ ); 4. Cloudscape數(shù)據(jù)編輯器中的命令 Cloudscape數(shù)據(jù)編輯器提供一組特殊的管理命令。 退出Cloudscape數(shù)據(jù)編輯器: exit; 運(yùn)行SQL腳本文件: run ‘c:\sqldemo.sql‘; 可以通過"help;"命令,獲取所有Cloudscape數(shù)據(jù)編輯器命令的信息。 5. 如何調(diào)出cloudscape數(shù)據(jù)庫的圖形管理界面及相關(guān)問題 在命令行方式下敲入java COM.cloudscape.tools.cview很可能會出現(xiàn)錯誤。 什么原因呢?第一、你要看看你的jdk版本對不對,是不是1.3.1_02以上或者1.4的。第二、關(guān)鍵中的關(guān)鍵,原來sun的j2ee里的cloudview是不能在他附帶的cloudscape4.0.6下工作的。 這里是在ibm網(wǎng)站上的一句原話:The Java 2 SDK, Enterprise Edition v. 1.3.1 includes Cloudscape 4.0.6 but includes a version of Cloudview which will not function with the 4.0.6 system。所以同志門就自己去下一個吧! 常見錯誤:java.lang.ClassNotFoundException: COM.cloudscape.core.JDBCDriver 英文解釋: To "find" the missing driver, you need to add to the CLASSPATH the cloudscape jar files RmiJdbc.jar , cloudclient.jar and system/cloudscape.jar which are located under the directory %J2EE_HOME%\lib\cloudscape\ So, under UNIX you should execute: setenv CLASSPATH .:$J2EE_HOME/lib/cloudscape/system/cloudscape.jar:$J2EE_HOME/lib/cloudscape/cloudclient.jar:$J2EE_HOME/lib/cloudscape/RmiJdbc.jar under Windows, you should add to CLASSPATH the following %J2EE_HOME%\lib\cloudscape\system\cloudscape.jar;%J2EE_HOME%\lib\cloudscape\cloudclient.jar;%J2EE_HOME%\lib\cloudscape\RmiJdbc.jar If you will, you can also look at "cloudscape" command (cloudscape.bat under Windows) what jar files it adds to its classpath. We‘d like also to give you a hint regarding missing classes. If some class cannot be loaded, even though it should be somewhere, this indicates that the class is not "visible" in classpath for a class loader. To find the class, you should inspect JAR files under lib directory of a Java environment by using "jar -tvf file.jar" or WinZip. For example, to find the driver under UNIX one should execute in the directory $J2EE_HOME/lib/cloudscape/system/ the following jar tvf cloudscape.jar | grep JDBCDriver In particular , the driver class COM.cloudscape.core.JDBCDriver is packaged in %J2EE_HOME%\lib\cloudscape\system\cloudscape.jar (under UNIX in $J2EE_HOME/lib/cloudscape/system/cloudscape.jar) 中文解釋: 重點(diǎn)是設(shè)置對RmiJdbc.jar , cloudclient.jar and system/cloudscape.jar 幾點(diǎn)注意的地方: 1. 修改完resource.properties,需要重起j2ee server 2. 使用cloudview時,cloudscape數(shù)據(jù)庫必須關(guān)閉,設(shè)置完以后再重起數(shù)據(jù)庫 3. deploy修改默認(rèn)SQL的時候,點(diǎn)畫面左邊的SQL名稱,右邊出現(xiàn)SQL文,修改完畢之后必須再點(diǎn)一下左邊的這個SQL名稱,這樣表示更新了,如果直接去點(diǎn)別的SQL名稱,就會亂掉??吹角懊嬗械母鐐儍赫f改一下就按一下OK,否則會亂,其實(shí)不必。 4. 不知道cloudscape數(shù)據(jù)庫怎么樣,反正Oracle中在SQL中不加""就會忽略大小寫。比如:select * from employee where employeeID=‘123‘和select * from EMPLOYEE where EMPLOYEEID=‘123‘是一樣的,但是deploy時默認(rèn)的SQL中是有""的,這樣select * from "employee" where "employeeID"=‘123‘就和select * from "EMPLOYEE" where "EMPLOYEEID"=‘123‘不一樣了。前面有的朋友說字段大小寫的問題估計(jì)就在此。 5. deploy結(jié)束之后需要save,否則jsp中輸入ID,點(diǎn)submit就會是白板一塊。 三、開發(fā)第一個J2EE、配置J2EE環(huán)境及Cloudscape數(shù)據(jù)庫 本部分將一步步教j2ee入門者配置出一個標(biāo)準(zhǔn)的j2ee環(huán)境,本人一步步自己摸索配置了j2ee的開發(fā)環(huán)境,到最后啟動了cloudscape數(shù)據(jù)庫的cloudview可謂很費(fèi)周折,主要原因是沒有仔細(xì)看說明。 首先,確認(rèn)你下載了j2se1.3.1_02以上的jdk版本和j2sdkee.1.3.1。這些軟件可以到sun的網(wǎng)站上去找http://java./j2ee。 目前j2se的最高版本是j2se1.4。然后安裝上述軟件。我的安裝目錄是在H:盤。在安裝之前如果你以前裝有不同版本的jdk,請先卸載,然后再安裝。安裝好以后,請?jiān)O(shè)置classpath.windows下的設(shè)置如下: set JAVA_HOME=h:\jdk1.3.1.2 set J2EE_HOME=h:\j2sdkee1.3.1 set classpath=h:\jdk1.2.2\jre\lib\i18n.jar; h:\jdk1.2.2\jre\lib\jaws.jar; h:\jdk1.2.2\jre\lib\plugprov.jar; h:\jdk1.2.2\lib\dt.jar; h:\jdk1.2.2\lib\tools.jar; h:\j2sdkee1.3.1\lib\ejb10deployment.jar; h:\j2sdkee1.3.1\lib\j2ee.jar; h:\j2sdkee1.3.1\lib\jhall.jar; h:\j2sdkee1.3.1\lib\j2eetools.jar; h:\j2sdkee1.3.1\lib; 注意:上面是我的機(jī)器上的目錄,如果你安裝在不同的目錄上的話,請自行改變。 啟動j2ee服務(wù) 安裝、設(shè)置后,就可以順利的啟動j2ee,到h:\j2sdkee1.3.1\bin目錄下執(zhí)行j2ee.bat文件。打開瀏覽器敲入地址http://localhost:8000/index.html可以看到首頁就說明對了。 啟動j2ee自帶的cloudscape數(shù)據(jù)庫 這個也簡單,把h:\j2sdkee1.3.1\lib\system\cloudutil.jar; h:\j2sdkee1.3.1\lib\cloudscape\cloudclient.jar; h:\j2sdkee1.3.1\lib\cloudscape\rmijdbc.jar; h:\j2sdkee1.3.1\lib\system\cloudscape.jar; 加入就可以了,在命令行方式下到h:\j2sdkee1.3.1\bin目錄下打cloudscape -start可以啟動cloudscape數(shù)據(jù)庫 關(guān)鍵的問題出在如何調(diào)出cloudscape數(shù)據(jù)庫的圖形管理界面! 你在命令行方式下敲入java COM.cloudscape.tools.cview一般都會出現(xiàn)錯誤。什么原因呢?第一、你要看看你的jdk版本對不對,是不是1.3.1_02以上或者1.4的。 第二、關(guān)鍵中的關(guān)鍵,原來sun的j2ee里的cloudview是不能在他附帶的cloudscape4.0.6下工作的(真不知道sun在搞什么東東 :)) 這里是在ibm網(wǎng)站上的一句原話:The Java 2 SDK, Enterprise Edition v. 1.3.1 includes Cloudscape 4.0.6 but includes a version of Cloudview which will not function with the 4.0.6 system。所以同志門就自己去下一個吧!這里還需要兩個jar文件。下載cloudview.jar和jd.jar把這兩個文件放在j2sdkee1.3.1下的cloudscape目錄下,我這里還需要加兩個classpaht路徑 h:\j2sdkee1.3.1\cloudscape\cloudview406.jar; h:\j2sdkee1.3.1\cloudscape\jh.jar OK!一起大功告成!現(xiàn)在看看怎么啟動cloudview,在命令行下鍵入 java -Dcloudscape.system.home=%j2ee_home%\cloudscape COM.cloudscape.tools.cview 這里-Dcloudscape.system.home是設(shè)置數(shù)據(jù)庫存放的路徑,這個路徑可以在建立數(shù)據(jù)庫的時候改變 %j2ee_home%\cloudscape是cloudscape的默認(rèn)工作目錄 也可以將-Dcloudscape.system.home后的路徑去掉,不過要記住,要將數(shù)據(jù)庫建在改路徑下,否則j2ee server找不到它! 好了,接下來你會發(fā)現(xiàn)一個圖形界面起來了。 四、derby數(shù)據(jù)庫安裝{驗(yàn)證} 1. 該數(shù)據(jù)庫可在IBM和Apache兩處下載,cloudscape是derby數(shù)據(jù)庫的商業(yè)版本,由IBM贈送與Apache后的稱呼。 Apache一方目前版本是Derby 10.1.0.0 alpha (Apr 28, 2005 / SVN 165185)。由于alpha版,而且Derby 10.0.2.2 (Apr 28, 2005 / SVN 165169)版本的數(shù)據(jù)庫提供的附加工具及少,所以我是去IBM網(wǎng)站下載的數(shù)據(jù)庫。 IBM網(wǎng)站目前版本是V10.0.2.0 Build: 30301,提供3種類型的下載,有installer的linux,win32和沒有installer一個單一的zip包文件。win32中包括jdk1.4,考慮到我的機(jī)器已經(jīng)被迫安裝了n個jdk,故此我下載了單一zip包的cloudscape。 IBM下載地址為: http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/dm-0408cline/index.html,需要以自己的mail作為id注冊一個用戶才能下載。 2. 下載后運(yùn)行java ?Cjar 10.0-IBM-Cloudscape.jar,出現(xiàn)安裝界面,在這里需要指定安裝目錄,需要注意的是安裝目錄盡量不要帶有空格。 3. 安裝完后需要進(jìn)行一些環(huán)境變量的設(shè)置,請根據(jù)自己的實(shí)際情況增加以下環(huán)境變量: 數(shù)據(jù)庫安裝目錄環(huán)境變量: CLOUDSCAPE_INSTALL= D:\IBM\Cloudscape_10.0 classpath中增加: .;%CLOUDSCAPE_INSTALL%\lib\derby.jar;%CLOUDSCAPE_INSTALL%\lib\derbynet.jar;%CLOUDSCAPE_INSTALL%\lib\derbytools.jar;%CLOUDSCAPE_INSTALL%\lib\db2jcc.jar;%CLOUDSCAPE_INSTALL%\lib\db2jcc_license_c.jar ;CLOUDSCAPE_INSTALL%\lib\cloudview40.jar;CLOUDSCAPE_INSTALL%\lib\jh.jar; path中增加: %CLOUDSCAPE_INSTALL%\frameworks\NetworkServer\bin 4. 現(xiàn)在就可以對數(shù)據(jù)庫進(jìn)行操作。該數(shù)據(jù)庫提供兩種模式的數(shù)據(jù)庫引擎: (1. 服務(wù)器架構(gòu)中充當(dāng)客戶機(jī)/服務(wù)器的引擎。 (2. 作為可嵌入類庫的數(shù)據(jù)庫引擎。在c/s引擎應(yīng)該比較了解。可嵌入類庫的數(shù)據(jù)庫引擎就是和java程序運(yùn)行在同一JVM中,不需要啟動數(shù)據(jù)庫,不需要對數(shù)據(jù)庫進(jìn)行管理(對這個我也知道個大概,呵呵)。 1.C/S模式下的數(shù)據(jù)庫訪問: 打開dos界面,敲入startNetworkServer啟動數(shù)據(jù)庫,再打開一個dos界面敲ij以進(jìn)行數(shù)據(jù)庫管理。 在D:\IBM\Cloudscape_10.0\demo\databases下有一toursDB的demo數(shù)據(jù)庫,我們要連至該數(shù)據(jù)庫我們可以在ij下敲入: connect ‘jdbc:derby:net://localhost:1527/"D:\IBM\Cloudscape_10.0\demo\databases\toursDB"‘ 例如以下我是對數(shù)據(jù)庫的一些簡單操作: --連接數(shù)據(jù)庫:(;不可少) ij> connect ‘jdbc:derby:net://localhost:1527/"D:\IBM\Cloudscape_10.0\demo\databases\toursDB"‘; --創(chuàng)建一個名為abc的表: ij> create table abc (a int, b int); 0 rows inserted/updated/deleted --往abc表中插入數(shù)據(jù),沒into還報(bào)錯,用sybase用習(xí)慣了。 ij> insert abc values(1,2); ERROR 42X01: DB2 SQL error: SQLCODE: -1, SQLSTATE: 42X01, SQLERRMC: Encountered "abc" at line 1, column 8?42X0(?代表一個怪字符,spaces上發(fā)布的時候提示“此空間暫時不可用”,沒辦法只好用?代替啦,發(fā)現(xiàn)問題浪費(fèi)了我十幾分鐘時間,TNND) --這次數(shù)據(jù)進(jìn)去了 ij> insert into abc values(1,2); 1 row inserted/updated/deleted --察看剛才插入的數(shù)據(jù) ij> select * from abc; A |B ----------------------- 1 |2 1 row selected --斷開數(shù)據(jù)庫連接,沒有任何信息輸出 ij> disconnect; --退出ij ij> exit; 注意命令結(jié)束符是分號“;” 如果要停止數(shù)據(jù)庫在dos中敲入stopnetworkserver即可。 2.可嵌入類庫模式下對DB的訪問(該模式下不需要啟動數(shù)據(jù)庫,且ij中只能有一個連接操作數(shù)據(jù)庫) 我的toursDB數(shù)據(jù)庫目錄為C:\IBM\Cloudscape_10.0\demo\databases下,如果我們DOS界面所在的目錄已經(jīng)在在該目錄,則進(jìn)入ij后直接敲入“connect ‘jdbc:derby:toursDB‘;”就可以連接至數(shù)據(jù)庫,否則得指定數(shù)據(jù)庫所在路徑“connect ‘jdbc:derby:C:\IBM\Cloudscape_10.0\demo\databases\toursDB‘;”。下面是我對數(shù)據(jù)庫的一些訪問: ij> connect ‘jdbc:derby:toursDB‘; ij> select * from cities; CITY_ID |CITY_NAME |COUNTRY |AIRPORT |LANGUAGE |COU& ---------------------------------------------------------------------------------------------------------------- 1 |Amsterdam |Netherlands |AMS |Dutch |NL ……………………………等等 87 rows selected ij> disconnect; ij> exit; C:\IBM\Cloudscape_10.0\demo\databases> 其中cities是toursDB數(shù)據(jù)庫自帶的一個表,其它的表還有airlines, countries,flightavailability,flights,flights_history,maps。 關(guān)于數(shù)據(jù)庫的一些操作命令可在ij下敲入help;進(jìn)行察看,詳細(xì)的幫助信息在D:\IBM\Cloudscape_10.0\doc\pdf中,IBM的developerWorks下的DB2有很多介紹cloudscape相關(guān)技術(shù)的文章,網(wǎng)址:http://www-128.ibm.com/developerworks/cn/index.html。 還有IBM的在線幫助手冊有3本是中文的,網(wǎng)址: http://www.elink.ibmlink.ibm.com/public/applications/publications/cgibin/pbi.cgi?CTY=US&FNC=ICL,進(jìn)去后選擇cloudscape。 Cloudscape 常見問題 一般問題 問: 什么是 Cloudscape Version 10.0? 答: Cloudscape 是一種占用內(nèi)存少、多用戶、標(biāo)準(zhǔn)驅(qū)動的關(guān)系數(shù)據(jù)庫系統(tǒng),它完全用 Java 編寫,適合嵌入到 Java 應(yīng)用程序和服務(wù)器中。 Cloudscape 可以在任何功能完備的 JVM 上運(yùn)行,因此同一個 Cloudscape 應(yīng)用程序不必修改就能在多種硬件平臺上運(yùn)行。 Cloudscape 支持 SQL-92E (entry) 標(biāo)準(zhǔn)和 SQL-99 的一部分。 Cloudscape 使用的 API 是 JDBC。 它無需進(jìn)行管理(零管理),而且無需在應(yīng)用程序之外安裝和管理數(shù)據(jù)庫。"安裝后就忘掉",這是成功的可嵌入式組件的重要設(shè)計(jì)目標(biāo)。 問: 何為"嵌入(embedded)"? 答:按照 Merriam Webster OnLine Dictionary(http:///)的定義: em•bed•ded; em•bed•ding 及物動詞 1 a : 緊緊地包圍或者像在母體中那樣 b : 使......成為整體的一部分 c : 通過滲透和固定在載玻片上準(zhǔn)備(顯微鏡用樣品)切片。 2 : 緊緊圍住 不及物動詞:被嵌入。 "嵌入式 Cloudscape"意味著沒有單獨(dú)的數(shù)據(jù)庫服務(wù)器; Cloudscape 和 Java 應(yīng)用程序是一起安裝(jar 文件和數(shù)據(jù)庫文件)的。它和應(yīng)用程序在同一個 JVM 上運(yùn)行,啟動和關(guān)閉都由應(yīng)用程序控制。終端用戶無需關(guān)心應(yīng)用程序中的數(shù)據(jù)庫系統(tǒng)。其結(jié)果就是應(yīng)用程序很容易部署,并且具有關(guān)系數(shù)據(jù)庫系統(tǒng)的所有特性。 問:嵌入式 Cloudscape 是一種多用戶數(shù)據(jù)庫嗎? 答: 是的,無論選擇了什么樣的部署選項(xiàng),Cloudscape 都支持多用戶訪問。 Cloudscape 手冊說明了如何在單用戶應(yīng)用程序中使用 CLoudscape。 Cloudscape 非常適合在這種結(jié)構(gòu)中運(yùn)行,但它本身并不是單用戶的。多用戶意味著在需要時,引擎可以管理多個獨(dú)立的事務(wù)。 即使是在嵌入式部署環(huán)境中,Cloudscape 也支持多連接。每個連接代表一個單獨(dú)的事務(wù)。這樣就允許單個應(yīng)用程序建立多個連接,從而執(zhí)行多個獨(dú)立的事務(wù)。每個連接可以規(guī)定 4 種事務(wù)隔離級別,以滿足并發(fā)性的要求。關(guān)于事務(wù)隔離級別、并發(fā)和鎖定類型的完整描述,請參閱 Cloudscape Developers Guide。 一定要注意的是,Cloudscape jar 文件中不含網(wǎng)絡(luò)代碼,再次聲明,這并不意味著 Cloudscape 是單用戶的,盡管有時候這樣解釋。在運(yùn)行 Cloudscape 引擎的 JVM 之外進(jìn)行通信(進(jìn)程間通信)必須使用網(wǎng)絡(luò)消息。兩個獨(dú)立進(jìn)程間的通信稱為客戶機(jī)-服務(wù)器。為了滿足客戶機(jī)-服務(wù)器通信方式的需要,Cloudscape 提供了 Network Server 功能(在單獨(dú)的 jar 文件中)。 Cloudscape 很容易嵌入 Network Server,以便在需要的時候提供客戶機(jī)-服務(wù)器連接。 Cloudscape 也很容易嵌入其他很多服務(wù)器程序(如 WebShpere、Apache Tomcat 等),因此選擇權(quán)在您手中。 問:為何 Cloudscape 不在其基本產(chǎn)品中提供 Client/Server 功能? 答: 很多應(yīng)用程序完全在單個系統(tǒng)、單個進(jìn)程中運(yùn)行,不需要 Client/Server 功能。比如,存儲輸入到 Web 表單中的數(shù)據(jù)的 servlet,或者在 PC 上運(yùn)行的地址簿應(yīng)用程序,都不需要和其他進(jìn)程通信。 Client/Server 代碼只會增加這些應(yīng)用程序的內(nèi)存消耗,而沒有其他任何用處。對于這類應(yīng)用程序,Cloudscape 提供了關(guān)系數(shù)據(jù)庫的所有便利,而沒有增加不必要的網(wǎng)絡(luò)代碼。在需要的時候,可以通過運(yùn)行 Network Server 或者其他服務(wù)器體系結(jié)構(gòu),隨時添加 Client/Server 的功能。 安裝 問:如何安裝 Cloudscape 環(huán)境? 答: 安裝非常簡單,通過使用 Java 安裝程序,安裝完全是平臺獨(dú)立的(啟動安裝過程和指定文件路徑的命令行語法仍然和平臺有關(guān))。 這里簡要說明了如何使用 Java 安裝程序進(jìn)行安裝,也可能提供用于特定平臺的其他安裝程序類型,關(guān)于使用平臺專用安裝程序的信息,請參閱 install.html 文件。 安裝需要啟動 JVM,而且需要在文件系統(tǒng)有足夠的磁盤空間 ―― jar 文件需要 4 Mb 的磁盤空間;帶有 javadoc 和例子的完整 Cloudscape 安裝需要 24 Mb 的磁盤空間;完全安裝 Cloudscape 和 IBM JRE 需要 64 Mb 的磁盤空間(僅用于 Windows)。這些數(shù)據(jù)不包括安裝文件的大小。 在命令行提示符下,切換到包含 Cloudscape 安裝文件的目錄,通過下面的命令啟動安裝程序: \java -cp. -jar 其中: • 是 java.exe 文件的完全限定目錄(通常用環(huán)境變量 JAVA_HOME 規(guī)定)。 • 是安裝文件。 相應(yīng)的提示: • 第 1 屏:檢查安裝的產(chǎn)品是否正確,單擊 Next。 • 第 2 屏:取消對復(fù)選框"Yes, I would like to read the release notes now"的選擇。 單擊 Next。 • 第 3 屏:查看許可證條款。如果接受,則選擇 I accept the terms of the license agreement。 單擊 Next。 • 第 4 屏:檢查或輸入完整的安裝路徑。 單擊 Next。 • 第 5 屏:檢查安裝選項(xiàng)和需要的磁盤空間。單擊 Next。 • 第 6 屏:單擊 Next,然后單擊 Finish。 配置/設(shè)置 問:Cloudscape 部署的基本組件有哪些? 答: Cloudscape 在應(yīng)用程序中部署的主要組件包括 1) jar 文件, 2) 數(shù)據(jù)庫文件和 3) Cloudscape 日志。所有 Cloudscape 部署中都有這些文件,而且,在進(jìn)行任何數(shù)據(jù)庫級操作或者調(diào)試之前,必須安裝好它們。 在討論任何 Cloudscape 部署時, Cloudscape System Home 的概念也很重要。 Cloudscape System Home 是創(chuàng)建所有文件的默認(rèn)位置,也是存放數(shù)據(jù)庫和 Cloudscape 日志的默認(rèn)位置。如果沒有通過屬性 cloudscape.system.home 定義這個位置,那么運(yùn)行 Cloudscape 引擎的 JVM 的當(dāng)前工作目錄將被默認(rèn)為該位置。在產(chǎn)品部署中明確定義并記錄 Cloudscape System Home 是謹(jǐn)慎的做法。在第一次連接到數(shù)據(jù)庫(或者說啟動 Cloudscape 引擎)之前,需要設(shè)置 cloudscape.system.home。 日志文件的默認(rèn)名稱為 cloudscape.log,但該文件名是可以配置的,有時候應(yīng)用程序員也可以更改它。在默認(rèn)情況下,該日志文件被寫入 cloudscape.system.home,采用這一默認(rèn)位置是一種謹(jǐn)慎做法。任何數(shù)據(jù)庫級的調(diào)查/調(diào)試活動都需要該日志文件。為了進(jìn)行 Cloudscape 部署,該文件的位置和名稱必須是已知的。日志文件包含 Cloudscape 引擎啟動的所有數(shù)據(jù)庫列表和出現(xiàn)的錯誤(要記錄其他消息,可以設(shè)置 cloudscape.stream.error.logSeverityLevel,請參閱 Cloudscape Tuning Guide"Cloudscape 屬性"一章)。 數(shù)據(jù)庫文件(如 c2a10.dat)和事務(wù)日志文件(如 log2.dat)位于主數(shù)據(jù)庫目錄的子目錄下。主目錄和數(shù)據(jù)庫同名(如 toursDB)。 啟動數(shù)據(jù)庫需要知道數(shù)據(jù)庫目錄的路徑。主數(shù)據(jù)庫目錄至少包含兩個子目錄: • ‘seg0‘ 包含數(shù)據(jù)文件。 • ‘log‘ 包含事務(wù)日志文件。 一定不要直接存取這些目錄中的任何文件。 cs.jar 文件包含運(yùn)行 Cloudscape 引擎的代碼。該文件必須位于類路徑中,以便加載 Cloudscape 引擎和啟動 Cloudscape 數(shù)據(jù)庫。 Cloudscape 開發(fā)環(huán)境包含 Cloudscape 部署包中的其他可選 jar 文件。其中包括: • cstools.jar ―― 工具 ij 和 cslook。 o ij ―― Cloudscapes 與 JDBC 交互的腳本工具和 SQL 命令行接口。 o cslook ―― 查看和轉(zhuǎn)儲數(shù)據(jù)庫中對象的數(shù)據(jù)定義語言(DDL)的 Cloudscapes 工具。 • csnet.jar ―― Cloudscape Network 服務(wù)器。 • db2jcc.jar 和 db2jcc_license_c.jar ―― Cloudscape Network Server 客戶通信 jar 文件。 一般用法/基本特性 問:模式和數(shù)據(jù)庫有何不同? 答: Cloudscape 數(shù)據(jù)庫由一組模式構(gòu)成,每個模式都有自己的表集,所有模式都用相同的數(shù)據(jù)詞典(SYS 模式中的系統(tǒng)表)定義。 在磁盤上,數(shù)據(jù)庫由一些數(shù)據(jù)文件(放在 seg0 目錄中)和一些事務(wù)日志文件(放在 log 目錄中)組成。事務(wù)不可能跨數(shù)據(jù)庫,但是可以跨越同一個數(shù)據(jù)庫中的不同模式。關(guān)于用單個 Cloudscape 引擎連接多個數(shù)據(jù)庫的更多信息,請參考"在 Cloudscape 系統(tǒng)中,應(yīng)用程序如何連接到多個數(shù)據(jù)庫?"。 Cloudscape 實(shí)現(xiàn)了這些模式,以便在單個 DB 中提供多個名稱空間。在將相關(guān)的表組成一個邏輯單位時,會用到模式。模式?jīng)]有相關(guān)的單獨(dú)的磁盤文件。同一數(shù)據(jù)庫中的所有模式都使用相同的數(shù)據(jù)詞典和事務(wù)日志。您可以在單個 SQL 語句中引用多個模式,這些模式都在同一個連接中執(zhí)行(不需要打開)的。同一數(shù)據(jù)庫中模式間的 SQL 操作是事務(wù)性的。 問:在 Cloudscape 系統(tǒng)中,應(yīng)用程序如何連接到多個數(shù)據(jù)庫? 答: 可以在單個應(yīng)用程序中打開多個連接,并且每個連接都針對不同的數(shù)據(jù)庫。但是就通過 SQL 跨數(shù)據(jù)庫操作而言,各個實(shí)例/連接并不知道其他連接的存在。兩個數(shù)據(jù)庫/連接之間的任何操作,都必須在應(yīng)用程序級上完成(不能在單個 SQL 語句中),然后顯示結(jié)果或者將結(jié)果寫入適當(dāng)?shù)奈恢谩? 比方說,您可以把數(shù)據(jù)庫 A 中的表 ONE 讀入一個數(shù)組,然后把數(shù)據(jù)庫 B 中的表 TWO 讀入另一個數(shù)組。循環(huán)遍歷數(shù)組中的數(shù)據(jù)記錄并根據(jù)需要修改,然后把數(shù)據(jù)寫回原來的數(shù)據(jù)庫和表中。相反,如果要在同一數(shù)據(jù)庫的不同模式下創(chuàng)建表 ONE 和表 TWO,那么允許您在單個事務(wù)中使用 SQL 語句完成這項(xiàng)操作。 性能 問: 如何調(diào)整 Cloudscape、提高緩存命中率和減少 I/O 次數(shù)? 答: 通過增加 Cloudscape 可用數(shù)據(jù)緩存的大小,可以改善處理大量數(shù)據(jù)的系統(tǒng)的性能,減少 I/O 次數(shù)。通過設(shè)置 pageCache 容納盡可能多的數(shù)據(jù)(直到整個數(shù)據(jù)庫),同時避免 OutOfMemory 異常(OOM),可以實(shí)現(xiàn)改變緩沖區(qū)大小來提高性能的目標(biāo)。通過 seg0 目錄中數(shù)據(jù)文件的總體大小,可以粗略估計(jì)數(shù)據(jù)庫中的數(shù)據(jù)量(結(jié)果偏大)。因?yàn)檫@些文件中存在自由空間,文件大小之和總是超出數(shù)據(jù)庫中所有記錄的總和。計(jì)算數(shù)據(jù)文件大小之前壓縮數(shù)據(jù)庫,可以減少這種方法的估計(jì)偏差。將 pageCache 設(shè)得比這個值還大是沒有意義的,通常較小的緩存能夠提供很好的性能。 優(yōu)化緩存大小需要反復(fù)試驗(yàn),以保證增加后的緩存既提高了性能,又不會超出 JVM 可用的內(nèi)存(最大堆)。如果 Cloudscape pageCache 太大,有可能導(dǎo)致 JVM 崩潰。為了避免 OutOfMemory 異常(OOM),需要考慮下面這些因素: • 機(jī)器上的物理內(nèi)存,JVM 必須裝載到物理內(nèi)存中。 • 允許的 JVM 最大堆(-Xmx)。 • Cloudscape pageCache 的大?。╬ageCache * pageSize 的平均值)。 關(guān)于調(diào)整這些值的更多信息,請參考本文 故障檢修 中 "運(yùn)行 Cloudscape 時如何避免 OutOfMemory 異常"一問。 故障檢修 問:運(yùn)行 Cloudscape 時如何避免 OutOfMemory 異常? 答: 下面幾節(jié)提供了 Cloudscape 內(nèi)存應(yīng)用的背景知識,并介紹了調(diào)整 Cloudscape 和 JVM 占用的內(nèi)存大小,避免 OutOfMemory 異常的一種方法。 與 Cloudscape 內(nèi)存使用有關(guān)的因素 如果不滿意 Cloudscape 的性能,或者遇到了 OutOfMemory 異常(OOM),您要做的第一件事就是調(diào)整 Cloudscape pageCache。 可以安全分配給 pageCache 的內(nèi)存受到多種因素的影響:物理內(nèi)存、 pageSize 的平均大小和 JVM 的最大 Heap 大?。╩axHeap)是最主要的因素?;镜姆椒ㄊ前凑?JVM 最大 Heap 大小的一定比例,計(jì)算分配給 pageCache 的頁數(shù)。 JVM 最大 Heap 大小 JVM 最大 Heap 大小(maxHeap)是用 Java 參數(shù)"-Xmx#m"設(shè)置的,其中 # 是分配給堆的最大 Mb 數(shù)(如 java -Xmx128m 即分配 128 Mb 的 maxHeap)。一定要保證規(guī)定的 JVM 最大堆長度小于機(jī)器的物理內(nèi)存。 JVM MaxHeap 和 Cloudscape PageCache 的聯(lián)系 使用 Cloudscape 4.0 和 Java 1.4.0 進(jìn)行內(nèi)部測試表明,將 heapSize 和 Cloudscape pageCache 的比例設(shè)置為 20:1 是安全的。這個比例足以支持活動非常頻繁的應(yīng)用程序,很多應(yīng)用程序采用較小的比例也能工作得很好。每秒鐘內(nèi)處理的事務(wù)量更大的應(yīng)用程序,即使采用更大的 JVM maxHeap 和 Cloudscape pageCache 比例,也可能會出現(xiàn) OutOfMemory 異常。如果遇到 OOM,我們建議您進(jìn)行重負(fù)荷測試來確定最佳的系統(tǒng)比例。首先將 JVM 和 pageCache 的比例設(shè)為 20:1,然后長期進(jìn)行重負(fù)荷測試,以檢查內(nèi)存使用的穩(wěn)定性。如果沒有出現(xiàn) OOM,則采用較小的比例繼續(xù)測試,直到獲得可以接受的吞吐量或者應(yīng)用程序遇到 OutOfMemory 異常。輕型的應(yīng)用程序甚至能在 2.5:1 的比例下運(yùn)行。 Cloudscape 5.1 版采用 16:1 的默認(rèn)比例(pageCache [= 4 MB cache] 和 64K maxHeap),多數(shù)應(yīng)用程序都能在這個比例下很好地工作。最佳比例是能夠提供足夠的性能而又不會出現(xiàn) OOM 的比例。 PageCache:計(jì)算 Cloudscape pageCache 是由數(shù)據(jù)庫使用的平均 pagesize 決定的,可以通過屬性 cloudscape.storage.pageCacheSize 對其進(jìn)行設(shè)置。 pageCache 規(guī)定了 Cloudscape 頁面緩沖區(qū)能夠保存的最大頁面數(shù)。估計(jì) pageCache 所用內(nèi)存需要用 pageCache 乘上數(shù)據(jù)庫中的平均頁面大小(關(guān)于頁面大小的更多信息,請參考關(guān)于 cloudscape.storage.pageSize 屬性的文檔)。 如果數(shù)據(jù)庫中所有表都使用默認(rèn)的 4K 頁面大小,計(jì)算起來非常簡單: (pgSz = 4k) x (pageCache 設(shè)置)。 JVM Heap 和 PageCache 的比例:計(jì)算 對于運(yùn)行在 1.4 版和更低版本 JVM 上的 Cloudscape 4.0, 默認(rèn)的 heap:pageCache 比例是(如果沒有設(shè)置 maxHeap 和 pageCache) 400:1(64M / (40*4K)/1000)。在 5.0 版中,pageCache 的默認(rèn)大小從 40 增加到了 1000,相應(yīng)的比例變成了 16:1 (64M / ( (1000*4)/1000 ) )。對于非常活躍的應(yīng)用程序,這個比例可能太小,因此使用 5.0 版的默認(rèn)比例可能造成 OOM。 問:如何設(shè)置 Cloudscape 開發(fā)環(huán)境? 答: 按照下述說明設(shè)置開發(fā)測試環(huán)境中的 Cloudscape 屬性,能夠避免自動刪除 Cloudscape 日志并記錄下所有的錯誤和警告。使用這些設(shè)置時,Cloudscape 不再是零管理系統(tǒng),因此需要注意日志文件的大小。一定不要在零管理非常重要的產(chǎn)品環(huán)境中使用這些屬性。 設(shè)置這些屬性最簡單的辦法是創(chuàng)建一個文件,將其命名為 cloudscape.properties,放在 Cloudscape system.home 目錄中(通常和包含 Cloudscape 日志文件的目錄相同)。也可以在 Java 命令行中使用 -D 參數(shù)指定每一個屬性。重新啟動 Cloudscape 之后,修改的屬性才能生效。下面是用于開發(fā)測試環(huán)境的屬性文件,其中帶有注釋: # Top of Sample File # This is a sample Cloudscape properties file provided to show # setting properties which are useful for development and troubleshooting # # -- Append to the log file rather than overwriting it # - manually remove the cloudscape.log when it becomes large cloudscape.infolog.append=true # # -- Log all errors/messages of any severity (will list deadlocks) cloudscape.stream.error.logSeverityLevel=0 # # -- Log all lock timeouts with additional trace information cloudscape.locks.monitor=true # # - List transaction information on victim and survivor transactions # for both lockTimeouts and Deadlocks cloudscape.locks.deadlockTrace=true # End of Sample File |
|
|