我有一个生成MyResourceManager的pojo生成器。
@TraderResouceManager @RequestScoped public MyResourceManager(){...}
MyResourceManger注入SLSB
@inject @TraderDB private MyResourceManager rm;
处理器是以下
public void close(@Disposes @TraderResouceManager MyResourceManager rm){ rm.close(); }
问题
close()什么时候执行?
是在关闭交易之前还是在关闭交易之后?
编辑:这个问题可能需要额外的解释。让我们类比数据库连接。
我用@RequestScoped创建一个@producer,使用pojo为每个请求创建一个新连接。
我需要的是在请求结束时处理连接。 此连接由其他bean共享(现在为SLSB)。在给定的请求中,可能有许多涉及在事务内运行的bean。 因此,我还需要在逻辑上关闭所有事务后关闭连接。
问题 当我使用容器管理的事务时,我能用上面的代码实现这种行为吗?
答案 0 :(得分:0)
当生成器方法是请求范围的时候,当前请求被终止时执行Close()。如果从JSF请求或servlet调用SLSB,那么这些请求的lifeclye将确定何时处置MyResourceManager。如果您的SLSB是远程的,它将在呼叫返回后立即终止。