Java 向@Stateless 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)

我在监视连接句柄的bean中有一些代码:

@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
完成了这项工作。