S
SPiKEe
moin
gleich vorweg : ich beziehe mich auf folgendes posting
http://www.tutorials.de/enterprise-...-zugriff-auf-den-code-des-hauptprogramms.html
da die letzte frage ... die möglichkeit der updates ... nicht beantwortet wurde und das thema doch schon älter ist wollt ichs jetzt nich noch mal ausgraben sondern der übersicht halber in neues thema machen
*ps : im verlinkten post wurde von Thomas auf weitere postings verwiesen ... der erste ist der den ich mal losgetreten habe ... aber ich habe mich dann für das plugin-system selbst für eine mischung aus meinem und dem geposteten link des thread-erstellers entschieden*
zu meiner frage : ich möchte hier nicht diskutieren wie man nun einzelne plugins komplett unloaded und alle referrenzen entfernt so das GC greifen kann ... nur um dann die einzelene daten zu aktuliesieren ... das ist kein problem für mich
ich würde gerne wissen wie das mit der main-app funktioniert ...
zenario :
main-class > enthält MAIN
GUI-classes
plugin-handler / -manager > für das laden / entladen , die verwaltung und kommunikation zuständig
plugins > im unter-ordner "plugins" in JAR-files
die main-class , die GUI-classes und die plugin-handler befinden sich in einem main-JAR ... *falls hier schon eine aufteilung nützlich wäre bitte erwähnen*
zum ablauf : main-class soll vor laden der GUI ein plugin initialisieren welches für das update des main-JARs zuständig ist ...
damit nun aber das main-JAR aktulisiert werden kann müssen ja alle referrenzen auf alle klassen dieses JARs auf NULL gesetz und durch den garbagecollector freigegeben werden ...
das wäre auch noch kein problem in dem nach der initialisierung des update-plugins ein thread in diesem gestartet wird der die main-class darauf überwacht das alle referrenzen in der main-class aufgehoben wurden ... dann entfernt er seine eigene referrenz auf die main-class und damit sollte das main-JAR nun frei sein *nach einem expliziten aufruf von System.gc(); *ist das an der stelle überhaupt notwendig ?*
da ja nun alle referrenzen auf das main-JAR entfernt wurden sollte es für den update-thread welcher referrenzlos weiterlaufen sollte *ich weis nich ob das wirklich so is* möglich sein das main-JAR zu löschen ... *ich habe es noch nicht ausprobiert ... werde es auch heute abend nicht mehr schaffen ... aber im laufe der nächsten woche dann*
der update-thread soll *BEVOR das main-JAR gelöscht wird* nun das main-JAR via netz auf neue version prüfen , wenn nötig runterladen und "installieren" *im sinne von altes jar löschen und neues einfügen*
nun soll der update-thread wieder eine instanz der main-class bilden und in einer methode einsteigen die NACH dem update liegt *sonst wäre das ein wunderschöner deadlock*
das neu-instanzieren und einspringen an einem gewünschten punkt ist ja nicht das problem
meine frage dazu ist nun eig einfach : ist es möglich das ein JAR sich quasi selbst updatet in dem es über andere JARs und threads geht um alle referrenzen auf sich selbst zu löschen so das es komplett freigegeben und löschbar ist ?
wenn ja : auch so wie ich es oben versucht habe zu beschrieben ?
wenn nein : welche möglichkeiten bleiben ?
eine verwendung von ProcessBuilder bzw Runtime.exec() will ich eigentlich vermeiden ... warum ? ... weil es unter unix z.B. kein JAVAW gibt ... sondern auch für reine GUI-apps ohne console JAVA verwendet wird ...
da ich aber gerne plattformunabhängig bleiben will will ich das ganze mit java-internen mitteln lösen
danke schon mal im vorraus für das zerbrechen eurer köpfe ...
ps : werde wie gesagt mich mal nächste daran versuchen und bei erfolg meinen source posten
gleich vorweg : ich beziehe mich auf folgendes posting
http://www.tutorials.de/enterprise-...-zugriff-auf-den-code-des-hauptprogramms.html
da die letzte frage ... die möglichkeit der updates ... nicht beantwortet wurde und das thema doch schon älter ist wollt ichs jetzt nich noch mal ausgraben sondern der übersicht halber in neues thema machen
*ps : im verlinkten post wurde von Thomas auf weitere postings verwiesen ... der erste ist der den ich mal losgetreten habe ... aber ich habe mich dann für das plugin-system selbst für eine mischung aus meinem und dem geposteten link des thread-erstellers entschieden*
zu meiner frage : ich möchte hier nicht diskutieren wie man nun einzelne plugins komplett unloaded und alle referrenzen entfernt so das GC greifen kann ... nur um dann die einzelene daten zu aktuliesieren ... das ist kein problem für mich
ich würde gerne wissen wie das mit der main-app funktioniert ...
zenario :
main-class > enthält MAIN
GUI-classes
plugin-handler / -manager > für das laden / entladen , die verwaltung und kommunikation zuständig
plugins > im unter-ordner "plugins" in JAR-files
die main-class , die GUI-classes und die plugin-handler befinden sich in einem main-JAR ... *falls hier schon eine aufteilung nützlich wäre bitte erwähnen*
zum ablauf : main-class soll vor laden der GUI ein plugin initialisieren welches für das update des main-JARs zuständig ist ...
damit nun aber das main-JAR aktulisiert werden kann müssen ja alle referrenzen auf alle klassen dieses JARs auf NULL gesetz und durch den garbagecollector freigegeben werden ...
das wäre auch noch kein problem in dem nach der initialisierung des update-plugins ein thread in diesem gestartet wird der die main-class darauf überwacht das alle referrenzen in der main-class aufgehoben wurden ... dann entfernt er seine eigene referrenz auf die main-class und damit sollte das main-JAR nun frei sein *nach einem expliziten aufruf von System.gc(); *ist das an der stelle überhaupt notwendig ?*
da ja nun alle referrenzen auf das main-JAR entfernt wurden sollte es für den update-thread welcher referrenzlos weiterlaufen sollte *ich weis nich ob das wirklich so is* möglich sein das main-JAR zu löschen ... *ich habe es noch nicht ausprobiert ... werde es auch heute abend nicht mehr schaffen ... aber im laufe der nächsten woche dann*
der update-thread soll *BEVOR das main-JAR gelöscht wird* nun das main-JAR via netz auf neue version prüfen , wenn nötig runterladen und "installieren" *im sinne von altes jar löschen und neues einfügen*
nun soll der update-thread wieder eine instanz der main-class bilden und in einer methode einsteigen die NACH dem update liegt *sonst wäre das ein wunderschöner deadlock*
das neu-instanzieren und einspringen an einem gewünschten punkt ist ja nicht das problem
meine frage dazu ist nun eig einfach : ist es möglich das ein JAR sich quasi selbst updatet in dem es über andere JARs und threads geht um alle referrenzen auf sich selbst zu löschen so das es komplett freigegeben und löschbar ist ?
wenn ja : auch so wie ich es oben versucht habe zu beschrieben ?
wenn nein : welche möglichkeiten bleiben ?
eine verwendung von ProcessBuilder bzw Runtime.exec() will ich eigentlich vermeiden ... warum ? ... weil es unter unix z.B. kein JAVAW gibt ... sondern auch für reine GUI-apps ohne console JAVA verwendet wird ...
da ich aber gerne plattformunabhängig bleiben will will ich das ganze mit java-internen mitteln lösen
danke schon mal im vorraus für das zerbrechen eurer köpfe ...
ps : werde wie gesagt mich mal nächste daran versuchen und bei erfolg meinen source posten