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

标签 spring ejb jboss7.x

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

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

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

感谢您的建议!

最佳答案

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

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

但是有一个 JndiRmiServiceExporter您可能想看看。

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

关于spring - 如何从 JBoss AS 7 中的消息驱动 bean 访问 Spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17295503/

相关文章:

java - 添加Spring Security导致列和表丢失

java - 在 JBoss 7.1.1 的这个模块中已经定义了一个名为 'XXX' 的组件

java - Wildfly 8.0 服务器中的 JMS 消息持久化

java - 无法通过 jconn4.jar/Sybase 驱动程序版本 7 和 Mybatis 框架更新 Sybase 数据库中的多条记录

java - 将 Handler 注入(inject)注解 Controller

spring - pubsub 中订阅者的重试设置是什么以及如何在 spring 应用程序中正确设置它们?

java - EJB3 带来了哪些特性以及 EJB3 如何与 Spring 框架相结合?

ejb - 如何获取所有 EJB 计时器?

java - 如何使用 Eclipse IDE 和 Tomcat 服务器在 Java 中实现带有 Web 应用程序的 EJB

Spring框架MVC "concurrency"?