LINUX.ORG.RU

Грамотное создание DAO

 ,


0

1

Допустим, есть стейтлесс бин

@Stateless
public CoolService {
    @PersistenceContext(unitName = "coolUnit")
    EntityManager em;
}

И есть dao, который получает EntityManager откуда-то снаружи. Следовательно, мне нужно CoolService изменить так?

@Stateless
public CoolService {
    @PersistenceContext(unitName = "coolUnit")
    EntityManager em;
    CoolDao cDao;

    @PostConstruct
    public void init() {
        cDao = new CoolDao(em);
    }
}

Это нормальная практика или принято действовать как-то иначе?

★★★★★

Нет, это не хорошая практика. Почему не дать самому контейнеру инстанциировать CoolDao как отдельный Stateless EJB и держать EntityManager в нем?

Сервисы не содержат EntityManager обычно

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Ты раскрыл мне глаза О_О

Я раньше думал что Dao не делают EJB бинами и их нужно либо самому создавать в сервисе, либо как-то инжектить ручками, что вызывало у меня жуткий дискомфорт в эстетическом плане, потому что их все равно нужно где-то создать, особенно если не используется Spring DI. Вот честно, спасибо, это снимает все вопросы :)

f1xmAn ★★★★★
() автор топика
Ответ на: комментарий от f1xmAn

Суть DAO - сделать простую операцию и инкапсулировать запрос.

Суть сервиса - сделать сложную операцию, собрать вызовы нескольких DAO в один, в рамках одной транзакции.

Для того чтобы это происходило - оба делают EJB

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 2)
Ответ на: комментарий от vertexua

Да, я в курсе, просто не знал как их грамотно объединить, из-за чего испытывал неприятные ощущения в области мыслительных органов.

f1xmAn ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.