【发布时间】:2013-02-19 03:26:18
【问题描述】:
我有一个有状态的 bean,用于进行几个数据库查询。我在调用的第一个方法中打开连接,但我只想在 EJB 客户端真正完成有状态 bean 之后关闭连接。我认为我可以将关闭数据库连接的逻辑放在@PreDestroy 方法中。
这似乎有效,但我很好奇其中的含义。具体来说,EJB 会话何时完成?这是容器管理的事务,所以我假设当 EJB 客户端方法完成时,EJB 事务也会完成。具体来说,什么时候调用 PreDestroy 方法?交易还在吗?还是它已经提交并将自己放回池中?谢谢!
【问题讨论】:
-
如果您将无状态 bean 用于数据库查询,您可能应该使用它们。
-
你是对的。我编写了一个通用 bean,它为每个数据库事务打开和关闭会话。我需要一个不同的分阶段 bean,这样我就可以在方法调用之间保持会话打开。我不希望这个有状态 db bean 的客户端必须记住关闭会话,这就是为什么我对与 bean 相关的事务的生命周期感到好奇。
标签: ejb-3.1