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.
Corrigi seus problemas neste PR . O gerenciamento de transações não estava funcionando, porque você não configurou o aplicativo para rodar com AspectJ nativo via tecelagem em tempo de carregamento nem incluiu
spring-aspects
em tecelagem em tempo de compilação. O Micrometer precisava de uma atualização, não de um downgrade, porque 1.14.x contém uma correção para sintaxe pointcut inválida detectada por mim há um tempo. Eu sugeri uma correção que foi incluída no produto.Citando a descrição de RP: