2010-11-25 7 views
9

Ich habe eine ManagedBean mit @ManagedResource Annotation mit Spring konfiguriert. Und auch ein JMX NotificationListener zu diesem gemappt. Aber ich sehe, dass der Listener nie Kick-off/executed.Spring JMX NotificationListener funktioniert nicht

Hier sind die zugehörigen Konfigurationsdateien:

<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> 

Hier ist, wie die MyMBean Klasse wie folgt aussieht:

@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; 
    } 
} 

Und schließlich ist hier, wie die NotificationListener wie folgt aussieht:

public class MyMBeanNotificationListener implements 
     NotificationListener { 

    @Override 
    public void handleNotification(Notification notification, Object handback) { 
     System.out.println("In Notification Listener" + notification); 
    } 

} 

Irgendeine Idee, warum die NotificationListener nicht ist t ausgeführt werden? Es gibt keine Ausnahme, die vom Code ausgelöst wird.

Hat jemand den JMX NotificationListener s mit Feder arbeiten?

+1

Was Sie erwarten Sie, wenn 'MyMBean' keine Benachrichtigungen veröffentlichen? – axtavt

+0

axtavt, bitte überprüfen Sie meine frühere Frage http://stackoverflow.com/questions/4260398/jmx-spring-when-is-ajmxnotification-broadcasted dort jemand bestätigt, dass Attributänderung sendet eine JMX-Benachrichtigung. Mit dem oben genannten Zuhörer wollte ich das einfangen. Sind Sie sicher, dass wir einen Publisher brauchen und Änderungen an den Attributen nicht automatisch Benachrichtigungen senden? Vielen Dank! – peakit

+0

Der Artikel, der in der Antwort auf Ihre vorherige Frage verlinkt ist, besagt eindeutig, dass Sie 'AttributeChangeNotification' manuell übertragen müssen. – axtavt

Antwort

0

Haben Sie gesehen, dass die Benachrichtigungen in jConsole oder jVisualVM angezeigt werden?

Versuchen Wechsel:

<entry key="myMBean" value-ref="myMBeanNotificationListener" /> 

zu:

<entry key="com.sample:bean=myMBean" value-ref="myMBeanNotificationListener" /> 

Wenn nicht für Benachrichtigungen, könnten Sie die XML oben wird vereinfacht zu:

<context:mbean-export default-domain="myDomain"/>