0

我有一个生产 MyResourceManager 的 pojo 生产者。

@TraderResouceManager @RequestScoped public MyResourceManager(){ ... ... }

MyResourceManger 被注入到 SLSB

@inject @TraderDB private MyResourceManager rm;

处置器如下

公共无效关闭(@Disposes @TraderResouceManager MyResourceManager rm){ rm.close(); }

问题

close() 什么时候执行?

是在交易结束前还是交易结束后?

编辑:这个问题可能需要额外的解释。让我们以数据库连接为例。

我使用@RequestScoped 创建了一个@producer,使用pojo 为每个请求创建一个新连接。

我需要的是在请求结束时处理连接。此连接由其他 bean 共享(现在为 SLSB)。在给定的请求中,可能涉及在事务中运行的许多 bean。因此,只有在所有事务逻辑关闭后,我才需要关闭连接。

问题 当我使用容器管理事务时,我是否能够使用上述代码实现此行为?

4

1 回答 1

0

Close() 在当前请求终止时执行,因为您的生产者方法是请求范围的。如果您从 JSF 请求或 servlet 调用您的 SLSB,那么这些请求的生命周期将决定何时处置 MyResourceManager。如果您的 SLSB 是远程的,它将在调用返回后立即终止。

于 2011-08-10T19:31:03.253 回答