2012-02-20 22 views
32

Mam problem z trwałością mojego komponentu MBean konfiguracji. Moja konfiguracja:Trwałość 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; 
     } 
} 

Moim celem jest, aby zapisać stan po zmianie własności (lub zapisać do pliku metadanych - nie dB). Po restarcie JBoss mój MBean jest inicjowany standardowymi wartościami. Wydaje się, że PersistPolicy nie działa ... Próbowałem zaimplementować PersistentMBean, ale store() i load() nigdy nie były wywoływane. Odkryłem, że może to być problem z implementacją JBX JBX. Również niektórzy ludzie używali AOP i metody z adnotacjami w MBean do ich przechowywania. Wszystkie te posty pochodziły z lat 2008-2010, więc może coś się zmieniło?

My JBoss config jest domyślna (JBoss-service.xml)

+0

Którą wersję JBoss używasz? Czy obsługuje 'persistPolicy'? –

+0

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

+2

Z jakiegoś dziwacznego powodu tak naprawdę nie wiem, ta strona https://docs.oracle.com/javase/7/docs/api/javax/management/PersistentMBean.html mówi mi, że onUpdate będzie w rzeczy samej nie jest to call store(). Spróbuj zmienić na zawsze i sprawdź, czy pomaga. (Jestem też całkowicie zszokowany) –

Odpowiedz

1

Myślę, że problem jest wdrożenie JBoss z JMX. Według JSR160, określając persistPolicy=OnUpdate atrybutu powinna powodować utrzymujące się za każdym razem, gdy atrybut jest aktualizowany (od JSR160 1.4):

persistPolicy - określa domyślną zasadę trwałości dla atrybutów w tym MBean które nie definiują własne persistPolicy . Przybiera jedną z następujących wartości:

[...]

  • onUpdate - atrybut jest przechowywany każdym razem atrybut jest aktualizowany.

Jest to najprawdopodobniej spowodowane tym bardzo dziwnym tekstem Javadoc Sun dla PersistMBean (jak podkreślił @Plínio Pantaleão):

Nie przechowuj MBean jeśli pole 'persistPolicy' jest:

= "nigdy"

= "onUpdate"

= „PrzyCykluCzasomierza” & & teraz < „lastPersistTime” + „persistPeriod”

Inne niż zgłoszenie tego do JBoss (i emisji Javadoc na słońce), może być w stanie obejść stosując persistPolicy=Always polityki (znowu z JSR160):

  • Zawsze - jest synonimem onUpdate, który jest uznawany za względów kompatybilności. Zaleca się, aby aplikacje używały OnUpdate . Implementacja interfejsu Deskryptora, takiego jak DescriptorSupport, może zastąpić wartość "Always" dla parametru persistPolicy przez wartość "OnUpdate".
Powiązane problemy