如何启用Objectify XA事务?

2024-01-17

我正在同一类型的实体之间实现友谊功能Profile。该实体类型是根(非父)实体。 一个配置文件有一个Set<Ref<Profile>>字段命名friends它是吸气剂getFriends().

这里是代码:

public boolean makeFriends(final Profile profile1, final Profile profile2) {
    final Ref<Profile> profileRef1 = Ref.create(profile1);
    final Ref<Profile> profileRef2 = Ref.create(profile2);

    boolean result = false;

    // test to avoid useless transaction
    if (!profile1.getFriends().contains(profileRef2) && !profile2.getFriends().contains(profileRef1)) {
        // add to friends (Set<Ref<Profile>>) the Ref of each other
        result = ofy().transact(new Work<Boolean>() {
            @Override
            public Boolean run() {
                profile1.getFriends().add(profileRef2);
                profile2.getFriends().add(profileRef1);
                ofy().save().entities(profile1, profile2).now();
                return true;
            }
        });

    }
    return result;
}

这段代码给了我一个:

java.lang.IllegalArgumentException: cross-group transaction need to be explicitly specified, see TransactionOptions.Builder.withXG

即使 Objectify 文档说:

Objectify 不需要特殊标志即可启用跨组 交易。如果您访问一个实体组中的多个实体组 交易,该​​交易是XG交易。如果你这样做 只能访问一个,其实不然。 5 个 EG 的标准限制适用于所有 交易。

那么,为什么我的交易失败呢?

我的代码应该涉及两个实体组(每个实体组一个)Profile),所以落后于 5 的限制。 看着TransactionOptions.Builder.withXG文档,我应该打电话TransactionOptions.Builder.withXG(true);前。 该方法返回一个TransactionOptions但我不知道通过它的方法!

提前致谢


如果环境支持,Objectify 始终会打开 XG 事务。

最有可能的是,您正在运行一个没有启用 HRD 的测试用例。您必须在 LocalDatastoreServiceTestConfig 中明确执行此操作;检查本地单元测试文档。如果您在开发实例中收到此消息,请确保选中 Eclipse 项目首选项中的“使用 HRD”复选框。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何启用Objectify XA事务? 的相关文章

  • 对 ExecuteNonQuery() 的单次调用是原子的

    对 ExecuteNonQuery 的单次调用是否是原子的 或者如果单个 DbCommand 中有多个 sql 语句 那么使用事务是否有意义 请参阅我的示例以进行说明 using var ts new TransactionScope us
  • Node.js 7 如何将sequelize事务与async/await一起使用?

    Node js 7 及更高版本已经支持 async await 语法 我应该如何在后续事务中使用 async await let transaction try get transaction transaction await seque
  • GAE Go — 如何对不存在的实体键使用 GetMulti?

    我发现自己需要做一个GetMulti使用键数组进行操作 其中某些实体存在 但有些实体不存在 我当前的代码 如下 返回错误 datastore no such entity err datastore GetMulti c keys info
  • Flex Nodejs 应用程序引擎上的数据存储停止工作 - 错误网关 502

    对我正在开发的应用程序进行一些更新后 我通过以下方式推送了该应用程序gcloud app deploy version dev一切似乎都进展顺利 但经过进一步检查 我的任何调用 获取或发布 使用 google cloud datastore
  • 将 POST 从请求转换为 GAE urlfetch

    我正在使用 PayPal 付款 这是它如何正确工作的requests res requests post get payment info url headers headers data params res data res json
  • 使用 gradle 部署 GAE 时出现奇怪的构建失败

    直到今天一切都运转良好 据我所知 没有改变任何东西 现在我明白了 C mypath gt gradle appengineDeploy gt Configure project WARNING You are a using release
  • Google App Engine 数据存储区中实体组的吞吐量限制究竟是多少?

    该文档描述了数据存储中实体组的吞吐量限制 但对于限制的具体内容含糊其辞 我的困惑有两部分 1 限制什么 具体来说是 写入次数 写入数据存储的事务数量 无论是读取还是写入数据存储 事务数量如何 2 限制的类型是什么 具体来说是 人为强制执行每
  • 用于传输命名参数和正文的云端点资源属性不起作用

    我正在尝试通过gapi client rpc调用实现对谷歌云端点的调用 如文档中所述 和Google Cloud Endpoints 使用 JS 客户端进行调用 传递参数和 JSON 正文 https stackoverflow com q
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的
  • NHibernate 具有多个数据库和事务

    我们在理解如何最好地使用 NHibernate 时遇到了一些问题 我们通常拥有相对大量 就表数量而言 的 SQL Server 数据库 而不是一个包含大量对象的数据库 我们正在研究处理多个会话工厂的各种选项 并且可能已经控制住了这一点 但是
  • Google App Engine Flexi 上 Django 的 Postgres 设置

    我正在尝试在应用程序引擎灵活环境中使用 postgres 设置 django 我按照这里的说明进行操作 https cloud google com appengine docs flexible python using cloud sq
  • 使用 AngularJS 多部分表单数据将文件上传到 Google Cloud Storage

    我正在尝试使用 AngularJS 中指定的多部分方法将图像文件上传到 Google Cloud Storagehttps cloud google com storage docs json api v1 how tos upload m
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 打开新EntityManager后线程锁

    我在使用 Spring JPA 事务时遇到一个非常奇怪的错误 该线程被锁定大约 16 分钟 然后继续 没有任何问题 情况如下 Transactional propagation Propagation REQUIRES NEW public
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a
  • 如何以编程方式确定哪些数据存储区索引有错误?

    当我跑步时更新索引在 Google 数据存储上我收到以下消息 它告诉我通过查看 GUI 来确定哪些索引有错误 然后删除这些索引 我的 200 个索引中有 51 个错误 从 GUI 中复制它们是不可行的 编辑 通过费力地从 datastore
  • 从Android客户端登录appengine

    我正在尝试登录应用程序引擎并访问应用程序引擎中的用户服务API 基本上我希望能够看到谁登录了我的 servlet 我正在使用从 android 获取 authtoken 然后从应用程序引擎获取 ASID 或 SACID cookie 的身份
  • 在 Google App Engine 上连接 Mongoose

    我已在 Google App Engine 上成功部署了自定义 Node js 应用程序 但是 我在启动应用程序时遇到问题 因为猫鼬在尝试连接时超时 令人沮丧的是 猫鼬在我的本地计算机上以完全相同的参数连接得很好 我的 MongoDb UR
  • Google App Engine 中的图像上传

    我正在开发一个网站 用户可以上传与某个位置相关的帖子 然后他们可以添加两到三张照片 我了解如何使用数据存储区或 Blobstore 进行基本上传 但我想将这些照片链接到帖子和用户 然后能够在连接到帖子和用户的所有页面中显示它们 这是一般的想
  • ANCESTOR 查询解析错误:使用 DISTINCT

    不是这个问题 祖先查询解析错误 https stackoverflow com questions 15463964 ancestor query parse error 我用 IS 正确地构造了它 SELECT DISTINCT batc

随机推荐