我正在浏览Vosao CMS的代码,这是一个托管在 Google App Engine 上的开源 CMS(我认为这是一个很棒的想法),我偶然发现了CurrentUser类中的以下代码:
/**
* Current user session value cache class. Due to GAE single-threaded nature
* we can cache currently logged in user in static property. Which we set in
* authentication filter.
*/
public class CurrentUser {
private static UserEntity user;
public static UserEntity getInstance2() {
return user;
}
public static void setInstance2(UserEntity aUser) {
user = aUser;
}
}
我从未使用过 GAE,但这对我来说听起来很奇怪。
GAE真的是“单线程”吗?使用 GAE 时将请求范围的数据存储在静态字段中是否安全?
这是否意味着,对于每个 JVM 实例,一次只会执行一个HTTP 请求,而所有其他请求都在等待?
这是一个常见的 GAE 习语吗?如果不是,那么在请求期间存储此类 UserEntity 的最佳 GAE 习语是什么?不应该像在 Spring Security 中那样使用 ThreadLocal 吗?还是某种范围的 bean(由依赖注入容器管理)?