2012-07-03 21 views
4

有沒有辦法如何查看通過JMX存儲在ehcache中的數據/對象?我發現只是緩存統計信息,但我需要查看對象結構。Ehcache數據視圖通過JMX

回答

1

如果這是您需要的東西,您可以構建它,但它在Ehcache JMX實現中不可用。我不希望它是因爲不知道存儲在ehcache中的對象是否可以通過JMX顯示。如果你知道它們,你當然可以創建一個MBean,它給出了ehcache CacheManager或Cache的引用,可以公開緩存的內容。

請記住,除非您使用僅內存緩存,否則高速緩存中將存在不在內存中但在磁盤上的對象,或者如果您使用的是兵馬俑,它們可能位於遠程服務器上。另外,以序列化格式存儲java對象有時更高效。如果你這樣做,查看數據將需要反序列化。

如果您只是在調試某個問題時看到這些對象,我會考慮只依賴一個調試器,就像在良好IDE中提供的調試器一樣。 NetBeans和Eclipse都具有可用於查看緩存內容的功能調試器。我經常這樣做。

既然你用「spring」標記了這個問題,我假設你使用的是spring。在春天創建一個MBean非常簡單。您只需將導出器Bean添加到上下文中,並使您的MBean實現一個與您的對象相同的接口,但MBean已添加到最後。這裏有一個例子:

的applicationContext.xml:

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" 
     p:autodetect="true"/> 
<bean name="FOO:name=foo" class="com.foo.test.Foo"/> 

Foo.java:

package com.foo.test; 

public class Foo implements FooMBean { 
    private String name; 

    ... 

    @Override 
    public String getName() { 
    return name; 
    } 

    @Override 
    public void setName(String name) { 
    this.name = name; 
    } 

    @Override 
    public void printName() { 
    System.out.println(name); 
    } 
} 

FooMBean.java:

package com.foo.test; 

public interface FooMBean { 
    public String getName(); 
    public void setName(String name); 
    public void printName(); 
} 

在這個例子中, 「foo」 的對象將公開爲具有名爲「name」的屬性和名爲「printName」的操作的JMX MBean。 MBean的名稱是:「FOO:name = foo」。您可以自定義所有這些行爲。參見:http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#jmx-exporting