Код: Выделить всё
e:
Код: Выделить всё
cd E:\myProj\myWebApp
Код: Выделить всё
"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"
У меня есть файл local_db.bin и файл datastore-indexes-auto.xml в папке:
Код: Выделить всё
E:\myProj\localAppData
Теперь я хотел бы:
- запустить эмулятор хранилища данных как отдельный процесс
- подключиться к нему моему приложению
- использовать данные, созданные в результате более ранних исполнений
Чтобы запустить эмулятор хранилища данных (версия Java 17), я использую эту команду:
Код: Выделить всё
e:
Код: Выделить всё
cd E:\myNewApp\src\main\webapp
Код: Выделить всё
gcloud beta emulators datastore start --data-dir="E:\myNewApp\src\main\webapp"
Код: Выделить всё
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/
Из журнала я понимаю, что ошибочная строка:
Код: Выделить всё
java.lang.ClassNotFoundException: com.google.appengine.api.datastore.dev.LocalDatastoreService$Profile. Но тогда как передать этот класс/банку, содержащую этот класс, команде?
Как мне решить эту проблему?
Если это имеет какое-либо значение помогите, это моя мотивация: на данный момент это приложение использует Java на стороне сервера. Я создаю файл .war и могу запустить его локально (как упоминалось выше), а также развернуть и запустить его в Google App Engine. Все это работает.
Однако при нынешних обстоятельствах война разворачивается на «предоставленном» экземпляре Jetty. Вполне вероятно, что в будущем от этого «обеспечения» Jetty будет покончено.
Поэтому я хотел бы создать военный файл (как я делаю сейчас). Но вместо того, чтобы развертывать этот файл войны в GAE, я хотел бы создать образ докера с *nix и Tomcat, развернуть свою войну на этом Tomcat, а затем продолжить доступ к моим данным, которые уже находятся в хранилище данных.
Я пытаюсь смоделировать этот стек в своей локальной среде разработки, и для этого крайне важно запустить и запустить эмулятор локального хранилища данных.
Кто-нибудь поможет? Пожалуйста.
Фолл добавлен 14 января 25 г.:
Вот шаги, которые я использую:
(1) В командном окне 1
gcloud emulators datastore start --data-dir="E:\myNewApp\src\main\webapp"
Код: Выделить всё
E:
Код: Выделить всё
cd E:\myNewApp\src\main\webapp
Код: Выделить всё
gcloud beta emulators datastore env-init > set_vars.cmd
Код: Выделить всё
E:
Код: Выделить всё
cd E:\myNewApp\src\main\webapp
Код: Выделить всё
set_vars.cmd
Код: Выделить всё
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]
Но приложению не удается прочитать данные из этой базы данных.
Поэтому возникают новые вопросы:
- несмотря на то, что база данных успешно считывается и записывается в нее с помощью java_dev_appserver.cmd, почему она не читает и не читает ту же базу данных при запуске с помощью запуска хранилища данных бета-эмуляторов gcloud ?
- почему Начало хранилища данных бета-эмуляторов gcloud выдает исключение, когда JAVA_HOME указывает на Java 17, и не выдает исключение, когда JAVA_HOME указывает на Java 11?
- Даже если JAVA_HOME не создает никаких исключений указывает на Java 11, почему мое приложение не может прочитать какие-либо данные?
- За это предупреждение: произошла незаконная операция рефлексивного доступа Меня спрашивают связаться с сопровождающими. Есть идеи, к кому мне обратиться.
Подробнее здесь: https://stackoverflow.com/questions/793 ... s-to-start