Java Tools

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            83 隨筆 :: 0 文章 :: 16 評論 :: 0 Trackbacks

          #

          本文介紹如何利用Eclipse插件SQLExplorer在Eclipse中連接各種數(shù)據(jù)庫進行操作使用。

            Eclipse是目前非常流行的開發(fā)平臺,開放擴展的架構(gòu)讓很多程序員找到了自己個性化的工作環(huán)境。

          安裝

          JDK:1.5.0 從http://java.sun.com上去下載安裝
          Eclipse:3.1.1 從http://www.eclipse.org 上去下載解壓
          SQLExplorer 從http://eclipsesql.sourceforge.net/

          技巧

            Eclipse使用技巧之插件管理

            提示:新下載的插件PlugIn一定不要都放在原始的Eclipse目錄下去,一大堆,累死你:(

          1. 前提是你已經(jīng)安裝好了Eclipse工具了,比如安裝在E:\OpenSource\Eclipse\目錄下,以下這個目錄以%ECLIPSE_HOME%來進行表示;
          2. 此時默認的插件是在%ECLIPSE_HOME%\plugins目錄中的;
          3. 在%ECLIPSE_HOME%下建立一個PlugInsNew的目錄;

            比如:E:\OpenSource\Eclipse\PlugInsNew\

          1. 你下載了個新的插件,比如叫做:XYZ

            那么就在%ECLIPSE_HOME%\PlugInsNew\目錄下建立XYZ目錄,目錄里面是eclipse目錄,eclipse目錄包含有features與plugins兩個子目錄;結(jié)構(gòu)如下圖所示:

          1. 把下載的新插件的文件放在以下相應目錄中

            %ECLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features
            %ECLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins

          2. 建立相關(guān)的.link的文件

            然后在%ECLIPSE_HOME%\links目錄里建立一個XYZ.link的文件
            內(nèi)容如是:path=E:/OpenSource/Eclipse/PlugInsNew/XYZ就一行這樣的路徑指示而已。
            這樣,如果你下載了多個插件就可以如法炮制建立多個Link文件,想加載哪個插件就把哪個插件的Link文件放到%ECLIPSE_HOME%\links的目錄中即可,使用與管理都很方便,建議千萬不要放在默認的安裝目錄中;
            如果你的%ECLIPSE_HOME%與此不同,請修改XYZ.link文件里的路徑

          3. 刪除,關(guān)閉Eclipse

            刪除%ECLIPSE_HOME%\links\XYZ.link文件即可
            刪除%ECLIPSE_HOME%\PlugInsNew\XYZ整個目錄及文件

          4. 重新啟動Eclipse即可

          使用

            SQLExplorer插件安裝方法采用上一節(jié)的《Eclipse使用技巧之插件管理》
            重新啟動Eclipse后,可以在菜單Window => Show View => Other => 可以看到多了SQLExplorer
          展開SQLExplorer有七項內(nèi)容,分別為:

          1. Aliases 別名,用來標識數(shù)據(jù)庫連接串的
          2. Connection Info 連接信息,用來顯示連接數(shù)據(jù)庫時的相關(guān)信息,如,數(shù)據(jù)庫產(chǎn)品名稱、版本、JDBC驅(qū)動程序的名稱、版本、用戶名、連接串、是否自動提交等等。
          3. Connnections 顯示活動的連接情況
          4. Database Structure View 顯示數(shù)據(jù)庫結(jié)構(gòu)
          5. Drivers 配置驅(qū)動程序用
          6. SQL History 執(zhí)行SQL的歷史記錄
          7. SQL Results 執(zhí)行SQL的結(jié)果集

            下面會分別介紹這七項內(nèi)容的具體使用:
          如下圖所示:

            菜單Window => Preferences => SQLExplorer
          右邊的項目中,可以設(shè)置預覽表結(jié)果集時返回的行數(shù)、SQL集的返回行數(shù)、是否自動提交、還是關(guān)閉SQL編輯窗口后提交和寫SQL時是否自動完成表和列名。

            菜單Window => Preferences => SQLExplorer => SQL Editor
          右邊的項目中,可以設(shè)置SQL編輯器里的字體屬性、文本屬性

            菜單Window => Show View => Other => SQLExplorer 把里面的七項內(nèi)容全部顯示出來,你也可以自己進行定制一下它

            開始進行配置驅(qū)動程序,打開Drivers

            默認加載成功插件后,只有JDBC ODBC Bridge是打勾可用的,其它都是打紅X不可用的,想想就知道為什么了吧(^_^)

            沒有想出來,接下來看看吧
          右鍵JDBC ODBC Bridge,在彈出的菜單中點擊Change the selected Driver菜單

            可以在彈出的修改驅(qū)動程序中看到如下信息,在Driver Class Name顯示的是
          sun.jdbc.odbc.JdbcOdbcDriver
          因為從JDK1.2開始,在JDK里自動帶有這個驅(qū)動程序了,所以顯示為可用了:)

            接下來我們開始配置MySQL和Oracle的驅(qū)動程序:
          右鍵MMMySQL Driver,在彈出的菜單中點擊Change the selected Driver菜單

            在彈出的修改驅(qū)動程序中看到,在Driver Class Name顯示的是org.gjt.mm.mysql.Driver
          點擊Extra Class Path => Add => 選擇你的MySQL所在的路徑,加入它

            加入驅(qū)動程序如下所示:

            單擊List Drivers按鈕,在Driver Class Name的右下框中可以看到三個驅(qū)動類名,選擇你需要的一個,OK之即可。

            可以看到這下MMMySQL Driver也為打勾可以使用的狀態(tài)了。

            以同樣的方法配置Oracle Thin Driver驅(qū)動程序

            默認驅(qū)動名稱,添加驅(qū)動程序:

            可以看到兩個驅(qū)動程序的名稱

            配置好驅(qū)動程序后,可以開始創(chuàng)建連接了,切換到Aliases別名視圖
          點擊創(chuàng)建圖標,如下:

            選擇MMMySQL Driver

            填入別名的名稱、JDBC連接串URL、用戶名、密碼

            確定后,在Aliases別名視圖里出現(xiàn)剛建立的連接

            右鍵剛建立的數(shù)據(jù)庫連接別名,在彈出的菜單選擇Open…打開之。

            會彈出一個連接的確認框,你可以更改用戶名與密碼,也可以設(shè)置是否自動提交。

            確定后,會自動切換到Database Structure View視圖上,MySQL數(shù)據(jù)庫,則可以看到Database

            再打開它,可以看到數(shù)據(jù)庫名,Table表及表的個數(shù)與名稱了。

            選中其中的表userpwd,這個表是自己建立的,可以看到以下顯示列、索引、主鍵、外鍵、結(jié)果集預覽、行數(shù)共六個信息內(nèi)容。

            以下顯示表的列信息

            以下顯示索引信息

            以下顯示主鍵信息

              以下顯示外鍵信息

            以下顯示結(jié)果集預覽的內(nèi)容

            以下顯示的是記錄行數(shù)信息

            切換到Connection Info連接信息的視圖,可以看到連接數(shù)據(jù)庫時的相關(guān)信息,
          如,數(shù)據(jù)庫產(chǎn)品名稱MySQL、版本4.1.0a-nt
          JDBC驅(qū)動程序的名稱MySQL-AB JDBC Driver、版本mysql-connector-java-3.0.16-ga
          用戶名test@localhost、連接串jdbc:mysql://localhost:3306/test、自動提交模式為是等等。

            顯示默認的事務狀態(tài)

            切換到Connnections視圖,顯示當前數(shù)據(jù)庫活動的連接情況,有一個活動的連接。

            右上角,可以打開Open New Connection圖標來打開一個新的連接,比如連接到相同的數(shù)據(jù)庫,但是卻是不同的用戶

            右上角,單擊New SQL Editor圖標,創(chuàng)建一個新的SQL編輯器,來寫你的SQL語句

            在打開的SQL編輯器中,你可以開始寫SQL語句了,如下:


          按Ctrl + F9 或者點擊Exceute SQL圖標,執(zhí)行所輸入的語句

          這樣可以在SQL Results視圖中看到如下執(zhí)行的結(jié)果信息

              切換到SQL History 執(zhí)行SQL的歷史記錄的視圖,可以看到你執(zhí)行過的語句列表

            再寫一個不同的語句,演示結(jié)果集與SQL歷史記錄


          執(zhí)行后,記錄是顯示在最后的執(zhí)行結(jié)果是在后面,依次遞增的,即1、2、3、最后一個是你最后執(zhí)行的結(jié)果信息內(nèi)容顯示的地方,不要弄錯了。

            這樣在SQL History里就再增加上了一條執(zhí)行語句的記錄了

            同樣增加一個Oracle的連接測試

            Oracle數(shù)據(jù)庫,在Database Structure View視圖里顯示有Database、Monitor、Security、Instance四項內(nèi)容


          在SQL編輯器中,選擇Oracle的鏈接,再輸入查詢語句測試一下

            可以在結(jié)果集里得到如果內(nèi)容,在第4個標簽欄里了


          再更改一下SQL語句

            得到如下內(nèi)容,在第4個標簽欄里了

            SQL歷史記錄里可以看到執(zhí)行過的四條信息了

            這個插件的使用應當不是很容易的,其它的應用技巧與方法繼續(xù)中。

          posted @ 2007-07-19 18:24 和田雨 閱讀(2272) | 評論 (0)編輯 收藏

          方法一
          使用phpmyadmin,這是最簡單的了,修改mysql庫的user表,不過別忘了使用PASSWORD函數(shù)。

          方法二
          使用mysqladmin,這是前面聲明的一個特例。
          mysqladmin -u root -p password mypasswd
          輸入這個命令后,需要輸入root的原密碼,然后root的密碼將改為mypasswd。
          把命令里的root改為你的用戶名,你就可以改你自己的密碼了。
          當然如果你的mysqladmin連接不上mysql server,或者你沒有辦法執(zhí)行mysqladmin,那么這種方法就是無效的,而且mysqladmin無法把密碼清空。

          下面的方法都在mysql提示符下使用,且必須有mysql的root權(quán)限:
          方法三
          mysql> Insert INTO mysql.user (Host,User,Password)
          VALUES('%','jeffrey',PASSWORD('biscuit'));
          mysql> FLUSH PRIVILEGES
          確切地說這是在增加一個用戶,用戶名為jeffrey,密碼為biscuit。
          在《mysql中文參考手冊》里有這個例子,所以我也就寫出來了。
          注意要使用PASSWORD函數(shù),然后還要使用FLUSH PRIVILEGES。

          方法四
          和方法三一樣,只是使用了REPLACE語句
          mysql> REPLACE INTO mysql.user (Host,User,Password)
          VALUES('%','jeffrey',PASSWORD('biscuit'));
          mysql> FLUSH PRIVILEGES

          方法五
          使用SET PASSWORD語句,
          mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
          擬也必須使用PASSWORD()函數(shù),但是不需要使用FLUSH PRIVILEGES。


          方法六
          使用GRANT ... IDENTIFIED BY語句
          mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
          這里PASSWORD()函數(shù)是不必要的,也不需要使用FLUSH PRIVILEGES。


          注意: PASSWORD() [不是]以在Unix口令加密的同樣方法施行口令加密。
          MySQL 忘記口令的解決辦法
          如果 MySQL 正在運行,首先殺之: killall -TERM mysqld。
          啟動 MySQL :bin/safe_mysqld --skip-grant-tables &
          就可以不需要密碼就進入 MySQL 了。
          然后就是
          >use mysql
          >update user set password=password("new_pass") where user="root";
          >flush privileges;
          重新殺 MySQL ,用正常方法啟動 MySQL 。


          mysql密碼清空
          Windows:
          1.用系統(tǒng)管理員登陸系統(tǒng)。
          2.停止MySQL的服務。
          3.進入命令窗口,然后進入MySQL的安裝目錄,比如我的安裝目錄是c:\mysql,進入C:\mysql\bin
          4.跳過權(quán)限檢查啟動MySQL,
          c:\mysql\bin>mysqld-nt --skip-grant-tables
          5.重新打開一個窗口,進入c:\mysql\bin目錄,設(shè)置root的新密碼
          c:\mysql\bin>mysqladmin -u root flush-privileges password "newpassword"
          c:\mysql\bin>mysqladmin -u root -p shutdown
          將newpassword替換為你要用的root的密碼,第二個命令會提示你輸入新密碼,重復第一個命令輸入的密碼。
          6.停止MySQL Server,用正常模式啟動Mysql
          7.你可以用新的密碼鏈接到Mysql了。

          Unix&Linux:
          1.用root或者運行mysqld的用戶登錄系統(tǒng);
          2.利用kill命令結(jié)束掉mysqld的進程;
          3.使用--skip-grant-tables參數(shù)啟動MySQL Server
          shell>mysqld_safe --skip-grant-tables &
          4.為root@localhost設(shè)置新密碼
          shell>mysqladmin -u root flush-privileges password "newpassword"
          5.重啟MySQL Server


          mysql修改密碼
            mysql修改,可在mysql命令行執(zhí)行如下:
            mysql -u root mysql
            mysql> Update user SET password=PASSWORD("new password") Where user='name';
            mysql> FLUSH PRIVILEGES;
            mysql> QUIT

           

          教你如何將MySQL數(shù)據(jù)庫的密碼恢復

          因為MySQL密碼存儲于數(shù)據(jù)庫mysql中的user表中,所以只需要將我windows 2003下的MySQL中的user表拷貝過來覆蓋掉就行了。

          在c:\mysql\data\mysql\(linux 則一般在/var/lib/mysql/mysql/)目錄下有三個user表相關(guān)文件user.frm、user.MYD、user.MYI

          user.frm //user表樣式文件

          user.MYD //user表數(shù)據(jù)文件

          user.MYI //user表索引文件

          為保險起見,三個都拷貝過來,不過其實如果之前在要恢復的那個MySQL上沒有更改過表結(jié)構(gòu)的話,只要拷貝user.MYD就行了

          然后


          #. /etc/rc.d/init.d/mysql stop
          #. /etc/rc.d/init.d/mysql start
          #mysql -u root -p XXXXXX


          好了,可以用windows 2003下mysql密碼登陸了


          mysql>use mysql
          mysql>update user set Password=PASSWORD('xxxxxx') where User='root';


          這時候會出錯,提示user表只有讀權(quán)限

          我分析了一下原因,只這樣的,因為user.*文件的權(quán)限分配是windows 2003下的,在windows 2003下我ls -l一看權(quán)限是666

          在linux下我一看,拷過來后權(quán)限變成了600(其實正常情況下600就行了,只不過這里的文件屬主不是mysql,拷過來后的屬主變?yōu)榱?root,所以會出現(xiàn)權(quán)限不夠,這時候如果你改成權(quán)限666則可以了,當然這樣不好,沒有解決問題的實質(zhì)),在 /var/lib/mysql/mysql/下ls -l看了一下


          #chown -R mysql:mysql user.*
          #chmod 600 user.*


          //OK,DONE

          重起一下MYSQL

          重新連接


          mysql>use mysql
          mysql>update user set Password=PASSWORD('xxxxxx') where User='root';
          mysql>FLUSH PRIVILEGES;


          有一點值得注意:如果你windows 下mysql如果是默認配置的話,注意要還要執(zhí)行


          mysql>delete from user where User='';
          mysql>delete from user where Host='%';
          mysql>FLUSH PRIVILEGES;


          好了,到這里恢復密碼過程就完成了

          這個方法么就是有點局限性,你必須也具備另外的user表文件

          其他還有幾種方法

          其它方法一(這個是網(wǎng)上流傳較廣的方法,mysql中文參考手冊上的)

          1. 向mysqld server 發(fā)送kill命令關(guān)掉mysqld server(不是 kill -9),存放進程ID的文件通常在MYSQL的數(shù)據(jù)庫所在的目錄中。


          killall -TERM mysqld


          你必須是UNIX的root用戶或者是你所運行的SERVER上的同等用戶,才能執(zhí)行這個操作。

          2. 使用`--skip-grant-tables' 參數(shù)來啟動 mysqld。 LINUX下:


          /usr/bin/safe_mysqld --skip-grant-tables , windows下c:\mysql\bin\mysqld --skip-grant-tables


          3. 然后無密碼登錄到mysqld server ,


          >use mysql
          >update user set password=password("new_pass") where user="root";
          >flush privileges;


          。你也可以這樣做:


          `
          mysqladmin -h hostname -u user password 'new password''


          4. 載入權(quán)限表:


          `
          mysqladmin -h hostname flush-privileges'


          或者使用 SQL 命令


          `FLUSH PRIVILEGES'


          5.

          killall -TERM mysqld


          6.用新密碼登陸

          其它方法二

          直接用十六進制編輯器編輯user.MYD文件

          不過這個里面我要說明一點,我這里編輯的時候發(fā)現(xiàn)個問題,加密的密碼串有些是連續(xù)存儲的,有些的最后兩位被切開了,后兩位存儲在后面其他地方.這一 點我還沒想明白.還有注意一點就是編輯的是加密過的密碼串,也就是說你還是需要另外有user表文件。這種方法和我最上面介紹的方法的區(qū)別在于,這種方法 直接編輯linux下的user表文件,就不需要重新改文件屬主和權(quán)限了 

          修正一下:我在Windows下的實際操作如下

          1.關(guān)閉正在運行的MySQL。

          2.打開DOS窗口,轉(zhuǎn)到mysql\bin目錄。

          3.輸入


          mysqld-nt --skip-grant-tables


          回車。如果沒有出現(xiàn)提示信息,那就對了。

          4.再開一個DOS窗口(因為剛才那個DOS窗口已經(jīng)不能動了),轉(zhuǎn)到mysql\bin目錄。

          5.輸入mysql回車,如果成功,將出現(xiàn)MySQL提示符 >

          6. 連接權(quán)限數(shù)據(jù)庫


          >use mysql;
          (>是本來就有的提示符,別忘了最后的分號)


          6.改密碼:


          > update user set password=password("123456") where user="root"; (別忘了最后的分號)


          7.刷新權(quán)限(必須的步驟)


          >flush privileges;


          8.退出


          > \q


          9.注銷系統(tǒng),再進入,開MySQL,使用用戶名root和剛才設(shè)置的新密碼123456登陸。

          據(jù)說可以用直接修改user表文件的方法:

          關(guān)閉MySQL,Windows下打開Mysql\data\mysql,有三個文件user.frm,user.MYD,user.MYI找個知道密碼的MySQL,替換相應的這三個文件,如果user表結(jié)構(gòu)沒改過,一般也沒人去改,替換user.MYD就可以了。

          也可以直接編輯user.MYD,找個十六進制編輯器,UltraEdit就有這個功能。關(guān)閉MySQL,打開user.MYD。將用戶名root 后面的八個字符改為565491d704013245,新密碼就是123456。或者將它們對應的十六進制數(shù)字,(左邊那里,一個字符對應兩個數(shù)字),改 為 00 02 02 02 02 02 02 02,這就是空密碼,在編輯器右邊看到的都是星號*,看起來很象小數(shù)點。重開MySQL,輸入root和你的新密碼。

          posted @ 2007-07-19 15:43 和田雨 閱讀(243) | 評論 (0)編輯 收藏

          MySQL是一個真正的多用戶、多線程SQL數(shù)據(jù)庫服務器。MySQL是以一個客戶機/服務器結(jié)構(gòu)的實現(xiàn),它由一個服務器守護程序mysqld和很多不同的客戶程序和庫組成。由于其源碼的開放性及穩(wěn)定性,且與網(wǎng)站流行編徎語言PHP的完美結(jié)合,現(xiàn)在很多站點都利用其當作后端數(shù)據(jù)庫,使其獲得了廣泛應用。處于安全方面的考慮,需要為每一用戶賦于對不同數(shù)據(jù)庫的訪問限制,以滿足不同用戶的要求。下面就分別討論,供大家參考。

          一、MySQL修改密碼方法總結(jié)
          首先要說明一點的是:一般情況下,修改MySQL密碼是需要有mysql里的root權(quán)限的,這樣一般用戶是無法更改密碼的,除非請求管理員幫助修改。

          方法一

          使用phpMyAdmin (圖形化管理MySql數(shù)據(jù)庫的工具),這是最簡單的,直接用SQL語句修改mysql數(shù)據(jù)庫庫的user表,不過別忘了使用PASSWORD函數(shù),插入用戶用Insert命令,修改用戶用Update命令,刪除用Delete命令。在本節(jié)后面有數(shù)據(jù)表user字段的詳細介紹。

          方法二

          使用mysqladmin。輸入

          mysqladmin -u root -p oldpassword newpasswd

          執(zhí)行這個命令后,需要輸入root的原密碼,這樣root的密碼將改為newpasswd。同樣,把命令里的root改為你的用戶名,你就可以改你自己的密碼了。 當然如果你的mysqladmin連接不上mysql server,或者你沒有辦法執(zhí)行mysqladmin,那么這種方法就是無效的,而且mysqladmin無法把密碼清空。

          下面的方法都在mysql提示符下使用,且必須有mysql的root權(quán)限:

          方法三

          mysql> INSERT INTO mysql.user (Host,User,Password) VALUES ('%','system', PASSWORD('manager'));
          mysql> FLUSH PRIVILEGES

          確切地說這是在增加一個用戶,用戶名為system,密碼為manager。注意要使用PASSWORD函數(shù),然后還要使用FLUSH PRIVILEGES來執(zhí)行確認。

          方法四

          和方法三一樣,只是使用了REPLACE語句

          mysql> REPLACE INTO mysql.user (Host,User,Password)
          VALUES('%','system',PASSWORD('manager'));
          mysql> FLUSH PRIVILEGES

          方法五

          使用SET PASSWORD語句

          mysql> SET PASSWORD FOR system@"%" = PASSWORD('manager');

          你也必須使用PASSWORD()函數(shù),但是不需要使用FLUSH PRIVILEGES來執(zhí)行確認。

          方法六

          使用GRANT ... IDENTIFIED BY語句,來進行授權(quán)。

          mysql> GRANT USAGE ON *.* TO system@"%" IDENTIFIED BY 'manager';

          這里PASSWORD()函數(shù)是不必要的,也不需要使用FLUSH PRIVILEGES來執(zhí)行確認。

          注:PASSWORD()函數(shù)作用是為口令字加密,在程序中MySql自動解釋。

          二、MySql中訪問限制的設(shè)置方法
          我們采用兩種方法來設(shè)置用戶。

          進入到Mysql執(zhí)行目錄下(通常是c:\mysql\bin)。輸入mysqld-shareware.exe,輸入mysql --user=root mysql ,不然不能添加新用戶。進入到mysql>提示符下進行操作。

          假設(shè)我們要建立一個超級用戶,用戶名為system,用戶口令為manager。

          方法一

          用Grant 命令授權(quán),輸入的代碼如下:

          mysql>GRANT ALL PRIVILEGES ON *.* TO system@localhost IDENTIFIED BY 'manager' WITH GRANT OPTION;

          應顯示:Query OK, 0 rows affected (0.38 sec)

          方法二

          對用戶的每一項權(quán)限進行設(shè)置:

          mysql>INSERT INTO user VALUES('localhost','system',PASSWORD('manager'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

          對于3.22.34版本的MySQL,這里共14個"Y",其相應的權(quán)限如下(按字段順序排列):
           

          權(quán)限 表列名稱 相應解釋 使用范圍 
          select Select_priv 只有在真正從一個表中檢索時才需要select權(quán)限 表 
          insert Insert_priv 允許您把新行插入到一個存在的表中 表 
          update Update_priv 允許你用新值更新現(xiàn)存表中行的列 表 
          delete Delete_priv 允許你刪除滿足條件的行 表 
          create Create_priv 允許你創(chuàng)建新的數(shù)據(jù)庫和表 數(shù)據(jù)庫、表或索引 
          drop Drop_priv 拋棄(刪除)現(xiàn)存的數(shù)據(jù)庫和表 數(shù)據(jù)庫或表 
          reload Reload_priv 允許您告訴服務器再讀入授權(quán)表 服務器管理 
          shutdown Shutdown_priv 可能被濫用(通過終止服務器拒絕為其他用戶服務) 服務器管理 
          process Process_priv 允許您察看當前執(zhí)行的查詢的普通文本,包括設(shè)定或改變口令查詢 服務器管理 
          file File_priv 權(quán)限可以被濫用在服務器上讀取任何可讀的文件到數(shù)據(jù)庫表 服務器上的文件存取 
          grant Grant_priv 允許你把你自己擁有的那些權(quán)限授給其他的用戶 數(shù)據(jù)庫或表 
          references References_priv 允許你打開和關(guān)閉記錄文件 數(shù)據(jù)庫或表 
          index Index_priv 允許你創(chuàng)建或拋棄(刪除)索引 表 
          alter Alter_priv 允許您改變表格,可以用于通過重新命名表來推翻權(quán)限系統(tǒng) 表 

          如果創(chuàng)建用戶時只有select、insert、update和delete權(quán)限,則允許用戶只能在一個數(shù)據(jù)庫現(xiàn)有的表上實施操作.

          下面就可以創(chuàng)建我們要用到的數(shù)據(jù)庫了,我們直接輸入. 例如:我們要創(chuàng)建數(shù)據(jù)庫名為XinXiKu,可用如下代碼:

          mysql>create database XinXiKu;

          應顯示:Query OK, 1 row affected (0.00 sec)
          posted @ 2007-07-17 17:35 和田雨 閱讀(473) | 評論 (0)編輯 收藏

          一、在linux中
          如果 MySQL 正在運行,首先殺之: killall -TERM mysqld
          啟動 MySQL :/usr/bin/safe_mysqld --skip-grant-tables
          就可以不需要密碼就進入 MySQL 了。 
          然后就是 
          >use mysql 
          >update user set password=password("new_pass") where user="root"; 
          >flush privileges; 
          重新殺 MySQL ,用正常方法啟動 MySQL 。 
          二、Windows: 
          1.用系統(tǒng)管理員登陸系統(tǒng)。 
          2.停止MySQL的服務。 
          3.進入命令窗口,然后進入MySQL的安裝目錄,比如我的安裝目錄是c:\mysql,進入C:\mysql\bin 
          4.跳過權(quán)限檢查啟動MySQL, 
          c:\mysql\bin>;mysqld-nt --skip-grant-tables 
          5.重新打開一個窗口,進入c:\mysql\bin目錄,設(shè)置root的新密碼 
          c:\mysql\bin>;mysqladmin -u root flush-privileges password "newpassword" 
          c:\mysql\bin>;mysqladmin -u root -p shutdown 
          將newpassword替換為你要用的root的密碼,第二個命令會提示你輸入新密碼,重復第一個命令輸入的密碼。 
          6.停止MySQL Server,用正常模式啟動Mysql 
          7.你可以用新的密碼鏈接到Mysql了。 
          這種事情很少會碰到,不過如果碰到的話,不妨試試。
          posted @ 2007-07-17 17:32 和田雨 閱讀(1813) | 評論 (0)編輯 收藏

          Introduction to XML Schema
          [XML Schema
          介紹]

          翻譯:linqingfeng
          英語原文: http://www.w3schools.com/schema/default.asp


          XML Schema is an XML based alternative to DTD.
          [XML Schema
          是一種XML文件類型定義的基本方法]

          An XML schema describes the structure of an XML document.
          [
          每個XML Schema描述XML文檔的結(jié)構(gòu)]

          The XML Schema language is also referred to as XML Schema Definition (XSD).
          [XML Schema
          也稱為XML模式定義(XSD)]


          What You Should Already Know
          [
          在學習之前你應該知道什么]

          Before you study the XML Schema Language, you should have a basic understanding of XML and XML Namespaces. It will also help to have some basic understanding of DTD.
          [
          在你開始學習XML Schema語言之前,你應該對XMLXML的命名空間有基本的了解。那樣會幫助你了解DTDDocument Type Definition文件類型定義)].


          What is an XML Schema?
          [XML Schema
          是什么?]

          The purpose of an XML Schema is to define the legal building blocks of an XML document, just like a DTD.
          [XML Schema
          目標是定義合法的XML文檔,就像DTD那樣]

          An XML Schema:
          [
          任一個XML Schema]

          • defines elements that can appear in a document
            [
            定義在文檔中的元素]
          • defines attributes that can appear in a document
            [
            定義在文檔中的屬性]
          • defines which elements are child elements
            [
            定義哪些元素為子元素]
          • defines the order of child elements
            [
            定義子元素的階]
          • defines the number of child elements
            [
            定義子元素的數(shù)]
          • defines whether an element is empty or can include text
            [
            定義元素是否為空]
          • defines data types for elements and attributes
            [
            定義元素和屬性的數(shù)據(jù)類型]
          • defines default and fixed values for elements and attributes
            [
            定義元素和屬性的默認值和固定值]

          XML Schemas are the Successors of DTDs
          [XML Schemas
          DTD的替代者]

          We think that very soon XML Schemas will be used in most Web applications as a replacement for DTDs. Here are some reasons:
          [
          我們認為很快XML Schemas就會替代DTD而大量應用于Web應用。原因有如下幾個:]

          • XML Schemas are extensible to future additions
            [XML Schemas
            易于未來的擴展]
          • XML Schemas are richer and more useful than DTDs
            [XML Schemas
            DTD更有用處]
          • XML Schemas are written in XML
            [XML Schemas
            本身就是XML]
          • XML Schemas support data types
            [XML Schemas
            支持數(shù)據(jù)類型]
          • XML Schemas support namespaces
            [XML Schemas
            支持命名空間]

          XML Schema is a W3C Recommendation
          [XML Schemas
          W3C推薦使用的]

          XML Schema was originally proposed by Microsoft, but became an official W3C recommendation in May 2001.
          [XML Schemas
          最初由微軟提出,并在2001年五月成為W3C的官方指定標準]

          The specification is now stable and has been reviewed by the W3C Membership.
          [
          其規(guī)格文檔現(xiàn)已穩(wěn)定并加入到W3C標準中]

          XML Schemas - Why?
          [
          為什么選用XML Schemas?]

           


          There are a number of reasons why XML Schema is better than DTD.
          [XML Schemas
          有趣多方面優(yōu)于DTD]


          XML Schema has Support for Data Types
          [XML Schemas
          支持數(shù)據(jù)類型]

          One of the greatest strengths of XML Schemas is the support for data types.
          [XML Schemas
          其中最好的方面之一就是支持數(shù)據(jù)類型]

          With the support for data types:
          [
          對數(shù)據(jù)類型提供的支持有:]

          • It is easier to describe permissible document content
            [
            易于描述文檔內(nèi)容是否允許]
          • It is easier to validate the correctness of data
            [
            易于驗證數(shù)據(jù)的正確性]
          • It is easier to work with data from a database
            [
            易于復合數(shù)據(jù)庫操作數(shù)據(jù)]
          • It is easier to define data facets (restrictions on data)
            [
            易于定義數(shù)據(jù)約束]
          • It is easier to define data patterns (data formats)
            [
            易于格式化數(shù)據(jù)]
          • It is easier to convert data between different data types
            [
            易于數(shù)據(jù)在不同的數(shù)據(jù)類型中轉(zhuǎn)換]

          XML Schemas use XML Syntax
          [XML Schemas
          是用XML的語法]

          Another great strength about XML Schemas is that they are written in XML.
          [
          另一個最大的優(yōu)點是XML Schemas是用XML書寫的]

          Because XML Schemas are written in XML:
          [XML Schemas
          XML書寫的好處有:]

          • You don't have to learn another language
            [
            不用學習另一種新的語言]
          • You can use your XML editor to edit your Schema files
            [
            能在XML的編輯器中編寫XML Schemas文件]
          • You can use your XML parser to parse your Schema files
            [
            能用XML解釋器去解釋XML Schemas文件]
          • You can manipulate your Schema with the XML DOM
            [
            能用XML DOM(Document Object Model,文檔物件模型)操作XML Schemas文件]
          • You can transform your Schema with XSLT
            [
            能用XSLT來轉(zhuǎn)換XML Schemas文件]

          XML Schemas Secure Data Communication
          [XML Schemas
          數(shù)據(jù)通信更安全]

          When data is sent from a sender to a receiver it is essential that both parts have the same "expectations" about the content.
          [
          當數(shù)據(jù)從發(fā)送方傳遞給接受方時, XML Schemas會讓顯示的內(nèi)容達到你的期望”]

          With XML Schemas, the sender can describe the data in a way that the receiver will understand.
          [XML Schemas
          文件能讓發(fā)送方的數(shù)據(jù)被接受方所解釋]

          A date like this: "03-11-2004" will, in some countries, be interpreted as 3. November and in other countries as 11. March, but an XML element with a data type like this:
          [
          例如一個日期的表述” 03-11-2004”,在某些國家會被解釋為113,而在另一些國家卻被解釋成311],而相同的數(shù)據(jù)在XML上表述成:

          <date type="date">2004-03-11</date>

          ensures a mutual understanding of the content because the XML data type date requires the format YYYY-MM-DD.
          [
          由于XML數(shù)據(jù)類型定義了他的格式是YYYY-MM-DD,從而使能正確的表述其內(nèi)容的含義]


          XML Schemas are Extensible
          [XML Schemas
          是可擴展的]

          XML Schemas are extensible, just like XML, because they are written in XML.
          [XML Schemas
          是可擴展的,就像普通的XML一樣,因為他本身就是一個XML]

          With an extensible Schema definition you can:
          [
          可擴展性的定義帶來的好處有:]

          • Reuse your Schema in other Schemas
            [
            可從用你的規(guī)則與其他規(guī)則]
          • Create your own data types derived from standard types
            [
            從其他的標準的數(shù)據(jù)類型中創(chuàng)建自定義的數(shù)據(jù)類型]
          • Reference multiple schemas from the same document
            [
            同一個文檔可以引用多個規(guī)則]

          Well-Formed is not Enough
          [
          良好格式還并不足夠]

          A well-formed XML document is a document that conforms to the XML syntax rules:
          [
          一個具有良好格式的XML文檔是完全符合XML的語法規(guī)則的:]

          • must begin with the XML declaration
            [
            必須由XML聲明開始]
          • must have one unique root element
            [
            必須有且僅有一個根節(jié)點]
          • all start tags must match end-tags
            [
            所有標簽都必須有相對的結(jié)束標簽]
          • XML tags are case sensitive
            [XML
            的標簽是區(qū)分大小寫的]
          • all elements must be closed
            [
            所有的元素都必須是閉合的]
          • all elements must be properly nested
            [
            所有元素都必須合理的嵌套(元素不可以交叉)]
          • all attribute values must be quoted
            [
            所有的屬性都必須被引用]
          • XML entities must be used for special characters
            [
            所有的XML實體都必須用特殊的字符來做]

          Even if documents are Well-Formed they can still contain errors, and those errors can have serious consequences. Think of this situation: you order 5 gross of laser printers, instead of 5 laser printers. With XML Schemas, most of these errors can be caught by your validating software.
          [
          即使文檔完全符合格式也會包含錯誤,而且有些錯誤會有嚴重的邏輯問題.想一想這樣的情況:你訂購五臺激光打印機是為了來替代五臺激光打印機.配合XML Schemas,大部分的錯誤都可以由你的軟件校驗出來的.]

          XSD How To
          [XSD
          如何]


          XML documents can have a reference to a DTD or an XML Schema.
          [XML
          文檔能和一個DTD或者一個XML Schema相關(guān)]


          A Simple XML Document
          [
          一個簡單的XML文檔]

          Look at this simple XML document called "note.xml":
          [
          看看這個名為"note.xml"XML文檔]

          <?xml version="1.0"?>

          <note>

          <to>Tove</to>

          <from>Jani</from>

          <heading>Reminder</heading>

          <body>Don't forget me this weekend!</body>

          </note>

           


          A Simple DTD
          [
          一個簡單的DTD]

          This is a simple DTD file called "note.dtd" that defines the elements of the XML document above ("note.xml"):
          [
          這個簡單的DTD"note.dtd"定義了"note.xml"中的元素:]

          <!ELEMENT note (to, from, heading, body)>

          <!ELEMENT to (#PCDATA)>

          <!ELEMENT from (#PCDATA)>

          <!ELEMENT heading (#PCDATA)>

          <!ELEMENT body (#PCDATA)>

          Line 1 defines the note element to have four elements: "to, from, heading, body". Line 2-5 defines the to element to be of the type "#PCDATA", the from element to be of the type "#PCDATA", and so on...
          [
          第一行定義了note元素有四個子元素: "to, from, heading, body".而第二行到第五行分別定義了tofrom等元素為"#PCDATA"]


          A Simple XML Schema
          [
          一個簡單的XML Schema]

          This is a simple XML Schema file called "note.xsd" that defines the elements of the XML document above ("note.xml"):
          [
          這個簡單的XML Schema文件"note.xsd"同樣定義了"note.xml"中的元素:]

          <?xml version="1.0"?>

          <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

          targetNamespace="http://www.w3schools.com"

          xmlns="http://www.w3schools.com"

          elementFormDefault="qualified">

          <xs:element name="note">

              <xs:complexType>

                <xs:sequence>

                  <xs:element name="to" type="xs:string"/>

                  <xs:element name="from" type="xs:string"/>

                  <xs:element name="heading" type="xs:string"/>

                  <xs:element name="body" type="xs:string"/>

                </xs:sequence>

              </xs:complexType>

          </xs:element>

          </xs:schema>

          The note element is said to be of a complex type because it contains other elements. The other elements (to, from, heading, body) are said to be simple types because they do not contain other elements. You will learn more about simple and complex types in the following chapters.
          [
          那個note元素由于包含有其他的子元素而被定義為complex type(復合類型). 其他包含在它里面的元素(to, from, heading, body)都被定義為simple types(簡單類型). 你將會在以后的章節(jié)里面學到更多關(guān)于復合類型和簡單類型的知識.]


          A Reference to a DTD
          [DTD
          的引用]

          This XML document has a reference to a DTD:
          [
          這個XML文檔引用自一個DTD:]

          <?xml version="1.0"?>

          <!DOCTYPE note SYSTEM

          "http://www.w3schools.com/dtd/note.dtd">

          <note>

          <to>Tove</to>

          <from>Jani</from>

          <heading>Reminder</heading>

          <body>Don't forget me this weekend!</body>

          </note>

           


          A Reference to an XML Schema
          [XML Schema
          的引用]

          This XML document has a reference to an XML Schema:
          [
          這個XML文檔引用自一個XML Schema文檔:]

          <?xml version="1.0"?>

          <note

          xmlns="http://www.w3schools.com"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="http://www.w3schools.com note.xsd">

           

          <to>Tove</to>

          <from>Jani</from>

          <heading>Reminder</heading>

          <body>Don't forget me this weekend!</body>

          </note>

           

          XSD - The <schema> Element
          [XSD
          中的<schema>元素]


          The <schema> element is the root element of every XML Schema!
          [<schema>
          元素是每一個XML Schema文件的根元素!]


          The <schema> Element
          [<schema>
          元素]

          The <schema> element is the root element of every XML Schema:
          [[<schema>
          元素是每一個XML Schema文件的根元素:]

          <?xml version="1.0"?>

          <xs:schema>

          ...

          ...

          </xs:schema>

          The <schema> element may contain some attributes. A schema declaration often looks something like this:
          [[<schema>
          元素包含一些屬性.一般聲明如下:]

          <?xml version="1.0"?>

          <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

          targetNamespace="http://www.w3schools.com"

          xmlns="http://www.w3schools.com"

          elementFormDefault="qualified">

          ...

          ...

          </xs:schema>

          The following fragment:
          [
          以下片段:]

          xmlns:xs="http://www.w3.org/2001/XMLSchema"

          indicates that the elements and data types used in the schema (schema, element, complexType, sequence, string, boolean, etc.) come from the "http://www.w3.org/2001/XMLSchema" namespace. It also specifies that the elements and data types that come from the "http://www.w3.org/2001/XMLSchema" namespace should be prefixed with xs:
          [
          說明元素和數(shù)據(jù)類型的使用模式(schema, element, complexType, sequence, string, Boolean等等)來自于"命名空間.同時也可用xs:作為前綴]

          This fragment:
          [
          如下片段:]

          targetNamespace="http://www.w3schools.com"

          indicates that the elements defined by this schema (note, to, from, heading, body.) come from the "http://www.w3schools.com" namespace.
          [
          說明元素(note, to, from, heading, body.)的使用模式來自于命名空間"http://www.w3schools.com"]

          This fragment:
          [
          如下片段:]

          xmlns="http://www.w3schools.com"

          indicates that the default namespace is "http://www.w3schools.com".
          [
          說明默認的命名空間是"http://www.w3schools.com".]

          This fragment:
          [
          如下片段:]

          elementFormDefault="qualified"

          indicates that any elements used by the XML instance document which were declared in this schema must be namespace qualified.
          [
          說明所有全局元素的子元素將被以缺省方式放到目標命名空間,連同全局元素或者類型一起]


          Referencing a Schema in an XML Document
          [
          XML文件中引用Schema]

          This XML document has a reference to an XML Schema:
          [
          如下XML文檔有一個XML Schema的引用:]

          <?xml version="1.0"?>

          <note xmlns="http://www.w3schools.com"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="http://www.w3schools.com note.xsd">

          <to>Tove</to>

          <from>Jani</from>

          <heading>Reminder</heading>

          <body>Don't forget me this weekend!</body>

          </note>

          The following fragment:
          [
          下面片段:]

          xmlns="http://www.w3schools.com"

          specifies the default namespace declaration. This declaration tells the schema-validator that all the elements used in this XML document are declared in the "http://www.w3schools.com" namespace.
          [
          聲明默認的命名空間.此聲明告知模式校驗器讓所有XML元素都在命名空間"http://www.w3schools.com"]

          Once you have the XML Schema Instance namespace available:
          [
          有時你可以用到XML模式實例命名空間:]

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          you can use the schemaLocation attribute. This attribute has two values. The first value is the namespace to use. The second value is the location of the XML schema to use for that namespace:
          [
          你能用上schemaLocation這個屬性.這個屬性有兩個含義.第一個含義是這個命名空間被使用.第二個含義是定位XML schema用到的命名空間:]

          xsi:schemaLocation="http://www.w3schools.com note.xsd"



          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=705007

          posted @ 2007-07-14 00:38 和田雨 閱讀(406) | 評論 (0)編輯 收藏

          RSS

          內(nèi)容目錄

          RSS Introduction [RSS介紹]
          An introduction to what RSS is and how it can be used.
          介紹什么是RSS,它的應用。

          RSS History [RSS歷史]
          How RSS started and how it has been developed and changed
          RSS是怎么誕生的,它是怎樣發(fā)展和變化的.

          RSS Syntax [RSS語法]
          A brief introduction how to make RSS.
          制作RSS的簡單介紹

          RSS Channel [RSS頻道]
          How to make and what can be included in the <channel> element.
          怎么完成<channel>元素里的內(nèi)容

          RSS Item [RSS內(nèi)容]- How to make and what can be included in the <item> element.
          怎樣的<item>元素才算合理的

          RSS Publishing [RSS 發(fā)布]- How to publish your RSS.
          怎樣發(fā)布的你的RSS

          RSS Readers [RSS閱讀器]- How to read other site's RSS.
          怎樣閱讀其他網(wǎng)站的RSS


          RSS介紹
          翻譯:Linyupark / 2006-04-24

          RSS was designed to share data like headlines, links and short descriptions of these.
          RSS 將數(shù)據(jù)分成像標題,連接和簡單描述的形式。(濃縮過的信息)

          RSS allows fast browsing for news and updates.
          RSS能快速瀏覽新聞和更新內(nèi)容。


          What You Should Already Know
          哪些是你應該已經(jīng)知道的

          Before you continue you should have a basic understanding of the following:
          在繼續(xù)學習前你應該有下面這些知識點的基礎(chǔ):

          • HTML / XHTML
          • XML / XML 命名空間

          What is RSS?
          什么是RSS?

          • RSS stands for Really Simple Syndication
            RSS就是 Really Simple Syndication (真正的簡單聚合)
          • RSS allows you to syndicate your site content
            RSS可以聚合你網(wǎng)站上的內(nèi)容
          • RSS is a selected list of defined items on a site
            RSS是一站點上被選中的內(nèi)容清單
          • RSS defines an easy way to share and view headlines and content
            RSS是一種更便捷的方法去查看標題和內(nèi)容
          • RSS files can be automatically updated
            RSS文件可以自動的更新
          • RSS allows personalized views for different sites
            RSS允許更具人性化(個性化)的查看不同的站點
          • RSS is written in XML
            RSS是用XML來書寫的

          Why Use RSS?
          為什么使用RSS?

          RSS was designed to show selected data.
          RSS 能展示被選擇的數(shù)據(jù)(針對性)

          Without RSS, users will have to check your site daily to check for new updates. This may be too time-consuming for many users. With an RSS feed (RSS is often called a News Feed or RSS Feed) they can check your site faster using an RSS aggregator (a site or program that gathers and sorts out several RSS feeds).
          沒有RSS的話,用戶將必須每天到你的站上看看有沒更新內(nèi)容。這對于一些用戶來說是很浪費時間的。通過一個RSS feed他們可以使用RSS閱讀器更快的查看你的站是否有更新。

          Since RSS data is small and fast-loading, it can easily be used with services like cell phones or PDA's.
          因為RSS數(shù)據(jù)很小而且加載速度很快,它可以容易的在手機或PDA服務上使用。

          Web-rings with similar information can easily share data on their sites to make them better and more useful.
          Wb-rings通過相似的信息可以方便的共享他們站點的信息。


          Who Should Use RSS?
          哪些人應該使用RSS?

          Webmasters who seldom update their sites do not need RSS.
          站長如不是經(jīng)常更新站帶內(nèi)信息的話可以不使用RSS

          RSS can be useful for Web sites that are updated frequently, like:
          RSS對于那些經(jīng)常更新的站點來說是和有幫助的,像:

          • News sites - Lists news with title, date and descriptions
            新聞站
          • Site changes - Lists changed pages or new pages
            站點改動信息版塊
          • Companies - Lists news and new products
            公司站 - 新聞 和 新產(chǎn)品
          • Calendars - Lists upcoming events and important days
            日歷

          The Future of RSS
          展望RSS

          RSS is going to be everywhere.
          RSS將遍及每個角落

          Thousands of sites use RSS and more people understand its usefulness every day.
          數(shù)千站使用著RSS并且每天有越來越多的人明白了它的有用之處。

          By using RSS, information on the Web becomes easier to find and web developers can spread their information more easily to special interest groups.
          有了RSS,在WEB上的信息變的容易找到并且WEB開發(fā)者能夠容易的將信息傳播給興趣小組。

          Hopefully, future RSS versions will include additional fields that will make it even easier to categorize and share.
          未來的RSS版本可能包含額外的領(lǐng)域來使分類和分享信息來的更容易。


          RSS的歷史
          翻譯:Linyupark / 2006-04-24

          RSS has been released in many different versions.
          RSS發(fā)布過一些不同的版本


          The History of RSS
          RSS的歷史

          Here is the history of RSS according to Dave Winer (key developer of most of the RSS formats):
          依據(jù)Dave Winer(RSS開發(fā)的關(guān)鍵人物)的描述,RSS有這樣的歷史:

          • Dec. 1997 - Dave Winer developed scriptingNews
            1997年12月 Dave Winer 開發(fā)了新聞腳本
             
          • Mar. 1999 - RSS 0.90 was developed by Netscape, which supported the scriptingNews format. This was simply XML with a RDF Header
             1999年三月 - RSS 0.90 由網(wǎng)景公司開發(fā),支持格式化新聞腳本.
          • Jun. 1999 - scriptingNews 2.0b1 was developed by Dave Winer at UserLand. This included Netscape's RSS 0.90 features
            新聞腳本2.0b1于 1999年6月由Dave Winer開發(fā),包含了網(wǎng)景RSS 0.90的特點
             
          • Jul. 1999 - RSS 0.91 was an attempt by Netscape to move towards a more standard format and included most features from scriptingNews 2.0b1 but they removed the RDF header
            1999年7月 - RSS0.91 網(wǎng)景試圖移入更多的標準格式并包含更多來自scriptingNews2.0b1的特性但是他們卻刪除了RDF頭  
          • Jul. 1999 - UserLand uses RSS 0.91 and gets rid of scriptingNews
            1999年7月 - UserLand利用了沒有scriptNews的RSS0.91
             
          • Netscape discontinues their RSS development
             網(wǎng)景中斷了他們對RSS的開發(fā)
          • Jun. 2000 - Official RSS 0.91 specification release from UserLand
             UserLand公開了規(guī)范文檔
          • Aug. 2000 - RSS 1.0 developed by a group lead by Rael Dornfest at O'Reilly. This format uses RDF and namespaces. Because of its name it is often confused as being a new version of 0.91, but this is a completely new format with no ties to RSS 0.91
             
          • Dec. 2000 - RSS 0.92 developed by Dave Winer at UserLand and includes optional elements
             
          • Sep. 2002 - RSS 2.0 is designed by Dave Winer after leaving Userland
             
          • Jul. 2003 - RSS 2.0 specification released through Harvard under a Creative Commons license

          What Are The differences?
          有什么區(qū)別?

          Unlike the other RSS formats, RSS 1.0 was developed using the W3C RDF (Resource Description Framework) standard.
          不像其他RSS的規(guī)格,RSS1.0使用W3C的DRF標準開發(fā).


          What RSS Version Should I Use?
          我該用哪個版本的RSS?

          RSS 0.91 and RSS 2.0 are easiest to understand. RSS 1.0 is more complex to learn and takes more time and bandwidth to process.
          RSS0.91和RSS2.0是最容易理解的版本。1.0學起來比較復雜而且需要花更多的帶寬來運作。

          Our tutorial is based on RSS 2.0.
          我們的教程是基于RSS2.0的


          Is There an RSS Web Standard?
          有RSS WEB標準嗎?

          There is no official standard for RSS. But about 50 % of all RSS feeds use the RSS 0.91 format. About 25 % use the RSS 1.0 format and the last 25 % is split between the other RSS 0.9x versions and RSS 2.0.
          沒有正式的RSS標準。但在所有的RSS feeds中大約有50% 使用RSS 0.91規(guī)格. 25%使用RSS1.0規(guī)格并且至少有25%使用 RSS 0.9x 和 RSS 2.0之間的版本。


          RSS語法
          翻譯:Linyupark / 2006-04-24

          The syntax rules of RSS 2.0 are very simple and very strict.
          RSS2.0的語法規(guī)則非常簡單并十分的嚴格。

          This tutorial teaches how to create your own RSS feed and maintain it.
          這個教程會教你如何建立你自己的RSS feed并維護它。


          An Example RSS document
          一個RSS文檔的例子

          RSS documents use a self-describing and simple syntax.
          RSS文檔使用了簡單的自描述語法。

          <?xml version="1.0" encoding="ISO-8859-1" ?>

          <rss version="2.0">
          <channel>

          <title>W3Schools</title>
          <link>http://www.w3schools.com</link>
          <description>W3Schools Web Tutorials </description>
          <item>
          <title>RSS Tutorial</title>

          <link>http://www.w3schools.com/rss</link>
          <description>Check out the RSS tutorial
          on W3Schools.com</description>
          </item>
          </channel>
          </rss>

          The first line in the document - the XML declaration - defines the XML version and the character encoding used in the document. In this case the document conforms to the 1.0 specification of XML and uses the ISO-8859-1 (Latin-1/West European) character set.
          文檔內(nèi)的第一行為XML聲明-定義了XML的版本和文檔使用的字符編碼。這個例子里文檔使用的是XML1.0版本,編碼為 ISO-8859-1.

          The next line describes the RSS element of the document (like it was saying: "this is an RSS document - version 2.0"):
          下面的一行描述RSS文檔元素(這個就像在說:"這是一份RSS2.0版本的文檔")

          <rss version="2.0">

          The next line describes the <channel> element of the document:
          再下面的一行描述了文檔的<channel>元素:

          <channel>

          The next three lines describe three child elements of the <channel> element (<title>, <link> and <description>):
          接下來的三行描述了<channel>的三個子元素(<title>,<link>,<description>)

          <title>W3Schools</title>
          <link>http://www.w3schools.com</link>

          <description>W3Schools Web Tutorials</description>

          Then there is an <item> element. The <item> element contains the information you would like your RSS feed to show (<title>, <link> and <description>). You can add multiple <item> elements:
          然后就是<item>元素,<item>元素包含了RSS展示的一些信息(<title>, <link> 和 <description>)你可以添加數(shù)個<item>元素:

          <item>
          <title>RSS Tutorial</title>
          <link>http://www.w3schools.com/rss</link>
          <description>Check out the RSS tutorial
          on W3Schools.com</description>
          </item>

          Finally, the two last lines close the <channel> and <rss> elements:
          最后的兩行關(guān)閉<channel> 和 <rss> 元素:

          </channel>
          </rss>

          Did you understand that this was an RSS feed from W3Schools? Don't you agree that RSS is pretty self-descriptive?
          你明白這是個來自W3S的RSSfeed了不?難道你不認為這是個很好的RSS自我描述?


          RSS is an XML Dialect
          RSS 是一種XML的方言

          Because RSS is XML, there are a couple of things you must remember.
          因為RSS是XML,有一些事你必須了解

          • All XML elements must have a closing tag
            所有XML元素必須有關(guān)閉標簽
          • XML tags are case sensitive
            XML標簽區(qū)分大小寫
          • All XML elements must be properly nested
            所有XML元素必須合理嵌套
          • Attribute values must always be quoted
            屬性值必須在引號內(nèi)

          Comments in RSS
          RSS注釋

          The syntax for writing comments in RSS is similar to that of HTML:
          書寫RSS注釋的語法和HTML十分相似:

          <!-- This is a comment -->


          RSS channel元素
          翻譯:Linyupark / 2006-04-24

          The <channel> element is where you describe your RSS feed.
          <channel>元素內(nèi)是描述RSS feed的地方

          With RSS 2.0 there are a lot of different options for the channel element.
          對于channel元素來說RSS2.0有很多不同的選擇(指內(nèi)部可選擇的元素有很多種)


          The <channel> Element
          <channel>元素

          The RSS <channel> element is where items are displayed. It is like an RSS headline. Channel elements normally do not change very often.
          RSS的<channel>元素是項目內(nèi)容顯示的地方。它就像RSS的標題。一般來講它不會頻繁的改動。

          There are three required elements inside the <channel> element: <title>, <link>, and <description>.
          有三個內(nèi)部元素是必須有的:<title>, <link>, 和 <description>.

          The <title> element should contain a short description of your site and your RSS feed:
          <title>元素里應該包含你的站和你的RSS feed簡短的說明:

          <title>W3Schools News Update</title>

          The <link> element should define the link to your site's main page:
          <link>元素應該定義你網(wǎng)站主頁的鏈界:

          <link>http://www.w3schools.com</link>

          The final required element is <description>. This element should describe your RSS feed.
          最后必須有的元素就是 <description>,這個元素應該描述你的RSS feed.

          <description>W3Schools Web Tutorials</description>


          Optional Elements in <channel>
          <channel>內(nèi)的可選元素

          Element 元素 Description 描述
          <category> Defines one or more categories the channel belongs to
          定義一個或多個頻道分類
          <cloud> Allows notification of updates.
          允許更新通告
          <copyright> Notifies about copyrighted material
          提醒有關(guān)版權(quán)
          <docs> An URL to documentation on the RSS version the channel is using
          頻道所使用的RSS版本文檔URL
          <generator> If the channel is created using an automatic generator, this is defined here
          如果頻道是自動生成器產(chǎn)生的,就在這里定義
          <image> Inserts a picture to the channel.
          給頻道加圖片
          <language> Describes what language the channel uses. By using this tag it is possible for RSS aggregators to group sites based on language.
          描述了頻道所使用的語言。
          <lastBuildDate> Defines the last date the channel was modified
          定義頻道最新一次改動的時間
          <managingEditor> Defines an e-mail address for the editor of the site
          定義編輯站點人員的E-mail地址
          <pubDate> Defines the last publication date for the channel
          定義頻帶最新的發(fā)布時間
          <rating> Parental control rating of the page
          頁面評估
          <skipDays> Defines days where it is unnecessary for RSS aggregators to update the feed
          <skipHours> Defines hours where it is unnecessary for RSS aggregators to update the feed
          <textInput> Creates a text input for the channel
          <ttl> (ttl = time to live) Defines how many minutes the channel can stay cached before refreshing
          存活的有效時間
          <webMaster> Defines an e-mail address for the webmaster of the site
          定義站張的郵件地址

          RSS item 元素
          翻譯:Linyupark / 2006-04-24

          The <item> element is where you link to and describe the update on your site.
          <item>元素內(nèi)是你網(wǎng)站連接和描述更新內(nèi)容的地方。

          With RSS 2.0 there are a lot of different options for the item element.
          在RSS 2.0 item元素里有很多不同的可選內(nèi)容


          The <item> Element
          <item>元素

          The RSS <item> is where updates are displayed. It is kind of like a headline for an article. <item> elements are created every time there is an update on your site that you would like displayed in your RSS feed.
          <item>是顯示RSS更新內(nèi)容的地方。它像是文章的標題。當你的站點有更新時RSSfeed中的<item>元素就會被建立起來。

          There are several optional <item> elements, but either the <title> or the <description> are required.
          <item>元素里有幾個可選的元素,但<title> 或是<description>是必須有的。

          A RSS <item> should include the <title>, <link> and <description> elements.
          一個RSS的<item>應該包括 <title>, <link> 和 <description>元素

          The first element is your news item's title. This should be a very short description of your site and your RSS feed:
          第一個元素是項目的題目。應該用十分簡短的描述:

          <title>W3Schools New RSS Tutorial</title>

          The next element is the link to the part of your site the item is referring to:
          接下來的元素項目所關(guān)聯(lián)的連接:

          <link>http://www.w3schools.com/rss</link>

          The next line is the RSS feed description. This should describe your RSS feed item.
          再下面的一行就是RSS feed的描述部分,這應該是描述你的RSS feed項目的。

          <description>W3Schools RSS Tutorial</description>


          Optional Elements in <item>
          可選的<item>元素

          Tag Description
          <author> Defines the author of the item.
          定義作者
          <category> Places the item in one or more of the channel categories.
          類別
          <comments> An URL to a comment's page for the item.
          針對項目的評論頁URL
          <enclosure> Describes a media object related to the item
          描述一個與項目有關(guān)的媒體對象
          <guid> GUID = Globally Unique Identifier. Defines a unique identifier to the item.針對項目定義獨特的標志
          <pubDate> The publication date for the item.
          項目發(fā)布時間
          <source> Is used to define a third party source.
          轉(zhuǎn)載地址(源地址)

          RSS發(fā)布
          翻譯:Linyupark / 2006-04-24

          Having a RSS feed is no good unless other people can see it.
          光有RSS feed還是不夠的,應該讓別人能看到它


          Publish Your RSS Feed
          發(fā)布你的RSS feed

          Publishing and getting people to notice your RSS feed is as important as making one.
          發(fā)布并讓人們注意到的你RSS就和你制作它一樣重要

          First, put your rss.xml file on the internet. You can place it on the same server as your site.
          首先,將你的RSS.xml文件放到你的站點服務器上。

          Next, let people know you have a RSS feed. Register your feed with an aggregator.
          然后,讓人們知道你有一個RSSfeed.到相關(guān)的目錄站上注冊你的RSS(下面是一些國外知名的RSS發(fā)布站)

          • Syndic8: The largest RSS directory. Syndicate has over 300,000 feeds listed. Register your feed here.
          • Daypop: A large news oriented RSS aggregator. Over 50,000 news oriented feeds. Register your feed here.
          • Newsisfree: A news oriented RSS aggregator. Over 18,000 feeds. Register your feed here.

          Then, place this RSS Logo and this XML Logo with URL's to a page that explains briefly how other people can view your RSS feed.
          接著, 將這兩個含有連接到你RSS地址的圖片放到你站點的頁面上,人們就可以看到你的RSS feed了


          Can I Manage my RSS Feed Myself?
          我可以自行管理RSS feed嗎?

          The best way to be sure your RSS feed includes the things you want, and works the way you want, is to manage it yourself. But this can be very time consuming, especially for pages with a lot of updates.
          如你想讓RSS里包括一些你想要的東西或是想按你的想法來做,最好的辦法就是你自己來管理它,但是這將是非常煩瑣的,因為很多頁有不同的東西要更新。

          Your other alternative is to use a third party automated RSS.
          還有種選擇就是使用第三方的RSS自動生成器


          Automated RSS
          RSS自動生成

          If you don't want to update your RSS feed yourself, there are tools and services you can use to automate it.
          如果你不想自己來更新RSS,這有些工具可以為你服務。
          ===== 以下是幾個工具的官方地址=====

          One such service is MyRSSCreator (featured in "RSS for dummies"), who can offer an automated, reliable RSS service in just 10 minutes.

          There are also free services such as FeedFire, who offers free creation and distribution of RSS feeds.

          For users who just need an easy RSS feed for their personal website, some of the most popular blog (Web Log) managers (like Blogger and Radio) offers built in automated RSS services.


          Validate
          校驗

          You can validate your RSS feed here[校驗地址]. This validator supports all RSS versions.


           

          RSS閱讀器
          翻譯:Linyupark / 2006-04-24

          A RSS reader gathers your news for you.
          一個RSS閱讀器可以為你收集新聞

          RSS readers are available for many different devices and OS.
          RSS閱讀器可以在很多不同的設(shè)備和操作系統(tǒng)上運作


          RSS Readers
          [下面是國外的幾款閱讀器]

          There are a lot of different RSS readers. Some work as web services, and some are limited to windows (or Mac, PDA or UNIX). Here are a few I have tried and liked:

          • NewsGator Online - An free online based RSS aggregator. NewsGator Online also includes synchronization with Outlook Edition, viewing content on TV with Media Center Edition, as well as the publication of blogs and headlines.
             
          • RssReader - A free Windows based RSS aggregator. RssReader supports RSS versions 0.9x, 1.0 and 2.0 as well as Atom 0.1, 0.2 and 0.3.
             
          • FeedDemon - A great Windows based RSS aggregator. This is very easy to use and has a very orderly interface. But this is not freeware.
             
          • blogbot - A RSS aggregator plugin for your Outlook or Internet Explorer. The lite version for Internet Explorer is free.

          There are a lot of other RSS readers out there. http://www.ourpla.net/cgi-bin/pikie.cgi?RssReaders has a big list of RSS readers, you can even add your own readers to this page or comment on the existing ones.



          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=704849

          posted @ 2007-07-14 00:37 和田雨 閱讀(574) | 評論 (0)編輯 收藏

          使用遠程桌面鏈接登錄到終端服務器時經(jīng)常會遇到“終端服務器超出最大允許鏈接數(shù)”諸如此類錯誤導致無法正常登錄終端服務器,引起該問題的原因在于終端服務的缺省鏈接數(shù)為2個鏈接,并且當?shù)卿涍h程桌面后如果不是采用注銷方式退出,而是直接關(guān)閉遠程桌面窗口,那么實際上會話并沒有釋放掉,而是繼續(xù)保留在服務器端,這樣就會占用總的鏈接數(shù),當這個數(shù)量達到最大允許值時就會出現(xiàn)上面的提示。
            解決方式:
            一、用注銷來退出遠程桌面而不是直接關(guān)閉窗口
            二、限制已斷開鏈接的會話存在時間
            三、增加最多鏈接數(shù),即設(shè)置可連接的數(shù)量多些

          第三可采用如下幾種方式來修改:

          1.從終端服務配置中修改:
          打開管理工具里的終端服務配置,再單擊連接,雙擊右邊的RDP-Tcp,彈出RDP-Tcp屬性,選擇網(wǎng)卡,可設(shè)置最多連接數(shù),或者設(shè)置為無限制的連接數(shù)。當然這個值不也能太大,否則會占用較多的系統(tǒng)資源。不過這里修改的值好像不起作用,設(shè)置成無限制時照樣還是會出現(xiàn)本文所說的情況。

          修改會話存在時間:運行-Tscc.msc-連接-雙擊RDP-Tcp或右擊-屬性-會話-選中第一個的替代用戶設(shè)置(O)-結(jié)束已斷開的會話[將默認值“從不”改為一個適當?shù)臅r間,比如30分鐘]
            
          2.打開“控制面板”,雙擊“添加刪除程序”,單擊“添加刪除Windows組件”*“組件”
          ,在Windows組件向?qū)υ捒蛑羞x中“終端服務” * “下一步” * “應用服務器” * “下
          一步”,然后按照提示即可改變終端服務的模式。 
          不過聽說用此法,改了應用需要許可證,90天后過期:(

          3.win2003的話可以從組策略修改:
            組策略級別要高于終端服務配置,當啟用組策略后終端服務配置中的相應選項會變成灰色不可修改
            運行-gpedit.msc-計算機配置-管理模板-Windows組件-終端服務
            雙擊右邊的”限制連接數(shù)量“-選擇”已啟用“-填入允許的最大連接數(shù)

          posted @ 2007-07-12 15:16 和田雨 閱讀(338) | 評論 (0)編輯 收藏

          J2EE可以說指Java在數(shù)據(jù)庫信息系統(tǒng)上實現(xiàn),數(shù)據(jù)庫信息系統(tǒng)從早期的dBase、到Delphi/VBC/S結(jié)構(gòu),發(fā)展到B/SBrowser瀏覽器/Server服務器)結(jié)構(gòu),而J2EE主要是指B/S結(jié)構(gòu)的實現(xiàn)。

          J2EE又是一種框架和標準,框架類似API、庫的概念,但是要超出它們。

          J2EE是一個虛的大的概念,J2EE標準主要有三種子技術(shù)標準:WEB技術(shù)、EJB技術(shù)和JMS,談到J2EE應該說最終要落實到這三個子概念上。

          這三種技術(shù)的每個技術(shù)在應用時都涉及兩個部分:容器部分和應用部分,Web容器也是指Jsp/Servlet容器,你如果要開發(fā)一個Web應用,無論是編譯或運行,都必須要有Jsp/Servlet庫或API支持(除了JDK/J2SE以外)。

          Web技術(shù)中除了Jsp/Servlet技術(shù)外,還需要JavaBeansJava Class實現(xiàn)一些功能或者包裝攜帶數(shù)據(jù),所以Web技術(shù)最初簡稱為Jsp/Servlet+JavaBeans系統(tǒng)。

          談到JavaBeans技術(shù),就涉及到組件構(gòu)件技術(shù)(component),這是Java的核心基礎(chǔ)部分,很多軟件設(shè)計概念(設(shè)計模式)都是通過JavaBeans實現(xiàn)的。

          JavaBeans不屬于J2EE概念范疇中,如果一個JavaBeans對象被Web技術(shù)(也就是Jsp/Servlet)調(diào)用,那么JavaBeans就運行在J2EEWeb容器中;如果它被EJB調(diào)用,它就運行在EJB容器中。

          EJB(企業(yè)JavaBeans)是普通JavaBeans的一種提升和規(guī)范,因為企業(yè)信息系統(tǒng)開發(fā)中需要一個可伸縮的性能和事務、安全機制,這樣能保證企業(yè)系統(tǒng)平滑發(fā)展,而不是發(fā)展到一種規(guī)模重新更換一套軟件系統(tǒng)。

          J2EE集群原理: http://www.jdon.com/jive/article.jsp?forum=121&thread=22282

          至此,JavaBeans組件發(fā)展到EJB后,并不是說以前的那種JavaBeans形式就消失了,這就自然形成了兩種JavaBeans技術(shù):EJBPOJOPOJO完全不同于EJB概念,指的是普通JavaBeans,而且這個JavaBeans不依附某種框架,或者干脆可以說:這個JavaBeans是你為這個應用程序單獨開發(fā)創(chuàng)建的。

          J2EE應用系統(tǒng)開發(fā)工具有很多:如JBuilderEclipse等,這些IDE首先是Java開發(fā)工具,也就是說,它們首要基本功能是可以開發(fā)出JavaBeansJava class,但是如果要開發(fā)出J2EE系統(tǒng),就要落實到要么是Web技術(shù)或EJB技術(shù),那么就有可能要一些專門模塊功能,最重要的是,因為J2EE系統(tǒng)區(qū)分為容器和應用兩個部分,所以,在任何開發(fā)工具中開發(fā)J2EE都需要指定J2EE容器。

          J2EE容器分為WEB容器和EJB容器,Tomcat/ResinWeb容器;JBossEJB容器+Web容器等,其中Web容器直接使用Tomcat實現(xiàn)的。所以你開發(fā)的Web應用程序可以在上面兩種容器運行,而你開發(fā)的Web+EJB應用則只可以在JBoss服務器上運行,商業(yè)產(chǎn)品Websphere/Weblogic等和JBoss屬于同一種性質(zhì)。

          J2EE容器也稱為J2EE服務器,大部分時它們概念是一致的。

          如果你的J2EE應用系統(tǒng)的數(shù)據(jù)庫連接是通過JNDI獲得,也就是說是從容器中獲得,那么你的J2EE應用系統(tǒng)基本與數(shù)據(jù)庫無關(guān),如果你在你的J2EE應用系統(tǒng)耦合了數(shù)據(jù)庫JDBC驅(qū)動的配置,那么你的J2EE應用系統(tǒng)就有數(shù)據(jù)庫概念色彩,作為一個成熟需要推廣的J2EE應用系統(tǒng),不推薦和具體數(shù)據(jù)庫耦合,當然這其中如何保證J2EE應用系統(tǒng)運行性能又是體現(xiàn)你的設(shè)計水平了。

          高質(zhì)量的Java企業(yè)系統(tǒng)

          衡量J2EE應用系統(tǒng)設(shè)計開發(fā)水平高低的標準就是:解耦性;你的應用系統(tǒng)各個功能是否能夠徹底脫離?是否不相互依賴,也只有這樣,才能體現(xiàn)可維護性、可拓展性的軟件設(shè)計目標。

          為了達到這個目的,誕生各種框架概念,J2EE框架標準將一個系統(tǒng)劃分為WEBEJB主要部分,當然我們有時不是以這個具體技術(shù)區(qū)分,而是從設(shè)計上抽象為表現(xiàn)層、服務層和持久層,這三個層次從一個高度將J2EE分離開來,實現(xiàn)解耦目的。

          因此,我們實際編程中,也要將自己的功能向這三個層次上靠,做到大方向清楚,涇渭分明,但是沒有技術(shù)上約束限制要做到這點是很不容易的,因此我們還是必須借助J2EE具體技術(shù)來實現(xiàn),這時,你可以使用EJB規(guī)范實現(xiàn)服務層和持久層,Web技術(shù)實現(xiàn)表現(xiàn)層;

          EJB為什么能將服務層從Jsp/Servlet手中分離出來,因為它對JavaBeans編碼有強制的約束,現(xiàn)在有一種對JavaBeans弱約束,使用Ioc模式實現(xiàn)的(當然EJB 3.0也采取這種方式),在Ioc模式誕生前,一般都是通過工廠模式來對JavaBeans約束,形成一個服務層,這也是是Jive這樣開源論壇設(shè)計原理之一。

          由此,將服務層從表現(xiàn)層中分離出來目前有兩種可選架構(gòu)選擇:管理普通JavaBeansPOJO)框架(Spring、JdonFramework)以及管理EJBEJB框架,因為EJB不只是框架,還是標準,而標準可以擴展發(fā)展,所以,這兩種區(qū)別將來是可能模糊,被納入同一個標準了。

          但是,通常標準制定是為某個目的服務的,總要犧牲一些換取另外一些,所以,這兩種架構(gòu)會長時間并存。

          前面談了服務層框架,使用服務層框架可以將JavaBeansJsp/Servlet中分離出來,而使用表現(xiàn)層框架則可以將Jsp中剩余的JavaBeans完全分離,這部分JavaBeans主要負責顯示相關(guān),一般是通過標簽庫(taglib)實現(xiàn),不同框架有不同自己的標簽庫,Struts是應用比較廣泛的一種表現(xiàn)層框架。

          這樣,表現(xiàn)層和服務層的分離是通過兩種框架達到目的,剩余的就是持久層框架了,通過持久層的框架將數(shù)據(jù)庫存儲從服務層中分離出來是其目的,持久層框架有兩種方向:直接自己編寫JDBCSQL語句(如iBatis);使用O/R Mapping技術(shù)實現(xiàn)的HibernateJDO技術(shù);當然還有EJB中的實體Bean技術(shù)。

          持久層框架目前呈現(xiàn)百花齊放,各有優(yōu)缺點的現(xiàn)狀,所以正如表現(xiàn)層框架一樣,目前沒有一個框架被指定為標準框架,當然,表現(xiàn)層框架現(xiàn)在又出來了一個JSF,它代表的頁面組件概念是一個新的發(fā)展方向,但是復雜的實現(xiàn)讓人有些忘而卻步。

          最后,你的J2EE應用系統(tǒng)如果采取上面提到的表現(xiàn)層、服務層和持久層的框架實現(xiàn),基本可以在無需深刻掌握設(shè)計模式的情況下開發(fā)出一個高質(zhì)量的應用系統(tǒng)了。

          還要注意的是: 開發(fā)出一個高質(zhì)量的J2EE系統(tǒng)還需要正確的業(yè)務需求理解,那么域建模提供了一種比較切實可行的正確理解業(yè)務需求的方法,相關(guān)詳細知識可從UML角度結(jié)合理解。

          當然,如果你想設(shè)計自己的行業(yè)框架,那么第一步從設(shè)計模式開始吧,因為設(shè)計模式提供你一個實現(xiàn)JavaBeans或類之間解耦參考實現(xiàn)方法,當你學會了系統(tǒng)基本單元JavaBeans或類之間解耦時,那么系統(tǒng)模塊之間的解耦你就可能掌握,進而你就可以實現(xiàn)行業(yè)框架的提煉了,這又是另外一個發(fā)展方向了。

          以上理念可以總結(jié)為一句話:

          J2EE開發(fā)三件寶: Domain Model(域建模)、patterns(模式)和framework(框架)。

          posted @ 2007-07-12 13:28 和田雨 閱讀(427) | 評論 (2)編輯 收藏

          By Benny.luo@Sun.com, 6/19/07  
          SUN中國軟件技術(shù)中心 羅浩/Benny Luo
           簡介:
          JDK 5.0, 代號老虎,在以往的Java傳統(tǒng)上加入了許多新的設(shè)計,給Java語言帶來了一些較大的變化,比如泛型,元數(shù)據(jù),可變個數(shù)參數(shù),靜態(tài)導入類,新線程架構(gòu),自動裝箱/拆箱等等新的以往沒有的新特性。同時,在調(diào)試程序和解決性能各種問題方面,JDK5.0同樣加入了多個分析工具來讓開發(fā)者更加方便地調(diào)試他們自己的程序,它們包括了命令行調(diào)試工具,圖形界面調(diào)試工具等等.
           
          JDK5.0包括的調(diào)試工具:
          我們在這里對JDK5.0的調(diào)試工具做大致的概念性的介紹,然后希望通過介紹我自己在實際工作中使用這些工具解決問題的實例來讓大家對這些工具有更深入的了解。
           
          JDK5.0里面加入了jstack, jconsole, jinfo, jmap, jdb, jstat, jps, 下面對這些工具做簡單介紹:
          • jstack -- 如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發(fā)生問題。另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 如果現(xiàn)在運行的java程序呈現(xiàn)hung的狀態(tài),jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
          • jconsole – jconsole是基于Java Management Extensions (JMX)的實時圖形化監(jiān)測工具,這個工具利用了內(nèi)建到JVM里面的JMX指令來提供實時的性能和資源的監(jiān)控,包括了Java程序的內(nèi)存使用,Heap size, 線程的狀態(tài),類的分配狀態(tài)和空間使用等等。
          • jinfo – jinfo可以從core文件里面知道崩潰的Java應用程序的配置信息,目前只有在Solaris和Linux的JDK版本里面才有。
          • jmap – jmap 可以從core文件或進程中獲得內(nèi)存的具體匹配情況,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。< /li>
          • jdb – jdb 用來對core文件和正在運行的Java進程進行實時地調(diào)試,里面包含了豐富的命令幫助您進行調(diào)試,它的功能和Sun studio里面所帶的dbx非常相似,但 jdb是專門用來針對Java應用程序的。
          • jstat – jstat利用了JVM內(nèi)建的指令對Java應用程序的資源和性能進行實時的命令行的監(jiān)控,包括了對Heap size和垃圾回收狀況的監(jiān)控等等。
          • jps – jps是用來查看JVM里面所有進程的具體狀態(tài), 包括進程ID,進程啟動的路徑等等。

          另外,還有些其他附帶的工具在這里沒有列出,比如Heap Analysis Tool, kill -3 方法等等,這些在JDK5.0之前就有,同樣也是非常有用的性能調(diào)優(yōu)工具,大家可以參照相應的文檔資料來學習,在文章后面也會推薦一些相應的文檔給大家作為參考。

           好,說了這么多,讓我們來看看JDK5.0自帶的這些工具在現(xiàn)實工作能給我們帶來什么幫助,下面是我和ISV一起共同工作的實際例子,在這里把它們簡單闡述出來,希望對大家有所幫助。

          jconsole和jstack使用實例:

          在做過的項目中,曾經(jīng)有幾個是使用jstack和jconsole來解決問題的。在下面的例子中,由于部分代碼涉及到公司名字,我使用了xxx來代替。

          1. 其中的一個是Web2.0的客戶,由于目前Sun Microsystem公司推出的Niagara服務器系列非常適合網(wǎng)絡(luò)方面的多線程應用,并且已經(jīng)在業(yè)界非常出名,所以他們決定使用T2000服務器來測試一下如果應用到他們自己的應用是否能夠獲得出眾的性能。
          整個應用的架構(gòu)如下:
          Apache 2.0.59 + Resin EE 2.1.17 + Jdk 1.5.0.07 + Oracle 9
          運行的操作系統(tǒng):
          Solaris 10 Update 3 (11/06), EIS patches包.
          測試工具:
          Apache benchmark tool.
          在客戶的測試環(huán)境中,我們分別做了Apache, Resin, Solaris的相應調(diào)整,其中包括了Apache使用Prefork模式,并且調(diào)整了httpd.conf文件里面相應的ServerLimit, ListenBacklog,Maxclient等等值,Resin服務器調(diào)整Jvm heap size, 并行回收new generation和old generation, 最大線程數(shù),oracle連接數(shù)等等參數(shù),Solaris操作系統(tǒng)做了網(wǎng)絡(luò)和系統(tǒng)的相應調(diào)整,最終把整套系統(tǒng)搬進了生產(chǎn)環(huán)境,一切順利進行,但當進入其中的一個論壇系統(tǒng)時卻發(fā)現(xiàn)系統(tǒng)響應時間非常緩慢,用Apache Benchmark Tool加少量壓力得到結(jié)果如下,由于是在生產(chǎn)環(huán)境下所以不敢使用大的壓力:

          This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
          Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
          Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/
          Benchmarking free.xxx.com (be patient).....done
          Server Software: Resin/2.1.17
          Server Hostname: free.xxx.com
          Server Port: 8080
          Document Path: /forum/bbsMessageList.act?bbsThreadId=1580107
          Document Length: 27012 bytes
          Concurrency Level: 10
          Time taken for tests: 92.148883 seconds
          Complete requests: 100
          Failed requests: 0
          Write errors: 0
          Keep-Alive requests: 0
          Total transferred: 2722500 bytes
          HTML transferred: 2701200 bytes
          Requests per second: 1.09 [#/sec] (mean)
          Time per request: 9214.888 [ms] (mean)
          Time per request: 921.489 [ms] (mean, across all concurrent requests)
          Transfer rate: 28.84 [Kbytes/sec] received
          Connection Times (ms)
          min mean[+/-sd] median max
          Connect: 0 0 0.0 0 0
          Processing: 9089 9187 139.4 9140 9789
          Waiting: 3067 3163 138.3 3117 3766
          Total: 9089 9187 139.4 9140 9789
          Percentage of the requests served within a certain time (ms)
          50% 9140
          66% 9178
          75% 9189
          80% 9201
          90% 9281
          95% 9560
          98% 9739
          99% 9789
          100% 9789 (longest request)

          每一個請求的響應時間大概去到8-9秒時間,這個是客戶所不能接受的。
           
          這時我們決定采用JDK5.0自帶的jstack來進行trouble-shoot,首先重新做加壓測試,并行請求為10個,總共100個請求,這時對Resin服務器所起的Java進程間隔10秒用jstack做一次采集工作。為什么要間隔10秒?主要是想看看在這三十秒內(nèi)Java進程是否都阻塞在同一個地方。結(jié)果如下:
           
          大部分的線程都阻塞在同一個java stack上面:

          Thread t@38: (state = BLOCKED)
          - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
          - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
          - com._xxx.vportal.common.rpc.session.RemoteServiceGroupFactory.getMaxBalanceFactoryEntry() @bci=165,
          line=180 (Interpreted frame)
          - com._xxx.vportal.common.rpc.session.RemoteServiceGroupFactory.getService() @bci=80, line=195 (Interpreted
          frame)
          - com._xxx.vportal.common.rpc.session.RemoteServiceFactory.getSynSender() @bci=1, line=331 (Interpreted
          frame)
          - com._xxx.vportal.common.rpc.session.RemoteServiceSupport.synRequestHardTask(java.lang.String,
          java.lang.Object) @bci=6, line=35 (Interpreted frame)
          - com._xxx.vportal.amus.user.client.UserClientRpcImpl.getIconSigner(int, int) @bci=36, line=90 (Interpreted frame)
          - net._xxx.forum.model.user.UserInfo.getLogoPath() @bci=109, line=546 (Interpreted frame)
          - sun.reflect.GeneratedMethodAccessor13.invoke(java.lang.Object, java.lang.Object[]) @bci=36 (Interpreted frame)
          - sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) @bci=6, line=25
          (Compiled frame)
          - org.apache.velocity.runtime.parser.node.ASTReference.execute(java.lang.Object,
          org.apache.velocity.context.InternalContextAdapter) @bci=40, line=207 (Compiled frame)
          - org.apache.velocity.runtime.parser.node.ASTBlock.render(org.apache.velocity.context.InternalContextAdapter,
          java.io.Writer) @bci=18, line=94 (Compiled frame)
          - org.apache.velocity.runtime.parser.node.SimpleNode.render(org.apache.velocity.context.InternalContextAdapter,
          java.io.Writer) @bci=18, line=271 (Interpreted frame)
          -
          org.apache.velocity.runtime.parser.node.ASTIfStatement.render(org.apache.velocity.context.InternalContextAdapter,
          java.io.Writer) @bci=63, line=128 (Interpreted frame)
          - org.apache.velocity.runtime.parser.node.ASTBlock.render(org.apache.velocity.context.InternalContextAdapter,
          java.io.Writer) @bci=18, line=94 (Compiled frame)
          - org.apache.velocity.runtime.directive.Foreach.render(org.apache.velocity.context.InternalContextAdapter,
          java.io.Writer, org.apache.velocity.runtime.parser.node.Node) @bci=95, line=344 (Interpreted frame)
          - org.apache.velocity.runtime.parser.node.ASTDirective.render(org.apache.velocity.context.InternalContextAdapter,
          java.io.Writer) @bci=14, line=153 (Interpreted frame)
          - org.apache.velocity.runtime.parser.node.SimpleNode.render(org.apache.velocity.context.InternalContextAdapter,
          java.io.Writer) @bci=18, line=271 (Interpreted frame)
          - org.apache.velocity.app.Velocity.evaluate(org.apache.velocity.context.Context, java.io.Writer, java.lang.String,
          java.io.Reader) @bci=102, line=359 (Interpreted frame)
          - org.apache.velocity.app.Velocity.evaluate(org.apache.velocity.context.Context, java.io.Writer,
          java.lang.String, java.lang.String) @bci=18, line=253 (Interpreted frame)
          - net._xxx.forum.util.velocity.VelocityUtil.getVelocityEvaluate(java.util.Map, java.io.Writer,
          java.lang.String) @bci=14, line=35 (Interpreted frame)
          - net._xxx.forum.action.forum.BbsMessageListAction.go() @bci=1284, line=268 (Interpreted
          frame)

          net._xxx.forum.action.AbstractAction.execute() @bci=1, line=39 (

          ..............

           和應用的開發(fā)人員交流后,發(fā)現(xiàn)這些有問題的程序,都是和論壇系統(tǒng)中Socket調(diào)用有關(guān),當用戶打開一個頁面是,頁面中的用戶信息需要同過Socket的方式調(diào)用相冊那邊的數(shù)據(jù),這個操作存在bug,經(jīng)過用戶的重新同步更新程序,問題解決。
           
          解決后的實測的數(shù)據(jù)如下, 效果非常理想:
          This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
          Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
          Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/
          Benchmarking free.xxx.com (be patient)
          Completed 5000 requests
          Completed 10000 requests
          Completed 15000 requests
          Completed 20000 requests
          Completed 25000 requests
          Completed 30000 requests
          Completed 35000 requests
          Completed 40000 requests
          Completed 45000 requests
          Finished 50000 requests
          Server Software: Apache/2.0.59
          Server Hostname: free.xxx.com
          Server Port: 80
          Document Path: /forum/bbsMessageList.act?bbsThreadId=1581280
          Document Length: 27508 bytes
          Concurrency Level: 30
          Time taken for tests: 252.583749 seconds
          Complete requests: 50000
          Failed requests: 0
          Write errors: 0
          Total transferred: 1384158363 bytes
          HTML transferred: 1375408188 bytes
          Requests per second: 197.95 [#/sec] (mean)
          Time per request: 151.550 [ms] (mean)
          Time per request: 5.052 [ms] (mean, across all concurrent requests)
          Transfer rate: 5351.56 [Kbytes/sec] received
          Connection Times (ms)
          min mean[+/-sd] median max
          Connect: 0 0 0.4 0 11
          Processing: 45 150 154.1 117 4349
          Waiting: 41 145 153.7 112 4346
          Total: 45 150 154.1 117 4349
          Percentage of the requests served within a certain time (ms)
          50% 117
          66% 142
          75% 163
          80% 180
          90% 241
          95% 321
          98% 478
          99% 764
          100% 4349 (longest re
          2. 另外的一個是最近做的,我們有個教育行業(yè)方面的ISV上來實驗室做T2000的Benchmark實驗,我們花了一天的時間部署整個架構(gòu),包括安裝Solaris操作系統(tǒng),應用服務器,數(shù)據(jù)庫。& amp; amp; lt; /div>
          整個應用的架構(gòu)如下:
          Tomcat + Jdk 1.5 + Oracle 10g
          運行的操作系統(tǒng):
          Solaris 10 Update 3 (11/06), EIS patches包.
          測試工具:
          LoadRunner 8.1
          在實驗的初段,Tomcat, Oracle 10g服務器都是架設(shè)在T2000上,我們在對T2000服務器的OS,網(wǎng)絡(luò),應用服務器做了必要的調(diào)整后,發(fā)現(xiàn)其表現(xiàn)還是不盡如人意。& #160;
           
          我們使用Loadrunner做測試,用戶上到了100個同時并發(fā)10個迭代時已經(jīng)出現(xiàn)問題,有許多的請求都被阻塞住,不能正常地進行。
           
          這時我們決定使用jconsole和jstack來看看系統(tǒng)出現(xiàn)了什么問題。
          A. 首先我們需要在Tomcat的啟動腳本catalina.sh里面加入JVM選項:
               Dcom.sun.management.jmxremote
               把tomcat服務器java進程置于JDK5.0的性能監(jiān)控范圍之內(nèi)。
           
          B. 然后我們用jconsole連接到tomcat服務器的java進程,發(fā)現(xiàn)基本上Heap size, 垃圾回收都比較正常,但發(fā)現(xiàn)tomcat服務器的大部分線程有問題,都處于被Block的狀態(tài)。
               觀察每條線程的stack trace, 發(fā)現(xiàn)它們基本上都被堵塞在uk.org.primrose.pool.core.Pool.put和uk.org.primrose.pool.core.Pool.get()的SyncHack同步機制上,我們嘗試了改大數(shù)據(jù)連接池的大小,發(fā)現(xiàn)結(jié)果是一樣的。
          jdk5_1
          C.這個結(jié)論在jstack的結(jié)果中同樣得到了驗證,使用jstack連接到tomcat服務器java進程,并觀察結(jié)果。
          jdk5_2

          D. 最后我們決定用tomcat服務器的連接池配置來代替Primrose數(shù)據(jù)庫連接池,更改以后,發(fā)現(xiàn)結(jié)果比較理想。

          E. 后來,我們把Oracle數(shù)據(jù)庫建立在另外的一臺服務器X4200上,而Tomcat應用服務器依然放在T2000上,使用千兆網(wǎng)絡(luò)交換機,同樣地,使用Tomcat服務器自己的連接池配置表現(xiàn)較為理想。
          以上兩個是我對JDK5.0工具的一些實際操作的例子,在這里和大家分享一下,希望對大家有所幫助。而Sun Microsystem公司也在不斷地完善JDK,在新的JDK版本里面加入越來越多的實用的方便開發(fā)者開發(fā)和調(diào)試的新特性,比如在最新的JDK6.0里面就內(nèi)嵌了Dtrace里面許多關(guān)于Java程序中內(nèi)存,方法,線程等等新的探針,通過這些探針和Dtrace,我們可以更加方便地調(diào)試Java程序。
          文檔資料:
          posted @ 2007-07-10 00:04 和田雨 閱讀(465) | 評論 (0)編輯 收藏

          Eclipse(Eclipse 3.2)的最新版本帶有Callisto,一套豐富的針對Eclipse 3.2的可選插件。Callisto包括一個功能強大的分析工具,此工具稱為Eclipse測試與性能工具平臺,簡稱TPTP。TPTP提供了一套功能全面的開源性能-測試和分析工具,包括集成的應用程序監(jiān)控、測試、跟蹤和分析功能,以及靜態(tài)代碼分析工具。對于在各類Java應用程序中找出和識別性能問題,分析工具的價值是不可估計的。在本文中,我們將探討如何使用TPTP來保證獲得高質(zhì)量和高性能的代碼(甚至是在單元和集成測試中)。

          安裝TPTP

            安裝TPTP最容易的方式是使用Remote Update站點(參見圖1)。打開Remote Update窗口(Help -> Software Updates -> Find and Install),然后選擇Callisto Discovery Site。Eclipse將建議安裝Callisto插件集。TPTP工具列在“Testing and Performance”下面。最容易也是最耗時的選擇,就是安裝所有建議的插件。即使不安裝整個Callisto工具集,您仍然需要安裝一些其他TPTP需要的組件,例如"Charting and Reporting"、"Enabling Features"和"Data Tool Performance"。

          使用Eclipse Callisto分析應用程序圖-1

             圖 1.從遠程站點安裝TPTP

          分析Java應用程序

            測試與性能工具平臺基本上是一套分析工具。分析應用程序通常涉及到觀察應用程序在壓力之下的處理方式。這樣做的一種常見方式是對已部署的應用程序運行一組負載測試,然后使用分析工具來記錄應用程序的行為。接著,可以對結(jié)果進行研究來調(diào)查任何性能問題。這些事情通常是在項目結(jié)束時進行的,因為此時應用程序幾乎已經(jīng)準備好進入生產(chǎn)階段了。

            TPTP非常適合這類任務。一個典型的用例是使用像JMeter這樣的工具來運行負載測試,然后使用TPTP歸納工具記錄和分析性能統(tǒng)計數(shù)據(jù)。

            然而,這并非使用TPTP分析應用程序的唯一方式。通常,越早進行測試,后面遇到的問題就越少。借助TPTP,您可以在很多上下文中分析代碼,包括JUnit測試用例、Java 應用程序和web應用程序。而且它很好地集成到了Eclipse IDE中。所以,沒有理由不在早期開始初步性能測試和分析工作。

            TPTP讓您可以測試應用程序行為的幾個方面,包括內(nèi)存使用(創(chuàng)建了多少對象,這些對象的大小如何)、執(zhí)行統(tǒng)計數(shù)據(jù)(應用程序在哪些地方所花的時間較多)和測試覆蓋(測試期間執(zhí)行代碼的確切數(shù)量)。每個方面均可提供有關(guān)應用程序性能的獨立信息。

            不管怎么說,內(nèi)存泄漏可能而且的確存在于Java中。創(chuàng)建(并保存)不必要的對象會增加對內(nèi)存的需求,并加重垃圾收集器的工作負擔,這都會損害應用程序的性能。而且,如果運行應用程序的服務器的持續(xù)正常運行時間很長,累積下來的內(nèi)存泄漏可能最終導致應用程序崩潰或服務器停止運行。這些都是留心應用程序內(nèi)存泄漏情況的充分理由。

            根據(jù)80-20經(jīng)驗法則,80%的性能問題出現(xiàn)在20%的代碼中?;蛘撸瑩Q句話說,只要把精力集中在應用程序中執(zhí)行最經(jīng)常的部分上,就可以花費相對較少的氣力使性能有實質(zhì)性的提高。在這種情況下,執(zhí)行統(tǒng)計數(shù)據(jù)就可以派上用場了。

            除此以外,TPTP還提供一些基本的測試覆蓋數(shù)據(jù)。盡管這些統(tǒng)計數(shù)據(jù)不如Cobertura或Clover這樣的專用工具提供的完整,您仍然可以通過它們快速了解性能測試正在有效地測試哪些方法。

            在本文中,我討論的測試種類同樣是沒有經(jīng)過優(yōu)化的。優(yōu)化涉及到使用像緩沖這樣的技術(shù)對應用程序性能進行微調(diào)。這是一項對技術(shù)要求很高的操作,最好留到項目的最后完成。

            這里所討論的這種初步性能測試和分析僅僅包括,確保應用程序從一開始就正確執(zhí)行,以及沒有編碼錯誤或糟糕的編碼實踐會在后面的階段中對性能產(chǎn)生不利的影響。事實上,修復內(nèi)存泄漏和避免不必要的對象創(chuàng)建并不是優(yōu)化——這只不過是調(diào)試,而且同樣應該盡可能早地完成。

            讓我們通過使用一些單元測試來分析一個類的方式開始??梢苑治龀R?guī)的單元或集成測試,或者編寫針對性更強的面向性能的測試。通常,您應該嘗試分析與生產(chǎn)代碼最接近的代碼。許多人使用模擬對象來代替DAO對象進行單元測試,使用這項功能強大的技術(shù)可以加速開發(fā)生命周期。如果使用這類方法,一定要使用這些測試來運行分析工具,它可以揭示有關(guān)內(nèi)存使用和測試覆蓋的有用信息。然而,性能測試的價值是有限的,因為對于與數(shù)據(jù)庫相關(guān)的應用程序來說,其性能往往是由數(shù)據(jù)庫的性能所決定的,所以在這個上下文中,應該進行所有重要的性能測試。簡而言之,不要忘了分析基于實際數(shù)據(jù)庫而運行的集成測試。

            出于本文的需要,我們將對以下類進行測試,這個類代表了一個到庫目錄的簡單接口。

          interface Catalog {
          List<Book> findBooksByAuthor(String name);
          List<Book> findAllBooks();
          }
          

            基本的單元測試如下:

          public class CatalogTest extends TestCase {
          ...
          public Catalog getCatalog() {
          ...
          }
          public void testFindBooksByAuthor() {
          List<Book> books = getCatalog().findBooksByAuthor("Lewis");
          }
          public void testLoadFindBooksByAuthor() {
          for(int i = 0; i < 10; i++) {
          List<Book> books
          = getCatalog().findBooksByAuthor("Lewis");
          }
          }
          public void testFindAll() {
          List<Book> books = getCatalog().findAllBooks();
          }
          }
          

            您需要做的第一件事情就是建立一個分析。在Eclipse主菜單中選擇"Run -> Profile",這將打開一個向?qū)В梢栽谄渲信渲貌煌N類的測試分析,如圖2所示。

          使用Eclipse Callisto分析應用程序圖-2

            圖 2. 創(chuàng)建一個TPTP分析

            在這個例子中,我們感興趣的是JUnit測試分析。雙擊這一項;向?qū)摓槊總€單元測試類創(chuàng)建新的項。TPTP相當靈活,您可以在此屏幕中配置各個選項。例如,在Test選項卡上,可以單獨分析單元測試類,也可以按照項目或軟件包對它們進行分組。在Arguments選項卡上,可以指定運行時參數(shù),而在Environment選項卡上可以定義環(huán)境變量。在Destination選項卡中,可以指定一個外部文件,用于保存分析數(shù)據(jù)以供以后使用。但是,最有用的是Monitor選項卡(參見圖3),可以在上面指定要記錄和研究的性能相關(guān)數(shù)據(jù):

          • Basic Memory Analysis(基本內(nèi)存分析):這個選項用于記錄內(nèi)存使用的統(tǒng)計數(shù)據(jù),包括對象實例的數(shù)量和已經(jīng)使用的全部內(nèi)存。
          • Execution Time Analysis(執(zhí)行時間分析):這個選項用于記錄性能數(shù)據(jù)——即應用程序分別在每個方法上所花的時間長短。
          • Method Code Coverage(方法代碼覆蓋):這個選項用于通知在測試期間執(zhí)行了哪些類和方法。

          使用Eclipse Callisto分析應用程序圖-3

             圖 3: 在Monitor選項卡上定義要記錄數(shù)據(jù)的類型。

            您可以直接從這個窗口運行分析工具,也可以使用位于要分析的測試類上的上下文菜單,方法是選擇Profile As菜單項(參見圖4)。

          使用Eclipse Callisto分析應用程序圖-4

            圖 4:可以使用上下文菜單運行TPTP分析工具。

            運行分析工具可能要花上一段時間,這取決于測試用例的大小。完成之后,Eclipse將顯示一個Profiling Monitor視圖,可以在其中顯示每種類型分析的結(jié)果的詳細信息(參見圖5)。

            

          使用Eclipse Callisto分析應用程序圖-5

            圖 5: 分析結(jié)果

            Memory Statistics視圖顯示了應用程序創(chuàng)建的對象的數(shù)量。結(jié)果可以按照軟件包來組織(以樹視圖的形式),或者顯示為類或?qū)嵗囊粋€列表。這些數(shù)據(jù)可以讓您了解每種類型創(chuàng)建了多少個對象;應該對創(chuàng)建的對象(特別是高級對象,例如域?qū)ο螅┎徽5母邤?shù)量持懷疑態(tài)度。

            用于檢測內(nèi)存泄漏的另一個有用工具是Object References視圖。為了獲得這些數(shù)據(jù),您需要激活引用收集。啟動分析之后,點擊monitoring項,然后在上下文菜單中選擇Collect Object References(參見圖6)。接下來,通過上下文菜單(Open with -> Object References)打開Object References視圖。您將獲得一個類的列表,它帶有對每個類的引用的次數(shù)。這可以為可能的內(nèi)存泄漏提供一些線索。

          使用Eclipse Callisto分析應用程序圖-6

            圖 6: 激活引用收集

            如圖7所示,從Execution Statistics視圖可以清楚地了解到應用程序執(zhí)行到了哪里。"organization by"軟件包可以幫助您找出執(zhí)行時間最長的類和方法。點擊一個方法將打開Method Invocation Details視圖,它將顯示有關(guān)方法被調(diào)用次數(shù)、調(diào)用地點以及它本身調(diào)用了哪些其他方法的更詳細信息。盡管與一些可以向下發(fā)掘到源代碼本身的商業(yè)工具相比,這個視圖與源代碼視圖的集成度沒有那么高,但是它還是可以給出一些重要線索,幫助您找出執(zhí)行錯誤的方法。

          使用Eclipse Callisto分析應用程序圖-7

            圖 7: Execution Statistics視圖

            Coverage Statistics視圖(參見圖8)提供的信息是關(guān)于,您剛剛運行的測試用例使用了(因此至少在某種程度上測試了)哪些方法。覆蓋統(tǒng)計數(shù)據(jù)是一項優(yōu)秀的功能,盡管它們提供的信息的詳細程度還無法與像Cobertura、Clover和jcoverage這樣的專業(yè)覆蓋工具相提并論(它們可以提供行精度的覆蓋數(shù)據(jù),以及行和分支覆蓋的統(tǒng)計數(shù)據(jù))。盡管如此,它也有自身的優(yōu)點,那就是可以提供實時的覆蓋結(jié)果,而目前,只有商業(yè)的代碼覆蓋工具,例如Clover和jcoverage,才能提供行級別的覆蓋報告和完整的IDE集成。

          使用Eclipse Callisto分析應用程序圖-8

            圖 8: Coverage Statistics視圖

          靜態(tài)分析工具

            在TPTP工具箱中,另一件有趣的工具就是靜態(tài)分析工具。Java靜態(tài)分析工具,例如PMD,允許通過基于一組代碼預定義規(guī)則和最佳實踐檢查來檢查代碼,從而自動驗證代碼質(zhì)量?,F(xiàn)在,TPTP也包含一個靜態(tài)分析工具。除了提供它自己的一組靜態(tài)分析規(guī)則之外,這個工具還可以提供一個一致的接口,其他工具廠商可以在這個接口中集成他們自己的規(guī)則。

            要對代碼進行靜態(tài)分析,需要創(chuàng)建分析配置。在Java視圖或Analysis圖標中,使用上下文菜單打開Analysis窗口,它現(xiàn)在應該出現(xiàn)在工具欄上(參見圖9)。分析配置決定了要分析的代碼(Scope)和應該遵循的規(guī)則(Rules)。有71條規(guī)則可供選擇,例如"Avoid casting primitive types to lower precision"和"Always provide a break at the end of every case statement"。您還可以使用預定義的規(guī)則,例如"Java Quick Code Review"(在這里,71條規(guī)則中只有19條適用)。

          使用Eclipse Callisto分析應用程序圖-9

            圖 9:建立靜態(tài)分析規(guī)則

            要分析代碼,使用工具欄中的Analysis圖標。分析不是實時完成的,就像一些其他的類似工具一樣,例如Checkstyle。然而,給出的結(jié)果很清晰(參見圖10):錯誤在源代碼視圖中標出,并且按照錯誤類型,以樹視圖的形式在Analysis Results視圖中列出。"Quick Fix"是一項優(yōu)雅的特性,它出現(xiàn)在錯誤類型的上下文菜單中,而且如果可能,它可以自動為您糾正問題。

          使用Eclipse Callisto分析應用程序圖-10

            圖 10: 靜態(tài)代碼分析結(jié)果

          結(jié)束語

            Eclipse測試與性能工具平臺是Eclipse IDE工具箱中極具價值的部分。它支持的性能測試的范圍很寬,這有助于從第一個單元測試開始,就確保獲得高質(zhì)量和高性能的代碼。

            TPTP無疑還比不上一些可用的商業(yè)工具,例如OptimizeIt和JProbe,后者的報告和分析功能要更加完善,而且表示通常更加精練。然而,商業(yè)的分析工具往往非常昂貴,而且很難在最嚴峻的環(huán)境中來驗證它們的使用情況。盡管TPTP還相對較為不成熟,它仍然可算作一款功能強大的產(chǎn)品,毋庸置疑,它可以提供對于許多項目來說不可或缺的有價值的分析數(shù)據(jù)。

          參考資料

           作者簡介
          John Ferguson Smart 從1991年起涉足IT行業(yè),從1999年起開始參與J2EE開發(fā)。
          posted @ 2007-07-09 17:56 和田雨 閱讀(291) | 評論 (0)編輯 收藏

          僅列出標題
          共9頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 
          主站蜘蛛池模板: 镶黄旗| 桦南县| 南澳县| 宁城县| 紫阳县| 吉首市| 长垣县| 钟山县| 高阳县| 中阳县| 穆棱市| 深泽县| 静宁县| 南汇区| 泰顺县| 邯郸县| 龙江县| 顺平县| 西林县| 合肥市| 开鲁县| 西乌| 曲阜市| 和龙市| 崇礼县| 灵山县| 秦皇岛市| 吐鲁番市| 田阳县| 二连浩特市| 阜阳市| 周至县| 额济纳旗| 肃北| 五大连池市| 益阳市| 慈利县| 潢川县| 景宁| 额敏县| 读书|