我有一个MDB,它将通过自动连接获得它的messageHandler实现。但是在运行时,这个对象是空的。甚至连发球手的断点都没有到达。当在onMessage方法的BaseMDB中有一个断点时(wich是由下面的MDB扩展的),它就到达了,我可以看到messageHandler-对象是空的。然后,我将得到一个空指针异常。这就是为什么我认为自动装配不起作用。
我的MDB看起来如下:
@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放入类路径中。它看起来如下:
<?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加载的,方法是:
Loading XML bean definitions from URL [<pathTobeanRefContext.XML][...]所以我认为它在类路径内是相关的。
在容器-context.xml中,除其他外,还有以下条目:
<context:annotation-config/>在容器-services-context.xml中,除其他外,行如下:
<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。
如果您需要更多的信息,请直接询问。谢谢你的帮助。
发布于 2017-02-24 16:18:45
https://stackoverflow.com/questions/42303641
复制相似问题