Я просматривал код Vosao CMS, открытый исходный код CMS, размещенный на Google App Engine (который я думаю, это огромная идея), и я наткнулся на следующий код внутри CurrentUser класса:Безопасно ли хранить данные в статическом поле при развертывании в Google App Engine?
/**
* 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;
}
}
I «Я никогда не использовал GAE, но это звучит очень странно для меня.
Является ли GAE действительно «однопоточным»? Безопасно ли хранить данные с областью действия запроса в статическом поле при использовании GAE?
Означает ли это, что для каждого экземпляра JVM только один HTTP-запрос будет выполнен одновременно, а все остальные запросы ждут?
Является ли это общей идиомой GAE? Если нет, то какова была бы лучшая идиома GAE для хранения такого UserEntity на время запроса? Разве нельзя использовать ThreadLocal здесь, как в Spring Security? Или какой-то предметный фасоль (управляемый контейнером Injection Dependency)?