2

我想从我的消息驱动 bean (MDB) 调用 Spring bean (@Component),但在获取对它的引用时遇到问题。我尝试了一个实现类org.springframework.context.ApplicationContextAware,该类将 Spring ApplicationContext 存储在类的静态字段中MyAppContextMyAppContext然后从 MDB 访问静态字段 in 。但是MyAppContext是从不同的类加载器加载的。Spring 应用程序上下文在 web 模块类加载器上下文中正确设置,但在 MDB 的类加载器上下文中,它为空。

我可以以某种方式指示 JBoss 为 Web 应用程序和 MDB 使用相同的类加载器吗?

或者有比将 Spring 应用程序上下文存储在静态字段中更好的方法吗?

感谢您的任何建议!

4

2 回答 2

1

为什么不使用“ClassPathXmlApplicationContext”来加载和查找您在 MBean 中需要的 Spring bean?

于 2013-07-08T12:44:02.307 回答
1

上下文的静态持有者并不是一个好主意。要使您的 bean 可用于 Java EE 环境中的其他应用程序,您应该考虑使用 JNDI。

不幸的是,没有开箱即用的普通 JNDI 导出器,但自己编写一个相当容易,如这篇博文所示:http: //maestro-lab.blogspot.ro/2009/01/how-to-出口弹簧管理豆到.html

但是,您可能想查看一个JndiRmiServiceExporter 。

一旦您的 bean 绑定到 JNDI 中的名称,就可以在您的消息 bean 中使用标准 CDI 来引用它们,而不必担心类加载问题。

于 2013-07-06T01:07:22.833 回答