如何在本地dev_appserver上启用High Replication数据存储?

时间:2013-02-01 16:08:11

标签: java google-app-engine google-cloud-datastore jdo

我正在使用最新的Java SDK 1.7.4,以及以下命令来启动dev服务器:

%java.home%\bin\java -Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20 -cp "%~dp0\..\lib\appengine-tools-api.jar" ^
    com.google.appengine.tools.KickStart ^
       com.google.appengine.tools.development.DevAppServerMain %*

https://developers.google.com/appengine/docs/java/tools/devserver#Using_the_Datastore中的“datastore.default_high_rep_job_policy_unapplied_job_pct = 20”)

然而,log在第一次请求数据存储时说:

INFO: Local Datastore initialized:
        Type: Master/Slave

然后,我得到一个例外:

31.01.2013 19:16:02 org.datanucleus.transaction.Transaction rollback
SEVERE: Operation rollback failed on resource: org.datanucleus.store.appengine.DatastoreXAResource@404eb2, error code UNKNOWN and transaction: [DataNucleus Transaction, ID=Xid=    , enlisted resources=[org.datanucleus.store.appengine.DatastoreXAResource@404eb2]]
31.01.2013 19:16:02 com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /themepark/post
java.lang.IllegalArgumentException: transactions on multiple entity groups only allowed in High Replication applications

我在\META-INF\jdoconfig.xml中有以下行以启用跨群组(XG)交易:

<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/>

如何使dev_appserver.cmd模拟高复制数据存储?

1 个答案:

答案 0 :(得分:2)

<强>更新

使用提供的dev_appserver.cmd传递参数并按如下方式运行代码:

dev_appserver --jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20 <path_to_war_dir>

如果您愿意,可以尝试将--jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20添加到dev_appserver.cmd文件的末尾(%*之前)

<强> OLD:

将以下内容添加到命令行:

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

这是此处介绍的第一件事(以及您可以使用的其他方法):https://developers.google.com/appengine/docs/java/tools/devserver#Using_the_Datastore