Der Google Cloud Datastore-Emulator startet nichtJava

Java-Forum
Guest
 Der Google Cloud Datastore-Emulator startet nicht

Post by Guest »

Bisher habe ich den folgenden Befehl zum Testen einer GAE-Anwendung auf meiner lokalen Entwicklungsumgebung verwendet:

Code: Select all

e:

Code: Select all

cd E:\myProj\myWebApp

Code: Select all

"E:\Google\Cloud SDK\google-cloud-sdk\bin\java_dev_appserver.cmd" --generated_dir="E:\myProj\localAppData" --address=0.0.0.0 --port=8190 "E:\myProj\myWebApp\target\myProjWebApp-1.0.0"
...und alles hat gut funktioniert.
Ich habe eine Datei „local_db.bin“ und eine Datei „datastore-indexes-auto.xml“ unter dem Ordner:

Code: Select all

E:\myProj\localAppData
und es enthält Daten. Ich kann zu http://localhost:8190/_ah/admin navigieren und auch die so erstellten Daten anzeigen.
Jetzt möchte ich:
  • den Datenspeicher-Emulator als separaten Prozess starten
  • meine Anwendung damit verbinden
  • verwenden die durch frühere Ausführungen erstellten Daten
Also habe ich kopiert die 2 Dateien: local_db.bin file und datastore-indexes-auto.xml von E:\myProj\localAppData nach E:\myNewApp\src\main\webapp\WEB-INF \appengine-generated
Um den Datenspeicher-Emulator zu starten (Java-Version ist 17), verwende ich diesen Befehl:

Code: Select all

e:

Code: Select all

cd E:\myNewApp\src\main\webapp

Code: Select all

gcloud beta emulators datastore start --data-dir="E:\myNewApp\src\main\webapp"
und ich erhalte diese Fehlermeldung:

Code: Select all

E:\myNewProj\src\main\webapp>gcloud beta emulators datastore start --data-dir="E:\myNewProj\src\main\webapp"
WARNING: Cloud Datastore Emulator support for Java JRE version 11 will be dropped after gcloud command-line tool release 508.0.0.  Please upgrade to Java JRE version 21 or higher to continue using the latest Cloud Datastore Emulator.
WARNING: Reusing existing data in [E:\myNewProj\src\main\webapp].
Executing: cmd /c E:\Google\Cloud SDK\google-cloud-sdk\platform\cloud-datastore-emulator\cloud_datastore_emulator.cmd start --host=localhost --port=8081 --store_on_disk=True --allow_remote_shutdown --consistency=0.9 E:\myNewProj\src\main\webapp
[datastore] Jan 13, 2025 11:28:51 AM com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$9 apply
[datastore] INFO: Provided --allow_remote_shutdown to start command which is no longer necessary.
[datastore] Jan 13, 2025 11:28:51 AM com.google.cloud.datastore.emulator.CloudDatastore$StartAction apply
[datastore] INFO: Running CLOUD_DATASTORE emulator.
[datastore] Jan 13, 2025 11:28:51 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub 
[datastore] INFO: Local Datastore initialized:
[datastore]     Type: High Replication
[datastore]     Storage: E:\myNewProj\src\main\webapp\WEB-INF\appengine-generated\local_db.bin
[datastore] Jan 13, 2025 11:28:52 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub$BackwardsCompatibleInputStream readClassDescriptor
[datastore] INFO: Error converting backwards compatible class: Unable to make field private java.lang.String java.io.ObjectStreamClass.name accessible: module java.base does not "opens java.io" to unnamed module @7bab3f1a
[datastore] Jan 13, 2025 11:28:52 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub$BackwardsCompatibleInputStream readClassDescriptor
[datastore] INFO: Error converting backwards compatible class: Unable to make field private java.lang.String java.io.ObjectStreamClass.name accessible: module java.base does not "opens java.io"  to unnamed module @7bab3f1a
[datastore] Jan 13, 2025 11:28:52 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load
[datastore] INFO: Failed to load from the backing store, E:\myNewProj\src\main\webapp\WEB-INF\appengine-generated\local_db.bin
[datastore] java.lang.ClassNotFoundException: com.google.appengine.api.datastore.dev.LocalDatastoreService$Profile
[datastore]     at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
[datastore]     at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
[datastore]     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
[datastore]     at java.base/java.lang.Class.forName0(Native Method)
[datastore]     at java.base/java.lang.Class.forName(Class.java:467)
[datastore]     at java.base/java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:773)
[datastore]     at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2034)
[datastore]     at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1898)
[datastore]     at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2224)
[datastore]     at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1733)
[datastore]     at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:509)
[datastore]     at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:467)
[datastore]     at java.base/java.util.HashMap.readObject(HashMap.java:1552)
[datastore]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[datastore]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[datastore]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[datastore]     at java.base/java.lang.reflect.Method.invoke(Method.java:569)
[datastore]     at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1100)
[datastore]     at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2423)
[datastore]     at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2257)
[datastore]     at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1733)
[datastore]     at java.base/java.io.ObjectInputStream$FieldValues.(ObjectInputStream.java:2606)
[datastore]     at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2457)
[datastore]     at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2257)
[datastore]     at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1733)
[datastore]     at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:509)
[datastore]     at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:467)
[datastore]     at com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub.load(LocalDatastoreFileStub.java:637)
[datastore]     at com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub.startInternal(LocalDatastoreFileStub.java:151)
[datastore]     at com.google.cloud.datastore.emulator.impl.BaseLocalDatastore$3.run(BaseLocalDatastore.java:432)
[datastore]     at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
[datastore]     at com.google.cloud.datastore.emulator.impl.BaseLocalDatastore.start(BaseLocalDatastore.java:428)
[datastore]     at com.google.cloud.datastore.emulator.DatastoreEmulator.start(DatastoreEmulator.java:37)
[datastore]     at com.google.cloud.datastore.emulator.CloudDatastore$1.start(CloudDatastore.java:656)
[datastore]     at com.google.cloud.datastore.emulator.CloudDatastore$StartAction.apply(CloudDatastore.java:566)
[datastore]     at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:58)
[datastore]     at com.google.cloud.datastore.emulator.CloudDatastore.run(CloudDatastore.java:769)
[datastore]     at com.google.cloud.datastore.emulator.CloudDatastore.main(CloudDatastore.java:727)
[datastore]
[datastore] API endpoint: http://localhost:8081
[datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
[datastore]
[datastore]   export DATASTORE_EMULATOR_HOST=localhost:8081
[datastore]
[datastore] Dev App Server is now running.
[datastore]
[datastore] The previous line was printed for backwards compatibility only.
[datastore] If your tests rely on it to confirm emulator startup,
[datastore] please migrate to the emulator health check endpoint (/).  Thank you!
[datastore] The health check endpoint for this emulator instance is http://localhost:8081/
Beim Navigieren zu http://localhost:8081/ erhalte ich „OK“. Aber wenn ich die Anwendung starte (die jetzt als WAR-Datei auf Tomcat bereitgestellt wird), kann sie keine Daten lesen.
Aus dem Protokoll geht hervor, dass die fehlerhafte Zeile lautet:

Code: Select all

java.lang.ClassNotFoundException: com.google.appengine.api.datastore.dev.LocalDatastoreService$Profile
. Aber wie stellt man dann die Klasse/JAR, die diese Klasse enthält, dem Befehl zur Verfügung?
Wie löse ich das?
Wenn es welche ist Hilfe, das ist meine Motivation: Ab sofort verwendet diese App Java für die Serverseite. Ich erstelle eine .war-Datei und kann sie lokal ausführen (wie oben erwähnt) sowie sie auch auf der Google App Engine bereitstellen und ausführen. All das funktioniert.
Aus heutiger Sicht wird der Krieg jedoch auf einer „bereitgestellten“ Jetty-Instanz bereitgestellt. Es ist wahrscheinlich, dass diese „Bereitstellung“ von Jetty in Zukunft abgeschafft wird.
Daher möchte ich (wie ich es jetzt tue) eine Kriegsdatei erstellen. Aber anstatt diese War-Datei in GAE bereitzustellen, möchte ich ein Docker-Image mit *nix und Tomcat erstellen, meinen War auf diesem Tomcat bereitstellen und dann weiterhin auf meine Daten zugreifen, die sich bereits im Datenspeicher befinden.
Ich versuche, diesen Stack auf meiner lokalen Entwicklungsumgebung zu simulieren, und dafür ist es von entscheidender Bedeutung, den lokalen Datenspeicher-Emulator zum Laufen zu bringen.
Irgendeine Hilfe? Bitte.
Foll hinzugefügt am 14.01.25:
Dies sind die Schritte, die ich verwende:
(1) Im Befehlsfenster 1,

Code: Select all

gcloud emulators datastore start --data-dir="E:\myNewApp\src\main\webapp"
(2) Im Befehlsfenster 2,

Code: Select all

E:

Code: Select all

cd E:\myNewApp\src\main\webapp

Code: Select all

gcloud beta emulators datastore env-init > set_vars.cmd
(3) Im Befehlsfenster 3,

Code: Select all

E:

Code: Select all

cd E:\myNewApp\src\main\webapp

Code: Select all

set_vars.cmd

Code: Select all

startup.bat
gcloud beta emulators datastore start --data-dir="E:\hospEZ\src\main\webapp"
WARNING: Cloud Datastore Emulator support for Java JRE version 11 will be dropped after gcloud command-line tool release 508.0.0. Please upgrade to Java JRE version 21 or higher to continue using the latest Cloud Datastore Emulator.
WARNING: Reusing existing data in [E:\hospEZ\src\main\webapp].
Executing: cmd /c E:\Google\Cloud SDK\google-cloud-sdk\platform\cloud-datastore-emulator\cloud_datastore_emulator.cmd start --host=localhost --port=8081 --store_on_disk=True --allow_remote_shutdown --consistency=0.9 E:\hospEZ\src\main\webapp
[datastore] Jan 16, 2025 8:08:35 AM com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$9 apply
[datastore] INFO: Provided --allow_remote_shutdown to start command which is no longer necessary.
[datastore] Jan 16, 2025 8:08:35 AM com.google.cloud.datastore.emulator.CloudDatastore$StartAction apply
[datastore] INFO: Running CLOUD_DATASTORE emulator.
[datastore] Jan 16, 2025 8:08:35 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub
[datastore] INFO: Local Datastore initialized:
[datastore] Type: High Replication
[datastore] Storage: E:\hospEZ\src\main\webapp\WEB-INF\appengine-generated\local_db.bin
[datastore] WARNING: An illegal reflective access operation has occurred
[datastore] WARNING: Illegal reflective access by com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub$BackwardsCompatibleInputStream (file:/E:/Google/Cloud%20SDK/google-cloud-sdk/platform/cloud-datastore-emulator/CloudDatastore.jar) to field java.io.ObjectStreamClass.name
[datastore] WARNING: Please consider reporting this to the maintainers of com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub$BackwardsCompatibleInputStream
[datastore] WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
[datastore] WARNING: All illegal access operations will be denied in a future release
[datastore] Jan 16, 2025 8:08:36 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load
[datastore] INFO: Time to load datastore: 673 ms
[datastore] API endpoint: http://localhost:8081
[datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
[datastore]
[datastore] export DATASTORE_EMULATOR_HOST=localhost:8081
[datastore]
[datastore] Dev App Server is now running.
[datastore]
[datastore] The previous line was printed for backwards compatibility only.
[datastore] If your tests rely on it to confirm emulator startup,
[datastore] please migrate to the emulator health check endpoint (/). Thank you!
[datastore] The health check endpoint for this emulator instance is http://localhost:8081/
[/code]
Aber die Anwendung kann keine Daten aus dieser Datenbank lesen.
Es gibt also einige neue Fragen:
  • Obwohl die Datenbank mit java_dev_appserver.cmd erfolgreich gelesen und beschrieben wird, warum liest sie nicht dieselbe Datenbank, wenn sie durch den Start des Datenspeichers von gcloud beta emulators gestartet wird ?
  • Warum funktioniert gcloud Beta-Emulatoren-Datenspeicherstart löst eine Ausnahme aus, wenn JAVA_HOME auf Java 17 zeigt, und löst keine Ausnahme aus, wenn JAVA_HOME auf Java 11 zeigt?
  • Auch wenn keine Ausnahme ausgelöst wird, wenn JAVA_HOME zeigt Warum kann dieselbe App nach Java 11 keine Daten lesen?
  • Für diese Warnung: Es ist ein illegaler reflektiver Zugriffsvorgang aufgetreten Ich werde gebeten, die Betreuer zu kontaktieren. Irgendeine Idee, an wen ich mich wenden kann.
Bitte um Hilfe.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post