Applikation updaten

  • Themenstarter Themenstarter SPiKEe
  • Beginndatum Beginndatum
Na dann bin ich mal über deine Lösung gespannt ^^ Ich habe es zwar noch nicht gebraucht, aber wer weiß, es gibt immer ein erstes Mal ^^
 
laut java bug-reports soll es schon leute gegeben haben die dieses problem...

*lol* du bist dir aber schon im klaren, das JEDER applicationserver genau diese funktionalitäten fehlerfrei bieten muss?

Ich würde mal eher auf ein Layer8-Problem tippen ;-)

Du darfst im übrigen GAR keine referenzen auf ein innerhalb deines Jars typisierten Objekte halten.

Sonst hängt der Rest Deines Jars immer noch im PermGen.

Java:
            oi.start();
            cl=null;
            clazz=null;
            oi=null;
            _PATH=null;

wer beendet Deinen Thread? Btw, Du bist Dir aber schon im klaren, dass Du mit der Übergabe Deiner (anonymen) Klasse an den Thread wieder eine Verquickung zwischen den Classloadern schaffst, ne?

Wozu brauchst Du überhaupt einen Thread?

btw, ich gebe Dir noch die Empfehlung, Dich an die Java Coding Standards zu halten, aber das muss jeder selbst wissen ;-)
 
Zuletzt bearbeitet:
Hallo,

willst du deine Anwendung im laufenden Betrieb updaten können, oder darf das Update auch nach einem Neustart passieren? Sprich beim Start der Anwendung prüft dein System auf ein Update. Liegt eines vor wird dies im Hintergrund geladen. Sobald die Update Dateien komplett vorliegen fragt die Anwendung nach einem Neustart. Beim nächsten Start wird dann das Update automatisch ausgeführt in dem die entsprechenden jars mit den neueren Versionen überschrieben und anschließend dynamisch mit einem URLClassLoader in den Classpath gelegt werden (vorher von den alten Jars zur Sicherheit noch ein backup anlegen damit bei einem Fehler das "letzte" System wieder hergestellt werden kann.)

Weiterhin wäre eine Frage ob deine Plugins selbst auch wieder von anderen Plugins abhängig sein dürfen. Das würde einen robusten Update Mechanismus noch etwas komplexer machen.

Gruß Tom
 
@gorefest
der Layer-8-error liegt grade bei dir ... denn du hast es offenbar nicht GENAU gelesen
1) lies mal die alten *ober auch aktuellen* bug-reports ... da siehst du das es genug gibt die auch über solche probleme bei application-servern schreiben .. hier hauptsächlich auf windows begrenzt
2) ich habe euch mitgeteilt das es mit Java7 ****t da in dieser version von URLClassLoader das interface Cloasable implementiert wird was rekursiv alle file-locks explizit aufhebt ... ansonsten habe ich am restlichen code NICHTS verändert und es hat funktioniert ... gegen-frage also : wo siehst du hier probleme wenn es doch auch so geht
3) welche java coding standards meinst du bitte ? ... bezeichnungen ? ... aufrufe ? ... schreibweisen ? ...
es tut mir leid .. aber ich konnte in meinen bisherigen codes nie nachteile gegenüber "sauber" implementierten codes erkennen ... es kam sogar öfter vor das von der performance meine codes weit vorne lagen im gegensatz zu den "optimierten" ... von daher : jedem das seine ...

@Thomas
ach mensch Thomas ... ich weis was du jetzt denkst ...
ich habe es dir schon in meinem plugin-thread gesagt : für meine anforderungen denkst du zu produktiv ...
wenn das ganze dann mal etwas pupolärer wird und ich hilfe bei optimierung oder struktur-planung brauche kann ich dich ja sicher noch mal fragen ... aber zur zeit kann ich deine posts nicht nutzbringend verwende


wie dem auch sei ...
ich werde übers WE mal ne VM aufsetzen mit unix und win und mal mit J5.0 versuchen das ganze i-wie zu implementieren *mit reflections halt* ...
wenn es so geht wie ich mir das denke brauch ich nicht mal einen neuen URLClassLoader sondern kann den root-CL dierekt manipulieren ...
aber das werd ich frühestens morgen abend wissen wenn ichs mal implementiert hab

trotzdem dank an alle die sich hierrüber den kopf zerbrochen haben ...
wenn ich eine passende lösung gefunden habe werd ich sie posten das auch andere vllt was von haben
 
so .. um hier jetzt mal den schlusstrich zu ziehen

es ist nicht möglich mit einer 2-jar - konfikugration das root-jar mit hilfe des zweitens jars zu updaten
auch ein manipulieren des root-classloaders mit reflections hilft da nicht viel weiter da im besten fall die VM mit einem FATAL ERROR aussteigt
von daher muss man einen launcher verwenden der den root-classloader auf sich zieht und die anderen jars mit hilfe des URLClassLoaders läd

was das hot-pluggable von plugins angeht
ab java7 implementiert URLClassLoader das interface Closeable womit da explizite freigeben von gelockten jars möglich wird ...
um dies auch in älteren versionen nutzen zu können muss man von URLClassLoader eine eigene klasse ableiten die das interface Closeable implementiert und dann close() mit reflections vollstopfen um an die jar-files zu kommen
das ganze sollte dann so aussehen

CustomURLClassLoader.java
Java:
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.jar.*;
import sun.misc.*;
import java.lang.reflect.*;
public class CustomURLClassLoader extends URLClassLoader implements Closeable
{
	public CustomURLClassLoader(URL[] url)
	{
		super(url);
	}
	public void close()
	{
		try
		{
			Class clazz=java.net.URLClassLoader.class;
			Field ucp=clazz.getDeclaredField("ucp");
			ucp.setAccessible(true);
			Object sun_misc_URLClassPath=ucp.get(this);
			Field loaders=sun_misc_URLClassPath.getClass().getDeclaredField("loaders");
			loaders.setAccessible(true);
			Object java_util_Collection=loaders.get(sun_misc_URLClassPath);
			for(Object sun_misc_URLClassPath_JarLoader : ((Collection) java_util_Collection).toArray())
			{
				try
				{
					Field loader=sun_misc_URLClassPath_JarLoader.getClass().getDeclaredField("jar");
					loader.setAccessible(true);
					Object java_util_jar_JarFile=loader.get(sun_misc_URLClassPath_JarLoader);
					((JarFile) java_util_jar_JarFile).close();
				}
				catch (Throwable t)
				{
					// if we got this far, this is probably not a JAR loader so skip it
				}
			}
		}
		catch (Throwable t)
		{
			// probably not a SUN VM
		}
		return;
	}
}

> NICHT GETESTET ... nur aus bugs.sun.com kopiert

ich hoffe ich kann einigen die das hier im nachhinein lesen damit helfen

danke an alle die an diesem thread mitgeschrieben haben ...

THREAD ERLEDiGT !

SPiKEe
 
Zurück