#java #singleton #jetty #jboss5.x #application-server
#java #singleton #jetty #jboss5.x #сервер приложений
Вопрос:
У меня есть singleton, который я должен создать в своем фильтре, и по какой-то причине я не могу получить его экземпляр с пары первых попыток. (Приложение, развернутое в JBoss EAP 5.1) Это же решение без изменений отлично работает с сервером приложений Jetty. Заранее благодарен за ваш ответ.
С уважением,
Роман
Ответ №1:
Если вы не хотите использовать какой-либо фреймворк внедрения зависимостей (Spring, Guice), сделайте это по старинке:
Установите ServletContextListener
В contextInitialized(ServletContextEvent sce)
методе создайте свой синглтон и сохраните его как атрибут на ServletContext
Когда ваш фильтр будет инициализирован, вы сможете получить этот экземпляр singleton из ServletContext
, который передается внутри FilterConfig
интерфейса в методе инициализации вашего фильтра
Ответ №2:
Зачем вам нужен singleton в вашем фильтре? У вас есть контексты веб-приложения, сеанса и запроса для ввода любых данных, которые вы пожелаете.
Тем не менее, без просмотра вашего кода вероятность ~ 100%, что вы используете статическую переменную класса для хранения экземпляра? Если да, пожалуйста, обратите внимание, что классы ограничены загрузчиками классов, и это одна из многих причин, почему прибегать к таким идиомам на сервере приложений — плохая идея (которая в значительной степени гарантированно будет реализована с использованием иерархий загрузчиков классов и т.д.) У JBoss и Jetty явно разные подходы.
Комментарии:
1. мы используем проприетарную инъекцию зависимостей