繁体   English   中英

Quarkus Panache Mongo 交易

[英]Quarkus Panache Mongo Transactions

我知道对 MongoDB 的事务支持仍处于试验阶段……但我正试图在我的一个项目中使用它,该项目仍处于早期阶段。

由于我没有使用 Hibernate ...我还添加了 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 的 Active Record 模式。

有人遇到过类似的情况吗?

带有 Panache 的 MongoDB 尚不支持事务,请参阅https://quarkus.io/guides/mongodb-panache#transactions

Quarkus 2.0 将提供事务支持(应该在 6 月推出),有了它,您将能够在方法上使用@Transactional来标记您的事务边界,不需要额外的库。

请注意,MongoDB 事务自 MongoDB 版本 4.0 起可用,并且需要副本集才能工作。

嗨,loicmathieu,

<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;
}

我已经尝试使用 mongodb 4.4.10 和 quarkus 2.5.1 进行 @transactional 注释。 事务仍然没有回滚效果。 有任何想法吗? 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM