I've just migrated a hefty 50k lines codebase from the java8 runtime to the java17 runtime. We are using the updated appengine-api-1.0-sdk.jar library provided in the migration guide.
I'm getting an issue on the DEVELOPMENT server only. These issues DO NOT happen when deployed to GCP App Engine.
Can't make API call memcache.Get in a thread that is neither the original request thread nor a thread created by ThreadManager
FYI, we DO NOT invoke Memcache at all anywhere in the codebase. This is getting invoked in the library as far as I can tell. And I do think its a BUG, though I do hope there is a workaround. I also believe this restriction was not enforced in java8, but now is in java17. And some internal broken behaviour has arisen from it.
I have tried using 2 separate dev_appservers. The latest dev_appserver packaged with the GCloud CLI. And an older archived version provided in documentation for java8 runtimes. Both return the same result.
λ mvn clean package appengine:run -DskipTests
λ ./bin/google_appengine/google/appengine/tools/java/bin/dev_appserver.sh target/core-1.0.1/
We also have EE8 enabled.
Here is my pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<groupId>com.celbux</groupId>
<artifactId>core</artifactId>
<version>1.0.1</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20240205</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.appengine/appengine-api-1.0-sdk -->
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.9.98</version>
<exclusions>
<exclusion>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.appengine/appengine-testing -->
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-testing</artifactId>
<version>2.0.24</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.appengine.tools/appengine-gcs-client -->
<dependency>
<groupId>com.google.appengine.tools</groupId>
<artifactId>appengine-gcs-client</artifactId>
<version>0.8.3</version>
<exclusions>
<exclusion>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.7.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.12.1</version>
<configuration>
<source>16</source>
<target>16</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
When I run a servlet:
~/dev/repo/Celbux/core (celbux101)
λ ./bin/google_appengine/google/appengine/tools/java/bin/dev_appserver.sh target/core-1.0.1/
Warning: unable to determine Java version
Executing [C:\Program Files\Eclipse Adoptium\jdk-17.0.10.7-hotspot\bin\java, -Dappengine.sdk.root=C:\Users\james\dev\repo\Celbux\core\bin\google_appengine\google\appengine\tools\java, --add-opens, java.base/java.net=ALL-UNNAMED, --add-opens, java.base/sun.net.www.protocol.http=ALL-UNNAMED, --add-opens, java.base/sun.net.www.protocol.https=ALL-UNNAMED, -Dfile.encoding=UTF-8, -classpath, C:\Users\james\dev\repo\Celbux\core\bin\google_appengine\google\appengine\tools\java\lib\appengine-tools-api.jar, com.google.appengine.tools.development.DevAppServerMain, --property=kickstart.user.dir=C:\Users\james\dev\repo\Celbux\core, C:\Users\james\dev\repo\Celbux\core\target\core-1.0.1]
Mar 24, 2024 10:25:02 PM com.google.appengine.init.AppEngineWebXmlInitialParse <init>
INFO: built on 2023-12-28T18:18:01-05:00 from commit ${buildNumber}
Mar 24, 2024 10:25:02 PM com.google.appengine.tools.development.SystemPropertiesManager setSystemProperties
INFO: Overwriting system property key 'java.util.logging.config.file', value 'C:\Users\james\dev\repo\Celbux\core\bin\google_appengine\google\appengine\tools\java\config\sdk\logging.properties' with value 'WEB-INF/logging.properties' from 'C:\Users\james\dev\repo\Celbux\core\target\core-1.0.1\WEB-INF\appengine-web.xml'
Mar 24, 2024 10:25:02 PM com.google.appengine.tools.development.SystemPropertiesManager setSystemProperties
INFO: Overwriting system property key 'appengine.use.EE8', value 'true' with value 'true' from 'C:\Users\james\dev\repo\Celbux\core\target\core-1.0.1\WEB-INF\appengine-web.xml'
2024-03-24 22:25:03.279:INFO :oejs.Server:main: jetty-12.0.5; built: 2023-12-18T14:06:32.502Z; git: 3aed62e4959bb8c01f5975fe81e078e3ff626126; jvm 17.0.10+7
2024-03-24 22:25:03.675:INFO :oejs.DefaultSessionIdManager:main: Session workerName=node0
2024-03-24 22:25:03.800:INFO :oejsh.ContextHandler:main: Started oeje8n.ContextHandler$CoreContextHandler@43ed0ff3{ROOT,/,b=file:///C:/Users/james/dev/repo/Celbux/core/target/core-1.0.1/,a=AVAILABLE,h=oeje8n.ContextHandler$CoreContextHandler$CoreToNestedHandler@388ffbc2{STARTED}}
2024-03-24 22:25:03.843:INFO :oejs.AbstractConnector:main: Started NetworkTrafficServerConnector@34abdee4{HTTP/1.1, (http/1.1)}{localhost:8080}
2024-03-24 22:25:03.850:INFO :oejs.Server:main: Started oejs.Server@6853425f{STARTING}[12.0.5,sto=0] @1184ms
Mar 24, 2024 8:25:03 PM com.google.appengine.tools.development.AbstractModule startup
INFO: Module instance default is running at http://localhost:8080/
Mar 24, 2024 8:25:03 PM com.google.appengine.tools.development.AbstractModule startup
INFO: The admin console is running at http://localhost:8080/_ah/admin
Mar 24, 2024 10:25:03 PM com.google.appengine.tools.development.DevAppServerImpl doStart
INFO: Dev App Server is now running
Mar 24, 2024 10:26:35 PM com.google.appengine.tools.development.jetty.DevAppEngineWebAppContext disableTransportGuarantee
INFO: Ignoring <transport-guarantee> for /* as the SDK does not support HTTPS. It will still be used when you upload your application.
2024-03-24 22:26:35.892:WARN :oejs.CachingSessionDataStore:qtp988800485-48: Unable to load id jEqKbUfoMcvLuyFaJMXqVw
com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call memcache.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.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:40)
at com.google.appengine.api.memcache.MemcacheServiceImpl.get(MemcacheServiceImpl.java:63)
at com.google.apphosting.runtime.MemcacheSessionStore.getSession(MemcacheSessionStore.java:46)
at com.google.apphosting.runtime.jetty.MemcacheSessionDataMap.lambda$load$0(MemcacheSessionDataMap.java:68)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1202)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1195)
at org.eclipse.jetty.session.SessionContext.run(SessionContext.java:92)
at com.google.apphosting.runtime.jetty.MemcacheSessionDataMap.load(MemcacheSessionDataMap.java:64)
at org.eclipse.jetty.session.CachingSessionDataStore.load(CachingSessionDataStore.java:91)
at org.eclipse.jetty.session.AbstractSessionCache.loadSession(AbstractSessionCache.java:391)
at org.eclipse.jetty.session.AbstractSessionCache.lambda$getAndEnter$0(AbstractSessionCache.java:328)
at org.eclipse.jetty.session.NullSessionCache.doComputeIfAbsent(NullSessionCache.java:86)
at org.eclipse.jetty.session.AbstractSessionCache.getAndEnter(AbstractSessionCache.java:321)
at org.eclipse.jetty.session.AbstractSessionCache.get(AbstractSessionCache.java:302)
at org.eclipse.jetty.session.AbstractSessionManager.getManagedSession(AbstractSessionManager.java:405)
at org.eclipse.jetty.session.AbstractSessionManager.resolveRequestedSessionId(AbstractSessionManager.java:1278)
at org.eclipse.jetty.ee8.nested.SessionHandler$CoreSessionManager.resolveRequestedSessionId(SessionHandler.java:524)
at org.eclipse.jetty.ee8.nested.SessionHandler.doScope(SessionHandler.java:390)
at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:150)
at org.eclipse.jetty.ee8.nested.ContextHandler.doScope(ContextHandler.java:803)
at com.google.appengine.tools.development.jetty.DevAppEngineWebAppContext.doScope(DevAppEngineWebAppContext.java:117)
at org.eclipse.jetty.ee8.nested.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.ee8.nested.ContextHandler.handle(ContextHandler.java:1401)
at org.eclipse.jetty.ee8.nested.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1293)
at org.eclipse.jetty.ee8.nested.HttpChannel.dispatch(HttpChannel.java:623)
at org.eclipse.jetty.ee8.nested.HttpChannel.handle(HttpChannel.java:455)
at org.eclipse.jetty.ee8.nested.ContextHandler$CoreContextHandler$CoreToNestedHandler.handle(ContextHandler.java:2233)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:761)
at org.eclipse.jetty.server.Server.handle(Server.java:179)
at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:594)
at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:424)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:971)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1201)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1156)
at java.base/java.lang.Thread.run(Thread.java:840)
2024-03-24 22:26:35.896:WARN :oejs.AbstractSessionManager:qtp988800485-48: Unable to get Session
java.lang.NullPointerException: Operation not allowed in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.appengine.api.NamespaceManager.set(NamespaceManager.java:112)
at com.google.apphosting.runtime.jetty.DatastoreSessionStore$SessionDataStoreImpl.createKeyForSession(DatastoreSessionStore.java:209)
at com.google.apphosting.runtime.jetty.DatastoreSessionStore$SessionDataStoreImpl.doLoad(DatastoreSessionStore.java:196)
at org.eclipse.jetty.session.AbstractSessionDataStore.lambda$load$1(AbstractSessionDataStore.java:152)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1202)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1195)
at org.eclipse.jetty.session.SessionContext.run(SessionContext.java:92)
at org.eclipse.jetty.session.AbstractSessionDataStore.load(AbstractSessionDataStore.java:160)
at org.eclipse.jetty.session.CachingSessionDataStore.load(CachingSessionDataStore.java:102)
at org.eclipse.jetty.session.AbstractSessionCache.loadSession(AbstractSessionCache.java:391)
at org.eclipse.jetty.session.AbstractSessionCache.lambda$getAndEnter$0(AbstractSessionCache.java:328)
at org.eclipse.jetty.session.NullSessionCache.doComputeIfAbsent(NullSessionCache.java:86)
at org.eclipse.jetty.session.AbstractSessionCache.getAndEnter(AbstractSessionCache.java:321)
at org.eclipse.jetty.session.AbstractSessionCache.get(AbstractSessionCache.java:302)
at org.eclipse.jetty.session.AbstractSessionManager.getManagedSession(AbstractSessionManager.java:405)
at org.eclipse.jetty.session.AbstractSessionManager.resolveRequestedSessionId(AbstractSessionManager.java:1278)
at org.eclipse.jetty.ee8.nested.SessionHandler$CoreSessionManager.resolveRequestedSessionId(SessionHandler.java:524)
at org.eclipse.jetty.ee8.nested.SessionHandler.doScope(SessionHandler.java:390)
at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:150)
at org.eclipse.jetty.ee8.nested.ContextHandler.doScope(ContextHandler.java:803)
at com.google.appengine.tools.development.jetty.DevAppEngineWebAppContext.doScope(DevAppEngineWebAppContext.java:117)
at org.eclipse.jetty.ee8.nested.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.ee8.nested.ContextHandler.handle(ContextHandler.java:1401)
at org.eclipse.jetty.ee8.nested.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1293)
at org.eclipse.jetty.ee8.nested.HttpChannel.dispatch(HttpChannel.java:623)
at org.eclipse.jetty.ee8.nested.HttpChannel.handle(HttpChannel.java:455)
at org.eclipse.jetty.ee8.nested.ContextHandler$CoreContextHandler$CoreToNestedHandler.handle(ContextHandler.java:2233)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:761)
at org.eclipse.jetty.server.Server.handle(Server.java:179)
at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:594)
at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:424)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:971)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1201)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1156)
at java.base/java.lang.Thread.run(Thread.java:840)
Mar 24, 2024 10:26:35 PM com.google.appengine.api.datastore.dev.LocalDatastoreService init
INFO: Local Datastore initialized:
Type: High Replication
Storage: C:\Users\james\dev\repo\Celbux\core\target\core-1.0.1\WEB-INF\appengine-generated\local_db.bin
Mar 24, 2024 10:26:36 PM com.google.appengine.api.datastore.dev.LocalDatastoreService load
INFO: Time to load datastore: 29 ms
Mar 24, 2024 10:27:06 PM com.google.appengine.api.datastore.dev.LocalDatastoreService$11 run
INFO: Time to persist datastore: 36 ms
When I try access any JSP page:
~/dev/repo/Celbux/core (celbux101)
λ ./bin/google_appengine/google/appengine/tools/java/bin/dev_appserver.sh target/core-1.0.1/
Warning: unable to determine Java version
Executing [C:\Program Files\Eclipse Adoptium\jdk-17.0.10.7-hotspot\bin\java, -Dappengine.sdk.root=C:\Users\james\dev\repo\Celbux\core\bin\google_appengine\google\appengine\tools\java, --add-opens, java.base/java.net=ALL-UNNAMED, --add-opens, java.base/sun.net.www.protocol.http=ALL-UNNAMED, --add-opens, java.base/sun.net.www.protocol.https=ALL-UNNAMED, -Dfile.encoding=UTF-8, -classpath, C:\Users\james\dev\repo\Celbux\core\bin\google_appengine\google\appengine\tools\java\lib\appengine-tools-api.jar, com.google.appengine.tools.development.DevAppServerMain, --property=kickstart.user.dir=C:\Users\james\dev\repo\Celbux\core, C:\Users\james\dev\repo\Celbux\core\target\core-1.0.1]
Mar 24, 2024 10:29:28 PM com.google.appengine.init.AppEngineWebXmlInitialParse <init>
INFO: built on 2023-12-28T18:18:01-05:00 from commit ${buildNumber}
Mar 24, 2024 10:29:28 PM com.google.appengine.tools.development.SystemPropertiesManager setSystemProperties
INFO: Overwriting system property key 'java.util.logging.config.file', value 'C:\Users\james\dev\repo\Celbux\core\bin\google_appengine\google\appengine\tools\java\config\sdk\logging.properties' with value 'WEB-INF/logging.properties' from 'C:\Users\james\dev\repo\Celbux\core\target\core-1.0.1\WEB-INF\appengine-web.xml'
Mar 24, 2024 10:29:28 PM com.google.appengine.tools.development.SystemPropertiesManager setSystemProperties
INFO: Overwriting system property key 'appengine.use.EE8', value 'true' with value 'true' from 'C:\Users\james\dev\repo\Celbux\core\target\core-1.0.1\WEB-INF\appengine-web.xml'
2024-03-24 22:29:29.118:INFO :oejs.Server:main: jetty-12.0.5; built: 2023-12-18T14:06:32.502Z; git: 3aed62e4959bb8c01f5975fe81e078e3ff626126; jvm 17.0.10+7
2024-03-24 22:29:29.791:INFO :oejs.DefaultSessionIdManager:main: Session workerName=node0
2024-03-24 22:29:30.027:INFO :oejsh.ContextHandler:main: Started oeje8n.ContextHandler$CoreContextHandler@43ed0ff3{ROOT,/,b=file:///C:/Users/james/dev/repo/Celbux/core/target/core-1.0.1/,a=AVAILABLE,h=oeje8n.ContextHandler$CoreContextHandler$CoreToNestedHandler@388ffbc2{STARTED}}
2024-03-24 22:29:30.105:INFO :oejs.AbstractConnector:main: Started NetworkTrafficServerConnector@34abdee4{HTTP/1.1, (http/1.1)}{localhost:8080}
2024-03-24 22:29:30.123:INFO :oejs.Server:main: Started oejs.Server@6853425f{STARTING}[12.0.5,sto=0] @2004ms
Mar 24, 2024 8:29:30 PM com.google.appengine.tools.development.AbstractModule startup
INFO: Module instance default is running at http://localhost:8080/
Mar 24, 2024 8:29:30 PM com.google.appengine.tools.development.AbstractModule startup
INFO: The admin console is running at http://localhost:8080/_ah/admin
Mar 24, 2024 10:29:30 PM com.google.appengine.tools.development.DevAppServerImpl doStart
INFO: Dev App Server is now running
Mar 24, 2024 10:29:38 PM com.google.appengine.tools.development.jetty.DevAppEngineWebAppContext disableTransportGuarantee
INFO: Ignoring <transport-guarantee> for /* as the SDK does not support HTTPS. It will still be used when you upload your application.
2024-03-24 22:29:38.771:WARN :oejs.CachingSessionDataStore:qtp988800485-48: Unable to load id 6GytTa8rtKasDzV7fpg45Q
com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call memcache.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.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:40)
at com.google.appengine.api.memcache.MemcacheServiceImpl.get(MemcacheServiceImpl.java:63)
at com.google.apphosting.runtime.MemcacheSessionStore.getSession(MemcacheSessionStore.java:46)
at com.google.apphosting.runtime.jetty.MemcacheSessionDataMap.lambda$load$0(MemcacheSessionDataMap.java:68)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1202)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1195)
at org.eclipse.jetty.session.SessionContext.run(SessionContext.java:92)
at com.google.apphosting.runtime.jetty.MemcacheSessionDataMap.load(MemcacheSessionDataMap.java:64)
at org.eclipse.jetty.session.CachingSessionDataStore.load(CachingSessionDataStore.java:91)
at org.eclipse.jetty.session.AbstractSessionCache.loadSession(AbstractSessionCache.java:391)
at org.eclipse.jetty.session.AbstractSessionCache.lambda$getAndEnter$0(AbstractSessionCache.java:328)
at org.eclipse.jetty.session.NullSessionCache.doComputeIfAbsent(NullSessionCache.java:86)
at org.eclipse.jetty.session.AbstractSessionCache.getAndEnter(AbstractSessionCache.java:321)
at org.eclipse.jetty.session.AbstractSessionCache.get(AbstractSessionCache.java:302)
at org.eclipse.jetty.session.AbstractSessionManager.getManagedSession(AbstractSessionManager.java:405)
at org.eclipse.jetty.session.AbstractSessionManager.resolveRequestedSessionId(AbstractSessionManager.java:1278)
at org.eclipse.jetty.ee8.nested.SessionHandler$CoreSessionManager.resolveRequestedSessionId(SessionHandler.java:524)
at org.eclipse.jetty.ee8.nested.SessionHandler.doScope(SessionHandler.java:390)
at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:150)
at org.eclipse.jetty.ee8.nested.ContextHandler.doScope(ContextHandler.java:803)
at com.google.appengine.tools.development.jetty.DevAppEngineWebAppContext.doScope(DevAppEngineWebAppContext.java:117)
at org.eclipse.jetty.ee8.nested.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.ee8.nested.ContextHandler.handle(ContextHandler.java:1401)
at org.eclipse.jetty.ee8.nested.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1293)
at org.eclipse.jetty.ee8.nested.HttpChannel.dispatch(HttpChannel.java:623)
at org.eclipse.jetty.ee8.nested.HttpChannel.handle(HttpChannel.java:455)
at org.eclipse.jetty.ee8.nested.ContextHandler$CoreContextHandler$CoreToNestedHandler.handle(ContextHandler.java:2233)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:761)
at org.eclipse.jetty.server.Server.handle(Server.java:179)
at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:594)
at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:424)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:971)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1201)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1156)
at java.base/java.lang.Thread.run(Thread.java:840)
2024-03-24 22:29:38.776:WARN :oejs.AbstractSessionManager:qtp988800485-48: Unable to get Session
java.lang.NullPointerException: Operation not allowed in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.appengine.api.NamespaceManager.set(NamespaceManager.java:112)
at com.google.apphosting.runtime.jetty.DatastoreSessionStore$SessionDataStoreImpl.createKeyForSession(DatastoreSessionStore.java:209)
at com.google.apphosting.runtime.jetty.DatastoreSessionStore$SessionDataStoreImpl.doLoad(DatastoreSessionStore.java:196)
at org.eclipse.jetty.session.AbstractSessionDataStore.lambda$load$1(AbstractSessionDataStore.java:152)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1202)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1195)
at org.eclipse.jetty.session.SessionContext.run(SessionContext.java:92)
at org.eclipse.jetty.session.AbstractSessionDataStore.load(AbstractSessionDataStore.java:160)
at org.eclipse.jetty.session.CachingSessionDataStore.load(CachingSessionDataStore.java:102)
at org.eclipse.jetty.session.AbstractSessionCache.loadSession(AbstractSessionCache.java:391)
at org.eclipse.jetty.session.AbstractSessionCache.lambda$getAndEnter$0(AbstractSessionCache.java:328)
at org.eclipse.jetty.session.NullSessionCache.doComputeIfAbsent(NullSessionCache.java:86)
at org.eclipse.jetty.session.AbstractSessionCache.getAndEnter(AbstractSessionCache.java:321)
at org.eclipse.jetty.session.AbstractSessionCache.get(AbstractSessionCache.java:302)
at org.eclipse.jetty.session.AbstractSessionManager.getManagedSession(AbstractSessionManager.java:405)
at org.eclipse.jetty.session.AbstractSessionManager.resolveRequestedSessionId(AbstractSessionManager.java:1278)
at org.eclipse.jetty.ee8.nested.SessionHandler$CoreSessionManager.resolveRequestedSessionId(SessionHandler.java:524)
at org.eclipse.jetty.ee8.nested.SessionHandler.doScope(SessionHandler.java:390)
at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:150)
at org.eclipse.jetty.ee8.nested.ContextHandler.doScope(ContextHandler.java:803)
at com.google.appengine.tools.development.jetty.DevAppEngineWebAppContext.doScope(DevAppEngineWebAppContext.java:117)
at org.eclipse.jetty.ee8.nested.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.ee8.nested.ContextHandler.handle(ContextHandler.java:1401)
at org.eclipse.jetty.ee8.nested.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1293)
at org.eclipse.jetty.ee8.nested.HttpChannel.dispatch(HttpChannel.java:623)
at org.eclipse.jetty.ee8.nested.HttpChannel.handle(HttpChannel.java:455)
at org.eclipse.jetty.ee8.nested.ContextHandler$CoreContextHandler$CoreToNestedHandler.handle(ContextHandler.java:2233)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:761)
at org.eclipse.jetty.server.Server.handle(Server.java:179)
at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:594)
at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:424)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:971)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1201)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1156)
at java.base/java.lang.Thread.run(Thread.java:840)
Mar 24, 2024 10:29:38 PM com.google.appengine.api.datastore.dev.LocalDatastoreService init
INFO: Local Datastore initialized:
Type: High Replication
Storage: C:\Users\james\dev\repo\Celbux\core\target\core-1.0.1\WEB-INF\appengine-generated\local_db.bin
Mar 24, 2024 10:29:38 PM com.google.appengine.api.datastore.dev.LocalDatastoreService load
INFO: Time to load datastore: 26 ms
If I can have a way to disable or change this thread restriction check, I would be most grateful. As it will mean I can develop via localhost, rather than having to deploy the codebase on each code change.
Help much appreciated.