Kopiere Java-Objekt / Klasse von einem Klassenlader in einen anderen Klassenlader

8

Hallo, gibt es eine Möglichkeit, einen klassengeladenen Kontext (atrributes usw.) von einem Klassenlader (zum Beispiel einem 'gemachten' Klassenpunkt) in einen anderen Klassenlader zu kopieren?

Klar machen, Beispiel: Ich habe ein Objekt Punkt auf CL 1. Jetzt auf einem anderen CL2 ausgeführt, möchte ich dieses Objekt in CL 3 erstellen.

Einige obj:

%Vor%

Landschaft:

%Vor%

Aber ich kann sun.reflection (nicht verfügbar) nicht verwenden und die Serialisierung funktioniert nicht, da CL2 das Objekt automatisch mit CL 1 "rekonstruiert".

Eine Lösung, die ich gelernt habe, war eine "100%" Java-Reflektion, die im Grunde die Felder von Objekt aus CL2 holt und auf dem neuen Objekt aufbaut.

PS: Es muss auf Java 1.4.2 laufen: '(

    
Marcos Roriz Junior 14.11.2009, 21:44
quelle

4 Antworten

7

Siehe Transloader zum Kopieren von Klassen zwischen ClassLoaders, wenn Sie einen der folgenden Schritte ausführen müssen:

>
  • Clone fast jedes Objektdiagramm von einem ClassLoader zum anderen

  • Nimm irgendein Objekt von einem fremden ClassLoader und rufe eine beliebige Methode darauf auf, ohne es zu klonen

mhaller 14.11.2009, 22:13
quelle
1

Ich glaube, er hat dieselbe Klasse (mit dem gleichen Namen), aber geladen und definiert von zwei Klassenlatern. Am besten reparieren Sie Ihr System, damit die Klasse nicht zweimal geladen wird.

    
mP. 06.01.2010 10:40
quelle
0

Wenn die Klasse so einfach ist, wie Sie es in Ihrem Fall beschreiben, können Sie sich XMLEncoder . Es gibt erhebliche Einschränkungen bei der Verwendung, aber in einfachen Fällen sollte es die Arbeit erledigen.

BEARBEITEN: Angesichts dieser Einschränkung würde ich sagen, die Daten in eine Map einfügen und diese verwenden. Sie könnten sogar die beiden Klassen ihren Status intern in einer Map speichern lassen, so dass die Bewegung ziemlich flüssig ist.

Wenn das nicht funktioniert, sieht es so aus, als ob Sie eine eigene XML / JSON-Rolle oder einfach nur CSV rollen, abhängig von der Komplexität der Daten.

    
Yishai 16.11.2009 23:13
quelle
0

Das PowerMock-Classloading bietet auch etwas Ähnliches wie TransLoader und es unterstützt mehr fortgeschrittene Anwendungsfälle wie (einige) Reflektionen. Sie können leicht ausführen oder ausführen:

%Vor%

Sehen Sie sich die an Testfall im SVN Repo.

Es ist auch in Maven verfügbar:

%Vor%     
Johan 30.08.2010 12:43
quelle

Tags und Links