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

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

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

    J2EE之巔

     

    EJB中使用Hibernate的幾個問題辨析

    public class HibernateTestBean implements SessionBean {
        SessionContext sessionContext;
        SessionFactory sf;
        public void setSessionContext(SessionContext sessionContext) {
            this.sessionContext = sessionContext;
            try {
                InitialContext ctx = new InitialContext();
                sf=(SessionFactory) ctx.lookup("java:/hibernate/SessionFactory");
            } catch (NamingException ex) {
                ex.printStackTrace();
            }
        }
        public void tran(){
            tran1();
            tran2();
           
        }
        public void tran1() {
            Session session=sf.getCurrentSession();
            Message msg=new Message();
            msg.setCreateTime(new Date());
            msg.setDetail("trans1");
            session.save(msg);
            System.out.println("Session:"+session.hashCode());
            session.flush();
            session.close();
        }
        public void tran2() {
          Session session=sf.getCurrentSession();
          Message msg=new Message();
          msg.setCreateTime(new Date());
          msg.setDetail("trans2");
          session.save(msg);
           System.out.println("Session:"+session.hashCode());
        //  throw new RuntimeException("wrong");
      }
    ……
    }
    注:EJB采用CMT,各方法的事務(wù)屬性是required
    客戶端調(diào)用tran以上代碼可以正確運行嗎?
    如果把tran1中的sf.getCurrentSession();改為sf.openSession()可以正確運行嗎?
    辨析:
    1 上述代碼是不能正確運行的,運行tran2時會拋出異常,告訴你session is closed.
    其實這是應為getCurrentSession()會使用環(huán)境已有的Session,同時注意getCurrentSession()要在事務(wù)的環(huán)境中使用。
    這是也許你一定會問,那么什么時候關(guān)閉Session呢?答案是事務(wù)完成的時候(提交或是回滾)。

    2 如果上述代碼tran1中的sf.getCurrentSession();改為sf.openSession()代碼將可以正確運行。這是因為openSession()每次都會返回一個新的Session。而在tran2種的sf.getCurrentSession()并不會使用tran1中的session,而是會使用當前事務(wù)環(huán)境中的默認的session.
    也許你會問如果tran2種的調(diào)用拋出RuntimeException,tran1所作的操作還可以回滾嗎?
    答案是仍然可以回滾的.


    蔡超
    北京天融信 軟件架構(gòu)師
    SCEA,SCBCD,MCSD
    IBM Certified Specialist RUP v2003
    IBM Certified Solution Designer OOA&D UMLv2

    posted on 2007-08-19 19:44 超越巔峰 閱讀(944) 評論(0)  編輯  收藏 所屬分類: Java EE

    導航

    統(tǒng)計

    常用鏈接

    留言簿(12)

    隨筆分類(54)

    隨筆檔案(59)

    文章分類(2)

    文章檔案(1)

    相冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品中文字幕麻豆| 亚洲免费闲人蜜桃| 狼人大香伊蕉国产WWW亚洲| 久久久久久国产a免费观看黄色大片| 国产AⅤ无码专区亚洲AV| 在线综合亚洲欧洲综合网站 | 美女视频黄.免费网址| 成人免费午夜无码视频| 国产精品亚洲va在线观看| 丁香花在线观看免费观看图片| 亚洲国产综合无码一区二区二三区 | 亚洲国产日韩成人综合天堂| 亚洲国产日韩精品| 歪歪漫画在线观看官网免费阅读| 亚洲天然素人无码专区| 国产区图片区小说区亚洲区| 成人亚洲性情网站WWW在线观看| 亚洲色偷偷色噜噜狠狠99网| 国产成人高清精品免费软件| 四虎永久在线精品免费影视| 亚洲第一第二第三第四第五第六| 久久国产精品免费视频| 99久久亚洲综合精品成人网| 亚洲精品乱码久久久久蜜桃| 久久久久国产成人精品亚洲午夜| 未满十八18禁止免费无码网站| 亚洲AV日韩AV一区二区三曲 | 成人国产mv免费视频| 不卡精品国产_亚洲人成在线| 午夜亚洲国产精品福利| 国产AV无码专区亚洲AV男同 | 久久亚洲中文无码咪咪爱| 亚洲最新永久在线观看| 无码视频免费一区二三区| 亚洲av无码专区在线观看下载| 无码久久精品国产亚洲Av影片| 久久亚洲AV成人无码国产电影| 亚洲高清成人一区二区三区| 免费成人在线视频观看| 老司机午夜在线视频免费| 亚洲欧洲日产国码久在线|