2012-02-20 242 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」值。