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

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

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

    隨筆-23  評論-6  文章-1  trackbacks-0
      2005年9月24日

    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/ (用于生成圖表的項目)
    EclipseME http://eclipseme.sourceforge.net/ (J2ME Developmnt Plugin for Eclipse)
    mvnForum http://sourceforge.net/projects/mvnforum/ (論壇)
    jChatBox http://www.javazoom.net/index.shtml (用servlet實現(xiàn)的WEB聊天引擎)
    POI http://jakarta.apache.org/poi/index.html (用于處理Excel,WORD等文檔的項目)
    FileUpload http://jakarta.apache.org/commons/fileupload/ (用于處理HTTP文件上傳得項目)
    PDFBox http://sourceforge.net/projects/pdfbox/ (處理PDF文檔的項目)
    Lucene http://jakarta.apache.org/lucene/index.html (搜索引擎)
    Digester http://jakarta.apache.org/commons/digester/ (處理XML信息的項目)
    DBCP http://jakarta.apache.org/commons/dbcp/ (數(shù)據(jù)庫連接池)
    AXIS http://ws.apache.org/axis/ (WebService 的實現(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)簽庫實現(xiàn)Web報表,使用的是jFreeChart引擎)
    Struts Menu http://sourceforge.net/projects/struts-menu/ (基于Struts的Web菜單項目)
    htmlparser http://sourceforge.net/projects/htmlparser/ (用于解析HTML信息的項目)
    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技巧的用法及示例代碼, 這是一個不錯的去處.
    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 維護的Java技術(shù)文章網(wǎng)站.
    http://www.java.net - Sun公司維護的一個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 - 最早的一個Java站點. 每周更新Java技術(shù)文章.
    http://www.devx.com/java - DevX維護的一個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的一個Java桌面技術(shù)社區(qū)網(wǎng)站.
    http://www.theserverside.com - 這是一個討論所有Java服務(wù)器端技術(shù)的網(wǎng)站.
    http://www.jars.com - 提供Java評論服務(wù). 包括各種framework和應(yīng)用程序.
    http://www.jguru.com - 一個非常棒的采用Q&A形式的Java技術(shù)資源社區(qū).
    http://www.javaranch.com - 一個論壇,得到Java問題答案的地方,初學(xué)者的好去處。
    http://www.ibiblio.org/javafaq/javafaq.html - comp.lang.java的FAQ站點 - 收集了來自comp.lang.java新聞組的問題和答案的分類目錄.
    http://java.sun.com/docs/books/tutorial/ - 來自SUN公司的官方Java指南 - 對于了解幾乎所有的java技術(shù)特性非常有幫助.
    http://www.javablogs.com - 互聯(lián)網(wǎng)上最活躍的一個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) | 評論 (0)編輯 收藏
     

    演示視頻請點擊

    1.   概述

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

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

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

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

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

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

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

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

    2.   Db2view架構(gòu)

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

               
        

                2.2          平臺說明

            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ù)字段中,可以選擇是否作為查詢的字段,勾選后該列成為查詢項,如果是時間字段還可以進行時間區(qū)間查詢的選擇。

    排序:列表中的每個字段都可以進行升序與降序的排列功能。

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

    學(xué)校名稱

    學(xué)校管理員

    廣東廣雅中學(xué)

    黃光裕

    廣州先烈東小學(xué)

    王興東

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

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

              2.2.2              擴展層

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

     

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

     

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

     

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

     

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

       3.   平臺優(yōu)缺點

      

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

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

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

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

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

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

    Db2view開發(fā)流程:

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

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

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

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

     


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

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

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

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

    語言:JAVA

    JDK版本:1.4以上

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

        5.   部署

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

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

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

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

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

    缺點:

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

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

    3.    安全性相對另一種模式低。

     

       組件模式:

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

    優(yōu)點:

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

        缺點:

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

    5分鐘生成功能例子,對此工具有興趣者請加群:12990321.

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

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

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

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

    4.智慧的代價是矛盾。這是人生對人生觀開的玩笑。

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

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

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

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

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

    10.也許有些人很可惡,有些人很卑鄙。而當(dāng)我設(shè)身為他想象的時候,我才知道:他比我還可憐。所以請原諒所有你見過的人,好人或者壞人。

    11.魚對水說你看不到我的眼淚,因為我在水里.水說我能感覺到你的眼淚,因為你在我心里。

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

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

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

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

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

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

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

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

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

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

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

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

    24.后悔是一種耗費精神的情緒.后悔是比損失更大的損失,比錯誤更大的錯誤.所以不要后悔 。

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

    現(xiàn)象一:
             錯誤信息:
                     java.lang.SecurityException: sealing violation: can't seal package oracle.jdbc.driver: already loaded
             原因:
                     was啟動的lib里存在多個ORACLE DRIVER。
             解決:
                     保留最新的一個驅(qū)動包解決。
             遺留問題:
                     開發(fā)環(huán)境使用TOMCAT發(fā)布無此問題,JBUILDER2006開發(fā)中包是有優(yōu)先順序的,即使存在多個
             相同的類,優(yōu)先選擇第一個找到的類。WAS在這方面顯然存在不足,排異容錯性不夠強大。
    現(xiàn)象二:
            錯誤信息:
                   
    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)本機器通過SSH上傳過程中文件已經(jīng)損壞。
             屬于本機問題。
            解決:
                   通過同事的機器上傳文件解決
            總結(jié):
                    類似此問題出現(xiàn)的幾率很小,可以認(rèn)為是相同的環(huán)境,使用相同的方式做一件事情也有可能出現(xiàn)
           不同的效果。再次出現(xiàn)類似問題可以更快的定位錯誤點。
    現(xiàn)象三:
            錯誤信息:
                      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)境,會出現(xiàn)頁面不同的開發(fā)環(huán)境會
             有中文問題,或是說重復(fù)定義encoding的問題頁面編碼問題。
             解決:
                按照如下進行修改和配置;
                         
    1. 對于不是被include的頁面必須使用;
                   <%@ page contentType="text/html;charset=GBK" pageEncoding="GBK" language="java" %>
                   。 大寫GBK
                         2. 對于被Include的頁面必須使用如下;
                   。<%@ page pageEncoding="GBK" language="java" %>
                 注:在TOMCAT4.1.30-->was5.0,6.0出現(xiàn)此問題
            

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

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

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

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

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

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

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

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

    ??????????????????????????????????????????????????????????測試源代碼

    CapabilityForConnection?主運行程序,讀取配置文件init.properties、reference.properties初始化參數(shù)。調(diào)用POOLTEST(一次完整的測試用例),計算其平均時間與使用連接數(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
    );
    ????
    /**

    ?????*?計算一次測試所消耗的時間
    ?????
    */
    ????
    public?static?long?times?=?0;
    ????
    /**

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

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

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

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

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

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

    ?????????*?opencon對應(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?+?"次;平均耗時為:"?+

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

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

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

    ????}
    }

    POOLTEST計算一次完整過程耗時,統(tǒng)計消耗的連接
    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:?連接池性能測試


    ?*
    ?*?

    Description:?測試不合理的利用連接對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í)行所請求的連接數(shù)
    ?????
    */
    ????
    public?static?int?CONNECTIONS?=?3;
    ????
    /**

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

    ?????*?第sum次執(zhí)行MainExecute所需要的時間
    ?????
    */
    ????
    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í)行完,得到準(zhǔn)確的并發(fā)執(zhí)行所消耗的時間

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

    ????????CapabilityForConnection.psize?+=poolTestMap.size();
    ????????
    if?(poolTestMap.size()?==
    ?EXECUTESUM)?{
    ????????????log.info(
    "不存在重復(fù)使用的連接,共創(chuàng)建"?+?poolTestMap.size()+?"個連接"
    ?);
    ????????}?
    else
    ?{
    ????????????log.info(
    "共使用"?+?poolTestMap.size()+?"個連接"
    ?);
    ????????}
    ????????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();
    ????}


    }

    簡單的不能再簡單的測試代碼:
    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();
    ????????}
    ????}

    }

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

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

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

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

    最后一個是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) | 評論 (0)編輯 收藏

             影響性能的測試報告(數(shù)據(jù)庫版)

    引言

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

     

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

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

          封閉式的形式存在。

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

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

     

     

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

    性能瓶頸

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

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

     

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

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

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

    原理有兩種方式:

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

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

      1            O

      2            O

      3            *

      4            *

      5            *

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

     

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

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

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

     

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

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

     

    BasicDataSource測試用例

    請看測試用例

    測試結(jié)果:


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

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

    運行平均耗時:2956

    共使用51個連接

    運行平均耗時:3391

    2共使用52個連接

    運行平均耗時:2616

    共使用47個連接

    運行平均耗時:3377

    共使用41個連接

    運行平均耗時:3673

    共使用46個連接

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

    平均使用47個連接

     

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

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

    運行平均耗時:4830

    共使用53個連接

    運行平均耗時:3247

    共使用49個連接

    運行平均耗時:4116

    共使用40個連接

    運行平均耗時:4070

    共使用43個連接

    運行平均耗時:4053

    共使用54個連接

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

    平均使用47個連接

     

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

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

    運行平均耗時:2076

    共使用47個連接

    運行平均耗時:3104

    共使用51個連接

    運行平均耗時:2048

    共使用43個連接

    運行平均耗時:2421

    共使用50個連接

    運行平均耗時:2751

    共使用50個連接

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

    平均使用48個連接

     

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

     

    目前普遍存在的問題

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

    事務(wù)(){

      流程1();

      流程2();

    }

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

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

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

    事務(wù)(){

      Connection con;

      流程1(con);

      流程2(con);

      con.close();

    }

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

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

    解決方案

    1.  盡量保持少的請求

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

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

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

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

    posted @ 2005-09-25 17:21 ceaboat 閱讀(1664) | 評論 (4)編輯 收藏
    把ent.slip放入\Borland\JBuilder2006\license里
    posted @ 2005-09-24 13:45 ceaboat 閱讀(811) | 評論 (2)編輯 收藏
    主站蜘蛛池模板: 一级毛片在线免费视频| 亚洲av无码一区二区三区在线播放| 国产免费AV片在线观看播放| 免费国产成人午夜电影| 粉色视频在线观看www免费| 免费国产高清视频| 一级做性色a爰片久久毛片免费| 亚洲国产精品尤物YW在线观看| 免费国产成人高清在线观看网站| 亚洲色图黄色小说| 日韩不卡免费视频| 亚洲丰满熟女一区二区哦| 亚洲A∨精品一区二区三区| 久久久精品视频免费观看| 亚洲欧洲美洲无码精品VA| 91成人在线免费观看| 亚洲国产视频网站| 日韩特黄特色大片免费视频| 国产亚洲人成在线影院| 国产精品亚洲片在线观看不卡 | 免费国产a国产片高清| 一本到卡二卡三卡免费高| 亚洲av丰满熟妇在线播放| 波多野结衣免费在线观看| 亚洲AV无码一区二区三区电影 | 一本一道dvd在线观看免费视频 | 亚洲AV无码一区二区三区牛牛| 在线观看人成视频免费无遮挡| 亚洲乱亚洲乱淫久久| 女人毛片a级大学毛片免费| 羞羞视频在线观看免费| 2022年亚洲午夜一区二区福利 | 黄瓜视频影院在线观看免费| MM1313亚洲精品无码久久| 亚洲精品成人无限看| 99久久免费精品国产72精品九九| 亚洲无删减国产精品一区| 成人免费午夜视频| a级毛片视频免费观看| 亚洲真人无码永久在线观看| 亚洲中文字幕无码一区|