小菜鸟最近在学习EJB2的时候,发现一个比较怪异的情况。麻烦各位大侠指点下!
我首先创建了一个无状态的session bean.然后在该bean里面得到hibernate session.
最后,我多次运行main()函数,结果发现,在step2处,除了第一次打印出来是null以外,其它的都是有值的。
按照道理,不同线程访问,在step2处打印出来的总是null才对?public static void main(String[] args){
EJBFactory factory = FactoryBean.getEJBFactory();
ReportDataAccess reportData = factory.getReportDataAccess();
reportData.doOperate();
}
......
public doOperate(){
Session session = currentSession();
......
}
public static Session currentSession() {
Session session = (Session) hibernateHolder.get();
System.out.println(Thread.currentThread()+"========11========"); //step1
System.out.println(session+"================"); //step2
if (session == null) {
try {
session = sessionFactory.openSession();
txHolder.set(session.beginTransaction());
hibernateHolder.set(session);
}
catch (HibernateException ex) {
log.fatal("Factory open session failed", ex);
throw new SessionInitialException("Factory open session failed", ex);
}
}
return session;
}
我首先创建了一个无状态的session bean.然后在该bean里面得到hibernate session.
最后,我多次运行main()函数,结果发现,在step2处,除了第一次打印出来是null以外,其它的都是有值的。
按照道理,不同线程访问,在step2处打印出来的总是null才对?public static void main(String[] args){
EJBFactory factory = FactoryBean.getEJBFactory();
ReportDataAccess reportData = factory.getReportDataAccess();
reportData.doOperate();
}
......
public doOperate(){
Session session = currentSession();
......
}
public static Session currentSession() {
Session session = (Session) hibernateHolder.get();
System.out.println(Thread.currentThread()+"========11========"); //step1
System.out.println(session+"================"); //step2
if (session == null) {
try {
session = sessionFactory.openSession();
txHolder.set(session.beginTransaction());
hibernateHolder.set(session);
}
catch (HibernateException ex) {
log.fatal("Factory open session failed", ex);
throw new SessionInitialException("Factory open session failed", ex);
}
}
return session;
}
解决方案 »
- 急求!求大神帮我看看关于ibatis的sqlmap怎么写!急求!
- 帮我测试下有没有bug~~ 我是完全测不出了~~~~
- 北京搞JAVAEE需要哪些东西?
- spring的AOP配置问题
- 请教:谁能细致的作一下关于resin服务器介绍; 特别是他的版本 (不知道改选哪一个)
- 请高手指点一下呀,有关登陆验证的问题
- 安装---Jforum--中文提交出现问号“?”乱码。
- 高分求助:如何设计一段可阻塞的代码,谢谢!
- 帮忙解释一下Struts <logic:iterate >标签使用
- weblogic6.0为何不能启动?
- 问个问题,关于JAVA中类做为方法参数的问题
- ireport Chart 导出pdf问题
hibernateHolder 变量的定义如下:
protected static final ThreadLocal hibernateHolder = new ThreadLocal();
欢迎加入