#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 . Не могу дождаться, чтобы использовать это в моем проекте 🙂