如何避免Objectify缓存中不一致的状态实体?

时间:2013-02-23 22:57:51

标签: google-cloud-datastore objectify

在我的模型中,我有一些更复杂的方法,可以抛出异常。发生这些异常时,它们可能使模型处于不一致状态。到目前为止,这种情况从来就不是问题,因为控制器已经意识到这种行为,并且从未在数据存储区中使用/持久存在不一致的实体 - 该模型的实例通常不为垃圾收集器保留。

但是,在阅读Objectify的文档时,我注意到会话缓存包含返回给应用程序的完全相同的Java对象。这种行为会破坏我对丢弃的不一致实体的假设吗?

这是预期的行为吗?从现在开始,无论如何,我必须始终将所有模型的实例保持在一致状态。因为它们都可以隐式保存在缓存中。如果是这种情况,我必须检查抛出异常的所有方法,甚至是未经检查的异常,以确保我的模型实例始终一致且可用。

而且,这可能是多线程java应用程序的问题吗?如果用户打开两个浏览器选项卡,并且碰巧发出两个请求将访问缓存中的同一对象。那可能吗?我是否需要让我所有模型的类都是线程安全的?

你们是如何解决这些问题的?

谢谢。

1 个答案:

答案 0 :(得分:0)

客观化会话!=用户会话。 Ofy会议是一个工作会议;它们永远不应该跨线程共享,应该根据需要创建和抛出。在这方面,它们类似于JPA会议。