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

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

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

    posts - 66,  comments - 11,  trackbacks - 0
      基于Java的緩存實現(xiàn),最簡單的方式莫過于對集合類數(shù)據(jù)類型進行封裝。Hibernate提供了基于Hashtable的緩存實現(xiàn)機制,不過,由于其性能和功能上的局限,僅供開發(fā)調試中使用。同時,Hibernate還提供了面向第三方緩存實現(xiàn)的接口,如:
    HashTable--------------------------------net.sf.hibernate.cache.HashtableCacheProvider
    1、JSC
    2、EHCache->默認的二級Cache實現(xiàn)。--------net.sf.encache.hibernate.Provider
    3、OSCache-------------------------------net.sf.hibernate.cache.OSCacheProvider
    4、JBoss Cache->分布式緩存---------------net.sf.hibernate.cache.TreeCacheProvider
    5、SwarmCache----------------------------net.sf.hibernate.cache.SwarmCacheProvider
    相對于JSC而言,EHCache更加穩(wěn)定,并具備更好的混存調度性能,其缺陷是目前還無法做到分布式緩存。
    首先設置hibernate.cfg.xml然后設置ehcache.xml最后設置緩存策略。

      緩存同步策略決定了數(shù)據(jù)對象在緩存中的存取規(guī)則。為了使得緩存調度遵循正確的應用級事物隔離機制,我們必須為每個實體類指定相應的緩存同步策略。Hibernate提供4種內置的緩存同步策略:
    1、read-only:只讀。對于不會發(fā)生改變的數(shù)據(jù),可使用只讀型緩存。
    2、nonstrict-read-write:如果程序對并發(fā)訪問下的數(shù)據(jù)同步要求不是非常嚴格,且數(shù)據(jù)更新操作頻率較低,可以采用本選項。
    3、read-write:嚴格可讀寫緩存。
    4、transactional:事務型緩存,必須運行在JTA事物環(huán)境中。

      JDBC事物由Connection管理,也就是說,事務管理實際上是在JDBC Connection中實現(xiàn)。事務周期限于Connection的生命周期之類。同樣,對于基于JDBC Transaction的Hibernate事務管理機制而言,事物管理在Session所以托的JDBCConnection中實現(xiàn),事務周期限于Session的生命周期。
      JTA事物管理則由JTA容器實現(xiàn),JTA容器對當前加入事物的眾多Connection進行調度,實現(xiàn)其事務性要求。JTA的事物周期可橫跨多個JDBC Connectin生命周期。同樣對于基于JTA事務的Hibernate而言,JTA事物橫跨多個Session.

      Hibernate支持2種鎖機制:即通常所說的悲觀鎖和樂觀鎖。
      悲觀鎖的實現(xiàn),往往依靠數(shù)據(jù)庫提供的鎖機制。典型的悲觀鎖調用:
      select * from account where name=="Erica" for update
    package com.hibernate.higherApplication;

    import java.util.List;

    import junit.framework.TestCase;

    import org.hibernate.Criteria;
    import org.hibernate.HibernateException;
    import org.hibernate.LockMode;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.criterion.Expression;

    public class LockOperator extends TestCase {
        
    private Session session = null;
        
    /**
         * 初始化資源
         
    */
        
    protected void setUp() throws Exception {
            
    try {
                
    //加載類路徑下的hibernate.cfg.xml文件
                Configuration config = new Configuration().configure();
                
    //創(chuàng)建sessionFactory對象
                SessionFactory sessionFactory = config.buildSessionFactory();
                
    //創(chuàng)建session
                session = sessionFactory.openSession();
            } 
    catch (HibernateException e) {
                e.printStackTrace();
            }        
        }
        
    /**
         * 悲觀鎖
         * Hibernate的加鎖模式有:
         * 1、LockMode.NONE:無鎖機制
         * 2、LockMode.WRITE:Hibernate在Insert和Update記錄的時候會自動獲取
         * 3、LockMode.READ:Hibernate在讀取記錄的時候會自動獲取
         * 上述3種鎖機制為了保證update過程中對象不會被外界修改,在目標對象上加鎖,與數(shù)據(jù)庫無關
         * 4、LockMode.UPGRADE:利用數(shù)據(jù)庫的for update子句加鎖
         * 5、LockMode.UPGRADE_NOWAIT:oracle的特定實現(xiàn)
         * 注意:只有在查詢開始之前設定加鎖,才會真正通過數(shù)據(jù)庫的鎖機制進行加鎖處理。
         
    */
        
    public void addPessimismLock(){
            String hqlStr 
    = "from TUser as user where user.name='Erica'";
            Query query 
    = session.createQuery(hqlStr);
            query.setLockMode(
    "user",LockMode.UPGRADE);//多所有返回的user對象加鎖
            List userList = query.list();//執(zhí)行查詢
        }
        
    /**
         * 樂觀鎖
         * 數(shù)據(jù)版本:即為數(shù)據(jù)增加一個版本標識,在基于數(shù)據(jù)庫表的版本解決方案中,一般是通過為數(shù)據(jù)庫表增加一個version字段來實現(xiàn)。
         * 讀取出數(shù)據(jù)時,將此版本號一同讀出,之后更新時,對此版本號加1.此時,將提交數(shù)據(jù)的版本數(shù)據(jù)與數(shù)據(jù)庫對應記錄的當前版本信息
         * 進行比對,如果提交的數(shù)據(jù)版本號大于數(shù)據(jù)庫表當前版本號,則予以更新,否則認為是過期數(shù)據(jù)。
         * 
         * Hibernate在其數(shù)據(jù)訪問引擎中內置了樂觀鎖實現(xiàn)。如果不考慮外部系統(tǒng)對數(shù)據(jù)庫的更新操作,利用Hibernate提供的透明化樂觀鎖
         * 實現(xiàn),將大大提升我們的生產(chǎn)力。見配置文件T_USER.hbm.xml
         * 樂觀鎖機制避免了長事務中的數(shù)據(jù)加鎖開銷,大大提升了大并發(fā)量下的系統(tǒng)整體性能表象。
         *
         
    */
        
    public void addOptimismLock(){
            Criteria criteria 
    = session.createCriteria(TUser.class);
            criteria.add(Expression.eq(
    "name","Erica"));
            
            List userList 
    = criteria.list();
            TUser user 
    = (TUser)userList.get(0);
            
            Transaction tx 
    = session.beginTransaction();
            user.setVersion(
    1);
            tx.commit();
        }
        
    /**
         * 關閉資源
         
    */
        
    protected void tearDown() throws Exception {
            
    try{
                session.close();
            }
    catch(HibernateException e){
                e.printStackTrace();
            }
        }
        
    }

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
    >
    <hibernate-mapping>
        
    <!-- 
            none:無樂觀鎖
            version:通過版本機制實現(xiàn)樂觀鎖
            dirty:通過檢查發(fā)生變動過的屬性實現(xiàn)樂觀鎖
            all通過檢查所有屬性實現(xiàn)樂觀鎖
         
    -->
        
    <class
            
    name="org.hibernate.sample.TUSER"
            table
    ="t_user"
            dynamic-update
    ="true"
            dynamic-insert
    ="true"
            optimistic-lock
    ="version"
            lazy
    ="true"
            
    >
            
    <id
            
    name="id"
            column
    ="id"
            type
    ="java.lang.Integer"
            
    >
                
    <generator class="native">
                
    </generator>
            
    </id>
            
    <version name="version" column="version" type="java.lang.Integer">
            
    </version>
            
    <set name="addresses"
                 table
    ="t_address"
                 lazy
    ="true"
                 inverse
    ="false"
                 cascade
    ="all"
            
    >
                
    <key
                    
    column="user_id"
                
    >
                
    </key>
                
    <one-to-many class=""/>
            
    </set>
        
    </class>
    </hibernate-mapping>


    posted on 2010-01-02 15:25 王永慶 閱讀(561) 評論(0)  編輯  收藏 所屬分類: HIBERNATE
    <2010年1月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關注blogs

    搜索

    •  

    最新評論

    • 1.?re: 心中的那個她[未登錄]
    • 如果心情能那么容易放開就好了,碰到她是我的緣分,但是她的緣分不知道在哪里。
    • --王永慶
    • 2.?re: 心中的那個她[未登錄]
    • 兄弟,喜歡就大膽去追好了,就是因為喜歡才會有不愉快,如果想一輩子沒有這些煩惱,找一個可有可無的人就好了。這種事講的是緣分吧。別人對你好不好其實不太重要。放開心情就好了。
    • --萍水相逢
    • 3.?re: 心中的那個她
    • 只能同甘不能共苦,就他媽算了吧,程序員也是人?。∥椰F(xiàn)在也很討厭女的不理解人情。
    • --咖啡妝
    • 4.?re: 難以割舍的那份情感
    • 評論內容較長,點擊標題查看
    • --王永慶
    • 5.?re: 難以割舍的那份情感
    • 評論內容較長,點擊標題查看
    • --隔葉黃鶯

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 3d成人免费动漫在线观看| 特a级免费高清黄色片| 一级毛片免费毛片一级毛片免费| 亚洲乱亚洲乱少妇无码| 人人鲁免费播放视频人人香蕉| 亚洲 综合 国产 欧洲 丝袜| 色噜噜的亚洲男人的天堂| 四虎免费永久在线播放| 一级做受视频免费是看美女| 亚洲熟伦熟女新五十路熟妇| 国产免费AV片在线观看播放| 亚洲热妇无码AV在线播放| 久久久久免费精品国产小说| 亚洲码一区二区三区| 最新中文字幕免费视频| 亚洲a∨无码精品色午夜| 亚洲国产综合久久天堂| 好紧我太爽了视频免费国产| 亚洲经典在线中文字幕| 免费看片A级毛片免费看| 一级一看免费完整版毛片| 亚洲AV永久无码区成人网站| 97免费人妻无码视频| 美女18毛片免费视频| 亚洲综合色婷婷七月丁香| 最近中文字幕大全中文字幕免费| 中文字幕乱码亚洲精品一区| 亚洲高清无码综合性爱视频| 久久精品电影免费动漫| 亚洲国产高清国产拍精品| 亚洲色婷婷综合久久| 成人免费一级毛片在线播放视频| 男女超爽视频免费播放| 亚洲另类激情综合偷自拍| 日韩免费视频观看| 日本高清免费观看| 国产亚洲蜜芽精品久久| 亚洲精品国产成人99久久| 日韩高清免费在线观看| 久久成人无码国产免费播放| 国产天堂亚洲国产碰碰|