Hot Deployment - ClassLoader - Proxy

Alex04

Bekanntes Mitglied
Hallo,
ich hätte eine Frage zum Hot Deployment.
Wie kann ich während der Laufzeit eine Implementierungsklasse austauschen.
Beispiel:

Java:
public class Test {

public static void sayHello() {
System.out.println("Hello old"); // New class says "Hello new"
}

}

Ich will die Applikation starten und während der Laufzeit die Klasse Test durch eine "neuere" Klasse Test austauschen.
Weiter würde ich gerne wissen wie man Proxies für solch ein Hot Deployment verwenden kann (Frage aus der Uni...)

Vielen Dank schon mal für eure Hilfe!!

Vlg
Alex
 
Hotdeployment ist kniffelig, wenn man den Lebenszyklus der Klasse genau betrachtet.

Auf jeden Fall muss die Klasse von einem eigenen (am besten neuen) Classloader geladen werden. Dann muss im Prinzip der Klassenpfad auf Änderungen überwacht werden. Wird der Klassenpfad geändert (z.B. JAR ausgetauscht), muss der alte Classloader verworfen werden und ein neuer bereitgestellt werden, der diese Klassen lädt.

Tricky dabei: was passiert mit den aktiven Instanzen der geänderten Klasse bzw. mit den anderen Klassen aus dem gleichen JAR, die aber z.B. noch nie geladen wurden aber u.U. von der "hägenden" Instanz noch benötigt werden?

Dazu kopiert man normalerweise die deployten JARs weg und lädt Klassen nur von dort. Erst wenn nach einem Redeployment alle Instanzen der Klassen weg sind kann sowohl der Classloader als auch die Klassen vom GC collected werden, die temporären JARs verworfen werden.

Das ganze ist noch viel komplizierter, besonders wenn man Hierarchisch Classloader aufbauen möchte und auch erlauben möchte, dass Klassen von anderen Loadern isoliert werden (also z.B. die gleiche Klasse in verschiedenen Versionen) usw.

Ich würde das nicht unbedingt mit dynamischen Proxies realisieren. Im wahren Leben sehe ich keinen Vorteil von dessen Einsatz an dieser Stelle.
 
OT: Nur so am Rande da ich noch relativ neu bin in Java: Ist das ein Anfänger Thema? :autsch: Falls ja ;(
 

Neue Themen


Zurück
Oben