<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-23  評(píng)論-6  文章-1  trackbacks-0
      2005年9月25日

    sourceforge http://www.sourceforge.net
    java.net http://www.java.net

    www.eclipse.org

    www.opensource.org

    Lomboz http://www.objectlearn.com/index.jsp (J2EE plugin for Eclipse)
    htmlArea http://sourceforge.net/projects/itools-htmlarea/ (所見即所得的在線HTML編輯器)
    XmlBuddy http://www.xmlbuddy.com/ (XML Editor plugin for Eclipse)
    JFreeChart http://www.jfree.org/ (用于生成圖表的項(xiàng)目)
    EclipseME http://eclipseme.sourceforge.net/ (J2ME Developmnt Plugin for Eclipse)
    mvnForum http://sourceforge.net/projects/mvnforum/ (論壇)
    jChatBox http://www.javazoom.net/index.shtml (用servlet實(shí)現(xiàn)的WEB聊天引擎)
    POI http://jakarta.apache.org/poi/index.html (用于處理Excel,WORD等文檔的項(xiàng)目)
    FileUpload http://jakarta.apache.org/commons/fileupload/ (用于處理HTTP文件上傳得項(xiàng)目)
    PDFBox http://sourceforge.net/projects/pdfbox/ (處理PDF文檔的項(xiàng)目)
    Lucene http://jakarta.apache.org/lucene/index.html (搜索引擎)
    Digester http://jakarta.apache.org/commons/digester/ (處理XML信息的項(xiàng)目)
    DBCP http://jakarta.apache.org/commons/dbcp/ (數(shù)據(jù)庫連接池)
    AXIS http://ws.apache.org/axis/ (WebService 的實(shí)現(xiàn)框架)
    Jetspeed http://portals.apache.org/jetspeed-1/ (Portal)
    HSQLDB http://sourceforge.net/projects/hsqldb/ (Im memory Database Engine)
    CEWOLF http://sourceforge.net/projects/cewolf/ (一套標(biāo)簽庫實(shí)現(xiàn)Web報(bào)表,使用的是jFreeChart引擎)
    Struts Menu http://sourceforge.net/projects/struts-menu/ (基于Struts的Web菜單項(xiàng)目)
    htmlparser http://sourceforge.net/projects/htmlparser/ (用于解析HTML信息的項(xiàng)目)
    Mondrian http://sourceforge.net/projects/mondrian/(Open Source OLAP Database)
    ProGuard http://sourceforge.net/projects/proguard/(Java的混淆器)
    InfoGlue http://sourceforge.net/projects/infoglue/ (J2EE 內(nèi)容管理系統(tǒng))
    JPivot http://sourceforge.net/projects/jpivot/ (基于WEB的OLAP 展現(xiàn))
    http://java-source.net/

    http://www.javaalmanac.com - Java開發(fā)者年鑒一書的在線版本. 要想快速查到某種Java技巧的用法及示例代碼, 這是一個(gè)不錯(cuò)的去處.
    http://www.onjava.com - O'Reilly的Java網(wǎng)站. 每周都有新文章.
    http://java.sun.com - 官方的Java開發(fā)者網(wǎng)站 - 每周都有新文章發(fā)表.
    http://www.developer.com/java - 由Gamelan.com 維護(hù)的Java技術(shù)文章網(wǎng)站.
    http://www.java.net - Sun公司維護(hù)的一個(gè)Java社區(qū)網(wǎng)站.
    http://www.builder.com - Cnet的Builder.com網(wǎng)站 - 所有的技術(shù)文章, 以Java為主.
    http://www.ibm.com/developerworks/java - IBM的Developerworks技術(shù)網(wǎng)站; 這是其中的Java技術(shù)主頁.
    http://www.javaworld.com - 最早的一個(gè)Java站點(diǎn). 每周更新Java技術(shù)文章.
    http://www.devx.com/java - DevX維護(hù)的一個(gè)Java技術(shù)文章網(wǎng)站.
    http://www.fawcette.com/javapro - JavaPro在線雜志網(wǎng)站.
    http://www.sys-con.com/java - Java Developers Journal的在線雜志網(wǎng)站.
    http://www.javadesktop.org - 位于Java.net的一個(gè)Java桌面技術(shù)社區(qū)網(wǎng)站.
    http://www.theserverside.com - 這是一個(gè)討論所有Java服務(wù)器端技術(shù)的網(wǎng)站.
    http://www.jars.com - 提供Java評(píng)論服務(wù). 包括各種framework和應(yīng)用程序.
    http://www.jguru.com - 一個(gè)非常棒的采用Q&A形式的Java技術(shù)資源社區(qū).
    http://www.javaranch.com - 一個(gè)論壇,得到Java問題答案的地方,初學(xué)者的好去處。
    http://www.ibiblio.org/javafaq/javafaq.html - comp.lang.java的FAQ站點(diǎn) - 收集了來自comp.lang.java新聞組的問題和答案的分類目錄.
    http://java.sun.com/docs/books/tutorial/ - 來自SUN公司的官方Java指南 - 對(duì)于了解幾乎所有的java技術(shù)特性非常有幫助.
    http://www.javablogs.com - 互聯(lián)網(wǎng)上最活躍的一個(gè)Java Blog網(wǎng)站.
    http://java.about.com/ - 來自About.com的Java新聞和技術(shù)文章網(wǎng)站
    HttpClient http://jakarta.apache.org/commons/httpclient/ 處理http客戶端的接口

    原文地址
    http://blog.csdn.net/Xviewee/archive/2007/12/17/1944374.aspx
    posted @ 2011-05-05 15:31 ceaboat 閱讀(1123) | 評(píng)論 (0)編輯 收藏
     

    演示視頻請(qǐng)點(diǎn)擊

    1.   概述

    高效率開發(fā)、易用、功能穩(wěn)定、執(zhí)行效率高、維護(hù)成本低、需求變更是軟件開發(fā)遵循的守則,然而現(xiàn)實(shí)中我們面臨各種各樣的問題:

    1.     程序員A,程序員B開發(fā)同樣的功能,理解不同、開發(fā)用時(shí)、及開發(fā)質(zhì)量良莠不齊,延遲交付時(shí)間普遍。相反監(jiān)督者需要花費(fèi)更多精力與時(shí)間可以彌補(bǔ),加大投入成本。

    2.     后期維護(hù)成本高,如由于測(cè)試跟不上BUG檢測(cè)不到、需求變更等。

    3.     同行競(jìng)爭(zhēng)的壓力,如A公司開發(fā)模塊實(shí)際時(shí)間10工作日、B公司開發(fā)模塊實(shí)際時(shí)間15工作日,競(jìng)標(biāo)會(huì)處于劣勢(shì)。

    4.     隨著公司業(yè)務(wù)擴(kuò)展,項(xiàng)目繁多,招攬人員越多、管理難度越大等因素日漸凸顯,造成企業(yè)發(fā)展的瓶頸。

    5.     人員的培養(yǎng)需要大量成本,與人員的不穩(wěn)定性因素對(duì)企業(yè)造成損失較大,如人員請(qǐng)假、離職等。

    6.     開發(fā)測(cè)試—QA—用戶測(cè)試試運(yùn)營運(yùn)營,是軟件開發(fā)中耗費(fèi)成本巨大的一個(gè)循環(huán)過程鏈,制約企業(yè)發(fā)展。

    上述是據(jù)個(gè)人經(jīng)驗(yàn)總結(jié),Db2view是針對(duì)上述問題的一個(gè)解決方案。

    2.   Db2view架構(gòu)

    Db2view是以高效、穩(wěn)定、易用、低成本維護(hù)為目的所研制的一套輕量級(jí)非入侵式、自動(dòng)化開發(fā)平臺(tái)。兼容多種架構(gòu),如SSHstruts—spring—ibatis等容易集成到系統(tǒng),根據(jù)多年的行業(yè)經(jīng)驗(yàn),高效的針對(duì)各行業(yè)業(yè)務(wù)特點(diǎn),最大化減少建設(shè)與維護(hù)成本。目前已在多個(gè)項(xiàng)目實(shí)施,不斷完善。
    2.1          Db2view總體架構(gòu)圖

               
        

                2.2          平臺(tái)說明

            2.2.1              db2view核心層

    Db2view:根據(jù)編寫的SQL,在所有元素?fù)?jù)中,勾選需要顯示的元素?fù)?jù)列,即可生成自定義顯示列表。

    如select school_id,school_name,school_code, school_manager from school

    然后在配置界面勾選school_name, school_manager字段,則顯示的列表為:

    school_name

    school_manager

    廣東廣雅中學(xué)

    黃光裕

    廣州先烈東小學(xué)

    王興東

    查詢:在SQL里涉及并且勾選的元素?fù)?jù)字段中,可以選擇是否作為查詢的字段,勾選后該列成為查詢項(xiàng),如果是時(shí)間字段還可以進(jìn)行時(shí)間區(qū)間查詢的選擇。

    排序:列表中的每個(gè)字段都可以進(jìn)行升序與降序的排列功能。

    自定義字段名:對(duì)每個(gè)列名稱進(jìn)行界面配置,如勾選school_name、school_manager字段,可以對(duì)school_name定義顯示列名為:學(xué)校名稱、school_manager顯示列名為:學(xué)校管理員,修改后列表顯示如下:

    學(xué)校名稱

    學(xué)校管理員

    廣東廣雅中學(xué)

    黃光裕

    廣州先烈東小學(xué)

    王興東

    轉(zhuǎn)義詞:數(shù)據(jù)庫中記錄男女使用0,1表示,而界面需要顯示為男女文字的信息,使用轉(zhuǎn)義詞可以達(dá)到效果。

    刪除:界面化配置是否需要?jiǎng)h除功能,刪除指定字段的表記錄。

              2.2.2              擴(kuò)展層

    操作:所有列表均可以添加外部操作(如增加、批量刪除)與行內(nèi)操作(編輯、刪除),由此構(gòu)成一個(gè)完整的業(yè)務(wù)功能。(示例見演示視頻)

     

    數(shù)據(jù)導(dǎo)出:界面化配置是否需要excel數(shù)據(jù)導(dǎo)出功能,根據(jù)查詢的條件顯示的數(shù)據(jù),可選擇導(dǎo)出當(dāng)前所見數(shù)據(jù)與所有滿足條件的數(shù)據(jù)兩個(gè)選擇。

     

    模板定制:界面化配置模板,方便為不同的客戶需求定制不同的顯示模板。

     

    換膚:界面化配置皮膚,每個(gè)模板依據(jù)規(guī)范可以有不同的皮膚更換功能。

     

    數(shù)據(jù)安全:加入訪問權(quán)限控制規(guī)則,保障功能數(shù)據(jù)安全性。(待實(shí)現(xiàn))

       3.   平臺(tái)優(yōu)缺點(diǎn)

      

      3.1          優(yōu)點(diǎn)
    (1)
    高效率開發(fā):db2view平臺(tái)開發(fā)工具采用全界面配置,編寫業(yè)務(wù)SQL,簡(jiǎn)單配置,即可完成。列表功能開發(fā)以分鐘計(jì)時(shí),15分鐘可以完成一個(gè)高質(zhì)量列表的功能開發(fā)。

        (2)易用性:界面編寫SQL,然后配置即可得到一個(gè)界面友好,高質(zhì)量的功能列表。將傳統(tǒng)程序員需要熟悉各種復(fù)雜的技術(shù)框架解放出來,專注于業(yè)務(wù)邏輯,大大降低企業(yè)由于人員離職或其他情況所帶來的損失。

        (3)功能穩(wěn)定:所有功能使用統(tǒng)一內(nèi)核,經(jīng)過多個(gè)項(xiàng)目的迭代驗(yàn)證其穩(wěn)定性、可靠性。

        (4)低成本維護(hù):   所有的功能需要維護(hù)的只有業(yè)務(wù)SQL與配置文件,最大化的減少維護(hù)的成本。

    比較現(xiàn)今流行的SSH架構(gòu)開發(fā)流程:

    維護(hù)成本是流程涉及的內(nèi)容,成本花費(fèi)高。

    Db2view開發(fā)流程:

    維護(hù)成本只有業(yè)務(wù)SQL與配置文件,易于維護(hù)。

        (5)快速響應(yīng)需求變更:如業(yè)務(wù)更改字段名、添加或刪除顯示字段、

    添加查詢字段、功能刪除等維護(hù)工作都能夠在極短的時(shí)間內(nèi)響應(yīng)。
     

        (6)無需重啟服務(wù)器:功能的生成與修改實(shí)時(shí)生效,無需重啟服務(wù)器。

     


    3.2          缺點(diǎn)
    (1)   
    平臺(tái)仍需完善,暫不能夠滿足所有業(yè)務(wù)需求界面化

           (2)    平臺(tái)操作友好性仍待提高,如轉(zhuǎn)義詞的添加、新添加配置等

        4.   平臺(tái)支撐環(huán)境

    數(shù)據(jù)庫:ORACLE 10G以上版本

    語言:JAVA

    JDK版本:1.4以上

    服務(wù)器:Tomcat,JBoss,Resin,WebSphere,WebLogic等主流服務(wù)器。

        5.   部署

    根據(jù)開發(fā)模式分為兩種部署方式。

    面向服務(wù)式模式:

    作為分布式服務(wù)器對(duì)外提供服務(wù),生成功能鏈接嵌入應(yīng)用系統(tǒng)。該模式的優(yōu)點(diǎn):

    1.    對(duì)應(yīng)用系統(tǒng)完全無入侵,100%輕量級(jí)開發(fā)。

    2.    產(chǎn)品升級(jí)調(diào)試簡(jiǎn)單。

    缺點(diǎn):

    1.    需要開放應(yīng)用的數(shù)據(jù)庫訪問權(quán)限。

    2.    涉及操作并有關(guān)聯(lián)動(dòng)作:如刪除功能在A系統(tǒng)開發(fā),B系統(tǒng)是Db2view,關(guān)聯(lián)頁面需要設(shè)置同域方能進(jìn)行交互。

    3.    安全性相對(duì)另一種模式低。

     

       組件模式:

    作為組件集成到開發(fā)項(xiàng)目中,容易管理,安全性也高。

    優(yōu)點(diǎn):

    安全性高,可根據(jù)開發(fā)系統(tǒng)的權(quán)限要求做安全性控制

        缺點(diǎn):

    升級(jí)調(diào)試相對(duì)復(fù)雜。

    5分鐘生成功能例子,對(duì)此工具有興趣者請(qǐng)加群:12990321.

    posted @ 2010-04-01 17:47 ceaboat 閱讀(1419) | 評(píng)論 (0)編輯 收藏
    #1 ?世界上最經(jīng)典的25句話

    1.記住該記住的,忘記該忘記的。改變能改變的,接受不能改變的。

    2.能沖刷一切的除了眼淚,就是時(shí)間,以時(shí)間來推移感情,時(shí)間越長(zhǎng),沖突越 淡,仿佛不斷稀釋的茶。

    3.怨言是上天得至人類最大的供物,也是人類禱告中最真誠的部分。

    4.智慧的代價(jià)是矛盾。這是人生對(duì)人生觀開的玩笑。

    5.世上的姑娘總以為自己是驕傲的公主(除了少數(shù)極丑和少數(shù)極聰明的姑娘例外)。

    6.如果敵人讓你生氣,那說明你還沒有勝他的把握。

    7.如果朋友讓你生氣,那說明你仍然在意他的友情。

    8.令狐沖說“有些事情本身我們無法控制,只好控制自己。”

    9.我不知道我現(xiàn)在做的哪些是對(duì)的,那些是錯(cuò)的,而當(dāng)我終于老死的時(shí)候我才知道這些。所以我現(xiàn)在所能做的就是盡力做好待著老死。

    10.也許有些人很可惡,有些人很卑鄙。而當(dāng)我設(shè)身為他想象的時(shí)候,我才知道:他比我還可憐。所以請(qǐng)?jiān)徦心阋娺^的人,好人或者壞人。

    11.魚對(duì)水說你看不到我的眼淚,因?yàn)槲以谒铮f我能感覺到你的眼淚,因?yàn)槟阍谖倚睦铩?

    12.快樂要有悲傷作陪,雨過應(yīng)該就有天晴。如果雨后還是雨,如果憂傷之后還是憂傷.請(qǐng)讓我們從容面對(duì)這離別之后的離別。微笑地去尋找一個(gè)不可能出現(xiàn)的你!

    13.死亡教會(huì)人一切,如同考試之后公布的結(jié)果——雖然恍然大悟,但為時(shí)晚矣~!

    14.你出生的時(shí)候,你哭著,周圍的人笑著;你逝去的時(shí)候,你笑著,而周圍的人在哭!一切都是輪回!!!! 我們都在輪回中!!!!

    15.男人在結(jié)婚前覺得適合自己的女人很少,結(jié)婚后覺得適合自己的女人很多。

    16.于千萬人之中,遇見你所遇見的人;于千萬年之中,時(shí)間的無涯荒野里,沒有早一步,也沒有晚一步,剛巧趕上了 。

    17.每個(gè)人都有潛在的能量,只是很容易:被習(xí)慣所掩蓋,被時(shí)間所迷離,被惰性所消磨。

    18.人生短短幾十年,不要給自己留下了什么遺憾,想笑就笑,想哭就哭,該愛的時(shí)候就去愛,無謂壓抑自己。

    19.《和平年代》里的話:當(dāng)幻想和現(xiàn)實(shí)面對(duì)時(shí),總是很痛苦的。要么你被痛苦擊倒,要么你把痛苦踩在腳下。

    20.真正的愛情是不講究熱鬧不講究排場(chǎng)不講究繁華更不講究嚎頭的。

    21.生命中,不斷地有人離開或進(jìn)入。于是,看見的,看不見的;記住的,遺忘了。生命中,不斷地有得到和失落。于是,看不見的,看見了;遺忘的,記住了。然而,看不見的,是不是就等于不存在?記住的,是不是永遠(yuǎn)不會(huì)消失?

    22.我們確實(shí)活得艱難,一要承受種種外部的壓力,更要面對(duì)自己內(nèi)心的困惑。在苦苦掙扎中,如果有人向你投以理解的目光,你會(huì)感到一種生命的暖意,或許僅有短暫的一瞥,就足以使我感奮不已。

    23.我不去想是否能夠成功,既然選擇了遠(yuǎn)方,便只顧風(fēng)雨兼程;我不去想,身后會(huì)不會(huì)襲來寒風(fēng)冷雨,既然目標(biāo)是地平線,留給世界的只能是背影。

    24.后悔是一種耗費(fèi)精神的情緒.后悔是比損失更大的損失,比錯(cuò)誤更大的錯(cuò)誤.所以不要后悔 。

    25.日出東海落西山,愁也一天,喜也一天;遇事不鉆牛角尖,人也舒坦,心也舒坦。
    posted @ 2006-12-05 11:31 ceaboat 閱讀(241) | 評(píng)論 (0)編輯 收藏

    現(xiàn)象一:
             錯(cuò)誤信息:
                     java.lang.SecurityException: sealing violation: can't seal package oracle.jdbc.driver: already loaded
             原因:
                     was啟動(dòng)的lib里存在多個(gè)ORACLE DRIVER。
             解決:
                     保留最新的一個(gè)驅(qū)動(dòng)包解決。
             遺留問題:
                     開發(fā)環(huán)境使用TOMCAT發(fā)布無此問題,JBUILDER2006開發(fā)中包是有優(yōu)先順序的,即使存在多個(gè)
             相同的類,優(yōu)先選擇第一個(gè)找到的類。WAS在這方面顯然存在不足,排異容錯(cuò)性不夠強(qiáng)大。
    現(xiàn)象二:
            錯(cuò)誤信息:
                   
    Error 500: LinkageError while defining class: com.gzedu.eecn.structure.login.action.UserLoginAction Could not be defined due to: com/gzedu/eecn/structure/login/action/UserLoginAction (Illegal constant pool type) This is often caused by having a class defined at multiple locations within the classloader hierarchy. Other potential causes include compiling against an older or newer version of the class that has an incompatible method signature. Dumping the current context classloader
          
    原因:
                     上傳的文件已經(jīng)損壞。重復(fù)試過很多次,發(fā)現(xiàn)本機(jī)器通過SSH上傳過程中文件已經(jīng)損壞。
             屬于本機(jī)問題。
            解決:
                   通過同事的機(jī)器上傳文件解決
            總結(jié):
                    類似此問題出現(xiàn)的幾率很小,可以認(rèn)為是相同的環(huán)境,使用相同的方式做一件事情也有可能出現(xiàn)
           不同的效果。再次出現(xiàn)類似問題可以更快的定位錯(cuò)誤點(diǎn)。
    現(xiàn)象三:
            錯(cuò)誤信息:
                      com.ibm.ws.jsp.translator.JspTranslationException: JSPG0227E: 轉(zhuǎn)換 /login.jsp: 
    /login.jsp(1,1) --> JSPG0145E: 未知 JSP 元素:jsp:directive.pagelanguage
             原因:
                      windows環(huán)境、tomcat作為服務(wù)器開發(fā),部署到sit、unix環(huán)境,會(huì)出現(xiàn)頁面不同的開發(fā)環(huán)境會(huì)
             有中文問題,或是說重復(fù)定義encoding的問題頁面編碼問題。
             解決:
                按照如下進(jìn)行修改和配置;
                         
    1. 對(duì)于不是被include的頁面必須使用;
                   <%@ page contentType="text/html;charset=GBK" pageEncoding="GBK" language="java" %>
                   。 大寫GBK
                         2. 對(duì)于被Include的頁面必須使用如下;
                   。<%@ page pageEncoding="GBK" language="java" %>
                 注:在TOMCAT4.1.30-->was5.0,6.0出現(xiàn)此問題
            

    posted @ 2006-01-25 15:09 ceaboat 閱讀(2065) | 評(píng)論 (0)編輯 收藏
    sun.jdbc.rowset.CachedRowSet是sun提供的緩存數(shù)據(jù)集的一個(gè)類(數(shù)據(jù)集持久化),對(duì)BLOG,CLOG不能支持,LOG的容量是4G,結(jié)果集里存在LOG字段緩存時(shí)會(huì)報(bào)java.lang.NumberFormatException: For input string: "4294967295"
    據(jù)說sun對(duì)LOG的支持原來是2G,不曉得是否有支持4G的類。

    對(duì)于原來使用的com.sun.rowset.CachedRowSetImpl深感疑惑此類在緩存number字段的時(shí)候如果SCALE沒聲明會(huì)報(bào)不能小于0的異常
    posted @ 2005-12-09 09:57 ceaboat 閱讀(856) | 評(píng)論 (0)編輯 收藏
    1.GB2312支持拼音排序,GBK、GB18030不支持。2005年11月23日15:31:42
    2.websphere5與6的區(qū)別:5對(duì)路徑不需要/,而6必須要/,否則因?yàn)樯倭?找不到相應(yīng)的配置文件
    posted @ 2005-11-23 15:31 ceaboat 閱讀(346) | 評(píng)論 (0)編輯 收藏

    參與一個(gè)項(xiàng)目要做到:
    1.項(xiàng)目中有你參與整個(gè)項(xiàng)目進(jìn)展會(huì)順利的多。體現(xiàn)你的重要性。
    2.一個(gè)人的能力再強(qiáng),精力是有限的。切記不可體現(xiàn)個(gè)人主義,充分發(fā)揮團(tuán)隊(duì)能力,協(xié)調(diào)、配合往往比
       技術(shù)重要性排前一個(gè)位置。
    3.主動(dòng)承擔(dān)一些責(zé)任,對(duì)團(tuán)隊(duì)可提高士氣融合的氣氛、對(duì)個(gè)人當(dāng)成一個(gè)磨練的機(jī)會(huì)。
    4.注意項(xiàng)目中遇到的一些細(xì)小的問題。最不起眼的就是最能考驗(yàn)個(gè)人細(xì)心的程度,自己負(fù)責(zé)的事情要做到
       最好。
    5.同一件事情不同的人處理效果不同。

    posted @ 2005-11-10 00:21 ceaboat 閱讀(440) | 評(píng)論 (0)編輯 收藏
    通過URL來訪問網(wǎng)站,action里request.getMothod()得到的GET.
    而通過FORM來提交的則可以設(shè)置POST,可以通過這兩種方
    式的差異來做一些第一次訪問與之后訪問的一些個(gè)性化設(shè)置。
    posted @ 2005-11-09 20:17 ceaboat 閱讀(368) | 評(píng)論 (0)編輯 收藏

    增加翻頁接口,滿足各種分頁不同的界面化顯示。
    代碼已經(jīng)開發(fā)完,工具需要做小量修改,進(jìn)期主要任務(wù)是編寫使用手冊(cè)。
    2005年10月16日21:43:36

    posted @ 2005-10-16 21:43 ceaboat 閱讀(357) | 評(píng)論 (0)編輯 收藏
    10.1到珠海過關(guān)的時(shí)候檢查邊防證,偶可是沒那小本本,邊警上來搜查,抓了4個(gè)人下去補(bǔ)辦。(很多人都是沒辦的)看來穿著整齊是有點(diǎn)效果,人品好麻煩自然少
    posted @ 2005-10-03 21:50 ceaboat 閱讀(424) | 評(píng)論 (0)編輯 收藏

    打算到上海浙江一帶去放松,解決工作上的壓力。現(xiàn)在是去不成了,國慶4天假,廣州不是放松的好地方。白云山還算可以一去,只好改去珠海玩兩天,吃點(diǎn)海鮮補(bǔ)償補(bǔ)償了

    posted @ 2005-10-01 12:59 ceaboat 閱讀(417) | 評(píng)論 (0)編輯 收藏
    WASD支持熱啟動(dòng),修改代碼保存服務(wù)器進(jìn)行實(shí)時(shí)更新,CachedRowSet crs = new CachedRowSetImpl();緩存數(shù)據(jù)集出異常。服務(wù)器熱啟動(dòng)與緩存機(jī)制之間有沖突。
    posted @ 2005-10-01 12:54 ceaboat 閱讀(436) | 評(píng)論 (0)編輯 收藏

    ??????????????????????????????????????????????????????????測(cè)試源代碼

    CapabilityForConnection?主運(yùn)行程序,讀取配置文件init.properties、reference.properties初始化參數(shù)。調(diào)用POOLTEST(一次完整的測(cè)試用例),計(jì)算其平均時(shí)間與使用連接數(shù)

    package?com.cea.repository.test;

    import
    ?org.apache.commons.logging.LogFactory;
    import
    ?org.apache.commons.logging.Log;
    import
    ?java.util.Properties;
    import
    ?java.io.FileInputStream;
    import
    ?java.io.InputStream;

    public?class
    ?CapabilityForConnection?{
    ????
    private?static?Log?log?=?LogFactory.getLog(CapabilityForConnection.class
    );
    ????
    /**

    ?????*?計(jì)算一次測(cè)試所消耗的時(shí)間
    ?????
    */
    ????
    public?static?long?times?=?0;
    ????
    /**

    ?????*?連接數(shù)
    ?????
    */
    ????
    public?static?long?psize?=?0;

    ????
    public?static?void?main(String[]?args)?throws
    ?Exception?{
    ????????
    /**

    ?????????*?運(yùn)行的次數(shù)
    ?????????
    */
    ????????
    int?size?=?1;
    ????????
    /**

    ?????????*?見POOLTEST說明
    ?????????
    */
    ????????
    int?execsum?=?0;
    ????????
    /**

    ?????????*?見POOLTEST說明
    ?????????
    */
    ????????
    int?opencon?=?0;
    ????????
    /**

    ?????????*?execsum對(duì)應(yīng)properties的命名
    ?????????
    */
    ????????String?execs?
    =?null;
    ????????
    /**

    ?????????*?opencon對(duì)應(yīng)properties的命名
    ?????????
    */
    ????????String?openc?
    =?null;

    ????????
    long?sumtime?=?0
    ;
    ????????Properties?prop?
    =?initProperty("reference.properties"
    );
    ????????Properties?init?
    =?initProperty("init.properties"
    );

    ????????
    if?(init.size()?>?0
    )?{
    ????????????Object?o?
    =?init.get("init"
    );
    ????????????size?
    =
    ?Integer.parseInt(o.toString());
    ????????????execs?
    =?init.get("name0"
    ).toString();
    ????????????openc?
    =?init.get("name1"
    ).toString();
    ????????}

    ????????
    for?(int?i?=?0;?i?<?prop.size()?/?2;?i++
    )?{
    ????????????execsum?
    =?Integer.parseInt(prop.getProperty(execs?+
    ?i).toString());
    ????????????opencon?
    =?Integer.parseInt(prop.getProperty(openc?+
    ?i).toString());
    ????????????sumtime?
    =?0
    ;
    ????????????psize?
    =?0
    ;
    ????????????log.info(
    ""?+?(i?+?1)?+?"組數(shù)據(jù):"
    );
    ????????????log.info(
    "并發(fā)應(yīng)用數(shù):"?+?execsum?+?"?模擬連接數(shù):"?+
    ?opencon);

    ????????????String[]?reference?
    =?{""?+?execsum,?""?+
    ?opencon};
    ????????????
    for?(int?j?=?0;?j?<?size;?j++
    )?{
    ????????????????times?
    =?0
    ;
    ????????????????PoolTest.main(reference);
    ????????????????sumtime?
    +=
    ?times;
    ????????????}
    ????????????log.info(
    ""?+?(i?+?1)?+?"組數(shù)據(jù)共執(zhí)行"?+?size?+?"次;平均耗時(shí)為:"?+

    ?????????????????????sumtime?
    /?(size?*?execsum)?+?"毫秒");
    ????????????log.info(
    "平均使用"?+?psize?/?size?+?"個(gè)連接"
    );

    ????????}
    ????}

    ????
    private?static?Properties?initProperty(String?filename)?throws
    ?Exception?{
    ????????InputStream?is?
    =?new
    ?FileInputStream(filename);
    ????????Properties?prop?
    =?new
    ?Properties();
    ????????prop.load(is);
    ????????
    return
    ?prop;

    ????}
    }

    POOLTEST計(jì)算一次完整過程耗時(shí),統(tǒng)計(jì)消耗的連接
    package?com.cea.repository.test;

    import
    ?com.cea.repository.test.testdata.MainExecute;
    import
    ?java.util.HashMap;
    import
    ?java.util.Map;
    import
    ?com.cea.repository.connection.PoolSupper;
    import
    ?org.apache.commons.logging.LogFactory;
    import
    ?org.apache.commons.logging.Log;
    /**

    ?*
    ?*?

    Title:?連接池性能測(cè)試


    ?*
    ?*?

    Description:?測(cè)試不合理的利用連接對(duì)WEB應(yīng)用所造成影響.


    ?*
    ?*?

    Copyright:?Copyright?(c)?2005


    ?*
    ?*?

    Company:?


    ?*
    ?*?
    @author?小舟
    ?*?
    @version
    ?1.0
    ?
    */

    public?class?PoolTest?extends?Thread?{
    ????
    private?static?Log?log?=?LogFactory.getLog(PoolTest.class
    );
    ????
    /**

    ?????*?并發(fā)執(zhí)行MainExecute的數(shù)量
    ?????
    */
    ????
    private?static?int?EXECUTESUM?=?35;
    ????
    /**

    ?????*?一次MainExecute執(zhí)行所請(qǐng)求的連接數(shù)
    ?????
    */
    ????
    public?static?int?CONNECTIONS?=?3;
    ????
    /**

    ?????*?記錄所使用的連接
    ?????
    */
    ????
    public?static?Map?poolTestMap?=?new?HashMap();
    ????
    /**

    ?????*?第sum次執(zhí)行MainExecute所需要的時(shí)間
    ?????
    */
    ????
    public?int?sum?=?0;

    ????
    public?void
    ?run()?{
    ????????
    try
    ?{
    ????????????
    long?s?=
    ?System.currentTimeMillis();
    ????????????com.cea.repository.test.testdata.MainExecute.main(
    null
    );
    ????????????
    long?t?=?System.currentTimeMillis()?-
    ?s;
    ????????????CapabilityForConnection.times?
    +=
    t;
    //
    ????????????if(CapabilityForConnection.times?//????????????????CapabilityForConnection.times?=?t;
    //
    ????????????}

    //
    ????????????log.info("time"?+?(++sum)?+?":"?+
    //???????????????????????????????(System.currentTimeMillis()?-?s));

    ????????}?catch?(Exception?ex)?{
    ????????}
    ????}

    ????
    public?static?void?main(String[]?args)?throws
    ?Exception?{
    ????????
    if(args!=?null?&&?args.length>1
    ){
    ????????????EXECUTESUM?
    =?Integer.parseInt(args[0
    ]);
    ????????????CONNECTIONS?
    =?Integer.parseInt(args[1
    ]);
    ????????}

    ????????PoolSupper.initPool();
    ????????startExec(EXECUTESUM);
    ????????
    //設(shè)定足夠長(zhǎng)的時(shí)間等待所有程序執(zhí)行完,得到準(zhǔn)確的并發(fā)執(zhí)行所消耗的時(shí)間

    ????????try?{
    ????????????Thread.sleep(
    6000
    );
    ????????}?
    catch
    ?(InterruptedException?ex)?{
    ????????????ex.printStackTrace();
    ????????}
    ????????log.info(
    "運(yùn)行平均耗時(shí):"?+?CapabilityForConnection.times/
    EXECUTESUM);
    ????????
    //如果條件成立,證明連接沒有被回收,只要存在一個(gè)相同的,就證明連接被重復(fù)利用了

    ????????CapabilityForConnection.psize?+=poolTestMap.size();
    ????????
    if?(poolTestMap.size()?==
    ?EXECUTESUM)?{
    ????????????log.info(
    "不存在重復(fù)使用的連接,共創(chuàng)建"?+?poolTestMap.size()+?"個(gè)連接"
    ?);
    ????????}?
    else
    ?{
    ????????????log.info(
    "共使用"?+?poolTestMap.size()+?"個(gè)連接"
    ?);
    ????????}
    ????????clear();
    ????}

    ????
    private?static?void?startExec(int
    ?EXECUTESUM)?{
    ????????
    int?i?=?0
    ;
    ????????
    while?(i?<
    ?EXECUTESUM)?{
    ????????????
    if?(i++?<
    ?EXECUTESUM)?{
    ????????????????
    try
    ?{
    ????????????????????
    new
    ?PoolTest().start();
    ????????????????}?
    catch
    ?(Exception?ex2)?{
    ????????????????}
    ????????????}
    ????????}
    ????}
    ????
    private?static?void
    ?clear()?{
    ????????poolTestMap?
    =?new
    ?HashMap();
    ????}


    }

    簡(jiǎn)單的不能再簡(jiǎn)單的測(cè)試代碼:
    package?com.cea.repository.test.testdata;

    import
    ?com.cea.repository.connection.drive.ConnectionFactory;
    import
    ?java.sql.Connection;
    import
    ?java.sql.Statement;
    import
    ?java.sql.ResultSet;
    import
    ?java.sql.PreparedStatement;
    import
    ?java.util.HashMap;
    import
    ?java.util.Map;
    import
    ?java.util.List;
    import
    ?java.util.ArrayList;
    import
    ?com.cea.repository.test.PoolTest;
    import
    ?com.cea.repository.connection.poolpository.PoolFactory;

    /**

    ?*?
    ?*?

    Title:?


    ?*?

    Description:?


    ?*?

    Copyright:?Copyright?(c)?2004


    ?*?

    Company:?cea


    ?*?
    @author?小舟
    ?*?
    @version
    ?1.0
    ?
    */

    public?class?MainExecute?{
    ????
    public?static?void?main(String[]?args)?throws
    ?Exception?{
    ???????testConnection();
    ????}

    ????
    static?void?testConnection()?throws
    ?Exception?{
    ????????
    for?(int?i?=?0;?i?<?PoolTest.CONNECTIONS;?i++
    )?{
    ????????????Connection?con?
    =
    ?PoolFactory.newInstance();
    ????????????
    //這里的改變直接影響連接的復(fù)用

    ????????????Thread.sleep(50);
    ????????????PoolTest.poolTestMap.put(con.toString(),?
    ""
    );
    ????????????con.close();
    ????????}
    ????}

    }

    三個(gè)配置文件的內(nèi)容:
    init.properties文件
    #運(yùn)行的次數(shù)
    init
    =5

    #并發(fā)執(zhí)行MainExecute的數(shù)量所匹配的名字
    name0
    =execsum
    #一次MainExecute執(zhí)行所請(qǐng)求的連接數(shù)所匹配的名字
    name1
    =opencon

    reference.properties文件
    #過濾數(shù)據(jù)
    execsum0
    =10

    opencon0
    =1
    #第一次測(cè)試數(shù)據(jù)
    execsum1
    =100
    opencon1
    =6
    #第二次測(cè)試數(shù)據(jù)
    execsum2
    =85
    opencon2
    =9
    #第三次測(cè)試數(shù)據(jù)
    execsum3
    =140
    opencon3
    =3

    最后一個(gè)是pool-config.xml數(shù)據(jù)源配置:
    xml?version="1.0"?encoding="GB2312"?>
    <DataResources>
    ??
    <ResourceParams?dateIndentity="boat1">
    ????
    <defaultAutoCommit>falsedefaultAutoCommit>
    ????
    <initialSize>30initialSize>
    ????
    <maxActive>40maxActive>
    ????
    <minIdle>0minIdle>
    ????
    <maxIdle>18maxIdle>
    ????
    <maxWait>10000maxWait>
    ????
    <username>forumusername>
    ????
    <password>kingpassword>
    ????
    <driverClassName>oracle.jdbc.driver.OracleDriverdriverClassName>
    ????
    <url>jdbc:oracle:thin:@192.168.1.3:1521:gzesturl>
    ????
    <removeAbandoned>trueremoveAbandoned>
    ????
    <removeAbandonedTimeout>10removeAbandonedTimeout>
    ????
    <logAbandoned>truelogAbandoned>
    ??
    ResourceParams>
    DataResources>
    posted @ 2005-09-26 22:36 ceaboat 閱讀(1652) | 評(píng)論 (0)編輯 收藏

             影響性能的測(cè)試報(bào)告(數(shù)據(jù)庫版)

    引言

    如需轉(zhuǎn)載,請(qǐng)與筆者聯(lián)系

     

    前提:項(xiàng)目組里無用到SPRING進(jìn)行事務(wù)的管理。項(xiàng)目里以功能劃分到每個(gè)人手里,

    形成了BODAOACTIONVIEW都是單人負(fù)責(zé)。在DAO中每個(gè)動(dòng)作都以

          封閉式的形式存在。

    問題:造成事務(wù)的不連貫性。功能是做出來了,性能問題遲早暴露。

    測(cè)試:主要針對(duì)程序頻繁請(qǐng)求數(shù)據(jù)庫連接對(duì)WEB應(yīng)用所造成影響做一個(gè)測(cè)試。

     

     

    先做必要的說明,一步步引入正題,先從性能瓶頸開始:

    性能瓶頸

    所有的應(yīng)用程序都存在性能瓶頸,為了提高應(yīng)用程序的性能,就要盡可能的減少程序的瓶頸。以下是在JAVA程序中經(jīng)常存在的性能瓶頸。

    pingjing.jpg
    了解了這些瓶頸后,就可以有針對(duì)性的減少這些瓶頸,從而提高JAVA應(yīng)用程序的性能

     

    數(shù)據(jù)庫連接池工作原理

    關(guān)于連接池的實(shí)現(xiàn)原理測(cè)試方案:

    經(jīng)過資料的收集與APACHE DBCP里連接池的查閱,對(duì)現(xiàn)有的連接池工作

    原理有兩種方式:

    1.        數(shù)據(jù)庫預(yù)先設(shè)置配置好的連接數(shù)。待得到用戶請(qǐng)求連接,傳出一個(gè)連接,而后為了保持供應(yīng)數(shù)再提前創(chuàng)建連接,即提前預(yù)備連接數(shù)供請(qǐng)求。比如:

    5個(gè)通行道代表最大激活的連接數(shù),最小2個(gè)閑置連接數(shù)。也就是說連接池里始終預(yù)備了2個(gè)可隨時(shí)提供的連接,連接的創(chuàng)建開銷是比較大的,連接池的存在就是了能夠最小化的解決創(chuàng)建所等待的時(shí)間。

      1            O

      2            O

      3            *

      4            *

      5            *

      如上圖,當(dāng)1分配出去時(shí)由于池中連接數(shù)剩一個(gè),為保持最小閑置,會(huì)自動(dòng)創(chuàng)建一個(gè)新的連接以防止再次請(qǐng)求等待創(chuàng)建的時(shí)間。這樣確實(shí)減少了等待的時(shí)間,但是數(shù)據(jù)庫創(chuàng)建的開銷方面并未得到解決。如果把1-5比喻成汽車,那么這種情況下每量車都是一次性使用。1被請(qǐng)求后下一個(gè)連接將是6來接替。那么如何能夠重復(fù)利用1減少數(shù)據(jù)庫開銷。于是引出第二種方式。

     

    2.        回收使用完后的連接,放回到池中進(jìn)行循環(huán)利用。這么做必須能保證2點(diǎn)

       .  使連接能夠保持有效的回收。

       .  約束使用者使用釋放的動(dòng)作,而不是直接把連接close.

     

    本人使用的是APACHE DBCPBasicDataSource的連接池基本實(shí)現(xiàn),

    經(jīng)過代碼與測(cè)試結(jié)果顯示,其工作方式是基于二的。

     

    BasicDataSource測(cè)試用例

    請(qǐng)看測(cè)試用例

    測(cè)試結(jié)果:


    2組數(shù)據(jù):

    并發(fā)應(yīng)用數(shù):100 模擬連接數(shù):6

    運(yùn)行平均耗時(shí):2956

    共使用51個(gè)連接

    運(yùn)行平均耗時(shí):3391

    2共使用52個(gè)連接

    運(yùn)行平均耗時(shí):2616

    共使用47個(gè)連接

    運(yùn)行平均耗時(shí):3377

    共使用41個(gè)連接

    運(yùn)行平均耗時(shí):3673

    共使用46個(gè)連接

    2組數(shù)據(jù)共執(zhí)行5;平均耗時(shí)為:3229毫秒

    平均使用47個(gè)連接

     

    3組數(shù)據(jù):

    并發(fā)應(yīng)用數(shù):85 模擬連接數(shù):9

    運(yùn)行平均耗時(shí):4830

    共使用53個(gè)連接

    運(yùn)行平均耗時(shí):3247

    共使用49個(gè)連接

    運(yùn)行平均耗時(shí):4116

    共使用40個(gè)連接

    運(yùn)行平均耗時(shí):4070

    共使用43個(gè)連接

    運(yùn)行平均耗時(shí):4053

    共使用54個(gè)連接

    3組數(shù)據(jù)共執(zhí)行5;平均耗時(shí)為:4063毫秒

    平均使用47個(gè)連接

     

    4組數(shù)據(jù):

    并發(fā)應(yīng)用數(shù):140 模擬連接數(shù):3

    運(yùn)行平均耗時(shí):2076

    共使用47個(gè)連接

    運(yùn)行平均耗時(shí):3104

    共使用51個(gè)連接

    運(yùn)行平均耗時(shí):2048

    共使用43個(gè)連接

    運(yùn)行平均耗時(shí):2421

    共使用50個(gè)連接

    運(yùn)行平均耗時(shí):2751

    共使用50個(gè)連接

    4組數(shù)據(jù)共執(zhí)行5;平均耗時(shí)為:2480毫秒

    平均使用48個(gè)連接

     

    每次測(cè)試的結(jié)果都可能不同,但是所得到的結(jié)論是一致的。數(shù)據(jù)顯示不合理的請(qǐng)求使用連接嚴(yán)重的影響應(yīng)用所能承受的并發(fā)數(shù)量,響應(yīng)的時(shí)間也因此受到影響。

     

    目前普遍存在的問題

    沒有把事務(wù)控制好,一般會(huì)出現(xiàn)以下的情況:

    事務(wù)(){

      流程1();

      流程2();

    }

    可以看出流程12里都是單獨(dú)創(chuàng)建連接,并在自己的流程里完成操作。

    如果在流程2里出現(xiàn)異常,那么流程1所做的操作是不可恢復(fù)的。

    如果能控制在事務(wù)范圍內(nèi),如:

    事務(wù)(){

      Connection con;

      流程1(con);

      流程2(con);

      con.close();

    }

    那么數(shù)據(jù)庫少提供一個(gè)連接,事務(wù)的完成性也得到體現(xiàn)。在并發(fā)數(shù)量大的時(shí)候,

    效率上就有非常明顯的區(qū)別。

    解決方案

    1.  盡量保持少的請(qǐng)求

    DAO中有update()方法,則應(yīng)再擴(kuò)展一個(gè)方法update(Connection conn)

    在業(yè)務(wù)邏輯事務(wù)里調(diào)用update(Connection conn),一般情況下調(diào)用update()

    2.  對(duì)于數(shù)據(jù)不變的情況采用緩存技術(shù),或部分緩存技術(shù)。

          可參照一些相關(guān)的開源的項(xiàng)目(JIVE)。

    posted @ 2005-09-25 17:21 ceaboat 閱讀(1664) | 評(píng)論 (4)編輯 收藏
    主站蜘蛛池模板: 中文字幕在线视频免费| 亚洲AV无码一区二区三区电影| 日韩精品视频在线观看免费| 成人av免费电影| 亚洲中文字幕无码av永久| 国产成人精品免费午夜app| 亚洲视屏在线观看| 五月婷婷综合免费| 亚洲国产精品白丝在线观看| 波多野结衣在线免费观看| 91亚洲精品自在在线观看| 一色屋成人免费精品网站| 国产成人亚洲精品| 永久久久免费浮力影院| 免费毛片毛片网址| 国产亚洲精品不卡在线| 好久久免费视频高清| 亚洲欧洲日产国码在线观看| 啦啦啦高清视频在线观看免费| 亚洲成a人无码亚洲成av无码 | 国产亚洲A∨片在线观看 | 一级女人18片毛片免费视频| 国产亚洲精品看片在线观看| 你懂得的在线观看免费视频| 久久精品国产亚洲AV无码麻豆| 久久久久久99av无码免费网站| 欧洲亚洲综合一区二区三区 | 国内永久免费crm系统z在线| 亚洲国产成人久久99精品| 成年女人午夜毛片免费视频| 四虎国产精品永免费| 亚洲AV无码一区二区二三区软件 | 在线亚洲v日韩v| 亚洲AV无码1区2区久久| 午夜成年女人毛片免费观看| 精品国产呦系列在线观看免费| 久久青青草原亚洲av无码app| 国产免费AV片无码永久免费| 国产成人AV免费观看| 亚洲熟妇无码AV不卡在线播放| 亚洲人成伊人成综合网久久久|