java spring jmx jboss5.x

java - MBean persistencia



spring jmx (1)

Creo que su problema es la implementación JBoss de JMX. De acuerdo con JSR160, la especificación de persistPolicy=OnUpdate para un atributo debería resultar en persistencia cada vez que se actualiza el atributo (de JSR160 1.4 ):

persistPolicy: define la política de persistencia predeterminada para los atributos en este MBean que no definen su propia persistPolicy. Toma uno de los siguientes valores:

[...]

  • OnUpdate: el atributo se almacena cada vez que se actualiza el atributo.

Lo más probable es que esté causado por este texto muy extraño en el Javadoc de Sun para PersistMBean (como lo señala @ Plínio Pantaleão ):

No almacene el MBean si el campo ''persistPolicy'' es:

= "nunca"

= "onUpdate"

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

Además de informar esto a JBoss (y el problema de Javadoc a Sun), es posible que pueda persistPolicy=Always utilizando la política persistPolicy=Always (nuevamente, desde JSR160):

  • Always: este es un sinónimo de OnUpdate, que se reconoce por razones de compatibilidad. Se recomienda que las aplicaciones usen OnUpdate en su lugar. Una implementación de la interfaz Descriptor, como DescriptorSupport, puede elegir reemplazar un valor de "Siempre" para persistPolicy por un valor de "OnUpdate".

Tengo un problema con la persistencia de mi config MBean. Mi configuración:

<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; } }

Mi objetivo es guardar el estado después de un cambio de propiedad (guardar en archivo o metadatos, no en db). Después de reiniciar JBoss, mi MBean se inicializa con valores estándar. Parece que PersistPolicy no funciona ... Traté de implementar PersistentMBean, pero store () y load () nunca fueron invocados. Descubrí que puede tratarse de un problema de implementación de JBoss JMX. También algunas personas usaron AOP y métodos anotados en MBean para almacenarlos. Todas estas publicaciones fueron de 2008-2010, ¿tal vez algo ha cambiado?

La configuración de mi JBoss es la predeterminada (jboss-service.xml)