Tomcat, Singletons & ServerContextListener - PullRequest
2 голосов
/ 03 июня 2010

Я пытался вытянуть жестко запрограммированные данные конфигурации из веб-приложения Tomcat, над которым я работаю, в JNDI (web.xml), чтобы сделать приложение более настраиваемым. Вместо того, чтобы постоянно выполнять поиск в InitialContext, я кэширую поиск и InitialContext, используя одиночный код.

Конечно, когда я останавливаю и запускаю приложение, статический экземпляр моего синглтона остается живым - следовательно, кэш не обновляется. У меня двойной вопрос - я изолирую этот синглтон от одного веб-приложения - есть ли какие-либо непредвиденные эффекты в Tomcat [я читал, что синглтон & tomcat не смешиваются]? И какой самый простой способ очистить экземпляр синглтона, когда приложение остановлено (я думал о написании отдельного ServerContextListener, который очистил бы экземпляр).

(Примечание: я прошу прощения, если я использовал терминологию неправильно - пожалуйста, исправьте - это мой первый опыт программирования с Tomcat)

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

Вместо того, чтобы постоянно выполнять поиск в InitialContext, я кэширую поиск и InitialContext, используя одиночный код

Итак, вы реализовали Service Locator с кешем, который [был | был] обычной практикой для веб-уровня. Вот пример .

Конечно, когда я останавливаю и запускаю приложение, статический экземпляр моего синглтона остается живым

Хм ... если вы не развертываете свой синглтон в Common загрузчике классов ($CATALINA_HOME/lib), это не должно. Ты этого не делаешь, верно?

Я выделяю этот синглтон для одного веб-приложения - есть ли непредвиденные эффекты в Tomcat

Ничего, о чем я знаю.

И какой самый простой способ очистить экземпляр синглтона, когда приложение остановлено

Разверните ваш синглтон в загрузчике классов веб-приложения (т. Е. В /WEB-INF/classes или /WEB-INF/lib) и отмените приложение в соответствии с предложением.

0 голосов
/ 03 июня 2010

Как создается твой синглтон?

Если вы загрузите синглтон из вашего веб-приложения, он будет изолирован для одного веб-приложения, поскольку он загружается собственным загрузчиком классов веб-приложения.И он будет уничтожен, когда вы удалите веб-приложение.Вместо того, чтобы останавливать ваше приложение, вы должны удалить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...