【发布时间】:2013-07-18 16:33:49
【问题描述】:
我们将 Objectify 与 Google App Engine for Java 一起使用。我们使用提供的EnumTranslatorFactory 在数据存储中持久化各种枚举常量,它使用Enum#name() 简单地存储/加载常量。这很好用。
当我们向 GAE 发布应用的新版本时,新版本与旧版本相邻,两者同时向客户端提供请求。 Google's traffic splitting docs 很好地解释了这一点。
对系统的升级引入了新的枚举常量,这会在加载过程中导致错误。例如:
版本 1 具有以下枚举:
enum Meal{BREAKFAST,LUNCH,DINNER}
第 2 版在枚举中添加了额外的常量以支持英国餐:
enum Meal{BREAKFAST,LUNCH,TEA,DINNER}
在测试应用程序的第 2 版时,TEA 将与某些实体保持一致。随后版本 1 将加载该实体,Objectify 将尝试使用 Enum#valueOf(...) 将 TEA 转换为 Enum,这会引发运行时异常。
Objectify docs为Enums解释Data Migration,但它不满足上述情况。
我对如何最好地处理这种情况的建议感兴趣。
【问题讨论】:
标签: java google-app-engine enums google-cloud-datastore objectify