Frage

Unser JavaEE Anwendung verfügt über einen Dienst, die für die Installation verantwortlich ist und die Inbetriebnahme von anderen Diensten abhängig von der Konfiguration in einer Datenbank gespeichert. Dienste installiert sind mit der

ServiceControllerMBean.install(
    org.w3c.dom.Element element,
    javax.management.ObjectName objectName)

Methode. Dieses Verfahren erfordert einen Class Loader ObjektName als zweites Argument. Unter JBoss 4.x verwenden wir die folgenden Hack den Klassenlader Namen zu bekommen:

final ServiceControllerMBean serviceController = 
    (ServiceControllerMBean) MBeanProxy.get(
        ServiceControllerMBean.class,
        ServiceControllerMBean.OBJECT_NAME, server);

final ClassLoader = serviceController.getClass().getClassLoader();

final ObjectName loader = new ObjectName(
    "jmx.loading:UCL=" + Integer.toHexString(classLoader.hashCode()))

Dies gilt jedoch nicht Arbeit unter JBoss 5.x für die Class Loader Namensgebung wird geändert.

Könnte jemand raten, ein Weg, um die Klassenlade Namen unter JBoss 5.x zu bekommen?

Vielen Dank im Voraus

War es hilfreich?

Lösung 2

ein wenig Forschung zu diesem Thema Nachdem ich bekam ich eine Antwort auf meine Frage. Obwohl ich mag es nicht sehr viel für sie mehr wie ein anderer Hack aussieht. Aber ich werde es nur verwenden, wenn jemand eine elegantere Lösung vorschlägt. Also:

In JBoss 5.1.0 (die, mit denen ich spiele) Klassenlader sind mit Namen registriert wie:

jboss.classloader:id="vfsfile:<archive-file-name>"

Zur gleichen Zeit der Zeichenfolgendarstellung einer Objektklasse Lader durch die Methode toString () sieht wie folgt zurückgegeben:

BaseClassLoader@<memory-address>{vfsfile:<archive-file-name>}

Daher ist es möglich, den Archiv-Datei-Namen aus der Klassenlade String-Darstellung zu extrahieren und eine entsprechende ObjektName daraus zu konstruieren.

Andere Tipps

Sie haben diese Dokumentation für die Ausgabe:

Classloader-Konfiguration

Classloading UseCase

Nizza einen Einblick zu bekommen.

Endlich ein schönes Forum-Thread i gefunden:

http://www.coderanch.com/t/464514 / JBoss / Class-Loading-Konfiguration

Zusätzliche Informationen:

ClassLoader loader = Thread.currentThread().getContextClassLoader();
System.out.println( loader );  // sun.misc.Launcher$AppClassLoader@a12a00
loader = ThreadClassloader.class.getClassLoader();
System.out.println( loader );  // sun.misc.Launcher$AppClassLoader@a12a00

Hpe dies hilft Ihnen, mehr Informationen aus Ihrem Code zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top