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

При попытке запустить хранилище данных в сервлете в гибкой среде 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);
}

Трассировки стека

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 ...

person Joshua Fox    schedule 20.10.2016    source источник


Ответы (1)


Чтобы использовать хранилище данных в гибкой среде, вам необходимо использовать облачное хранилище. Хранилище данных
Вы можете использовать Compat среды, если вы хотите использовать хранилище данных с использованием «старых» API

person Shay Erlichmen    schedule 20.10.2016
comment
Спасибо, Шей. Конечно, в хранилище данных Google есть много разных API! Client API, AppEngine API и т. д. Просто по имени пакета у нас есть com.google.datastore(.v1), com.google.cloud.datastore и com.google.appengine.api.datastore. - person Joshua Fox; 20.10.2016
comment
Привет! Не могли бы вы показать нам источник этой информации? - person Rodrigo Borba; 06.02.2018
comment
@RodrigoBorba это довольно старая информация, но все же при гибкости вам нужно использовать официальные облачные библиотеки Google, а не те, которые поставляются с AppEngine SDK. - person Shay Erlichmen; 08.02.2018