#google-app-engine #google-cloud-datastore #app-engine-flexible #google-flexible
#google-app-engine #google-cloud-хранилище данных #движок приложений -гибкий #google-гибкий
Вопрос:
При попытке запустить хранилище данных в сервлете в гибкой среде Google App Engine я получаю сообщение «Среда API не зарегистрирована для этого потока». (Подробности ниже.)
Я вижу вопросы в StackOverflow о том, что это происходит на локальных машинах или модульных тестах, но это происходит в GAE в обычном сервлете.
Вот полный код моего хранилища данных, простой запрос. Нужно ли мне регистрировать среду API? Если да, то каким образом?
List<String> kinds = new ArrayList<String>();
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(DatastoreServiceConfig.Builder .withImplicitTransactionManagementPolicy(ImplicitTransactionManagementPolicy.NONE));
PreparedQuery global = datastore.prepare(new Query("__kind__"));
for (Entity globalStat : global.asIterable()) {
String kindName = globalStat.getKey().getName();
kinds.add(kindName);
}
Stacktrace
java.lang.NullPointerException: No API environment is registered for this thread.
at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreApiHelper.java:180)
at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:196)
at com.google.appengine.api.datastore.Query.<init>(Query.java:208)
at com.google.appengine.api.datastore.Query.<init>(Query.java:139)
at ...
Ответ №1:
Чтобы использовать хранилище данных в гибкой среде, вам необходимо использовать облачное хранилище данных
Вы можете использовать среду Compat, если хотите использовать хранилище данных с использованием «старых» API
Комментарии:
1. Спасибо, Шей. В хранилище данных Google наверняка есть много разных API! Клиентский API, AppEngine API и т.д. Просто перейдя по имени пакета, мы получаем com.google. хранилище данных (.v1), com.google.cloud.datastore и com.google.appengine.api.datastore.
2. Здравствуйте! Не могли бы вы, пожалуйста, показать нам источник этой информации?
3. @RodrigoBorba это довольно старая информация, но по-прежнему в flex вам нужно использовать официальные облачные библиотеки Google, а не те, которые поставляются с AppEngine SDK