【问题标题】:When does the disposer execute?处理器什么时候执行?
【发布时间】:2011-08-10 15:45:30
【问题描述】:

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

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

MyResourceManger 被注入到 SLSB

@inject @TraderDB private MyResourceManager rm;

disposer是一个followers

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

问题

close()什么时候执行?

是在成交前还是成交后?

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多