EJB定期轮询并发队列

时间:2014-04-10 10:45:37

标签: concurrency queue ejb runnable

这是我的情景 我有两个单独的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。我希望迁移到春天,但首先要做到这一点我想知道我是否遗漏了一些东西。 感谢

1 个答案:

答案 0 :(得分:0)

  

...现在我想定期轮询这个队列..

如果需要定期执行某些代码,Java EE规范提供了一个名为Timer Service的服务,在这些情况下很有用。此服务使您能够在定义的间隔时间执行代码。

  

我的问题是我不能在ejb上下文中使用runnable。

自Java EE 7(JSR 236:Concurrency Utilities)以来,存在创建managed thread的可能性,它允许您以安全的方式在Container中运行新线程。