Кваркус Щеголь Монго Сделки

#java #mongodb #quarkus #quarkus-panache

Вопрос:

Я знаю, что поддержка транзакций для MongoDB все еще находится на экспериментальной территории… но я пытаюсь использовать его в одном из своих проектов, который все еще находится на некоторых ранних стадиях.

Поскольку я не использую режим гибернации… Я также добавил зависимость JTA вот так:

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

Я использую аннотацию @Transactional точно так же, как:

 @POST
@Transactional
public Response addServicePlace(@RequestBody(description = "Adds a new record", required = true, content = @Content(mediaType = APPLICATION_JSON, schema = @Schema(implementation = ServicePlaces.class))) @Valid ServicePlaces services, @Context UriInfo uriInfo) {

    Service s = new Service();
    s.typeId = services.type;
    s.title = services.title;
    s.persist();

    services.descriptions.stream().forEach(c -> {
       ServiceDescription serviceDescription = new ServiceDescription();
       serviceDescription.lang = c.lang;
       serviceDescription.description = c.description;
       serviceDescription.serviceId = s.id;
       serviceDescription.persist();
    });

    throw new RuntimeException("BANG!"); ....
 

Однако транзакция не откатывается.

Я использовал также декларативную транзакционную реализацию — то же поведение.

Для справки я использую шаблон активной записи Panache.

Неужели кто-то сталкивался с подобным сценарием?

Комментарии:

1. Что это за развертывание MongoDB?

2. @prasad_ У меня есть MongoDB v4.4.4, работающий на Kubernetes.

3. Я имею в виду, это кластер (набор реплик или сегментированный кластер) или отдельный? Автономные развертывания не поддерживают транзакции MongoDB.

4. @prasad_ хорошо… это автономное развертывание… позвольте мне попробовать ваше предложение. Спасибо

5. @prasad_ да.. вот и все. Я не знал, что не было поддержки автономных развертываний. Симпатичный 🙂

Ответ №1:

MongoDB с щегольством еще не поддерживал транзакции, см. https://quarkus.io/guides/mongodb-panache#transactions.

Поддержка транзакций будет предоставляться в Quarkus 2.0 (должна выйти в июне), с его помощью вы сможете использовать @Transactional метод для обозначения границ вашей транзакции, никаких дополнительных библиотек не потребуется.

Будьте осторожны, чтобы транзакции MongoDB были доступны только с версии 4.0 MongoDB, и для их работы требуется набор реплик.

Комментарии:

1. Да, я видел ваш пиар на GitHub — github.com/quarkusio/quarkus/pull/14002 . Не могу дождаться, чтобы использовать это в моем проекте 🙂