Как определить подходящую область CDI для репозитория JPA, как показано ниже?Какая область CDI должна быть предпочтительной для репозитория JPA
@Transactional
public class CategoryRep extends EntityRepository<Integer, Category> {
private static final long serialVersionUID = 856370976984333182L;
public List<Category> getAllCategories() {
// TODO
}
public List<Post> getAllPostsOfCategory(Integer categoryId) {
// TODO
}
@Transactional(value = TxType.REQUIRES_NEW, rollbackOn = RuntimeException.class)
public void createCategory(final String name, final String description)
throws DaoJpaException {
// TODO
}
}
я могу думать только два прицелов CDI:
- @SessionScope: Для меня это, как представляется, наиболее соответствующий объем, так как один экземпляр предназначен для активного сеанса.
- @Dependent: Разумный, поскольку такой экземпляр будет вписываться в жизненный цикл объекта, в который он будет введен.
Всех остальных CDI-прицелы не подходит по-моему:
- @ApplicationScoped: Поскольку приложение области действия хранилище будет создано только один раз времени, вызов, как:
entityManager.clear()
будет вызывать что все экземпляры всех текущих сеансов также будут отключены. Кроме того, этот единственный репозиторий должен обрабатывать все входящие запросы. Возможно, эта область подходит для репозитория только для чтения? - @RequestScope: Я думаю, что нет необходимости в новом экземпляре репозитория для каждого входящего запроса.
- @ConversionScoped: Конверсии обычно выполняются на уровне графического интерфейса пользователя. Если я хочу, чтобы репозиторий погиб после окончания преобразования, я могу определить его как
@Dependent
.
Итак, есть ли какие-либо рекомендации, известные этой проблеме?
Благодарим, что атрибут '@ Version' решает проблему параллелизма, используя' @ ApplicationScoped'? –
Честно говоря, я не уверен, потому что javadoc говорит только о сохранении целостности при слиянии сущности, которая мне кажется, что этого недостаточно. –
Я думаю, что использование оптимистической и пессимистической блокировки должно решить проблему параллелизма. –