2012-07-03 3 views

ответ

1

Если это то, что вам нужно, вы можете его создать, но оно недоступно в реализации Ehcache JMX. Я бы не ожидал, что это будет либо, так как неизвестно, будут ли объекты, хранящиеся в ehcache, отображаемыми через JMX. Если вы знаете, что это так, вы могли бы создать MBean, который, учитывая ссылку на ehcache CacheManager или Cache, мог бы разоблачить содержимое кеша.

Имейте в виду, что если вы используете кеш памяти, в кеше будут объекты, которые не находятся в памяти, а на диске или, если вы используете терракоту, они могут находиться на удаленном сервере. Кроме того, иногда более эффективно хранить объекты Java в их сериализованной форме. Если вы это сделаете, просмотр данных потребует десериализации.

Если вы заинтересованы только в том, чтобы видеть эти объекты, когда вы отлаживаете проблему, я бы подумал, что просто полагаюсь на отладчик, как тот, который доступен в хороших IDE. У NetBeans и Eclipse есть отладчики, которые можно использовать для просмотра содержимого кеша. Я делал это часто.

Поскольку вы отметили этот вопрос «весной», я предполагаю, что вы используете весну. Создание MBean весной очень просто. Вы просто добавляете компонент экспортера в контекст и делаете свой 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" объект будет представленный как JMX MBean, который будет иметь атрибут с именем «имя» и операцию с именем «printName». Имя MBean будет: «FOO: name = foo». Вы можете настроить все это поведение. См .: http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#jmx-exporting