我已经使用Spring使用@ManagedResource
批注配置了ManagedBean。并且还为此映射了一个JMX NotificationListener
。 但我看到监听器从未启动/执行。
以下是相关的配置文件:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="myMBeanServer"
class="org.springframework.jmx.support.MBeanServerFactoryBean">
<!-- indicate to first look for a server -->
<property name="locateExistingServerIfPossible" value="true" />
</bean>
<!-- MBean auto exporter -->
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"
lazy-init="false">
<property name="server" ref="myMBeanServer" />
<property name="assembler" ref="assembler" />
<property name="namingStrategy" ref="namingStrategy" />
<property name="notificationListenerMappings">
<map>
<entry key="myMBean"
value-ref="myMBeanNotificationListener" />
</map>
</property>
</bean>
<!-- The assembler -->
<bean id="assembler"
class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource" ref="attributeSourceStrategy" />
</bean>
<!-- The naming strategy -->
<bean id="namingStrategy"
class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
<property name="attributeSource" ref="attributeSourceStrategy" />
</bean>
<!-- The attributeSource strategy -->
<bean id="attributeSourceStrategy"
class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
<!-- MyMBean -->
<bean id="myMBean"
class="com.sample.MyMBean" />
<!-- MBean Notification Listener -->
<bean id="myMBeanNotificationListener"
class="com.sample.MyMBeanNotificationListener" />
</beans>
这是
MyMBean
类的样子:@ManagedResource(description = "My Mbean", objectName = "com.sample:bean=myMBean")
public class MyMBean {
private boolean isAvailable = true;
@ManagedAttribute(description = "isAvailable", defaultValue = "true")
public void setAvailable(boolean flag) {
this.isAvailable = flag;
}
}
最后,这是
NotificationListener
的样子:public class MyMBeanNotificationListener implements
NotificationListener {
@Override
public void handleNotification(Notification notification, Object handback) {
System.out.println("In Notification Listener" + notification);
}
}
知道为什么
NotificationListener
无法执行吗?代码没有抛出任何异常。有人有使用Spring的JMX
NotificationListener
吗? 最佳答案
它没有被执行,因为您可能已启用了延迟加载,只需在JMX bean上将显式设置为lazy-init设置为false。
示例:http://java.dzone.com/articles/exposing-pojo-jmx-mbean-easily?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+javalobby/frontpage+(Javalobby+/+Java+Zone)
关于java - 无法使Spring JMX NotificationListener工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4279236/