Есть ли способ просмотра данных/объектов, которые хранятся в ehcache через JMX? Я нашел только статистику кеша, но мне нужно просмотреть структуру объектов.Ehcache просмотр данных через JMX
ответ
Если это то, что вам нужно, вы можете его создать, но оно недоступно в реализации 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