Ответ 1
Из этой ссылки:
Singleton session beans поддерживает состояние между клиентом вызовы
Итак, на ваш вопрос:
если я определяю EJB с аннотацией @Singleton, будет ли он по умолчанию по умолчанию или мне также нужно определить его с помощью @Stateful?
Если для Stateful вы имеете в виду способность поддерживать свое состояние, ответ таков: да, по умолчанию Singleton будет Stateful.
Имейте в виду, что есть некоторые ситуации, в которых Синглтон не ведет себя как Singleton, прочитайте этот article об этом, Как правило, вы не запускаете такой риск, если вы находитесь за пределами кластера, и избегайте использования конструктора по умолчанию: вам всегда нужно использовать ссылки EJB, введя его в другой EJB или веб-клиент, используя:
@EJB MyEJB myEJB;
Наконец, посмотрите эту часть учебника Java EE 6, о жизненном цикле EJB, объяснив, что основное различие между Stateful и другими EJB - это способность пассивироваться контейнером в течение его жизни. Это различие является основной причиной, по которой утверждение "Синглтон является по умолчанию по умолчанию" неверно строго, но верно в контексте вашего вопроса.