No momento, estou trabalhando na atualização do meu aplicativo Spring Boot da versão 3.2 para 3.3. O aplicativo utiliza AspectJ para manipular transações, especificamente com @EnableTransactionManagement(mode = AdviceMode.ASPECTJ). Essa configuração é crucial porque os métodos transacionais são autoinvocados, o que não é suportado com o modo proxy padrão.
Após atualizar para o Spring Boot 3.3, encontrei problemas com @Transactional não funcionando como esperado. Meu projeto usa o JCABI Aspect Plugin, e os logs mostram os seguintes erros relacionados aos métodos @Transactional:
Tue Jan 14 02:13:41 IST 2025
io/micrometer/observation/aop/ObservedAspect.java [error] Invalid pointcut '@within(io.micrometer.observation.annotation.Observed) and not @annotation(io.micrometer.observation.annotation.Observed)': org.aspectj.weaver.patterns.ParserException: unexpected pointcut element: and@55:57 at position 55
<Unknown> [warning] Found @DeclareAnnotation while current release does not support it (see 'org.aspectj.weaver.bcel.AtAjAttributes')
io/micrometer/observation/aop/ObservedAspect.java [error] Invalid pointcut '@within(io.micrometer.observation.annotation.Observed) and not @annotation(io.micrometer.observation.annotation.Observed)': org.aspectj.weaver.patterns.ParserException: unexpected pointcut element: and@55:57 at position 55
<Unknown> [warning] Found @DeclareAnnotation while current release does not support it (see 'org.aspectj.weaver.bcel.AtAjAttributes')
Fiz downgrade da dependência Micrometer para 1.12.13, que é a versão usada no Spring Boot 3.2, e o aplicativo começou a funcionar bem com o Spring Boot 3.3. No entanto, eu preferiria resolver esse problema substituindo o JCABI Plugin por uma alternativa atualizada.
Atualmente, estou enfrentando o seguinte erro:
jakarta.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call
Além disso, não consegui encontrar uma maneira de exportar os logs para um arquivo. Durante a construção do Maven, os logs são impressos, mas não vejo nenhum log de weaving para meus métodos transacionais.
Perguntas: Como posso resolver o erro jakarta.persistence.TransactionRequiredException? Existe uma maneira de habilitar e exportar logs de weaving detalhados do AspectJ?
Qualquer insight ou orientação sobre essas questões seria muito apreciada. Obrigado!
Link para MVCe: https://github.com/GeneralNitin/Spring-Aspect-Tx .
Verifique as solicitações de pull para ver as alterações que fiz até agora.