2

我花了最后一天半的时间在网上搜索答案,任何帮助都会很棒。

问题是我们如何让谷歌应用引擎高复制数据存储(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 访问选中的数据存储

4

1 回答 1

0

看起来您没有正确使用跨组 (XG) 事务。查看事务文档并查看“使用跨组事务”部分下的代码示例。有一个很好的工作代码示例可以帮助您入门。

https://developers.google.com/appengine/docs/java/datastore/transactions#Uses_​​for_Transactions

于 2012-05-04T17:15:38.403 回答