2011-08-26 7 views
2

J'ai une petite application de test pour exposer un "Bean" à JMX en utilisant Spring. Il utilise une configuration à base de XML et tout fonctionne très bien:Conversion de config XML Spring pour config JMX en Java

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 

<context:component-scan base-package="com.dmclaughlin.spring" /> 
<context:property-placeholder location="classpath:test.properties"/> 

<bean id="SimpleJmxController" class="com.dmclaughlin.spring.jmx.SimpleJmxBean"> 
    <property name="activated" value="${some.activated}"/> 
</bean> 

<!-- Spring JMX --> 
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false"> 
    <property name="autodetect" value="true"></property> 
    <property name="namingStrategy" ref="namingStrategy"></property> 
    <property name="assembler" ref="assembler"></property> 
</bean> 
<bean id="attributeSource" 
class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/> 
<bean id="assembler" 
class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler"> 
    <property name="attributeSource" ref="attributeSource"/> 
</bean> 
<bean id="namingStrategy" 
class="org.springframework.jmx.export.naming.MetadataNamingStrategy"> 
    <property name="attributeSource" ref="attributeSource"/> 
</bean> 

Mais l'application que je dois ajouter cette fonctionnalité à, utilise le style @Configuration, et je suis en train de convertir le XML ci-dessus pour travailler . J'ai ajouté quelque chose comme ceci:

@Bean 
public MetadataNamingStrategy getNamingStrategy() { 
    MetadataNamingStrategy strategy = new MetadataNamingStrategy(); 
    strategy.setAttributeSource(new AnnotationJmxAttributeSource()); 
    return strategy; 
} 

@Bean 
public MetadataMBeanInfoAssembler getMbeanInfoAssembler() { 
    return new MetadataMBeanInfoAssembler(new AnnotationJmxAttributeSource()); 
} 

@Bean 
public MBeanExporter getExporter() { 
    MBeanExporter exporter = new MBeanExporter(); 
    exporter.setAutodetect(true); 
    exporter.setNamingStrategy(getNamingStrategy()); 
    exporter.setAssembler(getMbeanInfoAssembler()); 
    return exporter; 
}  

Et tout est compilé, mais quand je charge mon JConsole Bean annotés avec @ManagedResource et @ManagedAttribute n'est pas exposé. Ai-je manqué quelque chose de simple ici?

Modifier: la réponse ci-dessous n'a pas résoudre mon problème (le problème était que je testais mon XML dans un environnement Tomcat, mais tester ma config non-XML dans une application autonome, ce qui signifie qu'il n'y avait pas présent JMXServer .. d'oh), mais cela m'a aidé à simplifier une fois que j'ai débogué ce que j'ai foiré.

+0

Votre problème est résolu – Bhupi

Répondre

3

Pour me, il suffisait d'ajouter:

@Bean 
public AnnotationMBeanExporter annotationMBeanExporter() { 
    return new AnnotationMBeanExporter(); 
} 
+0

Merci , mais ça ne marche pas pour moi non plus. J'ai un "ServiceImpl" annoté avec @ManagedResource et il est trouvé par le IoCProvider .. donc je ne sais pas pourquoi il n'apparaît pas dans jConsole. –

+0

Cela fonctionne pour moi (en utilisant Spring Boot 0.5.0 M6) –

0

vous devez configurer votre mbeanexporter avec "désireux"

@Bean 
@Lazy(false) 
public MBeanExporter getExporter() { 
... 
} 

salutations

AccLess