【问题标题】:Spring Integration: Autowiring Queues Failing when using JMXSpring Integration:使用 JMX 时自动装配队列失败
【发布时间】:2012-11-12 19:22:41
【问题描述】:

我可以在一个测试类中使用@Autowired 和@Qualifier 自动装配两个QueueChannel 实例就好了,直到我添加了JMX 导出命名空间处理程序。

我手头没有确切的配置(这是工作中的一个问题,现在困扰我几个小时!),但我正在使用这些元素:

<int-jmx:mbean-export default-domain="com.business" server="mbeanServer" />
<context:mbean-export />
<context:mbean-server />

当我定义了这三件事时,自动装配过程失败并抛出NoSuchBeanException。但是,我可以看到有带有我队列 ID 的 bean,因为我有一个后处理器,它正在迭代上下文中的所有 bean。

这是否与代理混淆 QueueChannels 的声明类型、阻止按类型自动装配工作有关?

【问题讨论】:

  • 异常堆栈跟踪是什么?

标签: java spring jmx spring-integration spring-jmx


【解决方案1】:

您需要使用接口而不是具体类进行自动装配,因为 JMX 导出将通道包装在代理中。使用PollableChannel 表示QueueChannel,或使用SubscribableChannel 表示DirectChannel。

正是出于这个原因,使用接口而不是具体类进行编码总是一种好习惯。

【讨论】:

  • 嗨,加里,感谢您指出这一点。自动装配现在可以工作,但我需要 QueueChannel 类的功能(清除测试之间的队列,断言大小)。我收到了 classcast 异常 $Proxy13 cannot be cast to o.s.i.c.QueueChannel` - 如何使用实现的方法?
  • 在这里找到最不坏的工作:techper.net/2009/06/05/…
  • 我没有比你更好的解决方法了。为了通过代理使这些方法可用,我们必须创建另一个接口,比如 QueueOperations,声明这些方法并让 QueueChannel 实现它。随意打开 JIRA“改进”票,我们会考虑在未来的版本中使用它。
  • 谢谢 - 我只是在测试中自动装配 QueueChannels,所以我刚刚分离出 JMX 功能,只在不测试时启用。不过很高兴知道,以防我在其他地方遇到这种情况。
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
相关资源
最近更新 更多