EJB3 Переменные экземпляра кэширования - PullRequest
2 голосов
/ 06 сентября 2010

Я заметил какой-то странный код в проекте, над которым я работаю - это SLSB EJB3, и он использует частную переменную экземпляра для поддержки кэша данных (он даже называет это dataCache или что-то в этом роде) с помощью getter / сеттер. Для EJB2 и ниже это был типичный антипаттерн EJB - SLSB не предназначены для сохранения состояния между вызовами, поэтому нет гарантии, что вы увидите те же данные при последующем вызове. Один из моих коллег сказал, что, возможно, в EJB3 все нормально (у нас нет большого опыта в EJB3), но все же, это Session Bean без состояния - почему он пытается поддерживать состояние, это не имеет смысла.

Может ли кто-нибудь подтвердить, является ли это все еще плохой идеей на земле EJB3, или это как-то нормально?

Спасибо, если вы можете помочь, Джастин

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

В EJB 3.1 вы бы сделали это чисто, имея отдельный синглтон-компонент (с аннотацией @Singleton) и вставив через @EJB его в сессионные компоненты, которые в этом нуждаются.

До EJB 3.1 действительно не было чистого пути, и вы должны использовать какой-то взлом.

0 голосов
/ 07 сентября 2010

Для EJB2 и ниже это был типичный антипаттерн EJB - SLSB не предназначены для сохранения состояния между вызовами, нет гарантии, что вы увидите те же данные при последующем вызове.

Это правда, и это как-то пахнет (потому что часто используется неправильно: люди, как правило, забывают, что нет гарантии получить тот же экземпляр, что контейнер может удалить некоторый bean-компонент из пула для освобождения ресурсов, что bean-компоненты могут распределяться между JVM и т. д.).

Один из моих коллег сказал, что, возможно, в EJB3 все в порядке (у нас нет большого опыта в EJB3), но все же, это Session Bean без состояния - почему он пытается поддерживать состояние, это не имеет смысла.

То, что было верно в отношении EJB 2.x в EJB 2.x для компонентов сеансов без состояния (SLSB), по-прежнему верно в отношении EJB 3.0, SLSB все еще является SLSB, EJB 3.0 не переопределяет отсутствие состояния.

Но если вы используете переменную экземпляра для хранения какого-либо ресурса только для чтения , который дорого загружать (и обязательно загрузите его, если null), все должно быть в порядке.

Похожие вопросы

...