Domanda

Ho un progetto per la scuola e devo usare Java. Recentemente ho trovato quadro gioco e voglio provare a usarlo. E 'abbastanza facile per un avvio rapido, ma mi sono imbattuto in un problema con la sessione.

apolide per sua natura, il gioco trasmette tutta la sessione di utente in biscotto e riceve su richiesta successiva, in modo da permette solo limitata quantità di dati in sessione.

Quello che voglio fare è quello di prendere oggetto User dal DB login utente, e tenerlo in sessione, così ho potuto accedervi da modelli e così via (ho alcuni metodi in classe User che ho bisogno di chiamare in ordine per personalizzare UI), ma se metto oggetto d'uso, il gioco chiama il suo metodo toString e mette che in sessione.

ho scoperto che metodo consigliato è quello di mettere maggiore quantità di dati in cache, ma non so come accedervi da modello (Credo che avrei potuto fare il metodo con @Before annotazioni e aggiungere l'utente a renderArgs, ma ciò non sembrano molto pulito per me). Un altro problema è che la cache ha limitato la vita, quindi il mio oggetto può sparire.

C'è qualcuno che ha esperienza con questo tipo di problemi?

C'è un modo per utilizzare la sessione lato server con il gioco? Non ho bisogno di funzionalità REST per questo progetto, in modo, per quanto mi riguarda, l'applicazione può salvare lo stato ...

È stato utile?

Soluzione

Usa Java serializzazione serializzare un HashMap in un file o nel database. Nome del file o della colonna id dopo un identificatore univoco di memorizzare nel cookie dell'utente. Poi mettere l'oggetto utente nel hashmap prima di serializzare l'HashMap. Ora avete un archivio permanente che è possibile accedere. Quando il quadro si dimentica l'oggetto d'uso o qualsiasi altra informazione sessione, è possibile deserializzare il HashMap. Quindi scrivere alcuni metodi di supporto statici, oggetto statico SessionDB.get (String id, String key) e SessionDB.put (String id, String key, Object value). Io uso questo metodo sul mio quadro in casa per memorizzare le informazioni di sessione su un piccolo server farm. Naturalmente io uso il database, non è un file system.

Altri suggerimenti

Penso che si dovrebbe avere uno sguardo a

http://groups.google.com/group/play-framework/browse_thread/thread/3d6946ad0b00303b/188e1b272d91408d?lnk=gst&q=store+object+in+session#188e1b272d91408d

si può anche cercare qui

http://groups.google.com/group/play-framework

la lista di discussione quadro gioco a gruppi di Google è molto attiva, e di solito si ottiene una risposta in un paio di giorni, al massimo ...

Un'altra opzione è quella di convertire gli oggetti in JSON. Ho creato un semplice Util per questo e usato FlexJSON a puntate miei oggetti in JSON.

import play.Logger;
import play.mvc.Http;
import play.mvc.Http.Session;
import flexjson.JSONDeserializer;
import flexjson.JSONSerializer;

public class SessionManager {

private static JSONSerializer s = new JSONSerializer();

    public static void addSession(String key, Object value) {

        if(value != null) {
            Session session = Http.Context.current().session();
            session.put(key, s.deepSerialize(value));
        } else {
            Logger.info("Value for " + key + " is null");
        }
    }

    public static <T> T get(String key) {

        Session session = Http.Context.current().session();
        final String value = session.get(key);

        if (value == null) {
            return null;
        }

        return new JSONDeserializer<T>().deserialize(value);
    }

}

NOTA: Dovrete gestire la pulizia dopo il lavoro e tenere a mente che, poiché questo viene memorizzato in un cookie, non è così sicura

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top