2012-02-20 21 views
32

Tôi gặp sự cố với sự kiên trì của cấu hình MBean. cấu hình của tôi: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; 
     } 
} 

Mục tiêu của tôi là để tiết kiệm nước sau khi một sự thay đổi sở hữu (lưu thành file hoặc siêu dữ liệu - không để db). Sau khi khởi động lại JBoss, MBean của tôi được khởi tạo với các giá trị chuẩn. Có vẻ như PersistPolicy không hoạt động ... Tôi đã cố gắng triển khai PersistentMBean, nhưng store() và load() chưa bao giờ được gọi. Tôi thấy rằng nó có thể là một vấn đề thực hiện JBoss JBX. Ngoài ra một số người đã sử dụng AOP và các phương pháp được chú thích trong MBean để lưu trữ chúng. Tất cả các bài viết này là từ 2008-2010, vì vậy có thể có điều gì đó đã thay đổi?

Cấu hình JBoss của tôi là mặc định (jboss-service.xml)

+0

Bạn đang sử dụng phiên bản JBoss nào? Nó có hỗ trợ 'persistPolicy' không? –

+0

jboss-5.1.0.GA https://community.jboss.org/thread/175100?tstart = 0 tôi tiếp tục tìm kiếm –

+2

Vì một số lý do bizzare tôi không thực sự biết, trang này https://docs.oracle.com/javase/7/docs/api/javax/management/PersistentMBean.html cho tôi biết rằng onUpdate sẽ thực sự không gọi cửa hàng(). Hãy thử thay đổi để luôn luôn và xem nếu giúp. (Tôi cũng bị sốc quá) –

Trả lời

1

Tôi nghĩ rằng vấn đề của bạn là việc thực hiện JBoss của JMX. Theo JSR160, quy định cụ thể persistPolicy=OnUpdate cho một thuộc tính nên dẫn đến sự bền bỉ mỗi khi thuộc tính được cập nhật (từ JSR160 1.4):

persistPolicy - Xác định chính sách kiên trì mặc định cho thuộc tính trong MBean này mà không xác định persistPolicy của mình . Đưa vào một trong các giá trị sau:

[...]

  • OnUpdate - Thuộc tính được lưu trữ mỗi khi thuộc tính được cập nhật.

Nó rất có thể gây ra bởi các văn bản này rất lạ trong Javadoc của Sun cho PersistMBean (như được chỉ ra bởi @Plínio Pantaleão):

Không nên cất MBean nếu trường 'persistPolicy' là:

= "không bao giờ"

= "onUpdate"

= "OnTimer" & & tại < 'lastPersistTime' + 'persistPeriod'

Khác với báo cáo này để JBoss (và các vấn đề Javadoc để Sun), bạn có thể làm việc xung quanh nó bằng cách sử dụng persistPolicy=Always chính sách (một lần nữa, từ JSR160):

  • Luôn - Đây là một từ đồng nghĩa của OnUpdate, được công nhận cho lý do tương thích. Chúng tôi khuyên các ứng dụng nên sử dụng OnUpdate để thay thế. Việc triển khai giao diện Mô tả, chẳng hạn như DescriptorSupport, có thể chọn thay thế giá trị “Luôn luôn” cho persistPolicy theo giá trị “Cập nhật”.