<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    hibernate 問題_3(鎖)

    Posted on 2007-11-26 18:57 G_G 閱讀(1098) 評(píng)論(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 測(cè)試數(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(?
    " ********解鎖準(zhǔn)備********* " ?);
    ????????????????????????????Thread.sleep(
    10 * 1000 );
    ????????????????????????????T1oo?t1oo1?
    = ?(T1oo)bean1;
    ????????????????????????????t1oo1.setName(
    " run2 " );
    ????????????????????????????tr1.commit();
    ????????????????????????????System.out.println(?
    " ********解鎖成功t********* " ?);
    ????????????????????????}?
    catch ?(InterruptedException?e)?{e.printStackTrace();}
    ????????????????????}
    ????????????????}
    ????????).start();

    ???????
    / /這里會(huì) 等待十秒后 tr1解鎖 /
    ????????tr2.commit();
    ????????
    ????????session1.close();
    ????????session2.close();
    ????????
    ????????
    ????????
    // ?delete?Test?Date 刪除測(cè)試數(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ù)庫(kù)中多加一列?
    ?????*??mysql>?alter?table?T2OO?add?version?int;
    ?????
    */
    ????
    public ? void ?testOpLock() throws ?Exception{
    ??????? //添加測(cè)試數(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報(bào)錯(cuò)
    ????????} finally {
    ????????????se1.close();
    ????????????se2.close();
    ????????}
    ????????
    ????????
    ??????? //測(cè)試數(shù)據(jù)刪除
    ????????Session?dele?
    = ?sessionFactory.openSession();
    ????????Transaction?tr?
    = ?dele.beginTransaction();
    ????????dele.delete(obj1);
    ????????tr.commit();
    ????????dele.close();
    ????????
    ????????HibernateSessionFactory.closeSession();
    ????}

    主站蜘蛛池模板: 亚洲欧洲日韩极速播放| 成年女人视频网站免费m| 色偷偷亚洲第一综合| 亚洲狠狠综合久久| 亚洲国产日韩在线观频| 一二三四在线播放免费观看中文版视频 | xx视频在线永久免费观看| 一个人看的www免费在线视频 | 成人免费在线视频| 一级毛片免费观看| 本免费AV无码专区一区| 在线观看亚洲免费视频| 国产99在线|亚洲| 亚洲精品免费在线视频| 亚洲国产精品一区二区久久hs| 亚洲AV无码一区二三区| 日韩成全视频观看免费观看高清| 男女免费观看在线爽爽爽视频| 九九美女网站免费| 91免费福利视频| 岛国岛国免费V片在线观看| 国产裸体美女永久免费无遮挡| 免费福利在线观看| 国产成人亚洲精品蜜芽影院| 亚洲美国产亚洲AV| 亚洲精品无码少妇30P| 亚洲国产系列一区二区三区 | 免费看美女让人桶尿口| 无人在线观看免费高清视频 | 亚洲熟妇无码爱v在线观看| 婷婷亚洲久悠悠色悠在线播放| 久久精品国产亚洲麻豆| 亚洲熟妇无码AV在线播放| 自拍偷自拍亚洲精品被多人伦好爽| 国产成人精品日本亚洲专区 | 理论秋霞在线看免费| 国产精品亚洲天堂| 亚洲天堂免费在线视频| a毛片在线还看免费网站| 免费在线中文日本| 亚洲一区免费视频|