Não estou familiarizado com o funcionamento do Seam, portanto, peço desculpas antecipadamente se esta resposta não se aplicar.
Percebi que o método
@Transactional
está protected
. Isso implica para mim que está sendo chamado por outro método interno. Com o AOP do Spring, você marca o público métodos com
@Transactional
que são encapsulados e substituídos por um proxy de transação. Quando uma classe externa chama a classe public
método, ele está chamando o proxy que forma a transação. Se a classe externa chamar outro public
método que não marcado com @Transactional
que então chama um método interno, ou seja, não haverá transação criada porque o proxy não está sendo chamado. No Spring, mesmo se você alterar seu
doWork()
método fosse público, o mesmo problema aconteceria. Nenhuma transação porque o objeto proxy não está sendo chamado. Chamadas de método feitas dentro da classe não estão fazendo chamadas para o objeto proxy. Uma leitura rápida de alguma documentação parece indicar que, como o Spring AOP, o Seam está usando proxy CGLib . A questão é se ele é capaz de fazer proxy de todos os métodos -- mesmo que eles sejam chamados de dentro do objeto proxy. Desculpe por desperdiçar seu tempo se esta resposta não se aplicar.