2011-11-28 60 views
15

我們剛剛發現,每次我們重新啓動JBoss時,即使應用程序沒有更改,我們所有的Java Web Start客戶端都會重新下載所有的jar,而不是重新使用緩存的jar。爲什麼Java Web Start會從JBoss重新下載jar包?

從我在網上看到的,Java Web Start做了一個HTTP HEAD來決定是否下載一個jar。所以我在應用程序中的所有jar上運行了HTTP HEAD,並且發現在重新啓動JBoss之後,所有jar的修改時間已經改變了!

這是爲什麼,我該如何解決?我的應用程序檔案中的罐子根本沒有改變。就我所知,JBoss使用啓動時間或部署時間作爲修改時間。如果我理解正確,這將完全使Java Web Start能夠使用之前運行的緩存罐。

如果這是個問題,我們使用JBoss 6。以前我們使用過JBoss 4.我想檢查一下在JBoss 4下是否有問題,但是現在我們對新JBoss有很多依賴關係,因此需要做一些工作來完成這個測試。

+0

您是否嘗試過在JBoss之外設置Tomcat並將您的webstart應用程序放在那裏?怎麼了?它關閉tomcat後報告不同的時間嗎? – chubbsondubs

回答

3

嘗試將應用程序部署爲展開的Web應用程序而不是WAR文件。

這會阻止JBoss解壓縮應用程序,並可能弄亂修改日期。

您必須以保留修改日期(例如rsync)的方式處理應用程序的更新,但這可能比降級或修補JBoss更容易。

+0

哇,我不知道JBoss在爆炸的耳朵和戰爭中做了什麼,但是它花了三分鐘沒有說什麼,然後在超時空間用完時拋出異常! – skiphoppy

+0

對於某些版本的JBoss,分解的目錄名稱必須以'.war'或'.ear'結尾。你在做那個嗎? – blahdiblah

+0

不,我正在犯一些我今天早上糾正的其他愚蠢的錯誤 - 事實證明這是有效的!感謝您提供簡單而簡潔的解決方法! :) – skiphoppy

2

看起來VFSUtils在服務器啓動時將文件系統掛載到tmp目錄時,不會維護該文件的lastModifiedDate。您可以修補該類中的複製方法,嘗試根據物理文件中的值設置新文件的時間戳。

作爲對chubbard評論的迴應:問題不會發生在Tomcat(精確的tomcat 7.0.21)上。

0

存在一個關於VFSUtils.unzip()的問題(https://issues.jboss.org/browse/JBVFS-177),它在部署時不保留時間戳(仍然適用於JBoss 6.1)。

由於問題與解壓縮方法有關,所以blahdiblah的解決方案確實可行。

另一種方法是使用基於版本的Java Web Start(使用versionEnabled修改jnlp並創建version.xml)。