cerulean

          ????以前上學的時候數(shù)據(jù)庫學的是皮毛中的皮毛,唯一的課程設計也只是跑幾個簡單得很得SQL語句而已。無論是數(shù)據(jù)庫設計,還是SQL語句的各種經(jīng)典寫法和強大功能都沒有怎么好好地研究過。
          ??????? 功能上的學習都不全面,就更不要提性能、安全和大數(shù)據(jù)量等等在實際應用中會遇到的問題勒。參與的一個項目中,就涉及到比較大量的數(shù)據(jù)量的處理和存儲(當然處理大數(shù)據(jù)量就是另外一個問題勒)。加之分配給數(shù)據(jù)庫所在的磁盤空間相當有限,造成了非常捉襟見肘的局面。
          ??????? 幻想著有朝一日可以不為這些事情煩惱,像google,sina一樣,用幾十上百臺配置一般的機器連起來也能作為一個強壯的server。

          從網(wǎng)上看到一些關于存儲海量數(shù)據(jù)的討論:
          1、分表、分數(shù)據(jù)庫
          根據(jù)一定的規(guī)則把不同的數(shù)據(jù)庫表分開
          缺點:有一定風險,因為一旦分開存放的兩個數(shù)據(jù)庫表有朝一日需要“聯(lián)表”操作,那么就郁悶了,而且最好是把幾個數(shù)據(jù)量大的表分開,單獨拎出來幾個小表意義很不大,而且業(yè)務邏輯層的代碼需要知道自己要處理的數(shù)據(jù)存在哪個服務器里,有一點兒奇怪。

          例如:(來自ball_lei)
          ??????? 我現(xiàn)在采用的架構采用數(shù)據(jù)庫群的方式,每個客戶的數(shù)據(jù)單獨存在一臺數(shù)據(jù)庫服務器上,所有的客戶根據(jù)一定的規(guī)則安排存放的數(shù)據(jù)庫服務器,在主數(shù)據(jù)庫服務器上有一張-索引表保存客戶與數(shù)據(jù)庫服務器的對應關系,每臺數(shù)據(jù)庫服務器中用于存放這些數(shù)據(jù)的表按照月份分成12張,每張存放當月的全部客戶的數(shù)據(jù),目前計算出單臺服務器-單表需要容納9億條數(shù)據(jù),并且每臺服務器在這種方式下可以容納10000個客戶的數(shù)據(jù),以后客戶數(shù)量增加時只需要增加數(shù)據(jù)庫服務器即可。
          ??????? 程序邏輯,我采用業(yè)務邏輯層的概念,對外提供應用服務器接口,全部的客戶端通過應用服務器接口進行業(yè)務運算,應用服務器我也采用服務器群的概念,有一個主的應用服務器,有幾個副應用服務器,全部客戶端只知道該主應用服務器的地址,上線時登陸主應用服務器,然后主應用服務器根據(jù)各臺應用服務器的負載情況返回給客戶端真正的登陸地址(副應用服務器的地址),然后客戶端再登陸到上面進行業(yè)務處理,每臺應用服務器都能夠訪問各臺數(shù)據(jù)服務器進行數(shù)據(jù)提取。

          問題:需要每臺應用服務器都配備一個公網(wǎng)ip么,還是有其他的方式可以只需要一個公網(wǎng)ip可以給全部的服務器公用?Nat能夠實現(xiàn)么?或者能否進行更好的負載均衡,就是客戶端的各種業(yè)務都可以在不同的服務器上運算

          改進:
          用戶規(guī)則配置應該不大,所以也可以做成配置一次Load到內(nèi)存中。

          如此大數(shù)據(jù)量的項目竟不用Oracle,實在讓人費解。我現(xiàn)在的月數(shù)據(jù)量大概2.5億,用了3臺HP
          SUPERDEMO,9個CUSTERMOR DB。其中一個CATALOG數(shù)據(jù)庫,相當于你的客戶索引。
          你的插入操作很多,所以建議少建幾個索引,其實一些業(yè)務完全可以在數(shù)據(jù)庫中完成,通過觸發(fā)器,約束和存儲過程,這樣性能會有大的提高。大數(shù)據(jù)的表,分區(qū)的確是必須的,當然,還需要更完善的維護計劃,否則很容易,你的業(yè)務可能就會因為性能問題掛起了。

          1、通過(數(shù)據(jù)庫+文件)方式進行數(shù)據(jù)存儲

          2、集群方案

          還有當初選修的“分布式數(shù)據(jù)庫”,不知道這個概念是不是能夠活生生的用到項目中來。。。

          posted @ 2007-03-20 21:21 cerulean 閱讀(891) | 評論 (0)編輯 收藏

          DAO層: JUnit test,需要用dbunit恢復現(xiàn)場;
          service層:JUnit test,需要用dbunit恢復現(xiàn)場,邏輯更重要些,分支覆蓋更重要些;
          action:不做測試;
          selenium:做集成測試。
          ????盡管有人認為struts action不需要做測試,不過無意中看到strutsTestCase這個東東,還沒有試,用途是測試struts的action.覺得比較有用.
          ????尤其是,如果web頁面交由第三方來做的話,那么單獨對action進行測試就是十分有必要的.
          ????但是,如果整個web系統(tǒng)從前臺到后臺都是一個team來做,那么個人認為還不如跟頁面一起集成測,畢竟這是真實情況,而且從頁面上可視性更強,更容易發(fā)現(xiàn)問題.與此同時,使用腳本錄制回放測試工具(還沒有試過)提高效率.

          posted @ 2007-03-20 21:17 cerulean 閱讀(435) | 評論 (0)編輯 收藏

          “jMock利用mock objects思想來對Java code進行測試。jMock具有以下特點:容易擴展,讓你快速簡單地定義mock objects,因此不必打破程序間的關聯(lián),你定義靈活的超越對象之間交互作用而帶來測試局限,減少你測試地脆弱性。”

          ??? 跟JMock功能類似的還有EasyMock。
          ??? 簡單試驗后的感覺沒有試驗DBUnit后的感覺強烈,試了DBUnit的感覺是這東西以后一定要用.
          ??? 但個人認為mock object這種東西能不用就不用,模擬來模擬去,最后還是要和真東西聯(lián)調,所以mock的階段應該是盡可能的短才是.

          使用模仿對象進行測試的常用編碼樣式是:
          · 創(chuàng)建模仿對象的實例
          · 設置模仿對象中的狀態(tài)和期望值
          · 將模仿對象作為參數(shù)來調用域代碼
          · 驗證模仿對象中的一致性

          代碼中的大概過程:
          ???? Mock mock = new Mock(**.class);//構造一個那個類的mock對象,把這個類傳入Mock
          ???? 使用mock.expects方法,來設置想要執(zhí)行的操作:執(zhí)行幾次、執(zhí)行哪個方法、傳什么參、返回什么值
          ?????獲得那個mock對象:** x = (**)mock.proxy();//proxy方法返回代理類實例,即虛擬對象實例
          ???? 然后run **.class的那個方法(call methods on the mock object, expectation on it will deliver the result set up by yourself)

          ???? 寫mock-object 測試,需要有獨立的接口作為mock的對象(從而促進了針對接口編程的習慣),還有個好的副作用:他迫使你來重寫一些代碼。實際上,代碼常常寫的不好。你讓類和環(huán)境之間產(chǎn)生了不必要的耦合。

          posted @ 2007-03-20 21:05 cerulean 閱讀(480) | 評論 (0)編輯 收藏

          DBUnit擴展自JUnit.在使用DBUnit之前,為了驗證自己編寫的涉及數(shù)據(jù)庫操作方法的正確性,每次都要執(zhí)行一個簡單的sql腳本,灌些數(shù)據(jù),然后人眼觀察著數(shù)據(jù)表中的數(shù)據(jù).然后,代碼執(zhí)行完畢后,再次觀察數(shù)據(jù)變化情況.久而久之,表里面的數(shù)據(jù)就變得雜亂,一般會全部刪除,重新來過.
          ??? DBUnit的目標正是保證數(shù)據(jù)庫數(shù)據(jù)環(huán)境的穩(wěn)定性,具備將數(shù)據(jù)庫中數(shù)據(jù)與xml文件之間雙向轉換的能力.
          試驗了一下,

          首先,下載dbunit的jar包,加入工程即可.
          1.從xml中將數(shù)據(jù)導入數(shù)據(jù)庫表
          tc不再繼承自TestCase,而是繼承DatabaseTestCase
          覆蓋幾個方法,包括獲得xml文件內(nèi)容,獲得DB連接,以及在setup方法和teardown方法中調用提供的dbunit操作類型,構建數(shù)據(jù)庫內(nèi)數(shù)據(jù)環(huán)境.

          這時,我以為如果只有幾個簡單的數(shù)據(jù),寫xml固然簡單,但想測試大數(shù)據(jù)量時(雖然UT主要是測試功能而非性能,但是大數(shù)據(jù)量也方便驗證)就有點問題,好在是雙向的,可以先把數(shù)據(jù)用function灌入數(shù)據(jù)庫,再導進xml里面:

          2.從數(shù)據(jù)庫表數(shù)據(jù)導入xml文件
          ??? 用ant+DBUnit來完成這個任務非常方便!

          < target? name ="export" >
          ????????
          < taskdef? name ="dbunit" ?classname ="org.dbunit.ant.DbUnitTask" ?classpathref ="compile.path" ? />
          ????????
          < dbunit? driver ="com.mysql.jdbc.Driver" ?url ="jdbc:mysql://127.0.0.1:3306/mydb" ?userid ="root" ?password ="root" ?supportBatchStatement ="true" >
          ????????????
          < export? dest ="${test.srcpath}/export.xml" > ????????????????
          ????????????????
          < query? name ="test_table" ?sql ="SELECT?*?FROM?test_table" ? /> ????????
          ????????????????
          < table? name ="user_table" ? />
          ????????????
          </ export >
          ????????
          </ dbunit >
          ????
          </ target >


          ??? 疑問,看到有人說DBUnit在清除數(shù)據(jù)時,有時不能徹底,原因是分析不出來外鍵等表之間的約束.因為在試驗中采用的數(shù)據(jù)庫里沒啥表之間的約束,所以還沒有體會到.

          ??? DatabaseTestCase類提供了兩個方法來控制測試前和測試后的數(shù)據(jù)庫狀態(tài):getSetUpOperation() 和 getTearDownOperation().???????
          ??? 一種高效的實施方案就是讓getSetUpOperation()方法執(zhí)行REFRESH操作,通過這個操作,我們可以用種子文件中的數(shù)據(jù)去更新目標數(shù)據(jù)庫里的數(shù)據(jù)。
          ??? 接下來,就是getTearDownOperation(),讓他去執(zhí)行一個NONE操作,也就是什么也不執(zhí)行
          ??? 常用操作:
          ??? DatabaseOperation.CLEAN_INSERT;?先刪除表中所有,再插入準備的數(shù)據(jù)
          ??? DatabaseOperation.REFRESH;?使用準備數(shù)據(jù)更新表,存在則update,不存在則insert
          ??? DatabaseOperation.DELETE;??只刪除準備的數(shù)據(jù)
          ??? DatabaseOperation.NONE;??啥都不做

          posted @ 2007-03-20 20:59 cerulean 閱讀(1812) | 評論 (0)編輯 收藏

          前提:testlink已經(jīng)跟mantis安裝在同一個環(huán)境下
          步驟:
          參照http://crystaliris.bokee.com/5588155.html,testlink網(wǎng)站也給出了比較清楚的文檔說明。
          1.修改testlink關于interface的配置為"MANTIS",如果用別的BTS(Bug Trace System),有其他的對應值。
          2.修改testlink目錄下cfg/mantis.cfg.php(如果用別的BTS,修改其他對應目錄下的配置),配置一些關于mantis的數(shù)據(jù)庫和url屬性。
          3.修改mantis的配置文件,打開匿名登錄,由于匿名登錄的用戶名需要是一個已經(jīng)存在的真實用戶,而我又沒在mantis上創(chuàng)建新的用戶,所以就填寫成administrator了。

          posted @ 2007-03-11 21:33 cerulean 閱讀(864) | 評論 (0)編輯 收藏
          測試RMI接口實現(xiàn)修改后,jar包用不用重新打
          可以的,接口實現(xiàn)修改了,只要接口定義不變,RMIClient調用后,都會按照Server端最新的實現(xiàn)來得到結果.

          在class文件的根目錄下(例如bin目錄)執(zhí)行rmic命令,寫完整接口實現(xiàn)的包名。
          posted @ 2007-03-11 21:29 cerulean 閱讀(352) | 評論 (0)編輯 收藏

          環(huán)境:windows
          下載scarab-1.0-b20.zip,直接解壓即可.
          需要JDK,Ant(或者maven,scarab推薦maven),DB(推薦MySQL)
          在解壓后的\scarab-1.0-b20目錄中,創(chuàng)建build.properties,以指定數(shù)據(jù)庫連接的參數(shù).

          例如:
          scarab.database.type=mysql
          scarab.database.name=scarab
          scarab.database.jdbc.driver=org.gjt.mm.mysql.Driver
          scarab.database.host=localhost
          scarab.database.port=3306
          scarab.database.username=root
          scarab.database.password=root
          scarab.database.admin.username=${scarab.database.username}
          scarab.database.admin.password=${scarab.database.password}

          #發(fā)送郵件的郵件服務器也可以寫在這里
          system.mail.host=smtp.126.com

          數(shù)據(jù)庫方面,本來想使用postgreSQL,結果發(fā)現(xiàn)對于scarab來說配置比較特殊,于是就裝了MySQL[見MySQL的那篇文吧].
          數(shù)據(jù)庫配置寫好以后,進入\scarab-1.0-b20\build\目錄,運行ant,就對scarab進行構建啦,能夠看到BUILD SUCCESSFULLY就成功啦!!
          感覺scarab可以配置的地方很多很多,不過配置修改后還是需要重新build的.之前遇到過的錯誤就是在寫好數(shù)據(jù)庫配置后沒有重新build造成的.

          構建成功后,就可以使用啦: 進入\scarab-1.0-b20\tomcat\bin目錄,運行startup.bat,tomcat就啟動起來了,訪問http://localhost:8080/scarab/就可以啦。

          因為很多功能都需要發(fā)郵件來協(xié)助,所以要使用SMTP服務器,比方說smtp.126.com,user=realuser,password=realuserpassword

          總得來說,覺得scarab界面不是很友好,也不是很美觀。
          由于一開始郵件服務器不能用,所以直接到數(shù)據(jù)庫中update用戶的狀態(tài)為CONFIRMED。這樣子成功登錄后,點擊“申請新角色”時,竟然拋出錯誤了,不知道是什么原因,無法繼續(xù)了,挺郁悶的。

          posted @ 2007-03-06 22:11 cerulean 閱讀(805) | 評論 (0)編輯 收藏

          C-JDBC(Java 數(shù)據(jù)庫連接群集)作為開發(fā)源碼的數(shù)據(jù)庫群集中間件,可以讓任何應用程序通過JDBC能夠透明的訪問數(shù)據(jù)庫群集。數(shù)據(jù)庫可以分布在多個節(jié)點并可以進行數(shù)據(jù)復制,C-JDBC能夠均衡在這些節(jié)點之間的查詢負載。 C-JDBC通過軟件來實現(xiàn)RAIDb(廉價數(shù)據(jù)庫冗余陣列)。C-JDBC是GNU LGPL許可證下的ObjectWeb項目。
          http://c-jdbc.objectweb.org/網(wǎng)站上的C-JDBC-Brochure-EN.pdf寫的內(nèi)容挺好。(C-JDBC)tutorial.pdf內(nèi)容也挺翔實。

          大型應用隨著用戶量訪問越來越大,增加數(shù)據(jù)庫存儲和做好數(shù)據(jù)庫冗余可以增加系統(tǒng)的可靠性和性能。

          無需修改客戶端應用程序,無需變更應用服務器或數(shù)據(jù)庫服務器軟件。C-JDBC的JDBC driver把SQL請求轉給C-JDBC controller(負責在databases之間做負載均衡)
          The database is distributed and replicated among several nodes and C-JDBC load balances the queries between these nodes.
          就這一句話就太誘人了!

          上周的某一個上午,搞定C-JDBC的安裝配置啦~
          主要根據(jù)官方的user guide和這篇好文: http://huaronghu.spaces.live.com/blog/cns!B9A68E1C1CA857AD!288.entry


          準備工作:
          環(huán)境:windows,postgreSQL,JDK
          建立數(shù)據(jù)庫“們”,安裝若干db在若干server上,所以如果使用商業(yè)數(shù)據(jù)庫的話,就會需要好幾套的錢哪。
          安裝C-JDBC:
          下載了binary版的c-jdbc-2.0.2-bin.zip,解壓到作為C-JDBC server的機器上(e.g. C:\software\c-jdbc-2.0.2-bin),
          設置環(huán)境變量,新增系統(tǒng)變量:CJDBC_HOME =C:\software\c-jdbc-2.0.2-bin
          把實際使用的數(shù)據(jù)庫的JDBC driver(例如mysql-connector-java-3.1.12-bin.jar ,postgresql-8.0.309.jdbc2.jar)拷貝到c-jdbc/drivers 中

          配置文件:
          在c-jdbc-2.0.2-bin/config/virtualdatabase目錄中創(chuàng)建虛擬數(shù)據(jù)庫配置文件。
          里面DatabaseBackend 標簽中定義的就是被集群的數(shù)據(jù)庫。
          試驗時,創(chuàng)建了文件:postgresql-raidb1-distribution.xml,使用了2個postgreSQL數(shù)據(jù)庫,采用了全復制的方法。
          注意,如果采用全復制,所以在2個數(shù)據(jù)庫上建庫、建表的全部腳本都要完全相同,否則將會報出mismatch的錯誤。
          目前感覺配置里面最有用的配置就是<AuthenticationManager>,<DatabaseBackend>和<LoadBalancer>(還沒有仔細看)。
          配置時可以參考已經(jīng)提供的例子,c-jdbc-2.0.2-bin/config/RAIDb-1-full-example.xml,里面對每一個屬性都有比較詳細的注釋,DatabaseBackend中還有各個開源數(shù)據(jù)庫連接的例子,挺貼心的。

          <? xml?version="1.0"?encoding="UTF8" ?>
          <! DOCTYPE?C-JDBC?PUBLIC?"-//ObjectWeb//DTD?C-JDBC?2.0.2//EN"?"http://c-jdbc.objectweb.org/dtds/c-jdbc-2.0.2.dtd" >

          < C-JDBC >
          ??
          ??
          < VirtualDatabase? name ="myDB" ?maxNbOfConnections ="20" ?minNbOfThreads ="1" ?maxNbOfThreads ="20" ?blobEncodingMethod ="hexa" >
          ????
          < AuthenticationManager >
          ??????
          < Admin >
          ???????
          < User? username ="admin" ?password ="c-jdbc" />
          ??????
          </ Admin > ?
          ??????
          < VirtualUsers >
          ????????
          < VirtualLogin? vLogin ="boss" ?vPassword ="boss" />
          ??????
          </ VirtualUsers >
          ????
          </ AuthenticationManager >

          ???
          < DatabaseBackend? name ="postgreSQLNode114" ?driver ="org.postgresql.Driver" ?url ="jdbc:postgresql://10.10.0.114:5432/clusterdb" ?connectionTestStatement ="select?now()" >
          ?
          < DatabaseSchema? dynamicPrecision ="column" />
          ??????
          < ConnectionManager? vLogin ="boss" ?rLogin ="postgres9" ?rPassword ="12345" >
          ?
          < RandomWaitPoolConnectionManager? poolSize ="20" />
          ??????
          </ ConnectionManager >
          ????
          </ DatabaseBackend >

          ????
          < DatabaseBackend? name ="postgreSQLNode155" ?driver ="org.postgresql.Driver" ?url ="jdbc:postgresql://10.10.0.155:5432/clusterdb" ?connectionTestStatement ="select?now()" >
          ?
          < DatabaseSchema? dynamicPrecision ="column" />
          ??????
          < ConnectionManager? vLogin ="boss" ?rLogin ="postgres" ?rPassword ="abcde" >
          ?
          < RandomWaitPoolConnectionManager? poolSize ="20" />
          ??????
          </ ConnectionManager >
          ????
          </ DatabaseBackend >

          ????
          < RequestManager >
          ??????
          < RequestScheduler >
          ?????????
          < RAIDb-1Scheduler? level ="passThrough" /> ???
          ??????
          </ RequestScheduler >

          ??????
          < RequestCache >
          ?????????
          < MetadataCache? maxNbOfMetadata ="10000" ?maxNbOfField ="0" />
          ?????????
          < ParsingCache? backgroundParsing ="false" ?maxNbOfEntries ="5000" /> ???
          ?????????
          < ResultCache? granularity ="table" ?maxNbOfEntries ="100000" ?pendingTimeout ="0" >
          ???????
          < ResultCacheRule? queryPattern ="default" ?timestampResolution ="1000" >
          ?????????????
          < EagerCaching />
          ?????????
          </ ResultCacheRule >
          ?????????
          </ ResultCache >
          ??????
          </ RequestCache >

          ??????
          < LoadBalancer >
          ?????????
          < RAIDb-1 >
          ?????????
          < RAIDb-1-LeastPendingRequestsFirst /> ??
          ?????????
          </ RAIDb-1 >
          ??????
          </ LoadBalancer > ????????
          ????
          </ RequestManager >
          ??
          </ VirtualDatabase >
          </ C-JDBC >

          ?

          在c-jdbc-2.0.2-bin/config/controller目錄中創(chuàng)建一個c-jdbc controller的配置文件。
          試驗時,創(chuàng)建的配置文件為:uud-controller-distributed.xml

          <? xml?version="1.0"?encoding="UTF8"? ?>
          <! DOCTYPE?C-JDBC-CONTROLLER?PUBLIC?"-//ObjectWeb//DTD?C-JDBC-CONTROLLER?2.0.2//EN"??"http://c-jdbc.objectweb.org/dtds/c-jdbc-controller-2.0.2.dtd" >
          < C-JDBC-CONTROLLER >
          ??
          < Controller? port ="25322" >
          ????
          < Report />
          ????
          < JmxSettings >
          ??????
          < RmiJmxAdaptor? port ="1091" />
          ????
          </ JmxSettings >
          ????
          < VirtualDatabase? configFile ="postgresql-raidb1-distribution.xml" ?virtualDatabaseName ="myDB" ?autoEnableBackends ="true" ?checkpointName ="Initial_empty_recovery_log" />
          ??
          </ Controller >
          </ C-JDBC-CONTROLLER >

          ?

          注意:Controller和VirtualMachine的配置文件不能采用相同的文件名

          啟動:
          在c-jdbc-2.0.2-bin\bin目錄下,運行controller.bat -f ../config/controller/uud-controller-distributed.xml
          unix用戶使用controller.sh來啟動controller

          截圖:(下回補)
          湊合看一下吧,控制臺的正常輸出:
          C:\software\c-jdbc-2.0.2-bin\bin>controller.bat -f ../config/controller/uud-cont
          roller-distributed.xml
          2007-03-07 15:16:44,017 INFO? controller.core.Controller C-JDBC controller (2.0.
          2)
          2007-03-07 15:16:44,439 INFO? controller.core.Controller Loading configuration f
          ile: ../config/controller/uud-controller-distributed.xml
          2007-03-07 15:16:44,752 INFO? controller.core.Controller JMX is enabled
          2007-03-07 15:16:44,830 INFO? controller.core.Controller Starting JMX server on
          host: 10.10.0.155
          2007-03-07 15:16:46,376 INFO? backend.DatabaseBackend.postgreSQLNode114 Adding c
          onnection manager for virtual user "boss"
          2007-03-07 15:16:46,501 INFO? backend.DatabaseBackend.postgreSQLNode155 Adding c
          onnection manager for virtual user "boss"
          2007-03-07 15:16:46,642 INFO? controller.RequestManager.myDB Request manager wil
          l parse requests with the following granularity: TABLE
          2007-03-07 15:16:46,657 WARN? controller.virtualdatabase.myDB No recovery log ha
          s been configured, enabling backend without checkpoint.
          2007-03-07 15:16:48,641 INFO? backend.DatabaseBackend.postgreSQLNode114 Detected
          ?backend as: PostgreSQL
          2007-03-07 15:16:49,063 WARN? backend.DatabaseBackend.postgreSQLNode114 Statemen
          t.getGeneratedKeys not supported.
          2007-03-07 15:16:49,579 INFO? backend.DatabaseBackend.postgreSQLNode114 Gatherin
          g database schema
          2007-03-07 15:16:49,782 INFO? controller.RequestManager.myDB Setting new virtual
          ?database schema.
          2007-03-07 15:16:49,782 INFO? cjdbc.controller.cache Setting new database schema
          .
          2007-03-07 15:16:49,782 INFO? controller.loadbalancer.RAIDb1 Adding blocking tas
          k worker thread for backend postgreSQLNode114
          2007-03-07 15:16:49,797 INFO? controller.loadbalancer.RAIDb1 Adding non blocking
          ?task worker thread for backend postgreSQLNode114
          2007-03-07 15:16:49,797 INFO? controller.RequestManager.myDB Database backend po
          stgreSQLNode114 is now enabled
          2007-03-07 15:16:50,922 INFO? backend.DatabaseBackend.postgreSQLNode155 Detected
          ?backend as: PostgreSQL
          2007-03-07 15:16:51,328 WARN? backend.DatabaseBackend.postgreSQLNode155 Statemen
          t.getGeneratedKeys not supported.
          2007-03-07 15:16:52,172 INFO? backend.DatabaseBackend.postgreSQLNode155 Gatherin
          g database schema
          2007-03-07 15:16:52,390 INFO? controller.RequestManager.myDB Virtual database sc
          hema merged with new schema.
          2007-03-07 15:16:52,390 INFO? cjdbc.controller.cache Merging new database schema

          2007-03-07 15:16:52,390 INFO? controller.loadbalancer.RAIDb1 Adding blocking tas
          k worker thread for backend postgreSQLNode155
          2007-03-07 15:16:52,390 INFO? controller.loadbalancer.RAIDb1 Adding non blocking
          ?task worker thread for backend postgreSQLNode155
          2007-03-07 15:16:52,406 INFO? controller.RequestManager.myDB Database backend po
          stgreSQLNode155 is now enabled
          2007-03-07 15:16:52,422 WARN? VirtualDatabaseWorkerThread.myDB.metadata Metadata
          ?key [getMaxColumnsInIndex] is not compatible. (Backends are: [jdbc:postgresql:/
          /10.10.0.114:5432/clusterdb] and [jdbc:postgresql://10.10.0.155:5432/clu
          sterdb] ; Values are:[32] and [0])
          2007-03-07 15:16:52,422 INFO? controller.core.Controller Adding VirtualDatabase
          myDB
          2007-03-07 15:16:52,437 INFO? controller.core.Controller Waiting for connections
          ?on 0.0.0.0:25322
          2007-03-07 15:16:52,469 INFO? controller.core.Controller Controller started on 2
          007.03.07 10 at 03:16:52 下午 GMT+08:00
          2007-03-07 15:16:52,484 INFO? controller.core.Controller Controller 10.10.0.
          155:25322 ready, listening to requests ...



          遇到過的問題:
          1、
          剛啟動沒一會兒,就看到config文件讀取錯誤,控制臺信息也就此結束。
          解決方法:controller.bat -f filename中filename的相對路徑和文件名竟然都寫錯了,汗。。。。

          2、
          啟動時,控制臺拋出ERROR以及exception,大意是connection failed, IP沒有配置到pg_hba.conf中
          解決方法:雖然是連本機的一個數(shù)據(jù)庫,但是由于數(shù)據(jù)庫連接的url里面寫的是IP地址,所以仍然要把本機的IP地址配置到pg_hba.conf以允許其訪問。

          3、
          還是啟動時拋錯了,Connection test failed(org.postgresql.util.PSQLException:Backend start-up failed:FATAL:role "boss_user" does not exist.)
          解決方法:原來是在自己寫的.xml配置文件中,DatabaseBackend標簽里面寫的用戶名和密碼需要是真實數(shù)據(jù)庫的真實用戶名和密碼。

          最后都整好了,但是遇到一個warn的log:
          backend.DatabaseBackend.postgreSQLNode155 Statement.getGeneratedKeys not supported
          至今不知道是什么問題,有什么影響.

          代碼部分:
          只需要修改應用程序用到的jdbc driver的配置,把c-jdbc/drivers/目錄下的c-jdbc-driver.jar拷貝到應用程序的工程里,并加入到class-path中。
          之前是使用 Class.forName("com.somevendor.jdbcDriver.Driver") 去連接某特定的數(shù)據(jù)庫
          現(xiàn)在是使用 Class.forName("org.objectweb.cjdbc.driver.Driver") 統(tǒng)一處理。
          連接字符串:DriverManager.getConnection("jdbc:cjdbc://localhost:25322/mycjdbc") 取得數(shù)據(jù)庫連接。

          c-jdbc server稱為c-jdbc controller,聆聽請求們
          其他所有通過c-jdbc來訪問的DB們稱為db backends.

          jdbc:cjdbc://host1:port1,host2:port2/database
          host是指跑著c-jdbc controller的機器IP,port是指controller監(jiān)聽客戶端鏈接的端口,默認端口號:25322
          注意,不僅真正的DB安裝多個在多個機器上,c-jdbc controller也可以安在不同的機器上,這樣可以防止一個c-jdbc 壞掉帶來的風險。
          例如:

          Class.forName( " org.objectweb.cjdbc.driver.Driver " );?
          DriverManager.getConnection(
          " jdbc:cjdbc://c1.objectweb.org,c2.objectweb.org/tpcw " );? // 不驗證用戶名密碼
          DriverManager.getConnection( " jdbc:cjdbc://host/db?user=me&password=secret " ) // 驗證用戶名密碼的寫法1
          DriverManager.getConnection( " jdbc:cjdbc://host/db;user=me;password=secret " ) // 驗證用戶名密碼的寫法2

          然后可以在代碼中insert/update幾個記錄,再單獨到各個數(shù)據(jù)庫中去查一下,應該都受到影響就對了。

          問題:
          1、管理C-JDBC,不知道C-JDBC需要啥管理,不過好像是已經(jīng)有一個簡單的 Desktop Application 可以控制相關的 administration 介面, 最重要的是, 他結合了 JMX , 可以讓整個監(jiān)控的環(huán)境更完整.. (等待嘗試)
          2、不知道通過C-JDBC來操作速度如何
          3、RAIdb的3種類型,采取哪個更好?把表分開在不同server上對聯(lián)表查應該不會有影響吧?

          其他:
          1、Configuring C-JDBC with Jakarta Tomcat
          Copy the c-jdbc-driver.jar file to the lib directory of your web application (for example: $TOMCAT_HOME/webapps/mywebapp/WEB-INF/lib).
          There are many ways to obtain connections from a Tomcat application. Just ensure that you are using org.objectweb.cjdbc.driver.Driver as the driver class name and that the JDBC URL is a C-JDBC URL

          2、Configuring C-JDBC with Hibernate
          C-JDBC just has to be defined as any JDBC driver in Hibernate, leaving the syntax set to the proper database. Here is a configuration example to use Hibernate with a C-JDBC cluster made of Sybase backends:
          ## C-JDBC
          hibernate.dialect???????????????? net.sf.hibernate.dialect.SybaseDialect
          hibernate.connection.driver_class org.objectweb.cjdbc.driver.Driver
          hibernate.connection.username???? user
          hibernate.connection.password???? pass
          hibernate.connection.url????????? jdbc:cjdbc://localhost:25322/test???????

          posted @ 2007-03-05 20:42 cerulean 閱讀(1420) | 評論 (2)編輯 收藏
          第一次做J2EE的網(wǎng)站時也遇到了這個“常見問題”。

          轉自http://huaronghu.spaces.live.com/default.aspx?_c02_owner=1

          經(jīng)常出現(xiàn)的Connection reset by peer: 原因可能是多方面的,不過更常見的原因是:
          1:服務器的并發(fā)連接數(shù)超過了其承載量,服務器會將其中一些連接Down掉;
          2:客戶關掉了瀏覽器,而服務器還在給客戶端發(fā)送數(shù)據(jù);
          3:瀏覽器端按了Stop;
          4:服務器給客戶端響應結果給防火墻攔截了。
          posted @ 2007-03-01 21:05 cerulean 閱讀(1051) | 評論 (0)編輯 收藏

          一些遇到過的小錯誤,記錄下來,不要絆倒第二次:
          trim
          ????trim(),4個字母的方法,一定要記得使用啊,已經(jīng)碰到過很多次由于沒有trim字符串而導致查詢匹配失敗的事情了。

          copy
          ?
          ????Ctrl+C,Ctrl+V,引入低級bug的魁首之一吧,當然低級bug表現(xiàn)出來就有可能是匪夷所思的錯誤情況了。

          對齊<>們
          ????有時候讀取spring的applicationContext.xml會拋出錯誤,“well-formed data”什么什么的,一般是.xml文件的內(nèi)容不符合要求,亂掉了,注意,此時不僅應該檢查applicationContext.xml,它里面用到的sql-map-config.xml,以及所以表的sqlMap.xml都應該檢查。
          ????對于內(nèi)容本身包含<>符號的,需要用 <![CDATA[ …… ]]>括起來

          posted @ 2007-03-01 21:03 cerulean 閱讀(339) | 評論 (0)編輯 收藏
          僅列出標題
          共6頁: 上一頁 1 2 3 4 5 6 下一頁 

          導航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 清水河县| 城市| 灌阳县| 如东县| 阿荣旗| 尼玛县| 兰西县| 乌兰浩特市| 应城市| 中超| 固始县| 科技| 龙川县| 裕民县| 博乐市| 信丰县| 禹州市| 广南县| 舟曲县| 桐梓县| 太谷县| 岳池县| 昭通市| 湘潭市| 平湖市| 深州市| 淅川县| 突泉县| 阳江市| 晋江市| 江陵县| 行唐县| 三亚市| 安庆市| 房产| 南昌县| 泾阳县| 南川市| 陆河县| 镇远县| 仁布县|