Tomcat,Singletons,& ServerContextListener

时间:2010-06-03 15:08:18

标签: java tomcat singleton

我一直在尝试将硬编码的配置数据从我正在使用的Tomcat Web应用程序中提取到JNDI(web.xml)中,以使应用程序更具可配置性。我没有继续对InitialContext进行查找,而是使用单例缓存查找和InitialContext。

当然,当我停止并启动应用程序时,我的单例的静态实例仍然存活 - 因此,缓存不会“刷新”。我的问题是双重的 - 我将这个单例分离到一个单独的Web应用程序 - 在Tomcat中是否有任何不可预见的影响[我已经读过单例的& tomcat不要混用]?什么是在应用程序停止时清除单例实例的最简单方法(我正在考虑编写一个单独的ServerContextListener来清除实例)。

(注意:如果我使用的术语不正确,我很抱歉 - 请更正 - 这是我第一次尝试使用Tomcat进行编程)

2 个答案:

答案 0 :(得分:2)

  

我没有继续对InitialContext进行查找,而是使用单例缓存查找和InitialContext

好的,所以你实现了一个带有缓存的Service Locator,[这是] Web层的常见做法。这是an example

  

当然,当我停止并启动应用程序时,我的单身人员的静态实例仍然存在

嗯......除非你在Common class loader$CATALINA_HOME/lib)中部署你的单身,否则它不应该。你没有这样做,对吗?

  

我将这个单例分离到单个Web应用程序 - Tomcat中是否存在任何无法预料的影响

我没有意识到。

  

在应用程序停止时清除单例实例的最简单方法是什么

在webapp类加载器中部署单例(即/WEB-INF/classes/WEB-INF/lib)并按照建议取消部署应用程序。

答案 1 :(得分:0)

你的单身人士是如何被创造出来的?

如果从webapp加载单例,它将被隔离到单个webapp,因为它是由webapp自己的类加载器加载的。当您取消部署webapp时它将被销毁。应该取消部署它,而不是停止应用程序。

相关问题