【问题标题】:Marklogic XCC cannot commit without an active transactionMarklogic XCC 在没有活动事务的情况下无法提交
【发布时间】:2014-11-07 16:12:31
【问题描述】:

我遇到了标记逻辑问题。我正在使用 XCC/J api。我有一个多语句交易,我正在做类似下面的事情。

Session sess = ContentSource.newSession();
sess.setTransactionMode(TransactionMode.UPDATE)
....Perform some queries.....
session.commit();

但我不断得到 IllegalStateException 在没有活动事务的情况下无法提交

【问题讨论】:

  • 编辑您的代码示例,使其成为重现问题的有效测试用例。因为它不会解析:变量sess 更改为session

标签: java marklogic


【解决方案1】:

来自Java Application Developer's Guide

要启动事务并获取 Transaction 对象,请在 DatabaseClient 对象上调用 openTransaction() 方法(因为事务控制是否进行数据库更改)。要调用 openTransaction(),应用程序必须作为 rest-writer 或 rest-admin 进行身份验证。

Transaction transaction = client.openTransaction();

看起来您的示例代码中没有该功能,所以我认为您只是错过了启动事务的步骤。

【讨论】:

  • 噢,对不起。只需重新阅读并看到您正在使用 XCC。我上面发布的内容是针对 Java 客户端 API 的。
【解决方案2】:

您的代码中的其他地方可能在该提交之前调用了另一个提交或回滚。

您可能打开了多个会话,而您尝试提交的不是多语句事务。

检查 XCC jar 和服务器的更新也是值得的。

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 2015-05-12
    • 2014-08-19
    • 2023-04-05
    • 1970-01-01
    • 2016-05-19
    • 2015-10-19
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多