Nicht integrieren kann JMX mit Spring-Anwendung
Habe ich eine FRÜHJAHR Anwendung. Wenn ich
mvn jetty:run
alles ok ist.
Möchte ich nutzen, JMX in meinem Projekt.
Erstellte ich ein anderes Projekt habe ich versucht-tutorial für Anfänger, und ich war in der Lage zu sehen, einige änderungen mit jconsole.
Nun, ich will JMX in meinem realen Projekt und ich möchte mit SPRING-Bibliotheken verwaltet JMX - nach diesem post
Wie integrieren JMX mit Frühling?
Ich habe eine Klasse:
public class MyMainClass {
private int var1;
private int var2;
private TimeUnit var3;
//public getters and setters
public static MyXXXClass<String, Object> getInstance();
}
und in config.xml
<!-- other beans -->
<bean id="myid" class="com.my.package.MyMainClass">
<property name="var1" value.../>
<property name="var2" value... />
<property name="var3" value.../>
</bean>
<!-- other beans -->
Änderte ich einige Dinge zu machen, funktioniert es mit JMX.
Fügte ich ein interface:
import java.util.concurrent.TimeUnit;
public interface IMyMainClassBean {
public int getVar1();
public void setVar1(int var1);
public int getVar2();
public void setVar2(int var2);
public TimeUnit getVar3();
public void setVar3(TimeUnit var3);
}
Fügte ich implementiert zu meiner Klasse:
public class MyMainClassBean implements IMyMainClassBean {...}
Letzte Sache, die ich bearbeitet meine xml-Datei:
<!-- other beans -->
<bean id="myid" class="com.my.package.MyMainClassBean">
<property name="var1" value.../>
<property name="var2" value... />
<property name="var3" value.../>
</bean>
<!-- this bean must not be lazily initialized if the exporting is to happen -->
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"
lazy-init="false">
<property name="beans">
<map>
<entry key="bean:name=testBean1" value-ref="myid" />
</map>
</property>
</bean>
<!-- other beans -->
Nun, wenn ich starte meinen server, es gibt mir eine Menge von Ausnahmen (log ist wirklich lang, so dass ich kopiert nur einen Teil, ich denke das ist das wichtigste).
Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [com.my.package
.MyMainClassBean@3d4395fb] with key 'bean:name=testBean1'; nested exception is javax.management.InstanceAlreadyExistsExcep
tion: bean:name=testBean1
at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:602)
at org.springframework.jmx.export.MBeanExporter.registerBeans(MBeanExporter.java:527)
at org.springframework.jmx.export.MBeanExporter.afterPropertiesSet(MBeanExporter.java:413)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableB
eanFactory.java:1571)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBean
Factory.java:1509)
... 163 more
Caused by: javax.management.InstanceAlreadyExistsException: bean:name=testBean1
at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:453)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1484)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:963)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312)
at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:483)
at org.springframework.jmx.support.MBeanRegistrationSupport.doRegister(MBeanRegistrationSupport.java:195)
at org.springframework.jmx.export.MBeanExporter.registerBeanInstance(MBeanExporter.java:655)
at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:592)
... 167 more
[WARNING] Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myTask' defined
in class path resource [anotherconfigfile.xml]: Cannot resolve reference to bean 'anotherimport' while setting bean property 'targetObj
ect'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'anotherimport' defin
ed in class path resource [anotherconfigfile.xml]: Cannot create inner bean 'myTotallyAnotherClass' of type [com.my.package.another.MyTotallyAnotherClass]
while setting bean property 'myTotallyAnotherClass'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creatin
g bean with name 'myTotallyAnotherClass' defined in class path resource [anotherconfigfile.xml]: Instantiation of bean failed; nested exception is
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.my.package.another.MyTotallyAnotherClass]: Co
nstructor threw exception; nested exception is java.lang.ExceptionInInitializerError:
javax.management.InstanceAlreadyExistsException: bean:name=testBean1
at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:453)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1484)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:963)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312)
at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:483)
at org.springframework.jmx.support.MBeanRegistrationSupport.doRegister(MBeanRegistrationSupport.java:195)
at org.springframework.jmx.export.MBeanExporter.registerBeanInstance(MBeanExporter.java:655)
at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:592)
at org.springframework.jmx.export.MBeanExporter.registerBeans(MBeanExporter.java:527)
at org.springframework.jmx.export.MBeanExporter.afterPropertiesSet(MBeanExporter.java:413)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableB
eanFactory.java:1571)
Habe ich auch keine Idee, wie das zu Debuggen.
Danke für alle Eure Hinweise.
InformationsquelleAutor ruhungry | 2014-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird versucht, Ihnen zu sagen, dass Sie 2 Bohnen mit dem gleichen Namen
ObjectName
vonbean:name=testBean1
sein register mit derMBeanExporter
. Jedoch, es sei denn, es sind andere XML-Dateien oder mehr Einträge in Ihrembeans
Karte, dann sollte es nicht sein.Könnten Sie setzen einen breakpoint in der
JmxMBeanServer.registerMBean(...)
Methode, um zu sehen, was Bohnen sind registriert, um zu sehen, wenn Sie herausfinden können, warum Sie werden immer ein Duplikat.Nebenbei, meine SimpleJMX Bibliothek ist eine einfache Möglichkeit, den export von Bohnen über JMX. Es ist ziemlich gut, der Frühling-Unterstützung. Hier sind die Dokumentation über mit mit Feder. Es gibt auch eine Spring-test-Programm, die zeigt, was Sie tun müssen, um es zu erhalten arbeitend. Hier ist die Spring-XML-Datei.
InformationsquelleAutor Gray
Dies ist nicht passiert, wie die bean versucht zu initialisieren, auch nach seiner einmalig initialisiert.
War ich vor dem gleichen Problem mit RabbitMQ-Konfiguration in Spring TestNG Testfälle.
Verwenden
@DirtiesContext
als class-level annotation für jeden testcase-Klasse.Dadurch wird der Datei ApplicationContext und es töten, sobald der testcase-Klasse wird ausgeführt und eine neue Datei ApplicationContext erstellt werden für die nächsten testcase-Klasse.
Beispiel -
InformationsquelleAutor Arijeet Saha