小菜鸟最近在学习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;
}
解决方案 »
- 数组取值
- ASP到底能不能用tomcat做服务器?
- Port busy 8009 java.net.BindException: Address already in use: JVM_Bind
- struts2_在当前命名空间找不到对应action,回到父命名空间找吗?
- 有用过jacob操作过word 的朋友进来帮下忙好吗
- 帮忙解释一下UnicastRemoteObject 对象!
- 请问Collection如何转换成ResultSet?
- mysql驱动程序问题(安装配置jive时碰到的):能否同时存在多个驱动程序呢,端口冲突了?
- 帮忙呀!EJB问题
- 高分求助,来者有分,JBuiler7+Weblogic的配制
- 问个问题,关于JAVA中类做为方法参数的问题
- ireport Chart 导出pdf问题
hibernateHolder 变量的定义如下:
protected static final ThreadLocal hibernateHolder = new ThreadLocal();
欢迎加入