Spring Integration:错误在Bean中注入QueueChannel以计算RemainingCapacity

时间:2013-12-13 22:55:15

标签: spring-integration

我想在bean中注入一个QueueChannel,以便我可以监视它的RemainingCapacity。如果有人可以指导我解决这个问题,那就太好了。

以下是我的配置:

<si:channel id="queueChannel">
    <si:queue capacity="200"/>
</si:channel>
<bean id="inboundAdapterPollingConfiguration" class="com.foo.impl.InboundAdapterPollingConfigurationImpl">
        <property name="channel" ref="queueChannel"/>
        <property name="jdbcInboundAdapter" ref="jdbcInboundAdapter"/>      
    </bean>

Bean代码:

public class InboundAdapterPollingConfigurationImpl implements MethodInterceptor{

QueueChannel channel;

public QueueChannel getChannel() {
    return channel;
}
public void setChannel(QueueChannel channel) {
    this.channel = channel;
}
}

错误:

java.lang.IllegalStateException: Cannot convert value of type 
[$Proxy336 implementing org.springframework.integration.core.PollableChannel,  
org.springframework.integration.MessageChannel] to required type  
[org.springframework.integration.channel.QueueChannel] 
for property 'channel': no matching editors or conversion strategy found

2 个答案:

答案 0 :(得分:1)

启用JMX时,通道,端点等会被包含在代理中;这意味着您只能使用界面(例如MessageChannel)注入它们。我们正在考虑将来使这更容易一些的选项,但是,现在,您必须解包代理才能访问基础QueueChannel对象。 Here is a Gist showing how to do it

答案 1 :(得分:0)

约翰,在我们的聊天中你说:

  

我正在使用JMX Export获取有关我的应用程序中的TaskExecutors的信息并动态修改它

因此,没有必要为您的案例与代理作斗争,因为<int-jmx:mbean-export>具有属性managed-components(),您可以只列出执行者的bean nemas。 您的queueChannel将不是代理。