2017-07-14 70 views

回答

0

您可能需要使用@Timeout,@Singleton,@Startup和@ConcurrencyManagement

@Singleton(name = "...", mappedName = "") 
@Startup 
@ConcurrencyManagement(ConcurrencyManagementType.BEAN) // this is threadsafe!!! 
public class ....... 

注入TimerService進行配置

@Resource 
private TimerService timerService; 

注入的EntityManager爲DB-訪問

@PersistenceUnit(..) 
private EntityManager entityManager 

使用@Timeout代替@Schedule

@Timeout 
void timer() { .... } 

配置定時器

@PostConstruct 
void postConstruct() { 
    entityManager.createQuery(....); 
    . 
    . 
    timerService.createIntervalTimer(....); 
} 

除了EntityManager的使用情況,這個工作在我們的網站。

+0

我不想讓我的課singleton.as它應該允許多個線程爲我的應用程序。 –

+0

使用@ConcurrencyManagement(ConcurrencyManagementType.BEAN),可以防止ejb處理方法的獨佔訪問。然後你必須自己處理多個線程的可能用法。 – aschoerk