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

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

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

    posts - 165, comments - 198, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    hibernate 問題_3(鎖)

    Posted on 2007-11-26 18:57 G_G 閱讀(1109) 評論(0)  編輯  收藏 所屬分類: hibernate
    環(huán)境:
    ???? private ?SessionFactory?sessionFactory;

    ????
    protected ? void ?setUp()? throws ?Exception?{
    ????????
    super .setUp();
    ????????
    // 利用java反射得到?HibernateSessionFactory?->
    ????????
    // private??static?org.hibernate.SessionFactory?sessionFactory;
    ????????
    // 要模擬?并發(fā)?要?HibernateSessionFactory?得出的?有?threadLocal?不行?
    ????????
    // 要?
    ????????HibernateSessionFactory.currentSession();
    ????????HibernateSessionFactory.closeSession();
    ????????Field?field?
    = ?HibernateSessionFactory. class .getDeclaredField( " sessionFactory " );
    ????????field.setAccessible(
    true );
    ????????sessionFactory?
    = ?(SessionFactory)?field.get(HibernateSessionFactory. class );
    ????}

    ????
    protected ? void ?tearDown()? throws ?Exception?{
    ????????
    super .tearDown();
    ????}

    悲觀鎖:
    ???? /** ?悲觀鎖問題?線程模擬?并發(fā)?
    ?????*?Table?->?T1oo(id,name)
    ?????*?????+----+------+
    ?????*????|?id?|?name?|
    ?????*????+----+------+
    ?????*????|??4?|?xx1??|
    ?????*????+----+------+
    ?????
    */
    ????
    public ? void ?ctestLock()? throws ?Exception?{
    ????????
    // ?insert?test?Data 測試數(shù)據(jù)
    ????????Session?seInsert? = ?sessionFactory.openSession();
    ????????Transaction?tr?
    = ?seInsert.beginTransaction();
    ????????T1oo?testUse?
    = ?testUse? = ? new ?T1oo();
    ????????testUse.setName(
    " liukaiyi_test " );
    ????????seInsert.save(testUse);
    ????????tr.commit();
    ????????System.out.println(?
    " **************Test?Use?Bean?:?insert******************* " ?);
    ????????seInsert.close();
    ????????Integer?testId?
    = ?testUse.getId();
    ????????
    ??????? //并發(fā)模擬
    ????????Session?session1?
    = ?sessionFactory.openSession();
    ????????Session?session2?
    = ?sessionFactory.openSession();
    ????????
    ????????
    final ?Transaction?tr1? = ?session1.beginTransaction();
    ????????Transaction?tr2?
    = ?session2.beginTransaction();
    ????????
    ????????Query?qu1?
    = ?session1.createQuery( " ?from?T1oo?t1oo?where?t1oo.name='liukaiyi_test' " );
    ????????Query?qu2?
    = ?session2.createQuery( " ?from?T1oo?t1oo?where?t1oo.name='liukaiyi_test' " );
    ????????
    ??????? //加悲觀鎖
    ????????qu1.setLockMode(
    " t1oo " ,LockMode.UPGRADE);
    ????????
    final ?Object?bean1? = ?qu1.uniqueResult();
    ????????Object?bean2?
    = ?qu2.uniqueResult();

    ????????T1oo?t1oo2?
    = ?(T1oo)bean2;
    ????????
    ????????t1oo2.setName(
    " run1 " );
    ????????
    ????????
    new ?Thread(
    ????????????????
    new ?Runnable(){
    ????????????????????
    public ? void ?run()??{
    ????????????????????????
    try ?{
    ????????????????????????????System.out.println(?
    " ********解鎖準備********* " ?);
    ????????????????????????????Thread.sleep(
    10 * 1000 );
    ????????????????????????????T1oo?t1oo1?
    = ?(T1oo)bean1;
    ????????????????????????????t1oo1.setName(
    " run2 " );
    ????????????????????????????tr1.commit();
    ????????????????????????????System.out.println(?
    " ********解鎖成功t********* " ?);
    ????????????????????????}?
    catch ?(InterruptedException?e)?{e.printStackTrace();}
    ????????????????????}
    ????????????????}
    ????????).start();

    ???????
    / /這里會 等待十秒后 tr1解鎖 /
    ????????tr2.commit();
    ????????
    ????????session1.close();
    ????????session2.close();
    ????????
    ????????
    ????????
    // ?delete?Test?Date 刪除測試數(shù)據(jù)
    ????????Session?seDelete? = ?sessionFactory.openSession();
    ????????Transaction?trD?
    = ?seDelete.beginTransaction();
    ????????Object?obj?
    = ?seDelete.createQuery( " ?from?T1oo?t?where?t.id=:id? " ).
    ????????????????????????setInteger(
    " id " ,testId.intValue()).
    ????????????????????????uniqueResult();
    ????????seDelete.delete(obj);
    ????????trD.commit();
    ????????System.out.println(?
    " **************Test?Use?Bean?:?delete************** " ?);
    ????????seDelete.close();
    ????}

    樂觀鎖:
    ???? /** ?樂觀鎖問題
    ?????*?Table?->?T1oo(id,name)
    ?????*?T2oo.hbn.xml?<class>?+>?optimistic-lock="version"
    ?????*?id下面?+>?<version?name="version"?type="integer"?column="version"?/>
    ?????*????+---------+---------+------+
    ?????*????|?Field???|?Type????|?Null?|
    ?????*????+---------+---------+------+
    ?????*????|?id??????|?int(11)?|??????|
    ?????*????|?avg?????|?int(11)?|??????|
    ?????*????|?aid?????|?int(11)?|?YES??|
    ?????*????|?version?|?int(11)?|?YES??|
    ?????*????+---------+---------+------+
    ?????*??注意:要在數(shù)據(jù)庫中多加一列?
    ?????*??mysql>?alter?table?T2OO?add?version?int;
    ?????
    */
    ????
    public ? void ?testOpLock() throws ?Exception{
    ??????? //添加測試數(shù)據(jù)
    ????????Session?session?
    = ?sessionFactory.openSession();
    ????????Transaction?trI?
    = ?session.beginTransaction();
    ????????Connection?conn?
    = ?session.connection();
    ????????T2oo?t2oo?
    = ? new ?T2oo();
    ????????T1oo?t1oo?
    = new ?T1oo( " t1ooOpLock " );
    ????????t1oo.setT2ooSet(
    new ?HashSet());
    ????????t2oo.setAvg(
    new ?Integer( 23 ));????
    ????????t2oo.setT1oo(t1oo);
    ????????t1oo.getT2ooSet().add(t2oo);
    ????????session.save(t2oo);
    ????????trI.commit();
    ????????session.clear();
    ????????session.close();

    ??????? //并發(fā)模擬
    ????????Session?se1?
    = ?sessionFactory.openSession();
    ????????Session?se2?
    = ?sessionFactory.openSession();
    ????????
    ????????Transaction?tr1?
    = ?se1.beginTransaction();
    ????????Transaction?tr2?
    = ?se2.beginTransaction();
    ???????
    ????????T1oo?obj1?
    = ?(T1oo)se1.load(T1oo. class , new ?Integer( 1 ));
    ????????T1oo?obj2?
    = ?(T1oo)se2.load(T1oo. class , new ?Integer( 1 ));
    ????????
    ????????((T2oo)obj1.getT2ooSet().iterator().next()).setAvg(
    new ?Integer( 9 ));
    ????????((T2oo)obj2.getT2ooSet().iterator().next()).setAvg(
    new ?Integer( 10 ));
    ????????????????
    ????????tr1.commit();
    ????????
    ????????
    try ?{
    ????????????tr2.commit();
    ????????}?
    catch ?(Exception?e)?{
    ????????????se2.clear();
    ????????????tr2.commit();
    ????????????
    // tr2報錯
    ????????} finally {
    ????????????se1.close();
    ????????????se2.close();
    ????????}
    ????????
    ????????
    ??????? //測試數(shù)據(jù)刪除
    ????????Session?dele?
    = ?sessionFactory.openSession();
    ????????Transaction?tr?
    = ?dele.beginTransaction();
    ????????dele.delete(obj1);
    ????????tr.commit();
    ????????dele.close();
    ????????
    ????????HibernateSessionFactory.closeSession();
    ????}

    主站蜘蛛池模板: 国产亚洲精品va在线| 青娱乐在线视频免费观看| v片免费在线观看| 我想看一级毛片免费的| 久久亚洲精品无码VA大香大香| 四虎影视在线看免费观看| 日韩在线免费看网站| 亚洲乱码国产乱码精华| 大学生一级毛片免费看| 久久亚洲精品无码aⅴ大香 | 亚洲午夜国产精品无卡| 亚洲一级毛片免费看| 亚洲精品国产专区91在线| 亚洲一区免费在线观看| 亚洲人配人种jizz| 国内精品免费视频自在线| 亚洲精品无码你懂的| 永久中文字幕免费视频网站| 国产精品亚洲AV三区| 亚洲国产成人久久综合区| 一级特黄aaa大片免费看| 亚洲午夜久久久影院| av永久免费网站在线观看| 亚洲人成在线播放网站岛国| 色影音免费色资源| 国产亚洲精品91| 亚洲videos| 日韩一级免费视频| 人人爽人人爽人人片A免费| 国产精品亚洲视频| 成人性生交大片免费看中文| 老司机亚洲精品影院无码| 在线观看AV片永久免费| 亚洲精品无码成人| 亚洲区日韩区无码区| 国产午夜无码精品免费看动漫| 中文字幕亚洲色图| 麻豆国产入口在线观看免费| 亚洲天堂免费在线视频| 亚洲网站在线免费观看| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 |