Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    7

    [EJB] Stateful non salvato nel container

    Buonasera a tutti
    sto facendo un carrello della spesa che inizializza e gestisce una synchronized list.
    Funziona perfettamente all'interno di una singola sessione.. ma quando riavvio il browser e vado per visualizzare tale lista è vuota.. non son oriuscito a trovare una soluzione però ho capito che ogni volta che avvio il browser il bean viene creato di nuovo

    posto il codice
    codice:
     
    @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            carrelloLocal carrello=null;
            HttpSession session = request.getSession();
            //recupero il bean del carrello se è stato già instanziato
            String username= (String)session.getAttribute("username");
            carrello = (carrelloLocal)session.getAttribute("carrello"+username);
            System.out.println("PROVO A OTTENERE CARRELLO "+username);
            if(carrello == null){
                
                    //creo una nuova istanza del bean,
                    //carico il context del mio application server e faccio richiesta di un nuovo bean
                    carrello = lookupcarrelloLocal();
                    session.setAttribute("carrello"+username, carrello);
                    System.out.println("CREATO NUOVO CARRELLO "+username);
                }
            
           List<Prodotto> lista=carrello.getCarrello();
           session.setAttribute("listacarrello", lista);
           getServletContext().getRequestDispatcher("/visualizzaCarrello.jsp?listacarrello=listacarrello").forward(request, response);
            
            
            //aggiorna il carrello
        }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Mi sembra ovvio.
    Quando tu chiudi il browser e lo riapri, di fatto crei una nuova sessione.

    La soluzione consiste in:

    1) Salvare i dati della sessione in modo persistente (ad esempio, in un DB)
    2) Quando l'utente torna nella tua applicazione, si vanno a ripescare di dati dal DB e li si rimettono in sessione

    Ovviamente tutto questo richiede un sistema di autenticazione (il server non può sapere a priori chi c'è dall'altra parte, quindi non può sapere quali dati deve recuperare dal DB).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    7
    ci avevo pensato a utilizzare un DB..
    forse dovevo porre meglio la domanda..
    esiste un modo per evitare di untilizzare un db? forse ancora devo capire bene l'utilizzo degli stateful bean

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da 030366
    ci avevo pensato a utilizzare un DB..
    forse dovevo porre meglio la domanda..
    esiste un modo per evitare di untilizzare un db? forse ancora devo capire bene l'utilizzo degli stateful bean
    Beh, l'uso di un DB è la scelta più conveniente.
    Un'alternativa è salvare i dati su file, ma non mi sembra una gran soluzione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.