es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Quarkus MongoDB Panache la reversión transaccional no tiene efecto.

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-mongodb-panache</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-narayana-jta</artifactId>
</dependency>

//repo 
@ApplicationScoped
public class ProjectRepository implements 
PanacheMongoRepositoryBase<Project, String> {
....
}

//transaction method
@Inject 
ProjectRepository projectRepository
....


@Transactional
public Project import(Order order, User user) {
    Project project = factor.from(order);
    projectRepository.persist(project);

    if (project.id != null){
      //try to throw exception manually
      throw new RuntimeException("testing");
    }
    return project;
}

He probado la anotación @Transactional con mongodb 4.4.10 y quarkus 2.5.1. Aún así, la transacción no tiene efecto de rollback. ¿Alguna idea? Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Según el fragmento de código proporcionado, parece que la anotación transaccional se está utilizando correctamente. Sin embargo, podría haber algunas razones por las cuales la transacción no se está deshaciendo según lo esperado:

    1. Configuración de JTA: Asegúrese de que la configuración de JTA esté correctamente establecida en la aplicación Quarkus. Verifique que se esté utilizando el datasource correcto y que el gestor de transacciones JTA esté configurado correctamente.
    2. Propagación de excepciones: Asegúrese de que la excepción lanzada en el método @Transactional no esté capturada y manejada dentro del mismo método. Si la excepción es capturada y manejada, la transacción no se deshará.

    3. Versión de MongoDB: Verifique que la versión de MongoDB que se está utilizando admita transacciones de múltiples documentos. Si la versión de MongoDB que se está utilizando no admite transacciones de múltiples documentos, la anotación @Transactional no tendrá ningún efecto.

    4. Configuración de Quarkus: Asegúrese de que la aplicación Quarkus esté configurada para utilizar el modo de contexto CDI correcto. Quarkus ofrece dos opciones: “request” y “application”. Si el modo de contexto CDI está configurado en “application”, las transacciones no tendrán ningún efecto.

    Si ninguna de las soluciones anteriores funciona, considere comunicarse con la comunidad de Quarkus para obtener ayuda adicional.

Comments are closed.