当前位置: 首页 > 知识库问答 >
问题:

如何确保与具有 objectify 的 Appengine 实体上的并发请求保持一致性?

楚元章
2023-03-14

在我的应用程序中,并发写入发生在单个实体上,我注意到当超过3次写入/秒发生时,并非所有请求都被持久化。我从事务内部发出请求,但我也没有看到并发修改异常,我使用的是对象化,所以没有抛出异常可能是对象化的事情。我知道对于并发写入,我需要实现分片计数器,但即使在那里,我也想绝对确保如果写入被删除,我会被告知。在对象化中是否有相当于@version的内容,或者我可以在对象化实现中使用JPA/JDO中的@version机制吗?这是持久化我的实体的代码:

            while (true) {

                try {
                    ofy().transact(new VoidWork() {
                        public void vrun() {
                            Venue_Model tnxVenue = ofy().load()
                                    .type(Venue_Model.class).id(tnxVenueID)
                                    .now();
                            tnxVenue.doStuff();

                            ofy().save().entities(tnxVenue).now();
                        }
                    });
                    //There are cases where this part of the code is reached but updates to the entity are not reflected in the data store viewer.
                    break;
                } catch (ConcurrentModificationException e) {
                    // TODO Auto-generated catch block
                    if (retries == 0) {
                        e.printStackTrace();

                                + person_ref.getKey() + e.toString());
                        break;
                    }
                    retries--;


                } catch (Exception e) {

                }
            }
        }

要检查实体是否已持久化,我只需在 appengine 仪表板上查看我的数据存储查看器。

对于每个持久化一个场所的请求,我还尝试检索n个检查,检查实体是否已持久化,奇怪的是,在代码运行期间,它会正确返回-然而,数据存储查看器告诉一个不同的故事:/code检查数据是否已正确持久化。

               venue = ofy().load().type(Venue_Model.class).id(venue_id).now(); // search if person has checked in
                if (!venue.allCheckins.contains(person_ref)) {
                    log.warning("attempt " + i + " for"
                            + person_ref.getKey());   // Never entered :/
                    venue.doStuff(person_ref, subVenueName);
                    ofy().save().entities(venue).now();
                } 

共有1个答案

竺绍辉
2023-03-14

您的代码实际上不执行事务中的任何数据存储操作。阅读关于事务的对象化文档:

https://code . Google . com/p/objectify-app engine/wiki/Transactions

 类似资料:
  • 问题内容: 当覆盖java.lang.Object的equals()函数时,javadocs建议, 通常,无论何时重写此方法,都必须重写hashCode方法,以维护hashCode方法的常规约定,该约定规定相等的对象必须具有相等的哈希码。 hashCode()方法必须为每个对象返回一个 唯一的整数 (当根据内存位置比较对象时,这很容易做到,只需返回对象的 唯一的整数 地址即可) 应该如何重写has

  • null 我能找到的使用JPA/Hibernate的唯一有效解决方案是执行以下步骤。这是因为hibernate将实体保留在第一级缓存中,直到事务结束。 创建新实体 强制快速刷新() 分离实体 这样做的开销是 null 使用JDBC或JdbcTemplate,但您必须为实体编写自己的插入 所以问题是:是否存在同时坚持和分离的可能性,或者甚至更好地坚持而不成为被管理的?

  • 问题内容: 我最近开始玩Play!Java框架1.2.3版(最新)。在测试框架时,尝试在名为的Hibernate实体中保留对象时遇到了一个奇怪的问题。地图对象映射长到Hibernate的实体,我呼吁,随着申报 我的问题如下:按照我的注释创建正确的表。但是,当对象持久化时,其中的数据就不会! 这是我用于实体的代码。首先是: 这里是: 这是我用来测试设置的课程: 表演!框架会自动为HTTP请求创建一个

  • 问题内容: 我最近开始玩Play!Java框架1.2.3版(最新)。在测试框架时,尝试在名为的Hibernate实体中保留对象时遇到了一个奇怪的问题。地图对象映射长到Hibernate的实体,我呼吁,随着申报 我的问题如下:按照我的注释创建正确的表。但是,当对象持久化时,其中的数据就不会! 这是我用于实体的代码。首先是: 这里是: 这是我用来测试设置的课程: 表演!框架会自动为HTTP请求创建一个

  • 本文向大家介绍Python截图并保存的具体实例,包括了Python截图并保存的具体实例的使用技巧和注意事项,需要的朋友参考一下 大家肯定会疑问,为什么需要用python去进行截图保存,或者说是我们的QQ、微信都是自带截图工具的,可以直接拿过来进行使用的,但是事实上,一般在测试的时候,经常会遇到代码报错等问题,这种需要反馈的时候,就需要利用到python自行截图,好啦,下面就是实现的几个操作。 1、

  • 我正在使用Spring并在“mapper”字段的第一个控制器中遇到问题: 上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatisfiedPendencyException:创建名为“controller”的bean时出错:未满足的依赖项通过字段“mapper”表示;嵌套的异常是org。springframework。豆。工厂BeanCreationE

  • 在你编辑某块代码时,看看周围的代码是什么风格。 如果它们在数学操作符两边都放了空格,那么你也应该这样做。 如果它们的代码注释用 # 井号包成了一个盒子, 那么你也应该这样做。 风格指南存在的意义是 让看代码时能关注 "代码说的是什么"。 而不是 "代码是怎么说这件事的"。这份整体风格指南就是帮助你做这件事的。 注意局部的风格同样重要。如果一个部分的代码和周围的代码很不一样。 别人读的时候思路可能会

  • 关于 Adobe 应用程序中的色彩管理 Adobe 色彩管理可以帮助您在不同的源之间保持图像的色彩一致,编辑文档并在 Adobe 应用程序间转换文档,以及输出已完成的合成图像。此系统基于国际色彩协会 (ICC) 开发的协定,该组织负责实现配置文件格式和程序的标准化,旨在通过一个工作流程获得准确和一致的颜色。 默认情况下, Adobe 应用程序中的色彩管理是打开的。如果您购买了 Adobe Crea