【问题标题】:@Singleton @Startup depends on @Stateless EJB@Singleton @Startup 依赖于 @Stateless EJB
【发布时间】:2015-07-08 11:38:29
【问题描述】:

我有以下设置:

@Singleton
@Startup
@DependsOn(value="DataSourceHandler")
public class TimerTask {

    @EJB(name = "DataSourceHandler")
    DataSourceHandler dataSourceHandler;
}

@Stateless(name = "DataSourceHandler")
public class DataSourceHandler {
    ... database operations
}

timertask 每 30 分钟运行一次,并在 DataSourceHandler EJB 的帮助下执行数据库操作。

这里的问题是我无法将 EJB 注入Singleton Timertask,因为单例只能依赖其他单例。 other questions 中提出的解决方案对我不起作用:

  • 我无法将 DataSourceHandler 设为 Singleton,因为它也用于应用程序的其他部分,而不是多线程保存。
  • 我无法从 TimerTask 中删除 Singleton,因为 @Startup 注释需要它

如何将无状态注入单例?

【问题讨论】:

  • 为什么你有一个预定的单例课程?这样的设计有原因吗?
  • @BuhakeSindi 我需要定期对数据库执行同步和清理任务。
  • 是定时器还是启动单例?启动用于初始化,定时器用于调度,为什么要一起使用?
  • @maja 我明白,但为什么要使用@Singleton Bean?
  • 定时器服务可以是 @Stateless 或 @Stateful 会话 bean,您可以在任何 EJB 中使用 @PostConstruct。

标签: java jakarta-ee ejb


【解决方案1】:

你不需要在这里需要一个dependsOn注解。 @dependson 用于以下情况:

用于表示单例之间的初始化依赖 组件。

由于 DataSourceHandler 是一个 EJB,它会在你的单例注入这个 EJB 的那一刻被容器实例化。

【讨论】:

    猜你喜欢
    • 2016-10-13
    • 2017-04-13
    • 1970-01-01
    • 2013-01-05
    • 2013-05-29
    • 2012-01-24
    • 1970-01-01
    • 2013-04-12
    • 2017-01-31
    相关资源
    最近更新 更多