Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615

    [Postgre] Anomalia su connessioni contemporanee (per esperti)

    Cari utenti,
    un'applicazione per me fondamentale ha prodotto un'anomalia davvero singolare. Durante le ultime 48 ore ho lavorato incessantemente per la sua analisi e la sua soluzione; a quelli di voi più esperti nelle web application sviluppate in Java vorrei illustrare gli effetti riscontrati, partecipandovi delle mie deduzione e delle mie ipotesi per una possibile soluzione, esprimendo enorme gratitudine a quanti scriveranno in questa discussione.

    La mia applicazione sviluppata in Java si connette ad un database Postgre tramite connessioni che apre alla necessità e chiude subito dopo. La prima consultazione che viene fatta col database è quando, visualizzato il pannello di login, si inseriscono le credenziali e si seleziona il pulsante di invio. In diversi test eseguiti ormai da mesi tutto ha funzionato perfettamente, da un paio di giorni ecco cosa accade. Premetto che il generarsi di una pagina bianca senza errori relativi al Tomcat è come saprete dovuta quasi sempre ad un errore nella connessione al database.

    1) Tentando di accedere dal mio computer con Linux e Firefox, tutto ha funzionato perfettamente. Facendo compiere invece i test ad un'altra persona da diversa postazione con Windows e IE8, all'atto del login quest'ultima vedeva una pagina bianca. Nel frattempo, dal mio computer tentando ad eseguire accessi ed uscite dal programma tutto continuava a funzionare perfettamente.
    2) Dopo circa un'ora durante la quale nessuno tentava più di accedere al programma, la persona da diversa postazione quindi con Windows e IE8 accedeva correttamente al programma ed io stavolta dalla postazione con Linux tentando di entrare visualizzavo una pagina bianca.
    3) Il giorno seguente, tentavo di accedere da un pc e tutto funzionava correttamente. Poi passavo su altro computer e riscontravo nuovamente all'atto del login una pagina bianca.
    4) Il programma è stato testato per mesi su sistemi operativi Linux, Win e Mac sotto otto diversi browser e non ha mai dato problemi di compatibilità in tal senso sia per sistema operativo che per browser.
    5) Puntualizzo che il problema non si verifica mai all'apertura della web application (la schermata di inserimento credenziali è sempre correttamente visualizzata, da chiunque e da qualsiasi postazione) ma solo quando quest'ultima deve consultare il database (quindi, alla selezione del pulsante login dopo l'inserimento delle credenziali).

    Ecco le mie deduzioni.

    1) Il problema è del tutto indipendente sia dal browser che dal sistema operativo.
    2) Il problema è di certo legato in qualche modo alla connessione al database, infatti non vedo né messaggi di errore del Tomcat, né pagine che si aprono con elementi anomali, ma quella pagina bianca che compare tipicamente solo quando ci sono difficoltà nella connessione al db (connessione, non consultazione; si fosse trattato ad esempio di query sbagliate, avrei visto un messaggio di errore; la stessa pagina bianca compare anche, ad esempio, anche se le credenziali di connessione al db sono errate). Ribadisco che non è in alcun modo legato alla connessione dell'utente all'applicazione ma alla connessione dell'applicazione al database.
    3) Il problema è legato a circostanze di accessi multipli in quanto si verifica solo quando, dopo l'accesso di un utente, un secondo utente tenta di accedervi. E fate caso al fatto che non parlo di accessi contemporanei ma di accessi eseguiti a breve distanza tra loro, l'uno dopo che l'altro si è correttamente chiuso, e che quindi dovrebbero funzionare correttamente. E si verifica sempre e solo se tali accessi sono eseguiti da pc diversi.
    4) La causa del problema è quindi la seguente: quando un utente accede all'applicazione, l'applicazione si connette al database. Quando un secondo utente accede all'applicazione (ma da un computer diverso dal precedente), anche in questo caso avviene un tentativo di connessione al database ma quest'ultimo non va a buon fine in quanto c'è già quella precedente.
    5) Considerato che utilizzi contemporanei di più utenti di applicazioni che si loggano allo stesso database utilizzando le stesse credenziali sono un fatto assolutamente normale (pensate solo ai CMS, come Joomla; se 50 utenti vedono contemporaneamente un sito in Joomla, questo si connette ogni volta al database utilizzando le medesime credenziali di accesso; e non per questo joomla fa capricci), fatto che è reso possibile da una gestione intelligente delle connessioni e dalla loro immediata chiusura subito dopo che sono servite al loro scopo (ad esempio, apro la connessione per prelevare i dati che servono; li estraggo con una query; subito dopo la richiudo, rendendo il database disponibile ad un'altra connessione eseguita con le stesse credenziali - correggetemi se sbaglio -); devo dedurre che in qualche classe business della mia applicazione qualche connessione non viene chiusa dopo il suo utilizzo. Convenute con me sul fatto che potrebbe essere una possibile causa e che quindi verificare la loro chiusura potrebbe essere una soluzione?

    Prima di concludere, un solo punto oscuro. Se la causa dipende effettivamente dalla connessione al db, come TUTTI i sintomi sembrano dimostrare, come mai si verifica solo quando accedo all'applicazione da computer diversi? Mi spiego; un conto è l'accesso che l'utente esegue all'applicazione che si trova sul Tomcat (ed in questo caso il server Tomcat "capisce" che sto accedendo da computer diversi con sessioni di accesso al Tomcat diverse) ed un conto è l'accesso che la mia applicazione esegue al database, accesso eseguito quindi sempre dalla stessa applicazione che si trova sempre sulla stessa macchina. In quest'ultimo caso, che ne sa il database del fatto che gli utenti che hanno acceduto all'applicazione dalla quale è poi partita la consultazione al database lo hanno fatto da computer diversi?

    Con immensa riconoscenza ad utenti così esperti da darmi qualche lume,

    Archimede.

    PS Ho scritto al provider chiedendo i log del tomcat nelle fasce orarie nelle quali si è riscontrato il problema ed in mattinata dovrebbero essermi inviati; se a qualcuno dovessero essergli utili per darmi una risposta, non esistate a chiederi di postarli.

  2. #2
    Ti parlo da non esperto di java ma da esperto (nel senso che c'ho sbattuto a lungo la testa) di webapp e postgresql.

    Il tuo problema è: boh. Nel senso che se non riesci da java a farti stampare a video l'errore che ti da, è difficile anche ipotizzare (mettetevi l'app in un server in housing almeno avete accesso al server )

    Visto che immagino tu non abbia il minimo controllo sul server, chiedi al provider se ci sono stati aggiornamenti/modfiiche a postgres o alla sua configurazione, studiati i log di tomcat (magari anche quelli di postgresql ) e vedi se trovi qualche log utile

    riguardo al punto 5, controlla le tue classi business come gestiscono la connessione (che cmq dovresti far gestire ad una classe base estesa da tutte le business ) anche se mi parrebbe strano perchè ad esempio, in configurazione di default, mi pare che postgres regga 100 connessioni contemporanee quindi non penso che tu vada a raggiungere tale limite
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Avevi ragione. Grazie. Si trattava di un problema che dal log era evidentissimo: difficoltà di acquisire le credenziali da un file xml. E il provider ha scoperto dipendere dai permessi impostati su una cartella. Inimmaginabile senza i log! Quesito risolto.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.