Я пытаюсь использовать метод @Transactional
внутри класса CDI вместо EJB:
@javax.inject.Named
// fails @javax.enterprise.context.ApplicationScoped
// fails @javax.enterprise.context.SessionScoped
// works @javax.ejb.Singleton
// works @javax.ejb.Stateless
public class SomeClass {
@javax.persistence.PersistenceContext
private EntityManager em;
@javax.annotation.PostConstruct
@javax.transaction.Transactional
public void someMethod() {
em.persist(someEntity);
}
}
Когда я аннотирую SomeClass
с помощью @Singleton
или @Stateless
, все работает.
Когда я аннотирую SomeClass
с помощью @ApplicationScoped
или @SessionScoped
, WildFly 13 отображает следующее сообщение об ошибке:
Для выполнения этой операции требуется транзакция (либо используйте транзакциюили расширенный контекст постоянства)
У меня сложилось впечатление, что @Transactional
работает с CDI начиная с Java EE 7. Я ошибся?Или мне просто не хватает какой-то дополнительной конфигурации?