2011-03-27 72 views
1

我有一個Java EE應用程序,它採用XML並將XSLT應用於它以生成HTML。這個過程發生在一個自定義的servlet中。這通常用於在某些網頁上構建部分內容。由於實際數據已經以XML格式存儲,因此只需在servlet中進行轉換即可。在部署的Java EE應用程序中更新XSLT文件而無需重新部署?

這實際上是建模CruiseControl它是如何構建報告。該servlet緩存生成的HTML,以避免每次都產生轉換成本。代表XSL文件的DOM也被緩存在內存中。

現在XSLT部署在WAR文件中。我們希望支持部署在WAR文件中的默認XSLT,但也可以在不重新部署整個應用程序的情況下更新XSLT。我希望有些人可能會有一些好的想法來解決這類問題。


更新

從我收到我知道有一些服務器特定的方式來做到這一點的評論(縣)。但我希望以更通用的方式解決它。我需要確保我能夠記住以下功能...

  1. 一旦檢測到新的XSLT,(直到檢測到新的版本)緩存XSLT本身
  2. 保持的緩存版本生成的HTML,當有新的XSLT時更新它們。
+0

嗯..我相信這個問題的答案可能是服務器特定的,因爲服務器如何組織部署(未存檔)的內容可能會有所不同。我知道,如果您在WebLogic服務器上使用.EAR進行部署,則這種功能是可能的。請參閱:http://download.oracle.com/docs/cd/E13222_01/wls/docs90/deployment/redeploy.html#1025739 – Kai 2011-03-27 23:24:05

+0

@Kai我可以明白,有服務器特定的方式來取代WAR/EAR,但我希望以通用的方式解決這個問題。 – bconneen 2011-03-28 01:02:58

+0

不是關於XSLT,而是Web應用程序部署。 Rettaging。 – 2011-03-28 15:54:08

回答

2

與其將XSLT放入war文件中,我會選擇在我的戰爭之外有一個可配置的xslt文件夾;通過「可配置」,我的意思是有一個配置文件(屬性或其他格式),告訴webapp xslt文件夾的路徑。然後,您可以定期監視該文件夾的內容,並且如果有任何XSLT更改,則會使相應緩存失效,重新加載XSLT並開始使用新緩存。您還必須小心操作的原子性:使緩存無效並重新加載XSLT可能會中斷對該XSLT生成的內容的正在進行的服務請求。

+0

也許是兩者的結合?使用WAR部署默認設置,並且我們監視目錄是否有新版本? – bconneen 2011-03-28 11:12:06

+0

這也是一個解決方案。 – MarcoS 2011-03-28 12:14:18

相關問題