У меня есть сервак java ee 7 с аннотацией webservlet. Я отметил, что одним из методов сервлета является @Transactional. Администратор сущности также предоставляется сервлету с контекстом персистентности.java ee 7 @Transactional по методу сервлета
Метод просто использует диспетчер введенных объектов и сохраняет объект, который передается как аргумент.
Этот метод вызывается из сервлета при обработке запроса HTTP. glassfish4 бросает исключение, говоря, что транзакции нет.
Я определил простой управляемый CDI-компонент с помощью метода и добавил в него @Transactional-аннотацию и инстанцию менеджера сущностей.
Я ввел этот объект в сервлет и вызвал метод из сервлета, и все работает нормально. em вводится в CDI-компонент, инициируется транзакция и em.persist работает нормально.
Означает ли это, что объект сервлета не может иметь @Transactional аннотацию по своим методам?
Я не уверен, может быть, сервлеты не могут быть проксимированы. –
Правильно, более или менее. Транзакция определена для использования CDI и EJB. я не думаю, что он будет работать с управляемыми фанами Faces, сервлетами и т. д. –