2

私は答えを求めて Web を検索するのに最後の 1 日半を費やしました。

問題は、クロス グループ トランザクションを使用/テストするために、ローカル環境で Google アプリ エンジンの高レプリケーション データ ストア (HRD) を動作させるにはどうすればよいかということです。

GAE で実行する新しい Java アプリを開発しています。Eclipse を使用して 1.6.0 バージョンの Google SDK から始めました。High Replication Datastore 設定を選択します。1.6.5 は使用していません。Objectifyを使用しています。

最近、Google と Objectify の両方がクロス グループ (XG) トランザクションを制限付きで完全にサポートしていることに気付きました。

コードの一部を修正して動作するようにしましたが、問題が発生しました。junit テストを実行するか、アプリケーションを Web アプリケーションとして実行すると、次のエラーが表示されます。

警告: java.lang.IllegalArgumentException: 1 つのトランザクションで複数のエンティティ グループを操作することはできません。

このコードを実行すると:

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

Cross-Group (XG) トランザクションを適切に使用していないようです。トランザクションのドキュメントを参照し、「グループ間トランザクションの使用」セクションの下にあるコード サンプルを見てください。作業を開始するための適切なコード例があります。

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

于 2012-05-04T17:15:38.403 に答える