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