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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post