Постоянство MBean - PullRequest
       24

Постоянство MBean

34 голосов
/ 20 февраля 2012

У меня проблема с сохранением моего конфига 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)

1 Ответ

1 голос
/ 26 марта 2016

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

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

[...]

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

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

Не сохранять MBean, если поле «persistPolicy» имеет значение:

= "никогда"

= "onUpdate"

= "onTimer" && now <'lastPersistTime' + 'persistPeriod' </p>

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

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