2009-08-18 4 views
3

Ich habe eine Web-Anwendung auf JBoss ausgeführt wird 4.2.2. Um die Leistung zu überwachen habe ich die interne Plattform JMX-Server aktiviert, die Schiffe mit Java 5. Mit anderen Worten, ich hinzugefügt:Erzwingen Spring MBeanExporter eine bestimmte MBeanServer verwenden

-Dcom.sun.management.jmxremote 

auf JBoss' Startskript. Dies funktioniert wie erwartet. Als Folge davon sind nun alle MBeans auf der Plattform MBeanServer registriert. Ich möchte das nicht, ich möchte, dass sie auf dem MBeanServer von JBoss registriert werden.

Die Schwierigkeit liegt in der Tatsache, dass ich meinen Frühling Managed Beans registrieren. Dazu wird MBeanExporter verwendet. Daher muss ich meinem MBeanExporter mitteilen, dass der MBeanServer von JBoss beim Registrieren von Beans verwendet werden soll. Um jedoch die nur ausgesetzt Verfahren in MBeanExporter beeinflussen, was Server verwendet wird setServer(MBeanServer mBeanServer) ist. Das Problem ist, dass ich nur wissen, wie einen Verweis auf die richtigen MBeanServer programmatisch zu bekommen, und nicht in Spring XML, wo die MBeanExporter deklariert wird.

erscheint Meine Optionen zu sein:

  1. eine Unterklasse zu MBeanExporter schreiben, bestimmte Methoden überschreiben, so dass die korrekte MBeanServer eine PostBeanProcessor
  2. schreiben, die findet JBoss' MBeanServer und ruft dann geladen wird setServer
  3. JNDI? Funktioniert nur, wenn der MBeanServer in JNDI verfügbar gemacht wird und ich ihn nicht finden konnte.

Was ist der idiomatische Weg? Mache ich etwas wirklich Dummes?

Antwort

6

Sie können die statische Factory-Methode von der JBoss-API verwenden, um die MBeanServer in die MBeanExporter zu injizieren:

<bean class="org.springframework.jmx.export.MBeanExporter"> 
    <property name="server"> 
     <bean class="org.jboss.mx.util.MBeanServerLocator" factory-method="locateJBoss"/> 
    </property> 
    <!-- Add the rest of your MBeanExporter properties here --> 
</bean> 
+0

Großartig! Genau das habe ich gesucht. Ich habe vorher die Fabrik-Methode benutzt, aber ich habe nicht gesehen, dass es perfekt für diese Verwendung war. – waxwing

0

Das Problem ist, dass ich weiß nur, wie man einen Verweis auf den korrekten MBeanServer

programmatisch zu bekommen Wenn Sie programmatisch die Referenz bekommen können, warum können Sie nicht Draht durch die MBeanExporter # Server-Eigenschaft?

+0

Ja, aber ich muss es tun, bevor afterPropertiesSet auf MBeanExporter genannt wird. Ich kann dies mit einem PostBeanProcessor erreichen, was die Lösung ist, auf die ich mich stütze ... aber ich habe das Gefühl, dass ich etwas mache, das auf eine komplizierte Art wirklich, wirklich einfach sein sollte. – waxwing

+0

Warum können Sie nicht einfach die "Server" -Eigenschaft mit dem Verweis auf den richtigen MBeanServer festlegen? – Kevin

+0

Nun, wenn ich es programmatisch tun, brauche ich einigen geeigneten Ort, um den Anruf zu setServer setzen. Und das muss sein, nachdem Spring die Bean erstellt, aber bevor Spring afterPropertiesSet auf der Bean aufruft (weil dann der MBeanServer verwendet wird). Idealerweise würde ich es im XML einstellen, aber ich konnte keinen guten Weg finden, das zu tun, bis Skaffman mir das zeigte. – waxwing

Verwandte Themen