我一直在尝试将硬编码的配置数据从我正在使用的Tomcat Web应用程序中提取到JNDI(web.xml)中,以使应用程序更具可配置性。我没有继续对InitialContext进行查找,而是使用单例缓存查找和InitialContext。
当然,当我停止并启动应用程序时,我的单例的静态实例仍然存活 - 因此,缓存不会“刷新”。我的问题是双重的 - 我将这个单例分离到一个单独的Web应用程序 - 在Tomcat中是否有任何不可预见的影响[我已经读过单例的& tomcat不要混用]?什么是在应用程序停止时清除单例实例的最简单方法(我正在考虑编写一个单独的ServerContextListener来清除实例)。
(注意:如果我使用的术语不正确,我很抱歉 - 请更正 - 这是我第一次尝试使用Tomcat进行编程)
答案 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时它将被销毁。应该取消部署它,而不是停止应用程序。