Я просматривал код Vosao CMS , CMS с открытым исходным кодом, размещенной на Google App Engine (что я считаю отличной идеей), и наткнулся на следующий код внутри 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? Если нет, то как лучше всего использовать GAE для хранения такого UserEntity на время запроса? Не следует ли здесь использовать ThreadLocal, как это делают в Spring Security? Или какой-то bean-объект scoped (управляемый контейнером Dependency Injection)?