Я не знаком с тем, как работает Seam, поэтому заранее извиняюсь, если этот ответ не применяется.
Я заметил, что метод @Transactional
равен protected
.Для меня это означает, что он вызывается другим внутренним методом.
В AOP Spring вы помечаете public методы @Transactional
, которые обертываются и заменяются прокси транзакции.Когда внешний класс вызывает метод public
, он вызывает прокси, который формирует транзакцию.Если внешний класс вызывает другой метод public
, который не помечен @Transactional
, который затем вызывает внутренний метод, то есть транзакция не будет создана, поскольку прокси-сервер вообще не вызывается.
Весной, даже если вы измените свой метод doWork()
на общедоступный, возникнет та же проблема.Нет транзакции, потому что прокси-объект не вызывается.Вызовы методов, сделанные внутри класса, не вызывают вызовы прокси-объекта.
Быстрое чтение некоторой документации, кажется, указывает на то, что, подобно Spring AOP, Seam использует CGLib прокси .Вопрос в том, сможет ли он проксировать все методы - даже если они вызываются из прокси-объекта.Извините за потраченное время, если этот ответ не применяется.