When trying to run Datastore in a Servlet in Google App Engine Flexible Environment I get "No API environment is registered for this thread." (Details below.)
I see questions on StackOverflow about this happening in local machines or unit tests, but this is happening in GAE in a regular Servlet.
Here is the entirety of my Datastore code, a simple query. Do I need to register an API environment? If so, how?
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 ...