ClassLoader und "Cache"

Status
Nicht offen für weitere Antworten.

frisk

Mitglied
Hallo zusammen.

Ich hänge jetzt schon den halben Tag an einem Problem und hoffe ihr könnt mir weiterhelfen.
Das Szenario ist folgendes.

Ich habe eine Applikation die bspw auf einem Rechner läuft und auf deren Oberfläche man bestimmte Objekte modellieren kann. Auf einem anderen Rechner / dem Server müssen anhand dieser Modellierungen geeignete Wrapper-Klassen generiert werden, um mit eingehenden Daten entsprechend umgehen zu können. Soweit so gut was die Anforderungen angeht.

Ich bin soweit, dass aus den Modellen zur Laufzeit, die Wrapper-Klasse generiert/kompiliert wird. Um sie dann zur Laufzeit zu verwenden, habe ich mir zusätzlich einen eigenen ClassLoader geschrieben. Dieser liest die .class Datei ein und gibt mir per defineClass-Methode der Vaterklasse "ClassLoader" den Zugriff auf die Klasse. Soweit funktioniert auch alles.

Es soll dem Anwender aber natürlich möglich sein, diese Modelle auch zu verändern. Die Veränderung zieht eine Neu-Generierung der Wrapper-Klassen auf serverseite nach sich, was ebenfalls zur Laufzeit möglich sein soll. Ich lösche demnach zuerst die alte .class Datei, versuche alle Referenzen auf diese Klasse zu löschen und durchlaufe anschließend den obe beschriebenen Schritt der Generierung. Hier kommt es dann aber zum Fehler, da die defineClass Methode abbricht mit der Fehlermeldung, dass die Klasse bereits bekannt ist. Dabei handelt es sich aber um die alte Klasse, die ich überschreiben will. Also scheint es, als habe jeder ClassLoader bzw die VM einen eigenen Class-Cache, auf den ich keinen Zugriff habe.

Deshalb meine Frage, ob ihr mit sowas schon Erfahrung gemacht habt und mir an der Stelle weiterhelfen könnt. Ich habe auch schon den Tag lang nach Lösungen im Internet gesucht, aber die Spuren verliefen sich irgendwann alle im Sande.

Vielen Dank im voraus für alle Antworten.


PS:
Ich habe als Workaround zunächst immer eine neue ClassLoader Instanz erzeugt, um die defineClass Methode aufzurufen, was zwar das Problem zunächst behebt, aber an anderen Stellen wieder neue Probleme aufwirft. Ergo leider keine nutzbare Lösung.
 

Wildcard

Top Contributor
Man kann eigentlich keine Klassen entladen. Die einzige Möglichkeit besteht darin, den Classloader wegzuwerfen.
Damit lässt sich die Klasse zwar erneut laden, aber das alte Class Objekt liegt trotzdem noch (bis in alle Ewigkeit) im Perm Gen Space, bis selbiger voll läuft (das wird wahrscheinlich etwas dauern).
 

frisk

Mitglied
Ok vielen Dank.
Da es sich dabei eh nur um einen Workaround handelt, wird mir wohl nur abwarten und Tee trinken übrig bleiben. Habe es versucht mit dem "ClassLoader wegwerfen". Funktioniert soweit auch, allerdings schwirren im System an für mich unerreichbaren Stellen noch Refrenzen auf die alte Klasse rum, so dass es über kurz oder lang zu ClassCastExceptions kommt. Ich werd mir dann mal was anders überlegen müssen.

Vielen Dank für die Antwort.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
L Eigenener ClassLoader wirft java.lang.NoClassDefFoundError Allgemeine Java-Themen 0
D Classloader ohne Package Allgemeine Java-Themen 10
N Klasse via ClassLoader laden Allgemeine Java-Themen 2
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
K [Refactoring] ClassLoader Verzeichnis durchsuchen lassen Allgemeine Java-Themen 7
schlingel Webstart/Applet Problem - Classloader-Bug Allgemeine Java-Themen 7
M Security Manager für bestimmte Klassen/Classloader? Allgemeine Java-Themen 3
hdi ClassLoader / Constructor Call intern Allgemeine Java-Themen 11
C inteface not visible from classloader Allgemeine Java-Themen 2
M jdbc treiber (h2) mit eigenem ClassLoader laden Allgemeine Java-Themen 4
B Eigener ClassLoader Allgemeine Java-Themen 9
MQue ClassLoader Pfad ausgeben Allgemeine Java-Themen 6
S Problem mit ClassLoader.getSystemResource !! Allgemeine Java-Themen 3
V Image laden - URL über ClassLoader ermitteln Allgemeine Java-Themen 2
J Eigener ClassLoader wird nicht immer verwendet Allgemeine Java-Themen 3
E Wieder mal der Classloader Allgemeine Java-Themen 6
MQue ClassLoader Allgemeine Java-Themen 5
N ClassLoader - Laden von Bytecode aus einer Datenbank Allgemeine Java-Themen 6
P Klasse über eigenen Classloader laden: SecurityException Allgemeine Java-Themen 11
N Classpath mit ClassLoader künstlich erweitern Allgemeine Java-Themen 2
P System.getProperty zu Classloader Allgemeine Java-Themen 21
G Classloader Problem Allgemeine Java-Themen 10
M Bibliotheksname zur Laufzeit ermitteln (Classloader) Allgemeine Java-Themen 7
MQue ClassLoader Allgemeine Java-Themen 18
G Problem mit URL classloader Allgemeine Java-Themen 10
S classloader + jar + resourcen in dem jar Allgemeine Java-Themen 4
F mit classloader klassen ausserhalb *.jar einlesen Allgemeine Java-Themen 4
G Font mittels ClassLoader in .jar wirft NotFoundException Allgemeine Java-Themen 10
P Kompilerfehler: at java.lang.ClassLoader.loadClassInternal(U Allgemeine Java-Themen 16
T ClassLoader und Zugriff auf unbekannte Klassen Allgemeine Java-Themen 5
C ClassLoader - dymisches Laden von JDBC Drivers Allgemeine Java-Themen 3
R Problem mit Classloader Allgemeine Java-Themen 2
D Programm mit eigenem ClassLoader funktioniert nicht Allgemeine Java-Themen 12
K Problem mit ClassLoader - Laden von Resourcen aus Jar's Allgemeine Java-Themen 14
C Problem mit ClassLoader Allgemeine Java-Themen 2
T Brauche Hilfe bei ClassLoader Allgemeine Java-Themen 2
G cachender ClassLoader u.v.m. Allgemeine Java-Themen 5
G ClassLoader Allgemeine Java-Themen 3
R ClassLoader funktioniert in Verbindung mit JAR-Datei nicht Allgemeine Java-Themen 8
C Bei Javainstallation Cache ausschalten Allgemeine Java-Themen 13
D Datentypen Cache Images Heap Space Error Allgemeine Java-Themen 7
F Eclipse cache vorhanden? Allgemeine Java-Themen 5
J Stream-basierter Cache Allgemeine Java-Themen 4
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
M Webstart-Fehler Cache Allgemeine Java-Themen 3
S Java Servlet Cache + Cache-Management Allgemeine Java-Themen 14
O Cache-Simulator Allgemeine Java-Themen 5
L Tomcat cache Allgemeine Java-Themen 10
T Jar-Files und JVM-Cache? Allgemeine Java-Themen 2
I getImage() - Cache abschalten Allgemeine Java-Themen 2
L Internet Cache löschen Allgemeine Java-Themen 3
M Cache & Datein kopieren Allgemeine Java-Themen 3
R Zugriff auf Internet Explorer Cache Allgemeine Java-Themen 8

Ähnliche Java Themen


Oben