2013-12-13 23 views
0

我想在Bean中注入QueueChannel,以便我可以監視它的剩餘容量。如果有人能指導我解決這個問題,那將是非常棒的。Spring集成:錯誤注入Bean中的QueueChannel以計算剩餘容量

下面是我的配置:

<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 
+0

約翰,我雖然在你的另一個問題中討論過這個問題。 http://stackoverflow.com/questions/20501149/spring-integration-jdbcinbound-channel-adapter-set-max-rows-per-poll-dynamic你還需要幫助嗎? –

回答

1

啓用JMX,渠道,終端等獲得包裹在一個代理;這意味着您只能使用接口注入它們(例如MessageChannel)。我們正在考慮選項,以便將來更容易一些,但現在,您必須拆開代理才能訪問底層的QueueChannel對象。 Here is a Gist showing how to do it

+0

非常感謝加里。 – John

0

約翰,在我們的聊天,你說:

I am using the JMX Export to get the info about the TaskExecutors in my application and to modify it dynamically

那麼,就沒有必要使用代理爲你的情況下打的,因爲<int-jmx:mbean-export>有屬性managed-components(),您可以只列出的豆nemas您遺囑執行人。 您的queueChannel將不會是一個代理。

+0

謝謝Artem,但我想獲得QueueChannel實例,以便我可以獲得剩餘容量。我明天將着手它。無論如何,我通過使用Garry的方法得到它的工作。 – John