Как получить intance синглтона в JBoss?

#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. мы используем проприетарную инъекцию зависимостей