2013-05-02 118 views
0

我目前正在研究一個在服務器端進行繁重計算的Java web應用程序。我正在嘗試創建一個類似於Google地圖的地圖系統。在java web應用程序中共享公共文本文件

客戶端通過Java Servlets向服務器發送查詢。對於每個實例,都會創建一個巨大的多維地圖數組變量。我認爲這在服務器計算機的速度和RAM使用方面可能是低效的。

那麼是否有可能所有實例共享對內存中的相同變量的訪問權限,以便同一個變量不會一遍又一遍地被創建?

map數組變量是一個巨大的文本文件,當前每個請求都重新打開文本文件。

我正在考慮使用全局常量變量,但我也希望這個共享變量在運行時可以修改,以便服務器不必爲了更改數組數據而重新啓動/重新編譯。這可能嗎?

回答

0

1)創建辛格爾頓EJB之間共享ServletContext中。使用javax.ejb.Startup註釋您的EJB,以便在服務器啓動時,您的bean也啓動。在EJB init方法中填充您的變量。任何Web組件都可以訪問該單例EJB。 Singleton EJB確保無論如何只存在1個副本。除非出現錯誤,否則Singleton EJB不會被容器停止。

2)如果您無法實現EJB,請創建一個實現ServletContextListener的類。所以當ServletContext初始化ServletContextListener類會得到回調,你設置你的變量。

+0

謝謝你詳細解釋! ServletContextListener的init正是我所期待的!我不熟悉singleton EJB和註解,所以我會在其他時間嘗試這些。但是,感謝您提供多種解決方案! – 2013-05-02 06:00:35

+0

不用擔心隊友,歡呼! – 2013-05-02 06:13:47

0

使用靜態變量來共享所有實例,但確保您是否做任何更新來同步這些更新。 或 可將變量存儲在其中的所有客戶端

+1

靜態變量?在哪? – 2013-05-02 04:12:52

+0

謝謝你的幫助。我完全忘記了靜態變量的獨特性。 – 2013-05-02 06:03:07

相關問題