Надежность MBean
У меня проблема с сохранением моего config MBean. Моя конфигурация:
<bean id="adminMBean" class="pl.mobileexperts.catchme.mbeans.AdminSettingsMBean"></bean>
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="assembler" ref="assembler" />
<property name="autodetect" value="true" />
<property name="namingStrategy" ref="namingStrategy"/>
</bean>
<bean id="attributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
<property name="attributeSource" ref="attributeSource" />
</bean>
<bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource" ref="attributeSource" />
</bean>
@ManagedResource(objectName = "pl.mobileexperts.catchme:name=adminMBean",
description ="admin settings",
persistPolicy = "OnUpdate",
persistLocation = "c:/", persistName = "adminSettings.jmx")
public class AdminSettingsMBean {
private boolean moderatorModeEnabled;
public AdminSettingsMBean() {
}
@ManagedAttribute(persistPolicy = "OnUpdate")
public boolean isModeratorModeEnabled() {
return moderatorModeEnabled;
}
@ManagedAttribute(persistPolicy = "OnUpdate")
public void setModeratorModeEnabled(boolean moderatorModeEnabled) {
this.moderatorModeEnabled = moderatorModeEnabled;
}
}
Моя цель - сохранить состояние после изменения свойства (сохранить в файл или метаданные - не на db). После перезапуска JBoss мой MBean инициализируется стандартными значениями. Кажется, PersistPolicy не работает... Я попытался реализовать PersistentMBean, но store() и load() никогда не вызывались. Я обнаружил, что это может быть проблема JBoss JMX. Также некоторые люди использовали AOP и аннотированные методы в MBean для их хранения. Все эти должности были с 2008-2010 года, так что, возможно, что-то изменилось?
Конфигурация My JBoss по умолчанию (jboss-service.xml)
Ответы
Ответ 1
Я думаю, что ваша проблема - реализация JMX JBX. Согласно JSR160, указание атрибута persistPolicy=OnUpdate
для атрибута должно постоянно сохраняться при каждом обновлении атрибута (из JSR160 1.4):
persistPolicy - определяет политику сохранения по умолчанию для атрибутов в этом MBean которые не определяют свою собственную persistPolicy. Принимает одно из следующих значений:
[...]
- OnUpdate - атрибут хранится каждый раз, когда атрибут обновляется.
Скорее всего, это вызвано этим очень странным текстом в Sun Javadoc для PersistMBean
(как указано @Plínio Pantaleão):
Не сохраняйте MBean, если поле persistPolicy:
= "никогда"
= "onUpdate"
= "onTimer" && & теперь < 'lastPersistTime' + 'persistPeriod'
Помимо сообщения об этом JBoss (и проблеме Javadoc для Sun), вы можете обойти его с помощью политики persistPolicy=Always
(опять же, из JSR160):
- Always - это синоним OnUpdate, который распознается для причинам совместимости. Рекомендуется, чтобы приложения использовали OnUpdate вместо. Реализация интерфейса дескриптора, например DescriptorSupport может выбрать значение "Всегда" для persistPolicy на значение "OnUpdate".