我想使用Spring 3發佈JMX通知,但想避免使用NotificationPublisherAware接口,因爲代碼也被不使用Spring的應用程序使用。該bean使用MBeanExporter bean公開。我發現的替代方案需要註冊mbeans,我目前使用Spring配置,所以這是一個糟糕的選擇。 有沒有辦法避免使用NotificationPublisherAware界面,但仍發佈通知?發佈使用Spring的JMX通知沒有NotificationPublisherAware
1
A
回答
1
你不必在代碼中使用任何Spring類。例如:
接口:
import javax.management.MXBean;
@MXBean
public interface SecurityEventsManagerMXBean {
...
@AttributeMetaData(value="UserLoginFailures", defaultValue="0", description="Total user login failures")
public int getUserLoginFailureCount() ;
...
}
豆:
import javax.management.Notification;
import javax.management.NotificationBroadcasterSupport;
public class SecurityEventsManager extends NotificationBroadcasterSupport implements SecurityEventsManagerMXBean {
...
private void notifyUserLoginFailure(...) {
Notification notification = new Notification(...) ;
sendNotification(notification)
userLoginFailureCount++ ;
}
}
這裏@AttributeMetaData是一個方便的元註解定義描述符的鍵:
import javax.management.DescriptorKey;
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AttributeMetaData {
@DescriptorKey("displayName")
String value();
....
}
編輯三月08.配置導出上面的Mbean:
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"
p:locateExistingServerIfPossible="true" />
<bean id="jmxAttributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy"
p:attributeSource-ref="jmxAttributeSource" />
<bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler"
p:attributeSource-ref="jmxAttributeSource" />
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
<property name="server" ref="mbeanServer"/>
<property name="assembler" ref="assembler"/>
<property name="registrationBehaviorName" value="REGISTRATION_FAIL_ON_EXISTING"/>
<property name="beans">
<map>
<entry>
<key>
<util:constant
static-field="x.y.z.SecurityEventsManager.OBJECT_NAME" />
</key>
<ref bean="securityEventsManager" />
</entry>
</map>
</property>
</bean>
<bean id="securityEventsManager" class="x.y.z.SecurityEventsManager" />
0
按春文檔:
NotificationPublisher的接口和機械把一切的工作是Spring的的一個非常好的特性JMX支持。然而,它的價格標籤將您的類與Spring和JMX結合在一起;與往常一樣,這裏的建議是務實的......如果您需要NotificationPublisher提供的功能,並且您可以接受與Spring和JMX的耦合,那麼請執行此操作。
相關問題
- 1. Spring框架3.0 JMX通知沒有收到
- 2. 使用Spring @ManagedNotification批註生成JMX通知的任何示例
- 3. 當JMX引發通知時引發java.io.NotSerializableException
- 4. Spring JMX通知:警告:無法反序列化通知
- 5. JMX:包裝的MXBean不發送通知
- 6. JMX通知設計
- 7. JMX通知監聽
- 8. 通過JMX發佈Bean時出錯
- 9. Spring JMX和OC4J MBean通知無法啓用
- 10. IAudioSessionManager2通知沒有發送
- 11. 沒有通知發送apprequest
- 12. 通知沒有觸發
- 13. Swift類沒有註冊使用NSNotificationCenter的目標C類發佈的通知
- 14. #15發佈通知
- 15. 在karaf中,有沒有辦法通過JMX獲得bundle的spring框架狀態?
- 16. 是否有默認通知中心發佈的通知列表?
- 17. 使用ehcache的Spring實現配置JMX?
- 18. 沒有發佈的數據通過發佈的請求使用NSURLSession
- 19. 在發佈後發佈/訂閱通知
- 20. 如何在WordPress發佈發佈通知?
- 21. spring jmx認證
- 22. Spring JMX攔截
- 23. 沒有通知發佈項目到葉節點
- 24. 當安排了AlarmManager時,Android通知沒有發佈
- 25. 有沒有辦法通過JMX開關打開或關閉Spring Scheduler任務?
- 26. C#使用MBeans通過JMX與Java服務器通信有沒有辦法?
- 27. 沒有得到未發佈的遊戲中心應用程序的通知
- 28. MPMusicPlayerController不發佈通知?
- 29. 我無法發佈通知
- 30. 通知活動發佈
@Vikarm我不知道你的答案如何與OP的問題。我認爲OP的問題非常清楚,OP不希望將他的代碼耦合到Spring。我不確定對JMX有什麼保留,現在它已成爲Java SE平臺的一部分。 – Ritesh 2013-04-05 18:19:21