JMX MBean inscription à l'aide de Printemps sur un autonome JVM
À la suite de différents exemples de configurations de Printemps de la documentation ainsi que certains forums sur Internet, mon contexte de l'application fichier ressemble à ceci:
<beans>
<bean id="dH" class="abc.def.ghi.DH">
<constructor-arg>
<value>0</value>
</constructor-arg>
<property name="num" value="100"/>
</bean>
<bean class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
<property name="beans">
<map>
<entry key="bean:name=dH1" value-ref="dH"/>
</map>
</property>
</bean>
<bean class="org.springframework.jmx.support.MBeanServerFactoryBean"/>
</beans>
Je suis en cours d'exécution sans aucun conteneur et sur la plaine de la JVM. Je suis en mesure de se connecter à mon processus via JConsole mais le MBean ne s'affiche pas. Toutefois, l'enregistrement de la fève par programme expose avec succès.
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
DH dh = new DH(0);
mbeanServer.registerMBean(dh, new ObjectName("bean:name=dH1"));
J'ai essayé de jouer avec la configuration Spring, sans succès. Je pense que le haricot n'est pas de l'inscription à la déjà en cours d'exécution MBean server qui est accessible à partir ManagementFactory.getPlatformMBeanServer().
Toutes les idées sur la question?
OriginalL'auteur Monis Iqbal | 2012-02-06
Vous devez vous connecter pour publier un commentaire.
En plus de définir un MBeanServerFactory bean (comme Nicolas l'ont noté dans leur réponse) à l'aide de ...
... vous devez dire à la MBeanExporter à gérer:
En supposant que votre
abc.def.ghi.DH
classe n'implémente pas d'interface JMX, essayez de définir votreMBeanExporter
:À la recherche à l'OpenJDK 7, la mise à jour 2, build 21
DefaultMBeanServerInterceptor.java
source, ligne 898 crée unDynamicMBean
pour les objets ordinaires:Je n'ai pas de débogage, mais je parie
mbeanServer.registerMBean(dh, new ObjectName("bean:name=dH1"))
appelle éventuellementDefaultMBeanServerInterceptor.registerObject()
, ce qui crée unDynamicMBean
pour vous et correctement les registres de votre standardJavaBean
propriétés' setters et getters.Voici quelques fichiers de test qui fonctionnent en utilisant le Framework Spring 3.0.5 et Oracle Java HotSpot 1.6.0_24. Après le réglage de votre
CLASSPATH
variable d'environnement, il suffit d'exécuterjavac *.java
etjava Main
et l'utilisation VisualVM (ou similaire) pour se connecter à l'exécution d'une application java pour voir les MBeans.ac.xml:
Test.java:
Main.java:
Cela fonctionne pour moi, en utilisant le Printemps 3.0.5 et un simple JavaBean avec une propriété de lecture/définition; je peux me connecter à mon simple application de test avec VisualVM et voir le test de MBean qui a été enregistré à l'aide de la
MBeanExporter
bean définition que j'ai fourni. Essayez de diviser votre scénario vers une forme simple, obtenir que cela fonctionne, puis construire en arrière jusqu'à ce que vous avez actuellement et voir où se situe votre question.À l'aide de Printemps 3.1.0 j'ai essayé avec votre XML fourni avec et sans -Dcom.soleil.de la gestion.jmxremote comme option de programme, toujours pas de chance. Je suis le chargement du contexte, de la manière suivante: BeanFactory factory = new XmlBeanFactory(nouveau ClassPathResource("/application-context.xml")); puis le chargement de la destinée MBean comme à l'usine.getBean(DH.class); je sais que cela paraît naïf mais est-il un moyen que nous pouvons faire correspondre notre XMLs et simple de la structure du programme?
Merci beaucoup @Dan. C'était la manière dont les grains étaient obtenir initialisée :|. J'ai été en utilisant BeanFactory tandis que l'utilisation de l'ApplicationContext a fait le tour.
Cette réponse m'a sauvé aujourd'hui. +1 et je vous remercie.
OriginalL'auteur Dan Cruz
Le problème est avec le MBeanServerFactoryBean.
De la javadoc:
Essayer cette config:
=================================================
Essayez de spécifier le MBeanServer à l'exportateur bean:
========================================================================
Ok, nous allons prendre l'approche par force brute et d'acquérir la plate-forme MBeanServer directement:
pas de chance avec ça aussi..
Merci pour les autres suggestions @Nicolas. Bien que les essayant à la fois de ne pas inscrire les MBeans.
OriginalL'auteur Nicholas