<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();
    ????}

    主站蜘蛛池模板: 最近2018中文字幕免费视频| 中文日本免费高清| 国产四虎免费精品视频| 亚洲人成亚洲精品| 午夜老司机永久免费看片| 亚洲国产精品婷婷久久| 全部免费毛片在线播放| 亚洲国产美女视频| 成年女人午夜毛片免费视频| 亚洲国产精品自在自线观看| 日本19禁啪啪无遮挡免费动图| 亚洲成av人片在www鸭子| 免费观看四虎精品国产永久| 日本黄页网址在线看免费不卡| 亚洲乱亚洲乱少妇无码| 成全动漫视频在线观看免费高清版下载| 亚洲综合无码AV一区二区| 精品国产麻豆免费人成网站| 亚洲国产成人精品不卡青青草原| 黄+色+性+人免费| 亚洲爆乳无码专区www| 亚洲色偷偷综合亚洲AV伊人| 国产午夜无码精品免费看| 亚洲黄色在线网站| 最近的免费中文字幕视频| 污视频网站免费在线观看| 亚洲桃色AV无码| 无人在线直播免费观看| 亚洲精品中文字幕| 亚洲综合激情另类专区| 蜜桃成人无码区免费视频网站| 在线精品亚洲一区二区| 亚洲日韩国产一区二区三区| 久久青草国产免费观看| 亚洲人成欧美中文字幕| 国产av无码专区亚洲国产精品| 国产猛男猛女超爽免费视频| 亚洲娇小性xxxx| 国产乱辈通伦影片在线播放亚洲 | 毛片免费在线视频| 男女污污污超污视频免费在线看|