这是我的情景 我有两个单独的EJB。第一个接收一些数据并将其写入由另一个EJB实例化的Queue数据结构中。
@Singleton
@Startup
public class Client implements IClient {
@EJB
IClientInQueue reporter;
....
@Asynchronous
public void update(String message){
StatusMessage m = new StatusMessage();
reporter.addStatusMessage(m);
}
@Startup
@Singleton
public class ClientInQueue implements IClientInQueue {
private ConcurrentLinkedQueue<StatusMessage> statusInQueue;
addStatusMessage(String m) ..add element to queue
这很好用。现在我想定期轮询这个队列,然后进行一些调度操作。 我的问题是,我不能在ejb上下文中使用runnable。我希望迁移到春天,但首先要做到这一点我想知道我是否遗漏了一些东西。 感谢
答案 0 :(得分:0)
...现在我想定期轮询这个队列..
如果需要定期执行某些代码,Java EE规范提供了一个名为Timer Service的服务,在这些情况下很有用。此服务使您能够在定义的间隔时间执行代码。
我的问题是我不能在ejb上下文中使用runnable。
自Java EE 7(JSR 236:Concurrency Utilities)以来,存在创建managed thread的可能性,它允许您以安全的方式在Container中运行新线程。