Неправильно ли передавать EJB как параметры вспомогательным классам? - PullRequest
2 голосов
/ 22 февраля 2011

Я нахожусь в ситуации, когда мне нужно создать кеш для хранения определенных значений, которые необходимо обновить из базы данных. Поскольку этот кеш должен быть единичным, какая-то одноэлементная реализация кажется подходящей.

Проблема в том, что этому кешу также необходим доступ к базе данных через EJB, который не может быть введен, поскольку кеш существует вне контекста (и да, я с нетерпением жду аннотации @singleton в EJB3.1 ).

Очевидное решение - передать EJB в кеш как параметр, но передача EJB вне контекста кажется неправильной, хотя я не могу сказать, почему. Это принятая практика?

Ответы [ 2 ]

6 голосов
/ 22 февраля 2011

Обратите внимание, что вы обычно не пропускаете сам EJB "вне контекста".То, что вы обычно передаете, является «заглушкой».Эта заглушка может передаваться как любая другая нормальная ссылка на объект.Любые обращения к нему будут перенаправлять обратно к реальному экземпляру компонента в контейнере EJB.

Так что, если у вас есть кеш, скажем, в веб-модуле, вставьте компонент поддержки с помощью EJB (или выполните поиск JNDI)и передать эту ссылку в (статический) кеш, тогда я не вижу фундаментальной проблемы с этим.

Для всех целей и задач аннотация @Singleton действительно была сделана для чего-то подобного.Надеюсь, вы сможете использовать его в ближайшее время;)

0 голосов
/ 22 февраля 2011

Основным преимуществом EJB является внутренний контейнер. Если вы пропустите его снаружи, вы потеряете все преимущества контейнера. Почему бы вам не создать метод в EJB, который возвращает нужные вам данные. И, например, вы можете выполнить поиск JNDI и вызвать этот метод. Таким образом, EJB останется в контейнере, и вы получите ваши данные.

...