我一直在試圖獲得一個示例JMX MXBean,它在Spring配置的webapp中工作,但MXBean上的任何基本屬性都會在我連接時出現UNDEFINED與jconsole。JMX MXBean屬性全部未定義 - Spring 3.0.x/Tomcat 6.0
Java接口/類:
public interface IJmxBean { // marker interface for spring config, see below
}
public interface MgmtMXBean { // lexical convention for MXBeans - mgmt interface
public int getAttribute();
}
public class Mgmt implements IJmxBean, MgmtMXBean { // actual JMX bean
private IServiceBean serviceBean; // service bean injected by Spring
private int attribute = 0;
@Override
public int getAttribute() {
if(serviceBean != null) {
attribute = serviceBean.getRequestedAttribute();
}
return attribute;
}
public void setServiceBean(IServiceBean serviceBean) {
this.serviceBean = serviceBean;
}
}
春JMX配置:
<beans>
<context:component-scan base-package="...">
<context:include-filter type="assignable" expression="...IJmxBean" />
</context:component-scan>
<context:mbean-export />
</beans>
這是我目前所知:
元素被正確實例化一個名爲豆「 MGMT」。我已經登錄了一個零參數的公共構造函數,它表示它正在構建。
正確地自動檢測並註冊與我的Tomcat 6.0容器的MgmtMXBean接口。我可以使用jconsole連接到Tomcat中的MBeanServer,並深入到Mgmt MXBean。
檢查MXBean時,「屬性」始終列爲UNDEFINED,但jconsole可以指出屬性的正確類型。另外,在jconsole中點擊「刷新」實際上並不會調用「屬性」的getter方法 - 我登錄getter方法來指示它是否被調用(類似於可用的構造函數日誌記錄),並且在日誌中什麼也看不到。
在這一點上,我不知道我在做什麼錯了。我已經嘗試了很多事情,包括構建一個顯式的Spring MBeanExporter實例和手動註冊MXBean,但是它可能導致MBean/MXBean未使用Tomcat的MBean服務器註冊,或導致屬性值UNDEFINED。
由於各種原因,我寧願不必使用Spring的@ ManagedResource/@ ManagedAttribute註解。
有沒有辦法,我錯過在春節文檔或MBean的/ MXBean的規格的東西嗎?
如果你已經有了一個解決方案,那麼你應該張貼它作爲一個答案,標記爲接受,而不是將它添加到問題 – skaffman 2011-05-24 16:38:59
@skaffman:我不知道該做的,因爲我已經看到了它兩種方式在stackoverflow.com上。我已經編輯,重新發布,並將其標記爲答案。感謝您澄清對我來說! – BobG 2011-05-24 18:07:21