处理器何时执行?

时间:2011-08-10 15:45:30

标签: java jboss cdi ejb-3.1 jboss-weld

我有一个生成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。 因此,我还需要在逻辑上关闭所有事务后关闭连接。

问题 当我使用容器管理的事务时,我能用上面的代码实现这种行为吗?

1 个答案:

答案 0 :(得分:0)

当生成器方法是请求范围的时候,当前请求被终止时执行Close()。如果从JSF请求或servlet调用SLSB,那么这些请求的lifeclye将确定何时处置MyResourceManager。如果您的SLSB是远程的,它将在呼叫返回后立即终止。