最近在调试用spring看看通过getSession hibernate时能不能通过事务自动关闭我该如何在MYECLIPSE中查看一个变量Session session是什么时候关闭的,当关闭了,我能在myeclipse中看到这样的功能该如何在myeclipse中进行调试,感谢!

解决方案 »

  1.   

    spring容器自动控制session的
    开关,至于在哪可以看到没试过
      

  2.   

    http://hi.baidu.com/yaolihui/blog/item/e26a26d87feee23032fa1c52.html
      

  3.   

    spring申明事务,就是使用一个transaction proxy factory bean将transaction inceptor编入你的业务方法。在transaction inceptor的invoke方法中,会在调用你的业务方法前begin transaction,在方法结束后,调用commit或者rollback。但是要使用hibernate的事务对象,就一定要先有一个session。所以transaction inceptor会为你打开和关闭session。这里有一个策略,就是谁打开,谁关闭。如果transaction inceptor在启动事务时,发现已经有一个session与当前线程绑定了,他就会使用这个现成的session,并且结束提交事务后,也不会关闭它。如果发现没有session与当前线程绑定,这是transaction inceptor就会open一个新的session,并且在结束方法提交后,关闭这个由它打开的session。
       建议在dao方法中使用hibernate template,因为它提你完成了获得与当前线程绑定的session的操作。如果不用hibernate template,你就要使用spring的API提供的静态方法getRsource来获得session。在你业务逻辑中,绝对不要有close session的动作。因为这样会导致transaction inceptor提交事务时爆出session已关闭的异常。
      

  4.   

    M_song  你好http://hi.baidu.com/yaolihui/blog/item/e26a26d87feee23032fa1c52.html
    在这篇文章中,上面讲了,如果在service服务层getsession时,使用完session后,session是不会自动关闭的,是需要手动close的,是这个意思吗?我不知道在MYECLIPSE中如何调试,我想在IDE中进行断点条件,来看一下如何SESSION中关闭了,嗯!
      

  5.   

    :)我的要求很简单啊我们不是写项目中要分层嘛,肯定有Service服务层了,,在myeclipse中我们是不是直接用自动生成的DAO了吧但自动生成的DAO功能不太好,有限!那么我们通常是不是自己写一个DAO,而用这个DAO继承自hibernatetemple....模板类吧?我现在的问题就是,如何查看自己写的DAO中的session是不是自动关闭的,其实用Spring的事务肯定session是自动关闭的,但我想验证一下,想在myeclipse中真实的看一下一个Session变量session在什么时候被close的,如果close了,就给一个提示什么的,应该在myeclipse中的调试功能有。
      

  6.   

    那你可以在调式的过程中,把session加到watch里,然后观察!