首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MessageDrivenBean中的Spring注入不起作用-空指针- jboss 7

MessageDrivenBean中的Spring注入不起作用-空指针- jboss 7
EN

Stack Overflow用户
提问于 2017-02-17 17:09:28
回答 1查看 849关注 0票数 0

我有一个MDB,它将通过自动连接获得它的messageHandler实现。但是在运行时,这个对象是空的。甚至连发球手的断点都没有到达。当在onMessage方法的BaseMDB中有一个断点时(wich是由下面的MDB扩展的),它就到达了,我可以看到messageHandler-对象是空的。然后,我将得到一个空指针异常。这就是为什么我认为自动装配不起作用。

我的MDB看起来如下:

代码语言:javascript
复制
@MessageDriven(name = "MyProjectIntern-Bean", activationConfig = {
                                                                 @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
                                                             @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/q_myproject_intern") })
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class MyprojectInternMDB extends BaseMDB implements MessageListener {

    @Override
    @Autowired
    public void setMessageHandler(@Qualifier("myprojectInternalMessageHandler") MessageHandler messageHandler) {
        this.messageHandler = messageHandler;
    }
}

从这里开始,我已经阅读了SpringBeanAutowiringInterceptor,它使用默认工厂,因此我需要将beanRefContext.xml放入类路径中。它看起来如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="server.context" class="org.springframework.context.support.ClassPathXmlApplicationContext">
        <constructor-arg>
            <list>
                <value>/container-context.xml</value>
                <value>/services-context.xml</value>
                <value>/techcommon-context.xml</value>
                <value>/container-services-context.xml</value>
                <value>/container-context-timb.xml</value>
                <value>/fxp-services-context.xml</value>
                <value>/stm-services-context.xml</value>
            </list>
        </constructor-arg>
    </bean>
</beans>

在启动时,jboss还告诉我,所有这些xml文件都是从beanRefContext.xml加载的,方法是:

代码语言:javascript
复制
Loading XML bean definitions from URL [<pathTobeanRefContext.XML][...]

所以我认为它在类路径内是相关的。

在容器-context.xml中,除其他外,还有以下条目:

代码语言:javascript
复制
<context:annotation-config/>

在容器-services-context.xml中,除其他外,行如下:

代码语言:javascript
复制
<bean id="internalMessageHandler" class="com.myproject.server.message.InternalMessageHandler">
    <qualifier value="myprojectInternalMessageHandler" />
</bean>

因此,我的MDB有一个拦截器,它将使用给定的限定符注入messageHandler。MessageHandler被定义为具有相同限定符的bean,并引用要注入的类。这个bean是在一个xml文件中定义的,该文件反过来通过beanRefContext.xml加载。

那我还需要什么?

对我的部署说几句话。有一个ear文件,包含a)我的MDB作为单独的jar-模块;b)包含我的web应用程序的war文件;c)包含所有使用的库(包括要注入的messageHandler类)的lib文件夹和meta。

如果您需要更多的信息,请直接询问。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-24 16:18:45

我通过添加描述的内容来解决这个问题

代码语言:javascript
复制
<module name="test.module" annotations="true" />

发现地点:deployment

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42303641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档