2010-03-17 79 views
2

我們在ear文件中部署了一些war文件。一些war文件有一個類,它以單例形式從我們的PLM系統中緩存靜態數據。由於某些類需要幾分鐘才能加載,因此我們使用web.xml中的load-on-startup來提前加載它們。在我們試圖在生產服務器上重新部署應用程序之前,這一切都可以正常工作。 (WebLogic 10.3)我們從PLM API獲得一個關於已經加載的dll的例外。我們的PLM供應商已確認這是一個問題,並表示他們不支持使用啓動時加載。這也是我們開發箱中的一個重大問題,我們已經在重新部署應用程序。我們大多數人,當我們沒有使用緩存的應用程序之一工作時,讓他們註釋掉。顯然,我們不能爲生產服務器做到這一點。現在,我們將耳朵傳輸到生產服務器,在控制檯中部署它,等待它崩潰,關閉應用服務器實例,然後再次啓動它。啓動後立即加載類文件

我們需要找到解決的辦法......

一個建議是建立一個servlet,我們可以在服務器啓動將加載各種緩存後調用。雖然這將工作,我正在尋找更清潔的東西。無論如何,一旦服務器啓動後檢測,然後解除方法?

謝謝。

回答

1

如何使用servlet容器生命週期偵聽器,如ServletContextListener

Example on how to use

編輯:對不起,重新讀你的問題後,我不認爲這會奏效。你想要的東西只會在每個服務器生命中加載一次,而不是應用程序生命。 ServletContextListener的方法將在每次部署應用程序時調用,就像啓動時加載的servlet(它似乎您正在使用的那樣)。我的建議會以不同的方式完成同樣的事情。

我會嘗試克里斯納瓦的建議。

編輯2:它看起來像tomcat也有一些lifecycle listener(s)可用。它看起來像文檔是稀疏的,但這可能會允許您在服務器啓動時專門做一次。

編輯3:是的,一個tomcat生命週期監聽器是要走的路。 This link很好地解釋瞭如何設置一個。應該相當簡單。如果你忽略了將事務添加到tomcat的部分,它會非常徹底地完成如何添加生命週期偵聽器。

+0

看起來它應該工作....我會給它一個鏡頭。謝謝。 – Striker 2010-03-17 19:18:21

1

我們遇到了一個加載了本地DLL的第三方JDBC驅動程序的類似問題。當重新部署應用程序時,驅動程序會崩潰,說已經加載了DLL。解決方案(如果可以的話)是將驅動程序從deploy部署到lib中。通過這種方式,驅動程序對應用程序服務器是全局的,並且在重新部署應用程序時不需要重新加載。

相關問題