Angenommen, ich habe eine Anwendung, die eine Echtzeitverfolgung des Zustands von etwas benötigt. Tracking geschieht über Ereignisse, die ich von einem externen Prozess erhalte. Ich bin dabei, es zu entwickeln, und ich muss schnell eine Klassenmitgliedsfunktion beheben, die ein Ereignis behandelt, das nicht mit der Klassenstruktur zusammenhängt.Java neu kompilieren und neu starten, ohne den Status zu verlieren
Dafür müsste ich neu kompilieren und neu starten, während der mein Anwendungsstatus verloren gehen würde. Ich könnte den Zustand in einer Datei oder etwas speichern, aber:
Ereignisse sind zeitkritisch, und ich kann nicht leisten, auch nur eine Millisekunde zu verlieren, da es nicht akzeptabel ist, ein Ereignis nicht zu behandeln. Ich habe mich gefragt, ob es irgendwie möglich ist, dieses Problem anzugehen.
Edit:
I Klassen bin mit Datenspur zu halten, aber ihre Lebensdauer Zyklus ist nie mehr als eine Minute, und sie sind nie wirklich überall danach gespeichert, und sie gelöscht werden. Die Daten werden in Klasseninstanz-Mitgliedern gespeichert und ich kann es mir nicht leisten, den Überblick über sie zu verlieren.
Beachten Sie, dass ich diese Klassen auch in mehreren Threads verwenden.
Sie können [eine Klasse während der Laufzeit neu laden] (https://www.toptal.com/java/java-wizardry-101-a-guide-to-java-class-reloading) – kajacx
Diese Frage ist viel zu breit . Möglicherweise möchten Sie sich das dynamische Neuladen von Klassen (gemäß der folgenden Antwort) oder ein anderes Bereitstellungsmodell ansehen, mit dem Sie mehrere Versionen der Anwendung gleichzeitig ausführen können. – Whymarrh
Sind Sie wirklich wirklich wirklich sicher, dass Sie zur Laufzeit Code generieren wollen? Warum können Sie kein Strategie-Pattern implementieren, um mit den Ereignissen umzugehen? Wird der Code eingegeben? –