I have configured a ManagedBean using @ManagedResource annotation using Spring. And also mapped a JMX NotificationListener to this. But I am seeing that the Listener never gets kicked-off/executed.
Here are the related configuration files:
<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>
Here is how the MyMBean class looks like:
@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;
}
}
And finally, here's how the NotificationListener looks like:
public class MyMBeanNotificationListener implements
NotificationListener {
@Override
public void handleNotification(Notification notification, Object handback) {
System.out.println("In Notification Listener" + notification);
}
}
Any idea why the NotificationListener is not getting executed? There isn't any exception thrown by the code.
Has anyone got the JMX NotificationListeners working with Spring?
It's not getting executed because you probabily have lazy-load enabled, just set explicitly set lazy-init to false on JMX beans.
Example: http://java.dzone.com/articles/exposing-pojo-jmx-mbean-easily?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+javalobby/frontpage+(Javalobby+/+Java+Zone)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With