Ответ 1
A @Stateless или @Singleton bean могут быть явно ограничены, чтобы предотвратить автоматическую модификацию области действия в области, которая может быть незаконной. Например. оба этих типа bean не могут быть @RequestScoped. См. Эту ссылку для получения дополнительной информации: http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html/CDI.html
@Stateful имеет большой смысл быть (явно) областью. А именно, без какой-либо области вы, как программист, должны позаботиться о том, чтобы вызвать аннотированный метод @Remove. Это может быть проблематично гарантировать, поскольку такой bean обычно не используется в одном методе, где вы можете вызвать метод @Remove в блоке finally. С областью действия bean удаляется, когда область действия заканчивается.
Кроме того, без области применения вы не всегда можете использовать инъекцию для получения ссылки на заглушку bean. А именно, каждый раз, когда происходит инъекция, вы получите новый экземпляр. Это особенно сложно, если вы вводите stateful bean в резервную копию запроса (JSF) bean, где у вас есть намерение сохранить stateful bean по нескольким запросам.
Затем в сочетании с @Named вы также можете использовать сеанс bean непосредственно в качестве поддержки bean, чтобы сгладить ваши прикладные уровни (см., например, http://jaxenter.com/java-ee-6-overview-35987-2.html). Очевидно, что в этом случае вам нужна явная область. Теперь сглаживание ваших слоев не может быть лучшей практикой в более крупных приложениях, но для небольших приложений и/или людей, начинающих с Java EE, определенно есть желание поместить бизнес-логику непосредственно в резервную копию bean. Затем потребовалось, чтобы поддержка beans имела доступ к тем же услугам (в основном транзакции), которые обычно имеют бизнес beans.
Наконец, Гевин Кинг (CDI spec lead) предложил всегда использовать @Inject вместо @EJB. Единственное исключение касается удаленных EJB, где @EJB все еще используется.
Часть путаницы вокруг EJB и CDI заключается в том, что CDI является новой компонентной моделью Java EE и все еще относительно новой. Хотя они довольно хорошо интегрируются друг с другом, они по-прежнему представляют собой две различные модели компонентов, и не все передовые методы уже разработаны. Реза Рахман (член ЭГ, автор книги EJB и автор CDDI-реализации CanDI) предположил, что модель EJB, возможно, может быть модернизирована в будущем как набор CDI-сервисов. Действительно, в Java EE 7 делается шаг, отделяя транзакционные сервисы от EJB и делая их доступными через (CDI) аннотации.