Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A anotação Seam @Transactional não está funcionando?


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.