Mysql
 sql >> Database >  >> RDS >> Mysql

Desktop Java:come separare l'accesso al database dal thread dell'interfaccia utente?

Sembra che le tue query db vengano eseguite dal thread dell'interfaccia utente anche se dici che un'attività pianificata esegue le query (?). Per sicurezza, puoi stampare uno stacktrace in cui accedi al database:

new Exception().printStacktrace();

Passando alla soluzione proposta:sembra un design decente se le tue query db sono lente e altrimenti bloccherebbero la tua interfaccia utente. Potresti implementare un sistema di eventi tra il livello dell'interfaccia utente e il livello db, magari un semplice approccio basato sulla coda.

MODIFICA:

È molto probabile che ci siano esempi per trovare come implementare una soluzione basata su eventi.

Dichiarazione di non responsabilità:non ho fatto alcuna vera programmazione dell'interfaccia utente per molti anni.

  1. L'utente fa clic su un pulsante nell'interfaccia utente. Il thread dell'interfaccia utente inserisce un oggetto evento (DataWantedEvent) in una coda (java.util.Queue), cambia un'etichetta ("In attesa di dati...") e quindi continua e attende altre interazioni dell'utente.
  2. Il thread del livello db prende l'evento dalla coda e interroga il database. Il risultato viene ripubblicato su un'altra coda in un oggetto risultato.
  3. Un thread dell'interfaccia utente (probabilmente non il thread principale) preleva l'oggetto risultato dalla coda dei risultati e aggiorna l'interfaccia utente.

Potrebbe non essere necessaria una coda per la pubblicazione di oggetti risultato nell'interfaccia utente. È possibile richiamare direttamente un metodo di aggiornamento.

Se l'utente fa clic su un pulsante Annulla, l'evento di aggiornamento/callback potrebbe essere ignorato o, se possibile, la query db potrebbe essere annullata.