簡體   English   中英

Tomcat 重新加載后保留不可序列化對象的值

[英]Retain Non-Serializable Object's Values After Tomcat Reloaded

我的程序必須經過一個大約需要 15 分鍾才能完成的學習步驟。 這種學習的結果是將兩個模型存儲到兩個公共對象中,然后將在其他類中使用。 我把這個學習步驟放在以下方法中:

public void init()

以便在服務器啟動時執行。 問題是,每次服務器重新加載時,它都會重新執行學習步驟。 我必須再等 15 分鍾才能看到一個小的改變的效果。 我想知道是否有辦法在程序和服務器的整個運行過程中保留某些對象的值。 這是我的代碼:

public static Model model1;
public static Model model2;

@Override
public void init()
{
    model1= readModel(source1)
    model2= readModel(source2)
}

附注。 我將 Servlet 與 JSP 頁面和 Tomcat 服務器一起使用。

作為通用解決方案,我建議您將學習部分和模型保留在服務容器之外。 可能是不同的虛擬機/進程。 這樣,只要進程需要運行,您就可以保留模型,而與作為您的 tomcat 的客戶端進程的狀態無關。

詳細的

您可以通過幾個步驟實現這一目標

  • 首先,您需要將模型准備和緩存遷移到不同的程序。 該程序將作為守護進程運行,您可以使用 Apache 的守護進程將其作為后台服務運行
  • 其次,假設您的守護進程已啟動並正在運行,您的模型使用者可以使用標准協議與模型 VM 進行通信。 協議的選擇取決於您的確切要求。 它可以是通過 TCP/HTTP 或 RMI 或其他任何東西公開的 API。

或者

正如我在評論中所建議的,一旦模型經過訓練,您還可以將模型二進制文件轉儲到文件系統。 在 tomcat 啟動時緩存模型。 io 將比學習階段快得多。

視情況將其設為會話或應用程序范圍的 bean,並將其作為 bean 而不是普通對象訪問。

你可以看看這里嗎? 想法要么在某處保存會話並將您的模型對象放在那里,要么只使用 Hazelcast(可能矯枉過正:))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM