почему я должен использовать @Stateless в ejb?Что произойдет, если я не буду использовать это? - PullRequest
0 голосов
/ 05 декабря 2018

В коде Java J2EE я вижу следующий код

@Stateless
public class PostLabellingDao
    {
    @PersistenceContext(unitName = "tlga")
    protected EntityManager entityManager;

    public void loadRecord(String sKey) throws Exception
        {
        JPAQuery jpaQuery = new JPAQuery(entityManager);
        QSomeEntity q = QSomeEntity.someEntity;

        List<SomeEntity> oList
            = jpaQuery
                .from(q)
                ).list(q);

        ... // some code on Database

Если я удалю аннотацию @Stateless, приложение продолжит работать!

Что такое утилита использования @Stateless аннотации?

Я знаю разницу между @Stateful и @Stateless и @Singleton, но я ищу некоторые объяснения по Why? и When?, используя @Stateless, чтобы избежать использованияэто когда не нужно.

1 Ответ

0 голосов
/ 08 декабря 2018

Модель конфигурации EJB основана на конфигурации по исключению, поэтому, когда вы аннотируете bean-компонент с помощью @Stateless или @Stateful или @Singletone, для этого bean-компонента будут активированы многие службы, такие как транзакция, безопасность, безопасность потоков и т. Д., Так что если выне нуждаются в этих услугах.вы не должны аннотировать свой компонент этими аннотациями.

EJB 3 в книге действий дает несколько полезных советов.например (ваш случай третий):

1) если все является сессионным компонентом, то производительность снизится из-за издержек контейнера

2) Создание служебных классов для сессионных компонентов isnне очень полезно (API утилиты, вероятно, должен просто использовать CDI, а не EJB)

3) Классы DAO / репозитория.Хотя эти объекты полагаются на безопасность потоков и транзакции, они не должны быть сессионными компонентами сами по себе, потому что они, вероятно, будут использоваться через уровень службы приложений EJB

4) вы не должны использовать EJB-компоненты напрямую как поддержку JSFбобы

...