I have converted a web application from Java 8 to Java 17 on App Engine. It uses Jakarta servlets and is packaged as a fat jar.
Everything works on Java 8, but with Java 17 I get this error deep down in Google code whenever I try to access the datastore. We are not doing any threading ourselves. The previous line is a very simple Datastore.get():
com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call datastore_v3.Get in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.apphosting.api.ApiProxy$CallNotFoundException.foreignThread(ApiProxy.java:855)
at com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:183)
at com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:180)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:107)
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$5.getFutureWithOptionalTimeout(AsyncDatastoreServiceImpl.java:361)
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$5.aggregate(AsyncDatastoreServiceImpl.java:330)
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$5.get(AsyncDatastoreServiceImpl.java:291)
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$5.get(AsyncDatastoreServiceImpl.java:280)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:107)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:107)
at com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:83)
at com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:70)
at com.google.appengine.api.datastore.DatastoreServiceImpl.get(DatastoreServiceImpl.java:55)
Where should I start? Google did not return anything that I could relate to what we are doing.
My Tomcat and App Engine dependencies:
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.clean.plugin.version>3.3.1</maven.clean.plugin.version>
<maven.compiler.plugin.version>3.11.0</maven.compiler.plugin.version>
<maven.dependency.plugin.version>3.6.0</maven.dependency.plugin.version>
<maven.deploy.plugin.version>3.1.1</maven.deploy.plugin.version>
<maven.enforcer.plugin.version>3.4.0</maven.enforcer.plugin.version>
<maven.install.plugin.version>3.1.1</maven.install.plugin.version>
<maven.shade.plugin.version>3.5.1</maven.shade.plugin.version>
<maven.jar.plugin.version>3.3.0</maven.jar.plugin.version>
<maven.war.plugin.version>3.4.0</maven.war.plugin.version>
<maven.javadoc.plugin.version>3.5.0</maven.javadoc.plugin.version>
<maven.resources.plugin.version>3.3.1</maven.resources.plugin.version>
<maven.source.plugin.version>3.3.0</maven.source.plugin.version>
<maven.surefire.plugin.version>3.1.2</maven.surefire.plugin.version>
<exec.plugin.version>3.1.1</exec.plugin.version>
<license.plugin.version>4.2</license.plugin.version>
<jetty.version>11.0.15</jetty.version>
<tomcat.version>10.1.18</tomcat.version>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>${tomcat.version}</version>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>2.31.0</version>
</dependency>
<dependency>
<groupId>com.google.appengine.tools</groupId>
<artifactId>appengine-gcs-client</artifactId>
<version>0.8.3</version>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-datastore</artifactId>
<version>2.17.3</version>
</dependency>