Printemps MBeanExporter - donnant le nom de MBean
Je suis en train de lancer une application simple avec jmx exporté méthode. Je ne l'aime (printemps-contexte et cglib pour "@" Configuration sont dans le classpath):
package com.sopovs.moradanen.jmx;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jmx.export.MBeanExporter;
import org.springframework.stereotype.Component;
@Component
@Configuration
public class SpringJmxTest {
public static void main(String[] args) {
new AnnotationConfigApplicationContext("com.sopovs.moradanen.jmx");
while (true) {
Thread.yield();
}
}
@Bean
public MBeanExporter createJmxExporter() {
return new MBeanExporter();
}
public interface FooBarMBean {
public String hello();
}
@Component
public static class FooBar implements FooBarMBean {
@Override
public String hello() {
return "Hello";
}
}
}
Cependant quand je le lance j'obtiens:javax.de la gestion.MalformedObjectNameException: propriétés de Clé ne peut pas être vide. J'ai essayé de déboguer et résolu avec:
@Component
public static class FooBar implements FooBarMBean, SelfNaming {
@Override
public String hello() {
return "Hello";
}
@Override
public ObjectName getObjectName() throws MalformedObjectNameException {
return new ObjectName("fooBar:name=" + getClass().getName());
}
}
Mais est-il une meilleure façon de fournir un nom pour MBean?
OriginalL'auteur Ivan Sopov | 2011-11-15
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser les descriptions des annotations fournies par le Printemps Contexte @Gérés* :
Pour ce faire, vous ne devez PAS implémente l'interface avec "MBean" ou "MXBean" suffixe, ni SelfNaming.
Ensuite, le bean sera détecté comme un standard de printemps "managed bean" quand MBeanExporter sera registerBeanInstance(..), et sera converti en ModelMBean à l'aide de tous les printemps annotations, y compris les descriptions des attributs, opérations, paramètres, etc..
Comme une exigence, vous devez déclarer dans votre printemps contexte de la MBeanExporter avec AnnotationJmxAttributeSource, MetadataNamingStrategy, et MetadataMBeanInfoAssembler attributs, qui peuvent être simplifiée comme ceci :
ou
Et votre managed bean devrait ressembler à ceci :
Rappelez-vous de ne pas implémente une interface de MBean, ce qui serait un StandardMBean, et SelfNaming de l'interface, ce qui permettrait de contourner le Printemps de nommage de gestion !
Je voudrais vraiment l'apprécier de l'avoir sans xml! Je suis coincé....
OriginalL'auteur Donatello
Vous pouvez utiliser KeyNamingStrategy de définir tous les JMX-propriétés liées à l'intérieur de configuration XML sans ajouter n'importe quel moment de la compilation des dépendances de Printemps dans le code source de votre MBean:
Si vous pouvez vivre avec un peu arbitraire des noms d'objets, vous pouvez utiliser le IdentityNamingStrategy comme une stratégie de nommage pour MBeanExporter et de minimiser le XML de configuration de l'événement:
OriginalL'auteur Oleg Estekhin
Vérifier printemps documentation: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jmx.html section 22.3.2 explique le JDK 5.0 annotations qui sont disponibles.
Section 22.4 explique les mécanismes disponibles pour l'identification de l'objet.
OriginalL'auteur Dave G