2010-11-25 4 views
9

J'ai configuré un ManagedBean en utilisant l'annotation @ManagedResource en utilisant Spring. Et également mappé un JMX NotificationListener à cela. Mais je constate que le Listener ne sera jamais kické/exécuté.Impossible de faire fonctionner Spring JMX NotificationListener

Voici les fichiers de configuration connexes:

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

Voici comment la classe MyMBean ressemble:

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

Et enfin, voici comment l'NotificationListener ressemble à:

public class MyMBeanNotificationListener implements 
     NotificationListener { 

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

} 

Une idée pourquoi le NotificationListener est pas t être exécuté? Il n'y a aucune exception levée par le code.

Quelqu'un at-il obtenu le JMX NotificationListener fonctionnant avec Spring?

+1

Qu'attendez-vous si 'MyMBean' ne publie pas d'avis? – axtavt

+0

axtavt, s'il vous plaît vérifier ma question précédente http://stackoverflow.com/questions/4260398/jmx-spring-when-is-a-jmxnotification-broadcasted quelqu'un a confirmé que changement d'attribut diffuse une notification JMX. Avec l'auditeur ci-dessus j'espérais capturer cela. Etes-vous sûr que nous avons besoin d'un éditeur et que la modification des attributs n'envoie pas automatiquement de notifications? Merci! – peakit

+0

L'article lié dans la réponse à votre question précédente indique clairement que vous devez diffuser 'AttributeChangeNotification's manuellement. – axtavt

Répondre

0

Avez-vous vu les notifications apparaître dans jConsole ou jVisualVM?

Essayez de changer:

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

à:

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

Sinon pour les notifications, vous pouvez simpify XML ci-dessus pour:

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