2016-11-19 3 views
-1

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.

+0

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

+0

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

+0

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? –

Antwort

2

Möglicherweise möchten Sie dynamic class reloading implementieren.

Beachten Sie jedoch, dass das erneute Laden einer Klasse die Instanzen der ursprünglichen Klasse nicht in Instanzen der modifizierten Klasse konvertiert. Stattdessen erhalten Sie eine neue Klasse, aus der Sie neue Instanzen erstellen können. Wenn Sie Ihre Klasse nur zum Verarbeiten von Daten, aber nicht zum Speichern von Daten verwenden, sollten Sie in Ordnung sein.

+0

Ich verwende Klassen, um die Daten zu verfolgen, aber ihr Lebenszyklus ist nie länger als eine Minute und sie werden nie wirklich irgendwo danach gespeichert und sie werden gelöscht. – Nirri

+0

@Nirri: Dann sollte es gut funktionieren; Sie können einfach einen Verweis auf das zuletzt geladene 'Class'-Objekt behalten und daraus neue Instanzen erstellen, wann immer Sie sie benötigen. –

Verwandte Themen