J'ai une application Web GWT + GAE avec plusieurs services et modules. J'utilise le module functionlity de mvp4g. Tous mes services Étend:Les variables statiques finales sont réinitialisées dans Google App Engine Cloud
public abstract class BaseServiceImpl extends RemoteServiceServlet {
protected final static Map USERS = new HashMap();
J'utilise UTILISATEURS pour stocker mes sessions en cours d'utilisateurs actifs. Une fois que l'utilisateur s'authentifie, je stocke son identifiant de session en tant que clé de la carte.
protected String getSessionId() {
return getThreadLocalRequest().getSession().getId();
}
public String authenticate(String username, String password) {
...
..
.
String id = getSessionId();
synchronized(this) {
users.put(id, user);
}
...
..
.
Pour chaque requête, je vérifie si la session utilisateur est toujours valide.
J'ai activé les sessions. Ensuite, je posterai les dernières lignes de appengine-web.xml
...
..
.
<sessions-enabled>true</sessions-enabled>
</appengine-web-app>
Tout fonctionne très bien dans le serveur de développement. Toutefois, lorsque je le déploie sur le cloud du moteur d'applications google, la variable users est réinitialisée pour chaque requête.
Quelqu'un peut-il m'expliquer ce qu'il se passe? Comment dois-je procéder? Dois-je stocker les sessions utilisateur dans le magasin de données?
Pour utiliser vos sessions correctement, placez simplement des données dans celles-ci. Par exemple. "session.setAttribute (" une clé ", myData) Vous pouvez la récupérer en utilisant getAttribute (" une clé ") Vos données doivent être sérialisables Vous n'êtes pas censé créer des cartes personnalisées basées sur sessionID en mémoire. –