[英]JMX MXBean Attributes all UNDEFINED - Spring 3.0.x/Tomcat 6.0
我一直在嘗試讓示例JMX MXBean在Spring配置的Web應用程序中工作,但是當我與jconsole連接時,MXBean上的所有基本屬性都將顯示為UNDEFINED。
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;
}
}
Spring JMX配置:
<beans>
<context:component-scan base-package="...">
<context:include-filter type="assignable" expression="...IJmxBean" />
</context:component-scan>
<context:mbean-export />
</beans>
這是我目前所知道的:
該元素正確地實例化了一個名為“ mgmt”的bean。 我已經登錄了一個零參數的公共構造函數,該構造函數表明它已被構造。
在我的Tomcat 6.0容器中正確地自動檢測並注冊了MgmtMXBean接口。 我可以使用jconsole連接到Tomcat中的MBeanServer,然后深入到Mgmt MXBean。
檢查MXBean時,“屬性”總是列為UNDEFINED,但是jconsole可以告訴屬性正確的類型。 此外,在jconsole中單擊“刷新”實際上不會調用“屬性”的getter方法-我已登錄getter方法以指示是否正在調用它(類似於有效的構造方法日志記錄),並且在日志中什么也看不到。
在這一點上,我不確定自己在做什么錯。 我已經嘗試了很多方法,包括構造一個顯式的Spring MBeanExporter實例並手動注冊MXBean,但這會導致MBean / MXBean未在Tomcat的MBean服務器上注冊或Attribute值為UNDEFINED。
由於各種原因,我不希望不必使用Spring的@ ManagedResource / @ ManagedAttribute批注。
Spring文檔或MBean / MXBean規范中是否缺少某些內容?
已解決的問題:感謝喬恩·史蒂文斯(Jon Stevens)的提示(以上),我回過頭來重新檢查了我的代碼和Spring配置文件:
在getAttribute()
方法中引發異常是確保“不可用”顯示為JConsole中的屬性值的肯定方法。 就我而言:
<beans>
元素上缺少default-autowire=""
屬性; serviceBean != null
。 顯然,我在stackoverflow.com上編寫的代碼比在我的測試代碼中寫的更好,因為我的測試代碼並未對此進行檢查。 我也沒有implements InitializingBean
或@PostConstruct
來檢查serviceBean != null
就像我通常在使用的幾乎所有其他bean上一樣。 一旦解決了serviceBean == null
的問題,一切就可以正常工作。 無論如何,請Jon +1以提供有效的演示,因為實際上有50種不同的方法可以在Spring中配置MBean / MXBean。
我最近構建了一個基於Spring的示例Web應用程序,該應用程序非常干凈地為JMX啟用了Spring,Hibernate和Ehcache的最新版本。
它具有基於EntityManager和DAO訪問(包括事務!)的示例。 它還顯示了如何進行基於注解的注入,以便不必為豆使用Spring的xml配置。 甚至還有一個使用注釋的基於SpringMVC的示例servlet。 基本上,這是運行在任何servlet引擎之上的功能強大的應用程序服務器的基於Spring的版本。
它尚未記錄,但我會盡快解決。 看一下配置文件和源代碼,它應該很清楚。
其背后的動機是,我厭倦了用50種不同方式進行設置的所有瘋狂博客文章,並最終使人們可以使用一個簡單的來源。 它位於github上,因此可以隨意分叉該項目並對其進行任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.