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

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

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

    Dev Zone
    偏執狂才能生存,人生/事業的路上需要再堅持一下
    但是又怎么說得清堅持的結果,道得盡堅持的含義
    1。XAPool是如何wrap jdbc driver返回的PreparedStatement的。
    以下是StandardConnectionHandler中的checkPreparedCache代碼片斷
    ????synchronized?PreparedStatement?checkPreparedCache(
    ????????String?sql,
    ????????
    int?type,
    ????????
    int?concurrency)
    ????????throws?SQLException?{
    ????????log.debug(
    ????????????
    "StandardConnectionHandle:checkPreparedCache?sql='"?+?sql?+?"'");
    ????????PreparedStatement?ret?
    =?null;?//?the?return?value
    ????????
    //?NOTE?-?We?include?the?Connection?in?the?lookup?key.?This?has?no
    ????????
    //?effect?here?but?is?needed?by?StandardXAConnection?where?the?the?physical
    ????????
    //?Connection?used?can?vary?over?time?depending?on?the?global?transaction.
    ????????String?lookupKey?=?sql?+?type?+?concurrency;
    ????????
    //?used?to?lookup?statements
    ????????if?(preparedStatementCache?!=?null)?{
    ????????????Object?obj?
    =?preparedStatementCache.get(lookupKey);
    ????????????
    //?see?if?there's?a?PreparedStatement?already
    ????????????if?(obj?!=?null)?{?//?if?there?is
    ????????????????ret?=?(PreparedStatement)?obj;?//?use?as?return?value
    ????????????????try?{
    ????????????????????ret.clearParameters();?
    //?make?it?look?like?new
    ????????????????}?catch?(SQLException?e)?{
    ????????????????????
    //?Bad?statement,?so?we?have?to?create?a?new?one
    ????????????????????ret?=?createPreparedStatement(sql,?type,?concurrency);
    ????????????????}

    ????????????????preparedStatementCache.remove(lookupKey);
    ????????????????
    //?make?sure?it?cannot?be?re-used
    ????????????????inUse.put(lookupKey,?ret);
    ????????????????
    //?make?sure?it?gets?reused?by?later?delegates
    ????????????}?else?{?//?no?PreparedStatement?ready
    ????????????????ret?=?createPreparedStatement(sql,?type,?concurrency);
    ????????????????inUse.put(lookupKey,?ret);
    ????????????????
    //?will?get?saved?in?prepared?statement?cache
    ????????????}
    ????????}?
    else?{
    ????????????ret?
    =?createPreparedStatement(sql,?type,?concurrency);
    ????????}
    ????????
    //?We?don't?actually?give?the?application?a?real?PreparedStatement.?Instead
    ????????
    //?they?get?a?StandardPreparedStatement?that?delegates?everything?except
    ????????
    //?PreparedStatement.close();

    ????????ret?
    =?new?StandardPreparedStatement(this,?ret,?lookupKey);
    ????????
    return?ret;
    ????}

    2。StandardPreparedStatement的Close方法代碼片斷
    ????public?void?close()?throws?SQLException?{
    ????????
    //?Note?no?check?for?already?closed?-?some?servers?make?mistakes
    ????????closed?=?true;
    ????????
    if?(con.preparedStmtCacheSize?==?0)?{
    ????????????
    //?no?cache,?so?we?just?close
    ????????????if?(ps?!=?null)?{
    ????????????????ps.close();
    ????????????}
    ????????}?
    else?{
    ????????????con.returnToCache(key);
    ????????????
    //?return?the?underlying?statement?to?the?cache
    ????????}
    ????}

    3。xapool StandardPoolDataSource的getConnection 原理:
    ???? StandardPoolDataSource.getConnection --> GenericPool.checkOut-->StandardPoolDataSource.create -->StandardPoolDataSource.getPooledConnection:返回StandardPooledConnection。
    ?
    ???? StandardPooledConnection通過StandardDataSource.getConnection獲取jdbc driver返回的connection(physical connection),然后通過工廠方法newConnectionHandle采用StandardConnectionHandler對該connection進行包裝。StandardConnectionHandler對PreparedStatement進行重新包裝和Cache,對connection.close進行了控制。
    ?
    4。xapool StandardXAPoolDataSource的getConnection的原理:
    ?? StandardXAPoolDataSource.getConnection -->StandardPoolDataSource.getConnection-->StandardXAPoolDataSource.create -->XADataSource.getXAConnection -->StandardXADatasource.getXAConnection:返回StandardXAConnection。
    ??? StandardXAConnection通過StandardDataSource.getConnection獲取jdbc driver返回的connection(physical connection),然后通過工廠方法newConnectionHandle采用StandardXAConnectionHandle對該connection進行包裝。StandardXAConnectionHandler繼承自StandardConnectionHandler。
    ?
    5。xapool從StandardPoolDataSource獲取的 Connection的關閉原理。
    ?? StandardPooledConnection.close-->StandardConnectionHandler.close(設置closed=true,回收PreparedStatement)-->StandardPooledConnection.closeEvent-->StandardPoolDataSource.connectionClosed-->GenericPool.checkIn(返回連接池)
    ?
    6.xapool中對連接池進行管理的類是GenericPool,該類的checkOut和checkIn方法分別完成連接獲取和連接回收功能。checkOut從unlocked池中獲取可用的連接,如果需要進行檢查或者測試,然后返回;如果發現unlocked池中沒有連接,在連接數小于maxSize的時候調用PoolHelper的實現類創建連接,如果連接數已經達到或者超過maxSize,調用wait使當前進程進入等待狀態(等待期限和等待間隔可以設置),如果等待過程中其他線程釋放了connection返回可用的connection,否則異常:GenericPool:checkOut ERROR? impossible to obtain a new object from the pool
    posted on 2005-05-17 22:07 dev 閱讀(1814) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
     
    主站蜘蛛池模板: 成人电影在线免费观看| 暖暖免费中文在线日本| 97av免费视频| 亚洲av午夜福利精品一区人妖| 国产va免费精品| 国产亚洲大尺度无码无码专线| 一级一黄在线观看视频免费| 亚洲日韩人妻第一页| 国产vA免费精品高清在线观看 | 日韩在线观看视频免费| 国产不卡免费视频| 一级毛片免费毛片毛片| 国产国拍亚洲精品福利| 无码人妻久久一区二区三区免费 | 亚洲欧洲日本国产| 韩国免费一级成人毛片| 亚洲妇女无套内射精| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产成人亚洲综合一区| 日韩免费一区二区三区| 在线观看亚洲电影| 精品亚洲综合久久中文字幕| 最近中文字幕高清免费中文字幕mv| 亚洲国产一区在线观看| 成人亚洲综合天堂| 日本亚洲欧洲免费天堂午夜看片女人员 | 亚洲 自拍 另类小说综合图区 | 亚洲日韩国产精品乱-久| 日本免费中文字幕在线看| 一级免费黄色大片| 亚洲精品美女久久久久9999| 免费观看a级毛片| 久久久久久av无码免费看大片| 久久亚洲AV成人无码国产| 国产片免费福利片永久| a毛片久久免费观看| 亚洲综合国产成人丁香五月激情| 亚洲成A人片在线观看中文| 热re99久久6国产精品免费| 亚洲欧洲AV无码专区| 亚洲男同帅GAY片在线观看|