2013-06-25 49 views
2

我想從我的消息驅動bean(MDB)調用Spring bean(@Component),但在獲取對它的引用時遇到問題。我試着用一個實現org.springframework.context.ApplicationContextAware的類來實現,它將Spring ApplicationContext存儲在類MyAppContext的靜態字段中。然後從MDB訪問MyAppContext中的靜態字段。但MyAppContext從不同的類加載器加載。 Spring應用程序上下文在Web模塊類加載器上下文中正確設置,但在MDB的類加載器上下文中爲空。如何從JBoss AS 7中的消息驅動Bean訪問Spring bean

我可以通過某種方式指示JBoss爲Web應用程序和MDB使用相同的類加載器嗎?或者是否有比將Spring應用程序上下文存儲在靜態字段中更好的方法?

感謝您的任何建議!

回答

1

上下文的靜態持有者並不是一個好主意。要讓Java在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

爲什麼不使用「ClassPathXmlApplicationContext」加載並查找MBean中需要的Spring bean?