2012-02-20 132 views
32

我的配置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'吗? – 2012-02-20 10:28:12

+0

jboss-5.1.0.GA https://community.jboss.org/thread/175100?tstart = 0我继续搜索 – 2012-02-20 10:36:00

+2

对于一些bizzare的原因,我真的不知道,这个页面https://docs.oracle.com/javase/7/docs/api/javax/management/PersistentMBean.html告诉我,onUpdate会确实不叫store()。尝试改变总是,看看是否有帮助。 (我也非常震惊) – 2016-02-17 18:49:25

回答

1

我觉得你的问题是JBoss JMX实现的。据JSR160,一个属性指定persistPolicy=OnUpdate应导致持续的每一个属性更新时间(从JSR160 1.4):

persistPolicy - 定义默认的持久化策略在此MBean 属性没有定义自己的persistPolicy 。注意到下列值之一:

[...]

  • 的OnUpdate - 属性存储每个属性的更新时间。

这是最有可能在太阳的Javadoc这很奇怪文字PersistMBean(由@Plínio Pantaleão指出的)原因造成的:

不要存放在MBean如果“persistPolicy”字段是:

= “从不”

= “的onUpdate”

=“计时器触发” & &现在<“lastPersistTime” +“persistPeriod”

除了报告该到JBoss(和的Javadoc问题星期日),您可以通过使用persistPolicy=Always政策来解决它(再次,从JSR160):

  • 始终 - 这是OnUpdate中,这是公认的 兼容性原因的代名词。建议应用程序改用OnUpdate 。 Descriptor接口(例如 DescriptorSupport)的实现可以选择用值“OnUpdate”替换 persistPolicy的“Always”值。