2012-02-20 10 views
32

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

<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 ahorrar estado después de un cambio de propiedad (o guardar en el archivo de metadatos - no 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?

Mi JBoss configuración por defecto es (jboss- service.xml)

+0

¿Qué versión de JBoss usa? ¿Admite 'persistPolicy'? –

+0

jboss-5.1.0.GA https://community.jboss.org/thread/175100?tstart = 0 sigo buscando –

+2

Por alguna razón extraña que realmente no sé, esta página https://docs.oracle.com/javase/7/docs/api/javax/management/PersistentMBean.html me dice que onUpdate de hecho, no llame a store(). Intente cambiar a always y vea si ayuda. (Estoy realmente sorprendido también) –

Respuesta

1

Creo que su problema es la implementación de JBoss JMX. De acuerdo con JSR160, especificando persistPolicy=OnUpdate para un atributo debe dar lugar a que persiste cada vez que el atributo se actualiza (de JSR160 1.4):

persistPolicy - Define la política de persistencia predeterminado de atributos de esta MBean que no definen su propio persistPolicy . Lleva en uno de los siguientes valores:

[...]

  • OnUpdate - El atributo se almacena cada vez que el atributo se actualiza.

Lo más probable es causada por este extraño texto en Javadoc de Sun para PersistMBean (como ha señalado @Plínio Pantaleão):

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

= "nunca"

= "onUpdate"

= "OnTimer" & & ahora < 'lastPersistTime' + 'persistPeriod'

Aparte de informar de este a JBoss (y la cuestión de Javadoc a Sol), que puede ser capaz de trabajar alrededor de ella mediante el uso de persistPolicy=Always política (de nuevo, desde JSR160):

  • siempre - Este es un sinónimo de OnUpdate, que es reconocido 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".
Cuestiones relacionadas