我花了最后一天半的时间在网上寻找答案,任何帮助都会很棒。
问题是我们如何让谷歌应用引擎高复制数据存储(HRD)在我们的本地环境中工作,以便我们使用/测试跨群组交易?
我们正在开发一个在GAE上运行的新Java应用程序。我们从使用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
App Engine:
使用Google App Eninge检查
使用默认SDK(appengine-java-sdk-1.6.5 - 1.6.5)选择
启用本地HRD支持
使用Datanucleus JDO / JPA访问已检查的数据存储
答案 0 :(得分:0)
您好像没有正确使用跨群组(XG)交易。查看事务文档并查看“使用跨组事务”部分下的代码示例。有一个很好的工作代码示例可以帮助您入门。
https://developers.google.com/appengine/docs/java/datastore/transactions#Uses_for_Transactions