Google CloudのDatastore Client Library for Javaを使用してCloud Datastoreにアクセスしています。Javaを使用したGoogle Datastoreエミュレータ(GAEを使用しない)
注:私はアプリケーションを配備するためにApp Engineを使用していません。開発目的でローカルアプリケーションを実行するだけです。
この例では、Cloud Datastoreを読み書きできます。
Datastore datastore = DatastoreOptions.defaultInstance().service();
KeyFactory keyFactory = datastore.newKeyFactory().setKind("MyKind");
Key key = keyFactory.newKey();
Entity entity = datastore.get(key);
ローカルのDatastoreエミュレータインスタンスに書き込むことができます。 ガイドhereに続いて、gcloud beta emulators datastore start
を実行します。 これは私の端末に表示:
C:\Users\User>gcloud beta emulators datastore start
WARNING: Reusing existing data in [C:\Users\User\AppData\Roaming\gcloud\emulators\datastore].
Executing: cmd /c C:\Users\User\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\cloud-datastore-emulator\cloud_datastore_emulator.cmd start --host=localhost --port=8964 --store_on_disk=True --consistency=0.9 --allow_remote_shutdown C:\Users\User\AppData\Roaming\gcloud\emulators\datastore
[datastore] Oct 31, 2016 11:37:27 AM com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$7 apply
[datastore] INFO: Provided --allow_remote_shutdown to start command which is no longer necessary.
[datastore] Oct 31, 2016 11:37:27 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub <init>
[datastore] INFO: Local Datastore initialized:
[datastore] Type: High Replication
[datastore] Storage: C:\Users\User\AppData\Roaming\gcloud\emulators\datastore\WEB-INF\appengine-generated\local_db.bin
[datastore] Oct 31, 2016 11:37:28 AM io.grpc.internal.ManagedChannelImpl <init>
[datastore] INFO: [[email protected]] Created with target localhost:8964
[datastore] Oct 31, 2016 11:37:28 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load
[datastore] INFO: The backing store, C:\Users\User\AppData\Roaming\gcloud\emulators\datastore\WEB-INF\appengine-generated\local_db.bin, does not exist. It will be created.
[datastore] Oct 31, 2016 11:37:28 AM io.gapi.emulators.netty.NettyUtil applyJava7LongHostnameWorkaround
[datastore] INFO: Unable to apply Java 7 long hostname workaround.
[datastore] API endpoint: http://localhost:8964
[datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
[datastore]
[datastore] export DATASTORE_EMULATOR_HOST=localhost:8964
[datastore]
[datastore] Dev App Server is now running.
[datastore]
私は別の端末を開き、環境変数を設定します。
C:\Users\User>gcloud beta emulators datastore env-init > set_vars.cmd && set_vars.cmd
C:\Users\User>set DATASTORE_DATASET=my-project-id
C:\Users\User>set DATASTORE_EMULATOR_HOST=localhost:8964
C:\Users\User>set DATASTORE_EMULATOR_HOST_PATH=localhost:8964/datastore
C:\Users\User>set DATASTORE_HOST=http://localhost:8964
C:\Users\User>set DATASTORE_PROJECT_ID=my-project-id
私は自分のアプリケーションを実行し、エンティティを投稿したり、取得するために、REST呼び出しを行いますが、このクラウドデータストアに対する読み取り/書き込みのみです。 localhost:8964/datastore
に私にNot Found
を与える。エミュレータを起動すると、local_db.bin
というファイルが作成されたように見えますが、それを含むフォルダは空です。 また、ローカルエミュレータにアクセスするためにLocalDatastoreHelperを使用しないようにしたいと思います。 gcloudのみを使用して達成する方法はありますか?
.binファイルからデータを表示する方法はありますか? – Kookz
テキストエディタでファイルを開くと、データのテキストフラグメント(私の例ではHello World!)を見ることができるはずですが、テキストに変換されない他のバイトが表示されます。 –
明確にするために、私は 'gcloud beta emulators datastore start'を使用してエミュレータを起動し、使用するポートをメモし、Datastoreインスタンスを構築するときにそのポートを指定します。 – Kookz