JBoss 5 アプリケーションを JBoss AS 7 (7.1.1.FINAL) に移行しているときに、新しい JMS メッセージ駆動型 EJB で問題が発生しました。メッセージ処理内で、一部のマスタ データ フィールドをチェックする必要があります。パフォーマンスを向上させるために、このマスター データは@Singleton @Startup
EJB を使用してキャッシュ構造にプリロードされます。データのロードには約 30 秒かかります。
私の問題は、キャッシュが完全に初期化されていない場合でもキュー メッセージの処理が開始され、メッセージ検証エラーが発生することです。
MDB とスタートアップ EJB の間の依存関係を定義しようとしましたが、理解した限りでは、@DependsOn
アノテーションは@Singleton
EJB でのみ機能します。したがって、私のソリューションが機能しないことは明らかです;-)
起動 Bean コード:
@Singleton
@Startup
public class StartupBean {
@PostConstruct
void atStartup() {
// TODO load master data cache (takes about 30 seconds)
}
@PreDestroy()
void atShutdown() {
// TODO free master data cache
}
}
注: 読みやすくするために、例から実際のコードを削除しました :-)
メッセージ駆動型 Bean コード:
@MessageDriven(name="SampleMessagingBean", activationConfig = {
@ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination", propertyValue="jms/SampleQueue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")
})
@DependsOn("StartupBean")
public class SampleMessagingBean implements MessageListener {
public void onMessage(Message message) {
// TODO validate message using master data cache
}
}
質問:スタートアップ Bean がキャッシュのロードを完了するまでメッセージ処理を一時停止するにはどうすればよいですか?
どんな提案でも大歓迎です:-)!