2010-06-03 23 views
2

我一直在嘗試從我正在處理的Tomcat Web應用程序中將硬編碼的配置數據導入到JNDI(web.xml)中,以使應用程序更易於配置。我不是一直在查找InitialContext,而是使用單例緩存查找和InitialContext。Tomcat,Singletons和ServerContextListener

當然,當我停止並啓動應用程序時,單例的靜態實例仍然存在 - 因此,緩存不會「刷新」。我的問題是雙重 - 我將這個單例隔離到單個Web應用程序 - 在Tomcat中是否有任何無法預料的影響[我讀過單身人士的& tomcat不混合]?什麼是最簡單的方法來清除應用程序停止時的單例實例(我正在考慮編寫一個單獨的ServerContextListener來清除實例)。

(注:我道歉,如果我使用的術語不正確 - 請更正 - 這是我第一次嘗試與Tomcat的編程)

回答

2

而不是不斷地做查找到的InitialContext,我緩存查找和使用InitialContext的單身

好了,你實現了緩存Service Locator,即[是|是] Web層的常見做法。這裏是an example

當然,當我停止和啓動應用程序,我單身的靜態實例仍然活着

嗯......除非你是在Common class loader$CATALINA_HOME/lib)部署你的單身它不應該」噸。你沒有這樣做,對吧?

我這個隔離單到一個Web應用程序 - 是否有在Tomcat中任何不可預料的後果

沒有我所知道的。

什麼是當應用程序停止

部署在Web應用類加載器的單身清除單個實例(即/WEB-INF/classes/WEB-INF/lib)和取消部署應用程序的建議最簡單的方法。

+0

是的,這正是我所做的,一個原始的服務定位器,我沒有將它部署在Common類加載器中,而是在webapp類加載器中。看起來我必須依靠部署和取消部署應用程序來刷新緩存。謝謝! – Watson 2010-06-07 13:49:20

0

如何創建你的單?

如果您從webapp加載單例,它將被隔離到單個webapp,因爲它是由webapp自己的類加載器加載的。當你取消部署webapp時它會被銷燬。您應該取消部署它,而不是停止您的應用程序。

+0

謝謝,我希望能夠停止並啓動並讓應用程序銷燬Singleton中的緩存,但這可能會導致無法獲得足夠的收益。 – Watson 2010-06-07 13:43:45