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"
Ich habe eine Datei „local_db.bin“ und eine Datei „datastore-indexes-auto.xml“ unter dem Ordner:
Code: Select all
E:\myProj\localAppData
Jetzt möchte ich:
- den Datenspeicher-Emulator als separaten Prozess starten
- meine Anwendung damit verbinden
- verwenden die durch frühere Ausführungen erstellten Daten
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"
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/
Aus dem Protokoll geht hervor, dass die fehlerhafte Zeile lautet:
Code: Select all
java.lang.ClassNotFoundException: com.google.appengine.api.datastore.dev.LocalDatastoreService$Profile
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"
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
Code: Select all
E:
Code: Select all
cd E:\myNewApp\src\main\webapp
Code: Select all
set_vars.cmd
Code: Select all
startup.bat
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.