如何在JBoss AS 7中从消息驱动的bean访问Spring bean



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

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

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

谢谢你的建议!

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

不幸的是,没有现成的普通JNDI导出器,但自己编写一个导出器相当容易,如本文所示:http://maestro-lab.blogspot.ro/2009/01/how-to-export-spring-managed-bean-to.html

然而,你可能想看看JndiRmiServiceExporter。

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

为什么不使用"ClassPathXmlApplicationContext"在MBean中加载和查找所需的Springbean?

最新更新