db2遷移實戰(zhàn)

          今天負責把多個系統(tǒng)的db2數(shù)據(jù)庫遷移到另外一臺機器上。同時要修改WebSphere的數(shù)據(jù)源,讓它指向新的數(shù)據(jù)庫。以前沒做過,對于數(shù)據(jù)庫操作,我向來是要用的時候再去翻資料的。開始考慮使用備份、還原的方式,但版本不一樣,原來是7現(xiàn)在是8,操作系統(tǒng)也不一樣,原來是AIX,現(xiàn)在是Windows,這樣備份還原是行不通的,于是采用db2move

          看看db2move的命令說明,大致就明白怎么做了,于是我就開始實戰(zhàn)了。我采用最簡單的方式,原機器上使用db2move &dbname export生成文件,在目標機上ftp拿到生成的文件,然后使用db2move &dbname import。目標機上只要創(chuàng)建一個新庫,無需使用DDL生成表。信息顯示所有表都ok,很快就搞定一個數(shù)據(jù)庫,connect上去查看,表自動生成,數(shù)據(jù)也完全一致。然后在WebSphere所在機器上重新catalog新的數(shù)據(jù)庫,語法也是現(xiàn)查的,現(xiàn)記錄如下:catalog tcpip node &nodename remote &ip server &port, terminate, catalog db &remotedbname as &dbaliesname at node &nodename,terminate。加&表示根據(jù)實際設(shè)置的值。Db2 connect試試,新的連接正常。進入Administartor Console修改數(shù)據(jù)源配置,然后保存。重啟server,測試完全正常。一個數(shù)據(jù)庫搞定。

          下面一個是我?guī)蛣e人遷移的數(shù)據(jù)庫,我對其表結(jié)構(gòu),表空間等都不知道。不管三七二十一,我先照著剛才辦法做。Export一切正常,import前面的表都正常,快結(jié)束發(fā)現(xiàn)報錯了,報創(chuàng)建表失敗。到相應(yīng)表的msg文件發(fā)現(xiàn)錯誤描述如下:

          SQL3319N  創(chuàng)建表時發(fā)生 SQL 錯誤 "-286"

          SQL0286N  找不到頁大小至少為 "8192"、許可使用授權(quán)標識 "DB2ADMIN"

          的缺省表空間。  SQLSTATE=42727

          原來需要8k頁大小的表空間。這簡單,使用控制中心新建一個8k的表空間。然后需要讓出錯的表使用這個表空間,也就是說要要使用DDL語句先創(chuàng)建這個表了。連上原來的數(shù)據(jù)庫,生成這個表的DDL語句,修改tablespace名,改為新建的表空間,然后到新的數(shù)據(jù)庫上執(zhí)行。我不想重新再import所有表了,怎么做到呢,先看看生成的那些文件,有個db2move.lst,然后是每個表的ixfmsg文件,lst文件居然可以用文本打開,發(fā)現(xiàn)里面一行就是一個表,估計這就是需要導入表的列表了。刪除那些已經(jīng)正常導入的表信息,只留沒導入的表,然后重新運行db2move &dbname import,這下一切正常了。然后就是剩下的同樣工作了。

          值得注意的是,db2move只導入表的信息,其它如viewtrigger等均需通過DDL語句或控制中心添加。忙了一天,是為此記。

          posted @ 2005-09-08 16:03 pesome 閱讀(3601) | 評論 (5)編輯 收藏

          中午所感

          吃過午飯,隨意溜達,信步走到開發(fā)區(qū)的一片綠地上去。說是綠地,地方倒也不大,一塊草坪,其上點綴幾棵小樹,樹的蔭蓋稀疏,即使人獨躺其下也能感受陽光透過的刺目眩光。幸好今天多云,加上已到秋天,陽光已經(jīng)失去如夏日那般的威力了。草坪并不禁止踐踏,這大概因為并非什么名貴的進口草坪的緣故,也不需要太多的維護費用,可以任其夏榮冬枯。這種草并不抱簇成團,而是一根根堅韌的往外生長,因而躺在上面并不舒服,感覺刺的厲害。但我卻喜歡這種草,樸素,隨處可見,生命力頑強,令我回憶起小時候在河堤上玩耍的情形來。

          躺了會,的確有點刺背,就坐起身來。目光所及,前面草地上有只不知名的小鳥,白頭黑身,長長的尾巴,正在草中尋蟲吃吧,走幾步小嘴一啄,尾巴也上下顫動,可愛的很。它漫無目的的走著,大體向我靠近了,我心中一陣高興,幻想著它能來到身邊,我伸出手掌讓它停在上面。我屏住呼吸,盡量不弄出一點動作和聲音,只是靜靜的看著它,欣賞它的美麗。可它又慢慢走遠了,可能發(fā)現(xiàn)了我,頭也不回的一搖一擺的往前走去。小鳥終究是怕人的。

          于是我便站起身來。草坪旁邊是一個人工湖,湖邊是一座疊石流水,水繞著疊石,向下流淌到湖中,倒也別具匠心。疊石不高,頂上好像能上去的樣子,我生性好動,就想往上爬。難度不大,但也得手腳并用,看準落腳點,手上抓牢,很快就站在最高點了。可以俯瞰湖面,波光粼粼,水上還有一些睡蓮,不由浮想起:“魚戲蓮葉東,魚戲蓮葉西,魚戲蓮葉南,魚戲蓮葉北”的詩句來。但好像沒有魚的動靜,也許這個湖也剛建不久,還未長成吧。湖岸對面一個老者,拿根小竹竿在忙活著,應(yīng)該不是釣魚吧,魚都沒長大呢!帶著一絲好奇,我又爬下疊石,轉(zhuǎn)到對岸去看看。

          他旁邊放了個盛水的小盒子,里面一些非常小的魚在游著,我以為是魚苗呢,就上去問:“你是要把這些魚放進湖里嗎?”他沒抬頭,旁邊又來了幾個民工樣的人,也湊上身來,其中一個問:“魚這么小,有什么用?”老者這下答話了:“我去喂小烏龜。”“小烏龜不吃小魚吧”……原來他是用小網(wǎng)兜把可憐的小魚撈上來,然后裝回家喂小烏龜。我很快走開了,好的心情一下蕩然無存。這么小的魚,好不容易才在這片池塘出生,卻因為某人家里不知道吃不吃它的小烏龜,被裝到盒子里,注定其滅亡的命運。而我只能幻想魚群在蓮葉下游過的景象。我忽然想起為什么我是走開,而不是將魚放到湖里去。那樣會得罪人,是啊,“少管閑事”的觀念已經(jīng)深入骨髓了。但我也只是想想,頭也不回的往公司走去。

          posted @ 2005-09-07 16:14 pesome 閱讀(695) | 評論 (0)編輯 收藏

          自己寫的一個cache小組件

          Cache作為提高性能的有效手段可以說是無處不在的。CPU有一級緩存,二級緩存;數(shù)據(jù)庫有自己的數(shù)據(jù)緩存;內(nèi)存實質(zhì)上就是硬盤的緩存。。。。。。而程序中的緩存也能夠有效的減少與存儲設(shè)備的交互,增加應(yīng)用的并發(fā)能力。

          我通過在實際項目中自行設(shè)計和使用cache,逐漸提高了系統(tǒng)的并發(fā)能力,但同時也感覺到了很多的不足:

          1.       因為是在原有系統(tǒng)基礎(chǔ)上優(yōu)化,cache的處理沒有統(tǒng)一的規(guī)劃,而是頭痛醫(yī)頭,腳痛醫(yī)腳。cache分散在系統(tǒng)各個模塊,很難想起哪些模塊使用了cache

          2.       cache的實現(xiàn)各種各樣,有的是單例、有的是static對象,而cache對象與數(shù)據(jù)庫的交互也是直接硬編碼在原有系統(tǒng)中,難于維護

          3.       cache的參數(shù)如刷新間隔。。。。。。未使用配置文件,而是直接定義在cache的類文件中,對配置的更改就需要更新整個類,進而影響系統(tǒng)的運行

          4.       缺少對cache的監(jiān)控機制和log機制,出現(xiàn)問題很難去跟蹤和解決。

          經(jīng)過一段時間具體項目的洗禮,對java也有了進一步的認識,我也可以有能力來解決一直困擾心中的cache的這些問題了。想法很簡單,就是能夠通過單一的配置文件,對系統(tǒng)中的所有cache進行統(tǒng)一的管理,各個cache所在的模塊,和cache的配置參數(shù),都能夠一目了然。而對配置文件的重載功能也是我要考慮的問題,希望對某些cache的配置的更改能夠?qū)ζ渌?/SPAN>cache無影響,同時這些更改也能在不影響應(yīng)用運行狀態(tài)的情況下進行。當然既然是統(tǒng)一管理,就需要做到接口的統(tǒng)一。我定義了CacheCachePersistence兩個接口,然后不同的cache可以提供不同的實現(xiàn),實現(xiàn)類需要在配置文件中指定,同時系統(tǒng)提供默認的實現(xiàn),以滿足簡單的應(yīng)用。想了就要開始做,我也沒想一開始就做出象OSCacheJbossCache那樣通用的cache來,也許經(jīng)過不斷的交流,不斷的完善最終可以做到。經(jīng)過簡單的設(shè)計,我就開始寫代碼了,就我一個人,也算是XP編程了,呵呵!cache的配置參數(shù),我根據(jù)項目經(jīng)驗想到了幾個,可能還可以有,但目前我不知道,需要在更多的項目應(yīng)用中去發(fā)現(xiàn),具體可以看我的包中的cache.xml文件,有對配置項的具體說明。

          從開始開發(fā)到最后寫完測試類,也就不到一個星期的時間(上班的空余時間和加班寫),當中也進行了幾次重構(gòu)。總的來說,還算滿意,這也算俺的第一個開源項目啊,呵呵!

          具體如何使用,很簡單,你有興趣可以實現(xiàn)Cache接口,我內(nèi)置了基于HashMapCache,應(yīng)該能滿足大部分應(yīng)用的需要。CachePersistence就是你的對象與存儲設(shè)備交互的實現(xiàn)了,你一般需要實現(xiàn)這一接口,然后配置在配置文件中。然后通過CacheFactory得到Cache,通過Cache接口使用對象。對Cache的操作你可以當成一個Map來使用,由容器來自動處理何時與存儲設(shè)備的交互,你只要配置好就ok了。另外可以參考src中的test包,里面是我對Cache的功能測試代碼,也能作為使用cache的實例的。

          說了這么多,大家如果有興趣,可下載我的全部文件,里面包括jarsrclibjavadoc還有配置文件,點擊這里http://www.aygfsteel.com/Files/pesome/pcache.zip。更歡迎大家在實際的項目中使用我的cache,如果有任何問題都可以跟我聯(lián)系,mailto:pesome@163.com。謝謝!

          posted @ 2005-09-06 15:38 pesome 閱讀(2230) | 評論 (6)編輯 收藏

          AOP之我見

          近來研究AOP,在了解其實現(xiàn)如AspectJSpring等之余,也多了些思索.

          早晨一覺醒來,頓覺精神氣爽,再看時間還早,也就躺床上閉目養(yǎng)神.而思維此時卻象脫韁的野馬,縱橫馳騁,不知不覺就想到我所從事和鐘愛的軟件上來.忽發(fā)奇想:其實軟件的最終目標就是模擬真實世界,甚至進一步說就是創(chuàng)造世界(看過Matrix的朋友應(yīng)該能理解).所以OOP,AOP或今后將出現(xiàn)的什么新的軟件思想也都只是這一進程中的小浪花而已,而他們的出現(xiàn)及發(fā)展,也就是為了更好的模擬我們的生活.

                 OOP的出現(xiàn)之所以被稱為一個很大的突破,正因為它很大程度上符合世界的構(gòu)成.java “Everything is object”之說,正是有了Object這個有利的武器,使得我們在用OOP表現(xiàn)世界的某些方面時能夠得心應(yīng)手.但我們世界除了Object還有很多其它的東西,比如道德,法律,規(guī)范,規(guī)律……AOP的出現(xiàn)正是模擬這些方面.

                 以我們最熟悉的對象作為考察的對象.人做為對象由多個對象組成,如手,眼……我們作為世界的個體,首先守很多規(guī)律的制約.如萬有引力定律,牛頓三大定律……這些規(guī)律是無處不在的,任何人都無法去避免或改變.還有法律,這是人為擬定的對某些個體具有約束性的規(guī)范,如果相應(yīng)個體違法,則會受到法律的制裁.注意這里是某些個體”,各國的法律只在本國范圍內(nèi)有效,不同的法律又有不同的受眾.這樣對個體而言,你就受到某些法律的約束.你知道法律可以決定去遵守或違背它,而你不知道,法律也是客觀存在,你不去違背,可能根本感受不到它,而在你即使毫不知情的情況下違背時,它也會顯示它的威力.至于如道德或規(guī)范等,其強制性不如法律,但就與個體的相互關(guān)系而言其實與法律完全一樣.

                 如果從程序的角度來實現(xiàn)上面的相互關(guān)系.僅用OOP的思想,就會非常的困難.先說這些定律,他們無時不在,無處不在,只是看什么定律對你當前的行為有影響.如你要上上網(wǎng),聽聽歌,可能感受不到萬有引力定律和牛頓定律的存在,而你要從12層的樓往下跳試試,萬有引力定律和牛頓定律直接決定了你的生死.用程序?qū)崿F(xiàn)上上網(wǎng),聽聽歌或跳跳樓都可做到.你聽歌可以計算對耳膜的震動量,音樂對你神經(jīng)的刺激量;上網(wǎng)可以計算你頸部僵硬時間的長短,計算你網(wǎng)上泡mm的興奮度;跳樓則根據(jù)萬有引力定律計算你墜地時的速度和對身體觸地部位的沖量.在這些行為中,人是同一個人,也就是同一個對象,只是行為不同,也就是方法不同.那執(zhí)行不同的方法時要遵循不同的定律.如果用OO的思想我們把定律抽象為對象,則定律起作用就是定律對象的方法被調(diào)用.同一個對象,在調(diào)用不同的方法時,要明確什么定律起主要作用,就必須要把相應(yīng)定律接口申明到自己方法體中去.這樣就形成了耦合!當然使用Design Pattern能將這種耦合變成松耦合,如使用Observer模式,但即使這樣也會有很多的問題:如果同時多個定律起作用,或定律起作用有先后順序,或這些定律沒法形成一個統(tǒng)一的父類接口……還有observer模式其實也是主動的模式,它依賴于對象要主動notify這些observer.

          更有意思的是,如果一只雞或一只鴨從樓上掉下去,它也要遵守萬有引力定律和牛頓定律,而且計算方式與人完全一樣.如果用OOP的思想,一是使用繼承,定義一個父類,由它實現(xiàn)高處落下時的邏輯,這樣子類就可以自動獲得這些邏輯,但這樣勢必將因為影響行為的定律的復雜性,而帶來類層次的復雜性;二是使用代理,東西由高處落下就交給一個delegate對象去處理,而這樣需要多少種delegate對象,每用一個delegate對象,就意味著當前對象耦合了一個delegate對象,結(jié)果對象的耦合性越來越強.

          那么換個角度想,如果真有一個上帝,它監(jiān)控著所有的對象,只要某一個對象從高處落下,它就把萬有引力定律和牛頓定律用到這個對象身上,而不管這個對象是否知道這兩個定律.這樣對象與這兩個定律完全解耦合,它只管做自己的事,比如一個人從窗臺跳下去, 萬有引力定律和牛頓定律也起作用,但他沒有什么損傷,接著就騎輛車上街去了……上街是這個人的主要目的,跳窗臺也許是為圖一時方便,下次他也許就不跳了.但只要他跳了,就得由上帝用萬有引力定律和牛頓定律計算一下,如果窗臺很高,計算結(jié)果或許就是他骨折了,只能躺醫(yī)院去.這個上帝就是自然規(guī)律.我們可能感覺不到它的存在,但它確實在那里,只要條件被觸發(fā),它就會起作用,不依賴于任何個體.

          AOP正是這個上帝在程序世界的體現(xiàn).一個Aspect就是一條定律或規(guī)范及其執(zhí)行策略.對普適定律而言,他對所有系統(tǒng)中的對象起作用.而一些法律,比如未成年人法就只對未成年人起作用,一些規(guī)定比如車輛經(jīng)過收費站要收費,卻對公車無效.一個Aspectpointcut就類似這些定律或法律或規(guī)定起作用的條件,它能確定對象的范圍,對象的行為,并將一些特權(quán)階級,特權(quán)行為剔除出去.advice就是他們的執(zhí)行了.
              對AOP的具體語法,我不想涉及,大家很容易找到資料.我希望的是能有很多的人談?wù)勛约簩?/SPAN>AOP的認識,我的觀點也許也很片面,希望通過討論更加的完善.

          posted @ 2005-08-10 13:59 pesome 閱讀(2235) | 評論 (10)編輯 收藏

          AspectJ初探

          早晨收到IBM developerWorks的郵件,看看有啥值得關(guān)注的東東。看到篇關(guān)于AOP的介紹,就大致讀了一下,文章倒沒什么新意,就是介紹AOP在項目中的應(yīng)用,如何簡化log機制等。

          我對AOP也有些了解,主要研究過Spring中AOP實現(xiàn)使用的Dynamic Proxy機制,對于pointcut和advice也有些概念。但也僅此而已,沒有實際寫過一行AOP的代碼,更不用說在項目中使用AOP了。點了點文章末尾的鏈接,進入了AOP的世界,看看AOP的幾種不同實現(xiàn),以及對其的比較文章,倒引起了我對AspectJ的興趣。并非其它實現(xiàn)如AspectWerkz,JBoss4.0或Spring不如AspectJ,它們各有側(cè)重,但我對AspectJ的靜態(tài)檢查和較好的IDE集成性(有eclipse3.0的插件ajdt)比較好奇。于是網(wǎng)上down了個ajdt(下載url:http://www.eclipse.org/ajdt/),開始了對AspectJ的探索之旅。

          Ajdt的安裝和其它eclipse插件完全一樣,解壓,拷貝到相應(yīng)目錄,重啟eclipse就OK了。進入eclipse,發(fā)現(xiàn)多了個按鈕,有AJ字樣,點擊就彈出創(chuàng)建AspectJ項目的窗口。先別著急,再查看window->preferences發(fā)現(xiàn)多了AspectJ和Visualiser欄目,隨便點點,也不用做什么更改,就能確認AJDT已經(jīng)成功的集成進來了。

          新建個AspectJ項目,項目名就叫myaspect吧。在Package Explorer 中展開新項目,發(fā)現(xiàn)除了jre外它自己加入了一個AspectJ的lib,這就是AspectJ的類庫了,下面是一個叫build.ajproperties的文件,肯定是配置文件了,但具體配什么我也沒管太多,就希望馬上能寫段代碼看到AOP的威力了,倒就因為這個后面郁悶好久,這是后話!

          寫點什么代碼呢,初次使用,當然是越簡單越好,但我對AspectJ的語法一竅不通啊。想到網(wǎng)上搜索,又覺得不系統(tǒng),而且大部分文章都是講AspectJ的好處,講到具體使用卻很少。正郁悶時看到eclipse的help菜單,想想說不定有幫助。打開help content,果然多了AspectJ Language GuideAspectJ Development User Guide目錄。這其實有點出乎我的意外,eclipse插件我也裝了不少,如tomcat,lomboz等,但都沒有幫助文檔的,看來AJDT就是考慮的周到,這也大大增加了我對AspectJ的好感,得好好研究研究!文檔當然都是英文,但這可難不倒俺,當程序員的英文其它水平不行,說到“讀”那卻肯定沒問題的。瀏覽了下這些help,找了篇Getting Started的Basic tutorial就跟著做了,新建項目,新建個叫Hello的類,代碼很少,就是打印“Hello”。

           

          1public static void main(String[] args) {
          2     sayHello();
          3}
           
          4
          5public static void sayHello() {
          6     System.out.print("Hello");
          7}
           

           

          然后新建個aspect,叫World吧,代碼也很簡單,拷貝過去先:

          1public aspect World 
          2     pointcut greeting() : execution(*Hello.sayHello(..)); 
          3
          4     after() returning() : greeting() 
          5         System.out.println(" World!"); 
          6     }
           
          7
          8}

           

          AspectJ語法我不懂,但英文還認識,pointcut就是切點的意思,這段代碼估計就是在執(zhí)行Hello.sayHello方法后,打印一個“World!”,但*和..是啥意思我就不大了解了。先急著看效果,我就運行Hello類了,當然我按照文檔做,要run as AspectJ/Java application。運行結(jié)果:“Hello”。咋不對呢,難道我寫錯了?先刪除代碼,這次不拷貝了,自己手寫。還真認識pointcut,after這些關(guān)鍵字,會高亮顯示,邊打邊就報錯,打全了函數(shù)就好了,這跟java的靜態(tài)檢查完全一樣嘛。試著刪除*,報錯,刪除..,好像沒事,刪除returning(),好像也沒事,我這純粹是盲人摸象嘛!呵呵,沒辦法,我就這性格。倒也增加了幾分對了解其語法的渴望。但現(xiàn)在我還不看,第一次運行,連個象樣的結(jié)果還沒出來啊,這不是打擊我積極性嗎?手工輸入了一遍,沒錯誤了,運行。。。靠!還是老樣子,這什么Getting Started啊,我心中暗罵。仔細在看看文檔,好像也沒問題啊,但它說的那個Cross References顯示好像和我不一樣,看來是我的問題。出師不利啊!

          我可沒那么容易放棄,再來一遍,反正簡單,幾分鐘又好了,但結(jié)果還是一樣。我郁悶啊!失意中我瞎點點,打開了那個property文件,還是圖形化的呢。誒,好像那個World.aj沒勾上,難道因為這個?仔細看看說明,included files…對了,AspectJ的特性就是需要用自己的acj編譯器進行編譯,這可能就是編譯的類列表。勾上,保存文件,果然開始編譯,運行。。。結(jié)果為:“Hello World!”成功了,哈哈,這可是俺的第一個AOP成功案例啊!興奮中想起AspectJ要用自己的編譯器編譯,編譯出來是.class文件,但肯定往里面加了些東西。于是到eclipse的workspace中找編譯出來的class文件,雙擊打開(嘿嘿!俺有小穎,自動反編譯),這就是經(jīng)AspectJ編譯后的Hello類代碼,原來加了行語句。

          1    public static void sayHello()
          2
          3    {        System.out.print("Hello");       
                             World.aspectOf().ajc$afterReturning$helloworld_World$
          1$f69f5afa();
          4
          5         }

          6

          World.aj也編譯成了World.class,代碼較長:

           1package helloworld;
           2
           3import java.io.PrintStream;
           4
           5import org.aspectj.lang.NoAspectBoundException;
           6
           7public class World
           8
           9{
          10
          11    private static Throwable ajc$initFailureCause;
          12
          13    public static final World ajc$perSingletonInstance;
          14
          15    public World()
          16
          17    {
          18
          19    }

          20
          21    public void ajc$afterReturning$helloworld_World$1$f69f5afa()
          22
          23    {
          24
          25        System.out.println("World!");
          26
          27    }

          28
          29    public static World aspectOf()
          30
          31    {
          32
          33        if(ajc$perSingletonInstance == null)
          34
          35            throw new NoAspectBoundException("helloworld_World", ajc$initFailureCause);
          36
          37        else
          38
          39            return ajc$perSingletonInstance;
          40
          41    }

          42
          43    public static boolean hasAspect()
          44
          45    {
          46
          47        return ajc$perSingletonInstance != null;
          48
          49    }

          50
          51    private static void ajc$postClinit()
          52
          53    {
          54
          55        ajc$perSingletonInstance = new World();
          56
          57    }

          58
          59    static 
          60
          61    {
          62
          63        try
          64
          65        {
          66
          67            ajc$postClinit();
          68
          69        }

          70
          71        catch(Throwable throwable)
          72
          73        {
          74
          75            ajc$initFailureCause = throwable;
          76
          77        }

          78
          79    }

          80
          81}

          82

          研究一下:也就是生成個默認構(gòu)造函數(shù)的World類,加了個ajc$afterReturning$helloworld_World$1$f69f5afa()方法,其它好像都是AspectJ生成的class必帶的代碼,定義了一個public static final World ajc$perSingletonInstance的類,還有一個private static Throwable ajc$initFailureCause異常,public static World aspectOf()和public static boolean hasAspect()會被自動調(diào)用。這就是AspectJ能運行的原理了,當然還有更復雜的東西,但從這個最簡單的例子也能了解些端倪了。

          接下來就是學習它的語法了,其實也不難(我就奇怪網(wǎng)上把AspectJ的學習曲線說的多陡峭,比java難多少),也就是pointcut和advice,各自有各自的一些關(guān)鍵字。我也對開始瞎試,有的報錯,有的不報錯的原因有了理論的認識了。

          整個探索的時間也不長,1個小時左右,比我寫這篇東西少多了,呵呵!打字打的累啊,回去打星際去!看哪天有空,接著研究,也一定寫篇文章,估計也還有人看的,呵呵!

          posted @ 2005-08-03 19:00 pesome 閱讀(4500) | 評論 (4)編輯 收藏

          僅列出標題
          共5頁: 上一頁 1 2 3 4 5 
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統(tǒng)計

          公告

          主要記錄作者在學習java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創(chuàng),如需轉(zhuǎn)載請注明出處和原作者,如用于商業(yè)目的,需跟作者本人聯(lián)系。
          歡迎大家訪問:

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          java技術(shù)

          人間百態(tài)

          朋友們的blog

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 金沙县| 宁陕县| 井冈山市| 大宁县| 泰和县| 神池县| 聂拉木县| 嘉兴市| 肃宁县| 齐河县| 土默特右旗| 高青县| 时尚| 甘肃省| 格尔木市| 大新县| 武冈市| 荣昌县| 湛江市| 西昌市| 营山县| 桐柏县| 嘉鱼县| 靖江市| 黑山县| 平泉县| 易门县| 长泰县| 新巴尔虎左旗| 柳江县| 安新县| 保山市| 大连市| 盐亭县| 武强县| 开化县| 潼南县| 新平| 响水县| 上蔡县| 江油市|