Как мне зарегистрировать среду API для хранилища данных в гибкой среде GAE?

#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