我花了最后一天半的时间在网上搜索答案,任何帮助都会很棒。
问题是我们如何让谷歌应用引擎高复制数据存储(HRD)在我们的本地环境中工作,以便我们使用/测试跨组事务?
我们正在开发一个新的 Java 应用程序以在 GAE 上运行。我们从使用 Eclipse 的 1.6.0 版本的 Google sdk 开始。我们选择 High Replication Datastore 设置。我们不使用 1.6.5。我们正在使用 Objectify。
我最近注意到,Google 和 Objectify 都完全支持跨组 (XG) 事务,但有限制。
我修改了我们的一部分代码,以确保它对我们有用,但遇到了问题。当我运行 junit 测试或将我们的应用程序作为 Web 应用程序运行时,它会给出错误:
警告:java.lang.IllegalArgumentException:不能在单个事务中对多个实体组进行操作。
当我运行此代码时:
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
System.out.println(ds.getDatastoreAttributes().getDatastoreType());
我得到 MASTER_SLAVE。
我还没有尝试部署应用程序以查看它是否在那里工作。在我可以让它在本地环境中工作之前,这可能不是一个好主意。
这里有一些设置
参数,VM 参数:
-javaagent:/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.6.5/appengine-java-sdk-1.6.5/lib/agent/appengine-agent.jar -Ddatastore.default_high_rep_job_policy_unapplied_job_pct=50 -Xmx512m -XstartOnFirstThread - Xbootclasspath/p:/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.6.5/appengine-java-sdk-1.6.5/lib/override/appengine-dev-jdk-overrides.jar
应用引擎:
选中使用 Google App Eninge
选择使用默认 SDK (appengine-java-sdk-1.6.5 - 1.6.5)
启用本地 HRD 支持已选中
使用 Datanucleus JDO/JPA 访问选中的数据存储