当前位置: 首页 > 知识库问答 >
问题:

带有spring bean的MDB不会自带其他包中的bean

米迪
2023-03-14

我正在使用以下MDB连接到WMQ:

@MessageDriven(name = "EventListener", activationConfig = {
   @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
   @ActivationConfigProperty(propertyName = "destination", propertyValue = "ABC"),
   @ActivationConfigProperty(propertyName = "hostName", propertyValue = "ABC"),
   @ActivationConfigProperty(propertyName = "port", propertyValue = "ABC"),
   @ActivationConfigProperty(propertyName = "channel", propertyValue = "ABC"),
   @ActivationConfigProperty(propertyName = "queueManager", propertyValue = "ABC"),
   @ActivationConfigProperty(propertyName = "sslCipherSuite", propertyValue = "ABC"),
   @ActivationConfigProperty(propertyName = "transportType", propertyValue = "CLIENT") })
@ResourceAdapter(value = "wmq.jmsra.rar")
@TransactionManagement(value = TransactionManagementType.CONTAINER)
@TransactionAttribute(value = TransactionAttributeType.REQUIRED)
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class EventListener implements MessageListener {}

下面的spring bean是自动连线的,作为上面MDB中使用的拦截器注释的一部分。event-app-config.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/jee
    http://www.springframework.org/schema/jee/spring-jee.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.abc" />
    <context:annotation-config/>
    <import resource="classpath:core-app-config.xml" /> //This is another package

</beans>

下面是core-app-config.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:cache="http://www.springframework.org/schema/cache"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/jee
    http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    http://www.springframework.org/schema/cache
    http://www.springframework.org/schema/cache/spring-cache.xsd">

    <import resource="classpath:database-config.xml" />
    <import resource="classpath:spring-jms-config.xml" />

</beans>

主xml BeanRefContext.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="http://www.springframework.org/schema/jee
    http://www.springframework.org/schema/jee/spring-jee.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

     <context:annotation-config/>
     <context:spring-configured/>

     <bean id="beanRefFactory" class="org.springframework.context.support.ClassPathXmlApplicationContext">
         <constructor-arg value="classpath*:event-app-config.xml"  />
     </bean>              
</beans>

我正在从MDB包中的数据库&spring jms xmls中自动生成某些bean实例,但看起来这些xmls中的所有bean都没有创建。能不能请你明白什么是问题。MDB的自动功能是否仅限于同一包中的spring xml,而在父spring bean xml中进行的任何其他导入都没有创建?

示例:EventListenercom.abc.xyz包中。我是eventlistener类中来自com.abc.core包的类A的自动实例。类A@service,它又具有自动连线依赖关系,例如类Bwhich在com.abc.packb中。因此,当创建类A的实例时,我得到一个异常,表示未找到类B定义。

共有1个答案

东门涵育
2023-03-14

要解决这个问题,您需要使用SpringBeanAutoWiringSupport。

因为MDB不是在spring上下文中创建的,所以必须使用SpringBeanAutowiringSupportProcessInjectionBasedOnCurrentContext(Object target)方法自动连接所需的bean,或者从SpringBeanAutowiringSupport继承MDB。

 类似资料:
  • 我有一个java类,它使用来自队列的消息,向一些URL发送HTTP调用。我已经在google和stackoverflow上做了一些搜索(如果我错过了提到这个问题的任何来源,我真的很抱歉),但是没有找到关于setRollbackOnly调用的任何细节。 我的问题是...在回滚的情况下,从队列中消耗的消息将阻塞队列的其余部分,并且将循环直到它被成功处理,或者在当前队列的末尾重新使用? 下面是我用于从队

  • 问题内容: 这段代码可以正常工作,但是我又长又令人毛骨悚然。 如您所见,它由3个重复部分组成,用于检索: 玩家名称和他们玩过的游戏数量 玩家名称和他们赢得的游戏数量 玩家姓名和输掉的游戏数量 并且每个还包括2个部分: 玩家名称和以玩家_1身份参加的游戏数量 玩家名称以及他们作为玩家_2参加的游戏数量 如何简化呢? 结果看起来像这样: 问题答案: Postgres 9.4* 或更高版本中的 聚合子句

  • 问题内容: 我发现自己想在eclipse中突出显示一个字符串,并用双引号或单引号引起来。我似乎找不到快捷方式。例如,在textmate中,如果我突出显示一个字符串并键入’或“,则字符串将被它们包围。同样,我也认为适用于)和}。 我已经添加了执行此操作的代码模板,但是它从未出现在菜单中,而且似乎也没有办法为其创建快捷方式。请注意,这应该完全由键盘驱动,并且不涉及任何辅助菜单,这始终是我的目标。 问题

  • 我从学习Spring开始,创建基本项目,创建数据库,插入值,然后在web浏览器中打印。我的问题是,当我把RestController放在同一个包中,就像main class一样--这是可以的,但是我想把它分发到其他包中,并且当我创建新包时,移动RestController就不起作用了。让met解释: 我的项目看起来像: 我的pom.xml看起来像 它是自动生成的,我只写一个依赖项

  • 问题内容: 我有一个登录页面。用户成功登录后,他们可以查看和管理其个人资料/信息。这可以通过从数据库检索数据并显示在formview上来完成。 但是,以下错误出现在我的userprofile.aspx.cs文件中: Userprofile.aspx: Userprofile.aspx.cs: 问题答案: 请尝试以下方法: 我虽然没有测试

  • 问题内容: 我从学习Spring开始,我创建了一个基本项目,该项目创建数据库,插入值,然后在Web浏览器中打印它。我的问题是,当我将RestController和主类放在同一个包中时- 可以,但是我想将其分发到其他包中,而当我创建新包时,移动RestController则不起作用。让我们见面解释: 我的项目看起来像: 我的控制器看起来: 当一切都在包,我写的网络浏览器的http://本地主机:80