2013-03-13 95 views
4

我有一個運行在Windows Server 2008(僅Tomcat,沒有Apache或IIS)上的Tomcat 7上的Struts 2 Web應用程序。應用程序中的文本存儲在.properties文件中,並由Struts 2 I18N攔截器進行管理。在JSP中,我使用<s:text name="menu.help" />標籤。
有些時候(上個月兩次),應用程序在卸載時會丟失對屬性文件的引用,而是開始顯示鍵。例如對於英語,它總是顯示「幫助」,但是當我遇到這個問題時,它開始顯示「menu.help」。我必須重新啓動應用程序才能使其正常工作。
我查看了日誌中的相關錯誤,但找不到與I18n或屬性相關的任何內容。我也尋找OutOfMemoryError,但找不到任何。
你知道可能是什麼問題嗎?你能想到我可以通過任何方式排除故障嗎?
感謝屬性文件被卸載

編輯:
這是我struts.xml中的相關部分:

<struts> 
    <constant name="struts.custom.i18n.resources" value="resources" /> 
    ... 

而且屬性文件(resources_en.properties, resources_es.properties, ...)位於WEB-INF/classes目錄。

+1

你可能想在這個的Struts用戶郵件列表上發佈。我懷疑有東西被垃圾收集,但不知道它會是什麼。 – 2013-03-13 18:42:58

+0

你嘗試排除故障嗎?你嘗試手動切換區域設置嗎? – 2013-03-13 19:17:20

+0

@RomanC我有可能在應用程序中切換語言,並且在重新啓動應用程序之前它不適用於任何語言。 – 2013-03-13 20:16:49

回答

0

我想你需要一個默認屬性:resources.properties

Surelly這個時候你拿到鑰匙,而不是翻譯是因爲默認區域未設置。

0

如果是內存的問題,我建議你做如下:

  1. 減少財產文件的大小,看是否能解決問題。因此,請首先將尺寸最小化,進行負載測試並查看結果。
  2. 它拆分到不同的屬性文件,看看是否發生這種情況,所有的人或只是其中的一部分

這是我個人的經驗:

有時JVM(錯誤)垃圾收集對象當它不被使用一段時間。我有與JDK 4和Oracle應用服務器9i相同的問題。當站點負載下降時,JVM垃圾回收器收集數據庫連接。所以,開發一個小的jsp頁面(test.jsp),給它添加<s:text name="menu.help" />。然後,每1min寫一個請求這個頁面的小應用程序。