2017-07-14 9 views
-1

EJBタイマーで@scheduleを使用して、私はデータベースからスケジュールの詳細を渡したいと思います。値を渡すことはできません。私は何をすべきか。 @タイムアウトでは、私はサーバーの開始時に自動的にスレッドを開始することができません。 @Postconstructは機能していません。EJBタイマーで@scheduleを使用して、データベースからスケジュール詳細を渡すことができません

答えて

0
あなたは、DBアクセスのためにEntityManagerを注入した構成

@Resource 
private TimerService timerService; 

のためのTimerServiceを注入@Timeout、@Singleton、@Startupと@ConcurrencyManagement

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

を使用する必要があります

@PersistenceUnit(..) 
private EntityManager entityManager 

@ Scheduleの代わりに@Timeoutを使用する

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

設定のEntityManagerの使用を除き、タイマー

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

が、これは私たちのサイトで動作します。

+0

私は自分のアプリケーションのために複数のスレッドを許可する必要があります私のクラスsingleton.asをしたくない。 –

+0

@ConcurrencyManagement(ConcurrencyManagementType.BEAN)を使用すると、ejbがメソッドの排他アクセスを処理できなくなります。次に、複数のスレッドによる可能な使用法を自分で処理する必要があります。 – aschoerk

関連する問題