la soluzione che avevo trovato è di creare un piccolo frame che non mostra nulla come output ma che ogni tot secondi si aggiorna ed interroga il database guardando qual'è l'ultima righa di chat inserita e la confronta con quella memorizzata nella session dell'utente (magari soltanto l'id così eviti di impiegare molto spazio).

se la riga è uguale vuol dire che il refresh non è necessario altrimenti aggiorni il frame principale ricaricando i dati della chat.

mi sa che cmq una query al databasa per ogni refresh la devi fare.

C'è da dire che una query tipo: select max(id) as numero from righe_chat è decisamente diversa da prendere ogni volta tutti i dati e mostrarli all'utente.