2015-08-24 61 views
1

我有一個Spring集成應用程序,其中幾個FileTailingMessageProducerDirectMessageChannel以編程方式創建 - 即不通過XML配置,但在ApplicationListener<ContextRefreshedEvent>內。現在我想使用JMX監視消息通道。我想我將不得不使用我的integrationMBeanExporter來添加它們。以編程方式註冊DirectChannelMetrics作爲JMX Bean

這是我的嘗試:

DirectChannelMetrics directChannelMetrics = new DirectChannelMetrics(tailedLines, "tailedLines"); 
integrationMBeanExporter.getServer().registerMBean(directChannelMetrics, new ObjectName("d:foo=foo")); 

但我得到以下異常:

javax.management.NotCompliantMBeanException: MBean class org.springframework.integration.monitor.DirectChannelMetrics does not implement DynamicMBean, and neither follows the Standard MBean conventions 

這令我感到詫異,認爲DirectChannelMetrics不符合JMX的要求,因爲當我用jvisualvm查看我的應用程序我可以看到其他註冊的這種類型的bean沒有問題。

任何想法?

回答

1

從一個側面MBeanExporter做到這一點對此事:

return new StandardMBean(bean, ((Class<Object>) ifc)); 

註冊bean作爲一個MBean之前。

從另一方面,我認爲你的邏輯有點味道。在運行時創建MessageChannel看起來不正常。特別是那些用於JMX導出的。

我可以同意動態FileTailingMessageProducer s,但對我來說似乎我們可以避免爲預定義通道重構邏輯的動態通道。

0

您可以利用Spring的MBeanExport.registerManagedResource(directChannelMetrics, new ObjectName("d:foo=foo"))。 Spring將爲DirectChannelMetric類的實例生成一個管理界面。但DirectChannelMetric類需要實現Mbean/MXBean接口或匹配目前的MBeanInfoAssembler期望值(在MetadataMBeanInfoAssembler的情況下用@ManagedResource註釋標記或在InterfaceBasedMBeanInfoAssembler等情況下實現指定接口之一)。

相關問題