Как реализовать синглтоноподобный EJB3.0 bean-компонент? - PullRequest
1 голос
/ 24 августа 2009

Мне нужно реализовать простой компонент DAO, который также кэширует данные, считанные из базы данных. Этот компонент DAO используется компонентами без гражданства.

Поскольку EJB3.0 не поддерживает одноэлементные компоненты, каков будет правильный способ реализации такого компонента DAO? Можно ли просто использовать статическую переменную для хранения кэша?

Мы используем Oracle AS и не собираемся использовать кластеризацию.

Ответы [ 3 ]

4 голосов
/ 24 августа 2009

«Правильный» способ сделать это несколько кросс-серверным способом - использовать jmx mbean для поведения кэширования. mbeans являются синглетонами (для сервера приложений) и могут выполнять такие функции, как многопоточность и блокировка. Конечно, в зависимости от используемого вами сервера приложений, на практике mbeans может быть более или менее сложным.

2 голосов
/ 24 августа 2009

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

Одна из основных проблем синглетонов и J2EE заключается в том, что нет простого способа справиться с ними в кластерной среде.

Тем не менее, я нашел статью , в которой содержатся некоторые предложения о том, что возможно делать то, что вы хотите в JBoss, и упоминается новая аннотация @Singleton для EJB3.1, чтобы это было возможно. Если это работает для вас, вы должны написать, что вы сделали, в качестве другого ответа на этот вопрос.

0 голосов
/ 24 августа 2009

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

...