2014-04-10 82 views
0

這是我的場景 我有兩個單例EJB。第一個接收一些數據並將其寫入由其他EJB實例化的Queue數據結構中。EJB輪詢定期併發隊列

@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

...現在我想定期輪詢此隊列..

如果您需要定期執行一些代碼,Java EE規範提供了一種名爲Timer Service就是在這種情況下非常有用。該服務使您可以在定義的間隔時間內執行代碼。

我的問題是,我不能在ejb上下文中使用runnable。

由於Java EE 7(JSR 236:併發工具)的存在是爲了創造一個managed thread的可能性,它允許你在一個安全的方式運行在一個容器內新主題。