• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    WebLogic Server中CMP實體bean的性能調優[3]

    發布: 2008-8-25 12:17 | 作者: 網絡轉載 | 來源: 本站原創 | 查看: 30次 | 進入軟件測試論壇討論

    領測軟件測試網 樂觀并發

      樂觀并發策略通過消除讀取和更新操作之間數據庫中的所有鎖定解決了性能問題,同時還提供了檢測更新丟失的機制。和數據庫并發一樣,樂觀并發給每個事務一個自己的bean實例,但是它沒有在事務進行過程中在EJB容器或數據庫中包含任何鎖。對于進行讀鎖定的數據庫(非Oracle數據庫),容器在一個單獨的事務(該事務在數據讀取操作一完成就立即進行)中讀取bean數據,從而避免了讀取鎖,并且提供了更高的可伸縮性。

      這種更新丟失檢測機制并不新鮮,在Java創建之前就已經存在好長時間了。該模式的基本思想簡單而強大:在更新時,首先進行檢查,以確定表中的數據在被第一個進程讀取之后是否被其他進程修改。實際中,這通常是通過在update語句的where子句中包含一個或多個額外的“版本”列來實現的。下面給出了一個簡單的SQL的例子,其中version列是一個數值,在每次更新操作之后會遞增:

    -- at Entity load time"container executes select of bean fields,
    -- plus 'version' field
    select name, address, version from person where person_id = 1;
    -- container remember value read from version column,
    -- say it was 123
     
    -- at update time, value of version which was read previously
    -- added to the where clause and version incremented
    update person set name='Joe', version = version + 1 where person_id = 1 and version = 123;


      在進行更新時,容器通過執行以下代碼能檢測出數據庫中實際上有多少行被更新:

    ...
    PreparedStatement ps =
           connection.prepareStatement('update person...');
    int rowsUpdated = ps.executeUpdate();
    if (rowsUpdatated != 1) {
        throw new OptimisticConcurrencyException('Data was modified by other process');
    }


      如您所見,該方法可使服務器避免更新丟失問題,并且不需要在容器或數據庫中進行長期的鎖定。該策略尤其適用于數據庫中讀取次數遠多于更新次數,因此更新碰撞的幾率很小時。通常,對于大部分應用程序來說是這樣的。

      一個用數字表示的版本列不是在WebLogic Server中實現樂觀并發策略的唯一途徑。相反可以使用一個時間戳列。(注意,數據庫應該允許您存放足夠精確的時間戳值)。時間戳的使用給您帶來了額外好處,那就是知道記錄的最后一次更新是什么時候。有時候在使用遺留數據庫模式時,會不愿意或不可能更改數據表以添加一個版本列。這種情況下,WebLogic Server可以檢查表中事務期間被讀取的所有列(實體bean中的所有字段),或者只檢查被當前事務更新的列。樂觀并發可用于遺留模式,無需對數據表進行任何修改,但是開銷略微增加(意味著更復雜的SQL更新)。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>