如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

          CowNew開(kāi)源團(tuán)隊(duì)

          http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks

          JDBMonitor(可以從www.cownew.com下載)是一個(gè)非常強(qiáng)大的數(shù)據(jù)庫(kù)監(jiān)控、日志工具,它的無(wú)侵入性是它最大的特點(diǎn)。所謂無(wú)侵入性指的是無(wú)需編寫(xiě)代碼就可以為系統(tǒng)增加數(shù)據(jù)日監(jiān)控、日志功能。那么它到底是怎么實(shí)現(xiàn)的呢?咱們來(lái)探索一下它的基本原理。
          要明白JDBMonitor的工作原理,必須首先弄明白JDBC驅(qū)動(dòng)的工作原理:
          所有的JDBC驅(qū)動(dòng)都實(shí)現(xiàn)java.sql.Driver接口,此接口有兩個(gè)重要方法:Connection connect(String url, java.util.Properties info),boolean acceptsURL(String url)。
          JDBC中有個(gè)DriverManager類(lèi),它有一個(gè)重要方法,
          registerDriver(java.sql.Driver driver)
          所有的JDBC驅(qū)動(dòng)都要調(diào)用此方法,這樣才能將注冊(cè)到驅(qū)動(dòng)管理器中。
          當(dāng)用戶(hù)調(diào)用DriverManager.getConnection("jdbc:......")的時(shí)候,DriverManager就把用戶(hù)穿過(guò)來(lái)的連接字符串“jdbc:......”發(fā)給每個(gè)注冊(cè)的驅(qū)動(dòng)Driver的acceptsURL方法做為參數(shù),驅(qū)動(dòng)Driver就調(diào)用這個(gè)Driver的connect方法然后將方法的返回值直接做為自己的返回值。
          更詳細(xì)的解釋請(qǐng)查看JDBC的JavaDoc,或者參考如下文章:http://www.cntopedu.cn/cntopedu_html_itxuetang/200562963708.asp


          JDBMonitor寫(xiě)了自己的JDBCDriver:DBDriver,這個(gè)DBDriver識(shí)別所有以listenerconfig=開(kāi)頭的jdbc連接字符串,這樣如果您修改了您系統(tǒng)的JDBC連接字符串并添加listenerconfig=等部分以后,此url就不會(huì)被您原來(lái)的JDBC驅(qū)動(dòng)認(rèn)識(shí),耳反而被DBDriver認(rèn)識(shí),這樣每次的數(shù)據(jù)庫(kù)連接調(diào)用也都通過(guò)DBDriver以及相關(guān)的類(lèi)來(lái)進(jìn)行(比如DBPreparedStatement等),這些類(lèi)首先先把通過(guò)的數(shù)據(jù)庫(kù)調(diào)用記錄下來(lái),然后再轉(zhuǎn)發(fā)給真正的數(shù)據(jù)庫(kù)驅(qū)動(dòng),這樣就達(dá)到了攔截任何JDBC調(diào)用的目的。更相信內(nèi)容,請(qǐng)參考com.cownew.JDBMonitor.jdbc包下的DBDriver、DBConnection、DBStatement、DBPreparedStatement等類(lèi)。這些類(lèi)采用了代理模式、裝飾者模式等設(shè)計(jì)模式,使得程序的可擴(kuò)展性得到很大的提升。

          COWNEW團(tuán)隊(duì),最專(zhuān)業(yè)的開(kāi)源團(tuán)隊(duì)!官方網(wǎng)站: www.cownew.com

          posted on 2006-05-24 02:20 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(948) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # 請(qǐng)教中文亂碼的問(wèn)題 re: JDBMonitor基本原理探究[未登錄](méi) 2008-06-17 11:20 leon
          您好:
          搭建jdbmonitor成功后,用文件日志方式監(jiān)聽(tīng),但是所有的中文都是亂碼,我用UltraEdit和記事本打開(kāi)均是亂碼。但是看log4j的日志,均無(wú)亂碼。
          做過(guò)以下嘗試: 修改com.cownew.JDBMonitor.listenerImpl.FileDBListener.java,將 79行,即寫(xiě)日志文件之前
          String s = info.toString();
          改為
          String s = new String(info.toString().getBytes(), "GBK");
          還是沒(méi)有用,請(qǐng)問(wèn)這個(gè)是什么問(wèn)題啊?
          急盼答復(fù),謝謝您!!

          ps: 剛剛在留言板發(fā)了一條,可是提交之后就找不到了,只好再發(fā)一次,請(qǐng)見(jiàn)諒
            回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 灵山县| 左权县| 济阳县| 砚山县| 灵山县| 万山特区| 彰化县| 平顶山市| 铜鼓县| 宁强县| 嘉祥县| 普兰县| 东港市| 广昌县| 哈尔滨市| 泉州市| 钟山县| 泸水县| 当雄县| 新兴县| 荥阳市| 汝阳县| 廊坊市| 灵丘县| 六盘水市| 永城市| 阿巴嘎旗| 嘉荫县| 太保市| 浦江县| 吐鲁番市| 灵川县| 青龙| 东至县| 佛冈县| 玉屏| 满洲里市| 浮梁县| 铜梁县| 福海县| 秀山|