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

У меня есть синглтон, который я должен создать в своем фильтре, и по какой-то причине я не могу получить его экземпляр при первых попытках пары. (Приложение, развернутое в JBoss EAP 5.1) Это же решение без изменений прекрасно работает с сервером приложений Jetty. Большое спасибо за ваш ответ заранее.

Искренне,

Римский


person Roman Kagan    schedule 10.06.2011    source источник


Ответы (2)


Если вы не хотите использовать какой-либо фреймворк для внедрения зависимостей ( Spring, Guice ), сделайте это по старинке:

Установите ServletContextListener

В методе contextInitialized(ServletContextEvent sce) создайте свой синглтон и сохраните его как атрибут на ServletContext

Когда ваш фильтр будет инициализирован, вы сможете получить этот одноэлементный экземпляр из ServletContext, который передается внутри интерфейса FilterConfig в вашем фильтре метод инициализации

person Alexander Pogrebnyak    schedule 10.06.2011

Зачем вам нужен синглтон в вашем фильтре? У вас есть контексты веб-приложения, сеанса и запроса для ввода любых данных, которые вы хотите.

Тем не менее, не видя вашего кода, ~ 100% вероятность того, что вы используете статическую переменную класса для хранения экземпляра? Если да, обратите внимание, что классы контролируются загрузчиками классов, и это одна из многих причин, почему не стоит прибегать к таким идиомам на сервере приложений (который практически гарантированно будет реализован с использованием иерархий загрузчиков классов). и т. д.) У JBoss и Jetty явно разные подходы.

person alphazero    schedule 10.06.2011
comment
мы используем проприетарную инъекцию зависимостей - person Roman Kagan; 11.06.2011