如何在JBoss AS 7中从Message-driven bean访问Spring bean

时间:2013-06-25 10:57:20

标签: spring ejb jboss7.x

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

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

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

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

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

不幸的是,没有开箱即用的普通JNDI导出器,但是自己编写一个很容易,如本博客文章所示:http://maestro-lab.blogspot.ro/2009/01/how-to-export-spring-managed-bean-to.html

但是您可能需要查看JndiRmiServiceExporter

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

答案 1 :(得分:1)

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