Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [JAVA-JSP] Lista utenti connessi

    Salve sono un nuovo iscritto al forum.

    Innanzitutto volevo fare i complimenti per i contenuti del forum, davvero vasti e sempre aggiornati.

    Ho un problemino che ormai ha saturatro il mio livello di confusione mentale.

    Devo realizzare una applicazione MySQL-Java-JSP che gira su Tomcat. Non riesco a implementare una lista di utenti connessi senza andare a scomodare MySQL. Avevo pensato ad usare una variabile di tipo ArrayList aggiornata al momento del login, ma sto in un momento di confusione critica.

    Qualcuno ha dei suggerimenti su quale strada intrapendere?

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Soluzioni un pò estrema....ma forse interessante per futuri sviluppi....
    Mai sentito parlare di classi SINGLETON??
    Ovvero sono classi che vengono generate una sola volta ( alla loro prima istanza, oppure con l'up del webServer ) e si mantengono thread safe.

    Solitamente hanno un metodo getInstance()
    codice:
    public static synchronized MiaClasseSINGLETON getInstance(){
          if( !MiaClasseSINGLETON istanziata )
               istanzia_MiaClasseSINGLETON
          return MiaClasseSINGLETON;
    }
    Dentro questa classe salvi una lista di utenti connessi e la getisci come vuoi lato server...
    Dato che è public static la puoi richiamare da qualsiasi altra classe che la includa tramite il metodo
    codice:
    MiaClasseSINGLETON var = MiaClasseSINGLETON.getInstance();
    Dove MiaClasseSINGLETON deve esser proprio scritta con il nome della classe.

    Mentre synchronized serve come multiThread safe, ovvero se più utenti richiedono contemporaneamente il metodo getInstance queste richieste vengono gestite in modo ordinato, così che se la classe non fosse istanziata venga instanziata alla prima richiesta.
    Se non fosse presente synchronized potrebbe accadere che a fronte di più richieste contemporanee e che la classe non fosse istanziata che la classe venga istanziata più volte, non definendola più SINGLETON ( che pessimo modo di esprimermi ).

    Spero di esser stato capito.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  3. #3
    Puoi utilizzare l'HttpSessionListener.
    E' un listener che ti permette implementando opportuni metodi, di conoscere quando una sessione viene creata e quando viene distrutta.

    Usi una variabile statica sulla quale effettuare incrementi o decrementi a seconda del metodo chiamato.

    http://programmarejava.blogspot.com/...ta-in-jav.html

    In questo articolo è spiegato come fare.

  4. #4
    Grazie a entrambi, forse la soluzione che mi è più utile è la prima: in realtà non mi serve il numero degli utenti connessi, ma la lista degli utenti connessi.

    Potrei però modificare la seconda soluzione ed utilizzare un ArrayList che viene aggiornato nello stesso modo di un contatore con int.

  5. #5
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    In effetti se non ti serve altro penso che ti conviene utilizzare la proposta di peppem.
    Infatti la classe SINGLETON ( nel mio caso la chiamo Resources.java ) la utilizzo per caricare tutte quelle configurazioni comuni per tutte le classi che fanno parte della mia webapp, come la richesta di connessione, layout di default ed altre configurazioni....

    Alla fine quello che ti serve è una soluzione stile forum :

    Utenti attualmente connessio : @DI3GO@, peppem, jozmile
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  6. #6
    In realtà uso già il pattern singleton per le connessioni al db mysql. A questo punto potrei usare già la classe ConenctionManager che ho che contiene i parametri di connessione al db mysql. Per motivi di sicurezza e maggiore pulizia del codice, nonchè strutturazione del progetto, magari mi conviene usare la soluzione di peppem. In fondo si tratta di realizzare una classe in più, ma il risultato è più "ordinato".

    PErò anche la tua soluzione è interessante. Come implementeresti la tua soluzione in una classe simile a questa?

    codice:
    import java.sql.*;   
              public class ConnectionManager {          
              public ConnectionManager() {     }         
              private static boolean driverLoaded = false;     
              private static final String driver="com.mysql.jdbc.Driver";    
              private static final String url="jdbc:mysql://localhost/db";     
              private static final String login="****";    
              private static final String pass="****";          
              public static synchronized Connection getConnection() throws ClassNotFoundException, SQLException {        
                       if(!driverLoaded) {             
                            Class.forName(driver);             
                            driverLoaded= true;         
                        }         
               return DriverManager.getConnection(url, login, pass);     
            }      
    }

  7. #7
    Non vorrei andare off-topic, ma visto che parlate spesso di parametri di configurazione, vorrei suggerirvi, sperando di fare cosa gradita di utilizzare il file web.xml piuttosto che il singleton.

    In web.xml si possono inserire dei parametri sia globali, sia locali rispetto a una servlet.

    Il singleton invece usatelo per mantere unica istanza di un oggetto(ad esempio la connesione al db) non per le configurazioni.

  8. #8
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente spedito da peppem
    Non vorrei andare off-topic, ma visto che parlate spesso di parametri di configurazione, vorrei suggerirvi, sperando di fare cosa gradita di utilizzare il file web.xml piuttosto che il singleton.

    In web.xml si possono inserire dei parametri sia globali, sia locali rispetto a una servlet.

    Il singleton invece usatelo per mantere unica istanza di un oggetto(ad esempio la connesione al db) non per le configurazioni.
    Non ricordo se si può modificare dinamicamente il parametro nel file web.xml con una lista di dimensione non conosciuta....Teoricamente sì....

    Per rispondere a jozmile:
    Dipende da che informazioni devi impostare.
    Allora all'interno del tuo singleton creerei una variabile static ListaUtenti, che viene aggiornata al login ed al logout/fine_sessione.
    Stavo pensando al modo per indicizzare la rimozione, ovvero quando hai un utente in sessione e lo aggiungi, nessun problema, alla chiamata del login chiami una funzione statica della tua classe e fai aggiungere l'elemento alla lista.
    Quando fai il logout stessa identica cosa....stavo pensando ad una soluzione quando scade la sessione, in quanto ( sinceramente mai documentato ) se hai modo di recuperare i dati di chi gli è scaduta la sessione....Quindi di conseguenza chiamare una rimozione di oggetto nella lista....
    Idee da qualcuno?
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  9. #9
    Per il discorso web.xml.. non intendevo dire di mettere lì dentro la lista degli utenti, anche perchè non è possibile.
    Intendevo dire, di valutare tale soluzioni per le configurazioni, per dei parametri fissi (come l'url del db o username e pwd della connessione al db giusto per fare degli esempi).

    Riguardo invece alle sessioni, l'inserimento e cancellazione dalla lista degli utenti credo sia opportuno farlo sull'implementazione del listener che vi ho proposto.
    Anche perchè lui(Il listener) è in grado di capire quando scade la sessione.

    Inoltre con questa soluzione il codice è centralizzato nell'implementazione delle interfacce.
    In caso contrario bisogna modificare la lista degli utenti attivi in ogni pagina dove si effettua una creazione e/o distruzione di sessione.

  10. #10
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Vorrei solamente una conferma a riguardo:
    Se la sessione scade dopo tot tempo di inattività viene compiuta chiamata la stessa funzione che chiamerebbe il logout??

    Tnx
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

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.