Можно ли использовать @WebService, @Stateless и @Singleton в одном бине EJB 3? - PullRequest
3 голосов
/ 21 октября 2011

Я использую EJB 3 и JBoss AS 6.0.0.Final. У меня есть сессионный компонент без сохранения состояния с аннотациями @Stateless и @WebService. Когда я добавляю аннотацию @Singleton, при развертывании происходит ошибка с сообщением:

... name = ServiceBean, service = ejb3 уже установлен

Что можно сделать, чтобы избежать ошибки развертывания?

1 Ответ

4 голосов
/ 22 октября 2011

Вы можете использовать @WebService и @Stateless или @WebService и @Singleton в одном и том же bean-компоненте, что вполне логично, если вы хотите представить POJO как веб-сервис и EJB.

Не вижу большого смысла в использовании @Stateless и @Singleton в одном и том же компоненте. Когда вы используете @Singleton, вы создаете EJB со всеми возможностями EJB (управление транзакциями, безопасность и т. Д.) Точно так же, как с @Stateless. Разница лишь в том, как контейнер управляет жизненным циклом EJB:

  • @ Stateless : экземпляр EJB создается сразу после первого запроса, а когда запрос заканчивается, EJB объединяется и готов к повторному использованию, если поступает другой запрос. Однако, если все объединенные экземпляры Используемый в тот момент, когда поступает другой запрос для того же компонента, контейнер создает новый экземпляр того же объекта для обслуживания этого нового запроса.
  • @ Singleton : экземпляр EJB создается после поступления первого запроса (по умолчанию см. @Startup, чтобы переопределить это поведение), и это будет единственный экземпляр, созданный контейнером. Если другой запрос хочет использовать тот же EJB, контейнер никогда не создаст его новый экземпляр - будет использован ранее созданный экземпляр. Это похоже на @Stateless EJB с размером пула 1 :) Аспекты, такие как параллелизм, важны при их использовании, но это, вероятно, выходит за рамки этого поста.
...