@Singleton в java EJB

У меня есть EJB, который должен быть singleton и stateful, так как это будет своего рода пул соединений. Мои вопросы:

  • Если я определяю EJB с аннотацией @Singleton, будет ли он по умолчанию по умолчанию или мне нужно также определить его с помощью @Stateful?
  • Может ли быть с аннотацией @Stateless?

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

Ответ 1

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

Из этой ссылки:

Singleton session beans поддерживает состояние между клиентом вызовы

Итак, на ваш вопрос:

если я определяю EJB с аннотацией @Singleton, будет ли он по умолчанию по умолчанию или мне также нужно определить его с помощью @Stateful?

Если для Stateful вы имеете в виду способность поддерживать свое состояние, ответ таков: да, по умолчанию Singleton будет Stateful.

Имейте в виду, что есть некоторые ситуации, в которых Синглтон не ведет себя как Singleton, прочитайте этот article об этом, Как правило, вы не запускаете такой риск, если вы находитесь за пределами кластера, и избегайте использования конструктора по умолчанию: вам всегда нужно использовать ссылки EJB, введя его в другой EJB или веб-клиент, используя:

@EJB MyEJB myEJB;

Наконец, посмотрите эту часть учебника Java EE 6, о жизненном цикле EJB, объяснив, что основное различие между Stateful и другими EJB - это способность пассивироваться контейнером в течение его жизни. Это различие является основной причиной, по которой утверждение "Синглтон является по умолчанию по умолчанию" неверно строго, но верно в контексте вашего вопроса.