2016-11-19 18 views
-1

假設我有一個應用程序需要實時跟蹤某些事物的狀態。跟蹤通過我從外部進程獲得的事件發生。我正在開發它,我需要快速修復處理與類結構無關的事件的類成員函數。重新編譯並重新啓動java而不會丟失狀態

爲此我需要重新編譯並重新啓動,在此期間我的應用程序狀態將會丟失。我可以將狀態保存在一個文件中,但是:但是:

事件對時間至關重要,而且我不能失去一毫秒,因爲不處理事件是不可接受的。我想知道是否有任何方法來解決這個問題。

編輯:

我使用類來跟蹤數據,但它們的壽命週期是從來沒有超過一分鐘,他們永遠都不會真正之後存儲在任何地方,他們都將被刪除。數據存儲在類實例成員中,我不能失去任何一個成員的蹤跡。

請注意,我也在多個線程中使用這些類。

+0

您可以[在運行期間重新加載班級](https://www.toptal.com/java/java-wizardry-101-a-guide-to-java-class-reloading) – kajacx

+0

此問題太寬泛。您可能希望查看動態類重新加載(按照下面的答案)或者允許您一次運行多個版本的應用程序的不同部署模型。 – Whymarrh

+0

您真的確實確定要在運行時生成代碼嗎?爲什麼你不能實施一些戰略​​模式來處理事件?代碼被注入了嗎? –

回答

2

您可能想要執行dynamic class reloading

請注意,重裝類不會將原始類的實例神奇地轉換爲修改後的類的實例 - 相反,您將得到一個新的類,您可以從中創建新實例。如果你只使用你的類來處理數據而不是存儲數據,你應該沒問題。

+0

我使用類來跟蹤數據,但是它們的生命週期永遠不會超過一分鐘,並且它們從來沒有真正存儲在任何地方,並且它們被刪除。 – Nirri

+0

@Nirri:那麼它應該工作得很好;您可以簡單地保留對最近加載的'Class'對象的引用,並在需要時使用它來創建新實例。 –

相關問題