2012-02-20 3 views
32

У меня проблема с сохранением моего config MBean. Моя конфигурация:Сохранение 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; 
     } 
} 

Моя цель состоит в том, чтобы сохранить состояние после изменения свойств (сохранить в файл или метаданные - не в БД). После перезапуска JBoss мой MBean инициализируется стандартными значениями. Кажется, PersistPolicy не работает ... Я попытался реализовать PersistentMBean, но store() и load() никогда не вызывались. Я обнаружил, что это может быть проблема JBoss JMX. Также некоторые люди использовали AOP и аннотированные методы в MBean для их хранения. Все эти должности были с 2008 по 2010 год, так что, возможно, что-то изменилось?

Моего JBoss конфигурация по умолчанию (JBoss-service.xml)

+0

Какую версию JBoss вы используете? Поддерживает ли он 'persistPolicy'? –

+0

jboss-5.1.0.GA https://community.jboss.org/thread/175100?tstart = 0 я продолжаю искать –

+2

По какой-то причине я не знаю, эта страница https://docs.oracle.com/javase/7/docs/api/javax/management/PersistentMBean.html говорит мне, что onUpdate будет действительно, не вызывает store(). Попытайтесь изменить всегда и посмотрите, помогает ли. (Я тоже в шоке) –

ответ

1

Я думаю, ваша проблема является реализацией JBoss из JMX. Согласно JSR160, указав persistPolicy=OnUpdate для атрибута должен привести к сохраняющимся каждый раз, когда атрибут обновляется (из JSR160 1.4):

persistPolicy - Определяет политику сохранения состояния по умолчанию для атрибутов в этой MBean , которые не определяют свои собственные persistPolicy , Принимает одно из следующих значений:

[...]

  • OnUpdate - Атрибут сохраняется каждый раз, когда атрибут обновляется.

Это, скорее всего, вызвано это очень странным текстом в Javadoc Солнца для PersistMBean (как указал @Plínio Pantaleão):

Не следует хранить MBean, если поле «persistPolicy» является:

= "никогда"

= "OnUpdate"

= «OnTimer» & & в настоящее время < «lastPersistTime» + «persistPeriod»

Кроме отчетности это JBoss (и вопрос Javadoc к Солнцу), вы можете быть в состоянии работать вокруг него с помощью persistPolicy=Always политики (опять же, из JSR160):

  • Всегда - это синоним OnUpdate, который признан по причинам совместимости. Вместо этого рекомендуется использовать OnUpdate . Реализация интерфейса дескриптора, такая как DescriptorSupport, может заменить значение «Всегда» для persistPolicy значением «OnUpdate».
Смежные вопросы