中使用的方法以及呢
http://xnbdfyy.qm120.com/,西宁哪里治白癜风最好 EJB中使用Hibernate的方法应该大家都会,不过许多人可能没注意下面几个问题,首先我们来看下面这段代码。 public class HibernateTestBean implements SessionBean ...{ SessionContext sessionContext; SessionFactory sf; public void setSessionContext(SessionContext sessionContext) ...{ ssionContext = sessionContext; try ...{ InitialContext ctx = new InitialContext(); sf=(SessionFactory) okup(\"java:/hibernate/SessionFactory\"); } catch (NamingException ex) ...{ intStackTrace(); } } public void tran()...{ tran1(); tran2(); } public void tran1() ...{ Session session=tCurrentSession(); Message msg=new Message(); tCreateTime(new Date()); tDetail(\"trans1\"); ve(msg); intln(\"Session:\"+shCode()); ush(); ose(); } public void tran2() ...{ Session session=tCurrentSession(); Message msg=new Message(); tCreateTime(new Date()); tDetail(\"trans2\"); ve(msg); intln(\"Session:\"+shCode()); // throw new RuntimeException(\"wrong\"); } …… }
注:EJB采用CMT,各方法的事务属性是required 客户端调用tran以上代码可以正确运行吗? 如果把tran1中的tCurrentSession();改为enSession()可以正确运行吗? 辨析: 1 上述代码是不能正确运行的,运行tran2时会抛出异常,告诉你session is closed. 其实这是应为getCurrentSession()会使用环境已有的Session,同时注意getCurrentSession()要在事务的环境中使用。 这是也许你一定会问,那么什么时候关闭Session呢?答案是事务完成的时候(提交或是回滚)。 2 如果上述代码tran1中的tCurrentSession();改为enSession()代码将可以正确运行。这是因为openSession()每次都会返回一个新的Session。而在tran2种的tCurrentSession()并不会使用tran1中的session,而是会使用当前事务环境中的默认的session. 也许你会问如果tran2种的调用抛出RuntimeException,tran1所作的操作还可以回滚吗? 答案是仍然可以回滚的.
href=\" target=_blank>查看本文来源
手术后吃什么营养品好武汉有没有白癜风医院
唐山白癜风治疗较好医院
- 下一页:初探牛
- 上一页:中数据验证出现在什么地方最合适的
- 06月21日都市移鱼易出事故怎么办转移鱼需要注意的问题位置
- 06月21日都市科普驱虫与免疫同样重要位置
- 06月21日都市秋田犬为什么会保护人位置
- 06月21日都市研究称环境化学物质导致宠物狗精子质量下降位置
- 06月21日都市科学家称狗狗等动物可能无法预测地震位置
- 06月20日都市可卡犬怎么养位置
- 06月20日都市可卡吃什么最好选择营养全面的狗粮位置
- 06月20日都市可以给金毛犬吃冷饮吗位置
- 06月20日都市可以导致雪纳瑞中毒的一些家庭用品位置
- 06月20日都市可以和猫一起睡吗猫会传染疾病给人类位置
- 06月20日都市可卡犬什么都不吃只喝水是什么情况位置
- 06月20日都市可卡犬不挑食三方法挑嘴坏习惯OUT位置