2012-12-05 20 views
1

我正在開發一個在Java 1.5(與1.5+兼容)上編譯的小應用程序應用程序。 它包含一些資源屬性文件,這些文件捆綁在一起放在同一個jar中,這與Java包並行。避免服務器調用不存在的鬆散資源

每當我通過小應用程序訪問該資源文件時,它會向小服務器的下載請求發出請求。之後,它從jar中讀取文件並像以前一樣工作,但我不希望它爲這些文件提出服務器請求。

這是我的java代碼如何訪問資源文件。

ResourceBundle messages = ResourceBundle.getBundle("resources/properties/Messages", locale); 

我試圖以兩種方式獲得:

ResourceBundle messages = ResourceBundle.getBundle("resources.properties.Messages", locale); 

無論它有相同的行爲。

注意:這些資源在我的Web應用程序中不可用作爲鬆散資源。

+0

我的大部分用戶都使用Java 1.5插件。所以我使用'object'和'embed'標籤來運行我的小程序。 – ADITHYAN

+0

基於JNLP的applet之前的默認值是熱切下載所有資源。 –

+0

@AndrewThompson如果是這樣,爲什麼applet在運行時請求資源.. – ADITHYAN

回答

5

我從服務器日誌這些細節。我分析了我的服務器日誌404升500的反應..

404(未找到)& 500(服務器錯誤),可以預期的消息因爲插件試圖檢查緩存的資源是否是最新的。要做到這一點,它需要檢查上次更新的資源服務器版本的時間。

的複雜因素是,該資源可被預期爲在小程序它可以是作爲指定的codebase相同的路徑上的「鬆散文件」的archive屬性提到一個Jar。所以,如果資源是在一個罐子裏的以下路徑:

/resources/properties/Messages_en_US.properties 

的JVM還將檢查

${codebase}/resources/properties/Messages_en_US.properties 

以及每個罐子。

要修復它們,請參閱codebase_lookup參數。這個用例需要:

<param name='codebase_lookup' value='false' > 

這告訴JVM有存儲爲類路徑上的鬆動文件沒有資源,只有罐子被搜索。它應該停止經常報告的消息(對於理解該參數的更新的JRE)。

+0

非常感謝它實際上解決了我的問題.. – ADITHYAN

+0

經過測試,我發現它適用於** JRE 1.6 + **,並且在下面失敗,任何如何減少我的痛苦。 。謝謝 – ADITHYAN

+0

是的,對不起,我無法找到它被引入的確切版本。您可能會發現1.6.0_10 +版本中引入了很多更改。儘管如此,現在大多數JRE都配置爲自動更新,但隨着時間的推移應該會減少痛苦。 :) –

0

我對Java插件緩存applet的內部細節知之甚少,但如果您的applet使用.jnlp描述符,我會嘗試將download="eager"添加到描述符的<jar>元素中。

您也可以嘗試將您的ResourceBundles定義爲類而不是.properties文件。例如:

package resources.properties; 

import java.util.ListResourceBundle; 

public class Messages 
extends ListResourceBundle { 
    protected Object[][] getContents() { 
     return new Object[][] { 
      {"entry1", "Some message text"}, 
      {"entry2", "A different message"}, 
      // etc. 
     }; 
    } 
} 

就像屬性文件,你可以將它們定義爲儘可能多的語言環境,你想:

package resources.properties; 

import java.util.ListResourceBundle; 

public class Messages_es 
extends ListResourceBundle { 
    protected Object[][] getContents() { 
     return new Object[][] { 
      {"entry1", "Some message text in Spanish"}, 
      {"entry2", "A different message in Spanish"}, 
      // etc. 
     }; 
    } 
} 

如果你定義的ResourceBundle子類,這是一個好主意,刪除相應的.properties文件。

+0

Jnlp對applet的支持是從Java 1.6.10提供的。我也在Java 1.5+中運行 – ADITHYAN

相關問題