我有以下设置:
@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
成为单身人士,因为它也用于应用程序的其他部分而不是多线程保存。TimerTask
中删除单身人士,因为@Startup
注释需要如何将无国籍者注入单身人士?
答案 0 :(得分:2)
你不要这里需要一个dependsOn annoatation。 @dependson用于以下情况:
用于表示单例之间的初始化依赖关系 组件。
由于DataSourceHandler是一个EJB,因此在您的单例注入此EJB时,它将由容器实例化。