在將JBoss 5應用程序遷移到JBoss AS 7(7.1.1.FINAL)時,我遇到了一個新的JMS消息驅動EJB的問題。在消息處理中,必須檢查一些主數據字段。爲了提高性能,應使用一個需要大約30秒來加載數據的EJB將這個主數據預加載到緩存結構中。暫停MDB消息處理,直到@StartupBean完成初始化
我的問題是即使緩存尚未完全初始化,隊列消息處理也會啓動,從而導致消息驗證錯誤。
我試圖定義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已經完成loadin g緩存?
任何建議非常感謝:-)!
在JBoss上也很棒,謝謝Aksel :-)! – skowski
嗯......不幸的是在WildFly 8.2上不起作用 –