我正在開發Java Web應用程序。該應用程序連接到Lucene索引。我創建了一個IndexSearcher的單例實例。這個實例打開一些文件。當我重新部署Web應用程序時,由較早的IndexSearcher實例打開的文件將繼續保持打開狀態,並且重新部署的應用程序會創建另一個實例。幾次重新部署後,系統開始拋出「太多打開的文件」異常。我想在重新部署之前關閉舊實例,以便舊文件關閉,但我無法弄清楚如何做到這一點? web.xml中是否存在需要取消部署的指令,與load-on-startup類似?我在jboss服務器上運行web應用程序。從Java Web應用程序取消部署的調用方法
8
A
回答
17
@WebListener
public class LuceneConfig implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Do your job here during webapp startup.
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// Do your job here during webapp shutdown.
}
}
如果你不上的Servlet 3.0,但(這已經是出了2年雖然),那麼你需要刪除@WebListener
註釋和web.xml
手動註冊,如下所示:
<listener>
<listener-class>com.example.LuceneConfig</listener-class>
</listener>
2
如果您實施javax.servlet.ServletContextListener
並將web.xml
中的該類註冊爲<listener>
,那麼將在上下文卸載之前調用contextDestroyed()
方法。
相關問題
- 1. MySql無法從部署的Java Web應用程序工作
- 2. 無法使用Web部署工具部署Web應用程序
- 3. 增量部署java web應用程序
- 4. 如何部署Java Web應用程序
- 5. 部署Web應用程序
- 6. 使用Web部署與Web應用程序部署Web作業
- 7. Tomcat取消部署不會刪除Web應用程序工件
- 8. 遠程部署Web應用程序(.war)
- 9. 從谷歌應用引擎中取消部署Java應用程序
- 10. 部署 - Java應用程序
- 11. 從Java(Android)外部應用調用Web服務的方法
- 12. 在JBoss上部署Web應用程序
- 13. 如何部署Web應用程序
- 14. 使用ECLIPSE部署Web應用程序
- 15. 無法在Tomcat中完全取消部署Web應用程序7
- 16. Symfony2的Web應用程序部署
- 17. IIS:如何從命令行取消部署/刪除/刪除Web應用程序?
- 18. 調試部署的AIR應用程序
- 19. 取消從應用程序調用Web服務
- 20. ASP.NET Web應用程序部署與Web部署3.5
- 21. 無法在Tomcat上取消部署應用程序
- 22. 部署asp.net Mvc Web應用程序
- 23. Visual Studio 2010 Web應用程序部署
- 24. 無法從Visual Studio部署Web應用程序
- 25. 無法從團隊城市部署web應用程序
- 26. 部署Web應用程序和蔚藍
- 27. 部署的JBoss Web應用程序能否簡單地消失?
- 28. 部署Web應用程序Amazon AWS
- 29. .NET應用程序的部署如何與Java Web應用程序的部署相比較?
- 30. ASP.NET 4 VS2010 Web應用程序部署
它在這裏工作,無需註冊。在Payara 4.1上使用Mojarra 2.3.3(173 build)。 – Roland
確定它會正常工作。 Payara 4.x是基於Servlet 3.1的。那麼'@ WebListener'就可以正常工作。正如所回答的那樣,當你還沒有使用Servlet 3.0時,它將不起作用。 JSF impl /版本無關緊要,因爲它在這裏不起作用。只有Servlet版本是相關的。 – BalusC
謝謝你說清楚。 – Roland