ClassLoader

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo

habe folgendes Problem: ich will ein Programm erstellen mit dem es möglich ist per String-Befehl die Klassen zu laden. Das ist mit dem unten aufgeührten Code-Abschnitt auch möglich. Das Problem dabei ist nur dass wenn er die Klasse einmal im Speicher hat, immer diese verwendet, anstatt sich auf der Festplatte die neue Version zu laden.
Weiss jemand eine Lösung für dieses Problem? :bahnhof:

Code:
// Klasse aufrufen
try {
 aufruf = "test.Ausgabe";
 ClassLoader loader = ClassLoader.getSystemClassLoader();
 Object cookletObject = loader.loadClass(aufruf).newInstance();
 Cooklet cooklet = (Cooklet) cookletObject;
 
 erg = cooklet.aufruf(parameter);
 
 cooklet = null;
 cookletObject = null;
 loader = null;
}
catch (Exception e) {
 System.out.println("Fehler: " + e);                      
}
 
es gibt kein "Unload" für Klassen solange die VM läuft, du musst dafür irgendwie einen Trick mit mehreren Threads usw. verwenden, frag mich jetzt nicht nach den Details 🙂

Wozu brauchst du sowas?
 
Naja sowas kann man für mehrer Dinge brauchen z.B. Plugins oder Modul-Aufrufe an einem Server bei dem der eigentliche Server natürlich dauernd laufen muss, die Module aber weiterentwickelt werden können.
 
ja schon klar 🙂

die meisten J2EE Server könnens ja auch, das liegt aber daran, dass die für alle Komponenten eigene Classloader bereitstellen 🙂

schau mal unter

http://mindprod.com/jgloss/classloader.html

scheinbar geht das "Hot Replace" ganz einfach, wenn man für jede Objekterzeugung einen eigenen Classloader verwendet - ob das nicht eine Menge anderer Probleme nach sich zieht??
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben