Java 向@Stateless bean添加状态
我在监视连接句柄的bean中有一些代码:Java 向@Stateless bean添加状态,java,ejb,Java,Ejb,我在监视连接句柄的bean中有一些代码: @Stateless public class MyClass { private CloseableHttpAsyncClient deviceHandle = null; @Schedule(second="*/30", minute="*", hour="*", persistent=false) void checkConnection() { if (deviceHandle != null)
@Stateless
public class MyClass {
private CloseableHttpAsyncClient deviceHandle = null;
@Schedule(second="*/30", minute="*", hour="*", persistent=false)
void checkConnection()
{
if (deviceHandle != null) {
if (deviceHandle.isRunning()) {
// Ping connection
}
else {
deviceHandle = reconnectToDevice();
}
}
}
public void initialise() {
deviceHandle = connectToDevice();
}
}
根据EJB3.1规范,@Schedule
只能用于@Stateless
bean,因此我的代码当然会失败,因为我在计时器上得到了另一个带有null设备句柄的bean
因此,我的问题是,这项要求的最佳做法是什么?我应该把把手放在哪里<代码>@Inject
a@Singleton
@Inject
一个@ApplicationScoped
bean@Inject
从我的ServletContextListener
中注入bean,并将状态存储在那里(我使用另一个真正的@Stateless
计时器计时来实现这一点)最明显的解决方案是将MyClass
本身变成@Singleton
EJB3.1规范允许在单例中使用@Schedule
。本标准第18.2.3节包含以下示例:
@Singleton
public class CacheBean {
Cache cache;
// Setup an automatic timer to refresh
// the Singleton instance cache every 10 minutes
@Schedule(minute=”*/10”, hour=”*”, persistent=false)
public void refresh() {
// ...
}
}
啊!!这么简单的回答。除了那个注释外,我几乎尝试了所有注释的组合<代码>@javax.ejb.Singleton不是吗,不是
@javax.inject.Singleton
?到目前为止,我只使用@javax.ejb.Singleton
完成了这项工作。