2012-07-03 22 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