【发布时间】:2012-10-30 15:24:47
【问题描述】:
在将 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 完成缓存加载之前暂停消息处理?
任何建议都非常感谢:-)!
【问题讨论】: