我想从我的消息驱动bean(MDB)调用Spring bean(@Component),但是在获取对它的引用时遇到了问题。我尝试过一个实现org.springframework.context.ApplicationContextAware
的类,它将Spring ApplicationContext存储在类MyAppContext
的静态字段中。然后从MDB访问MyAppContext
中的静态字段。但MyAppContext
是从不同的类加载器加载的。 Spring应用程序上下文在Web模块类加载器上下文中正确设置,但在MDB的类加载器上下文中,它为null。
我可以以某种方式指示JBoss为Web应用程序和MDB使用相同的类加载器吗?
或者有没有比在静态字段中存储Spring应用程序上下文更好的方法?
感谢您的任何建议!
答案 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?