MBean持久性

Jak*_*b C 34 java spring jmx jboss5.x

我的配置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>
Run Code Online (Sandbox Code Playgroud)
 @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;
      }
 }
Run Code Online (Sandbox Code Playgroud)

我的目标是在属性更改后保存状态(保存到文件或元数据 - 而不是数据库).JBoss重启后,我的MBean初始化为标准值.似乎PersistPolicy无效......我试图实现PersistentMBean,但从未调用store()和load().我发现它可能是JBoss JMX实现问题.还有一些人在MBean中使用AOP和带注释的方法来存储它们.所有这些帖子都是从2008年到2010年,所以也许有些事情发生了变化?

我的JBoss配置是默认的(jboss-service.xml)

dov*_*alk 1

我认为你的问题是 JMX 的 JBoss 实现。根据 JSR160,指定persistPolicy=OnUpdate属性应该导致每次属性更新时(从JSR160 1.4 开始):

\n\n
\n

persistPolicy - 定义此 MBean 中未定义自己的 persistPolicy 的属性的默认持久性策略。具有以下值之一:

\n\n

[...]

\n\n
    \n
  • OnUpdate - 每次更新属性时都会存储该属性。
  • \n
\n
\n\n

这很可能是由 Sun 的 Javadoc 中这个非常奇怪的文本引起的(正如@Pl\xc3\xadnio Pantale\xc3\xa3oPersistMBean所指出的)):

\n\n
\n

如果“persistPolicy”字段为以下情况,则不要存储 MBean:

\n\n

=“从不”

\n\n

=“更新时”

\n\n

= "onTimer" && now < \'lastPersistTime\' + \'persistPeriod\'

\n
\n\n

除了向 JBoss 报告此问题(以及向 Sun 报告 Javadoc 问题)之外,您还可以通过使用来解决此问题persistPolicy=Always策略(同样来自 JSR160)来解决此问题:

\n\n
\n
    \n
  • 始终 - 这是 OnUpdate 的同义词,出于兼容性原因而被识别。建议应用程序改用 OnUpdate\n。Descriptor 接口的实现(如 DescriptorSupport)可以选择将 persistPolicy 的 \xe2\x80\x9cAlways\xe2\x80\x9d 值替换为 \xe2\x80\x9cOnUpdate\xe2\x80 值\x9d。
  • \n
\n
\n