我想从消息驱动 bean (MDB) 调用 Spring bean(@Component),但在获取对其引用时遇到问题。我尝试过使用一个实现 org.springframework.context.ApplicationContextAware 的类,它将 Spring ApplicationContext 存储在类 MyAppContext 的静态字段中。然后从 MDB 访问 MyAppContext
中的静态字段。但是 MyAppContext
是从不同的类加载器加载的。 Spring 应用程序上下文在 Web 模块类加载器上下文中正确设置,但在 MDB 的类加载器上下文中,它为空。
我可以以某种方式指示 JBoss 对 Web 应用程序和 MDB 使用相同的类加载器吗?
或者有没有比将 Spring 应用程序上下文存储在静态字段中更好的方法?
感谢您的建议!
最佳答案
上下文的静态持有者并不是一个好主意。为了使您的 Bean 可用于 Java EE 环境中的其他应用程序,您应该考虑使用 JNDI。
不幸的是,没有开箱即用的普通 JNDI 导出器,但您自己编写一个相当容易,如这篇博客文章所示:http://maestro-lab.blogspot.ro/2009/01/how-to-export-spring-managed-bean-to.html
但是有一个 JndiRmiServiceExporter您可能想看看。
一旦您的 bean 绑定(bind)到 JNDI 中的名称,就可以在您的消息 bean 中使用标准 CDI 来引用它们,而不必担心类加载问题。
关于spring - 如何从 JBoss AS 7 中的消息驱动 bean 访问 Spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17295503/