sql >> Databáze >  >> RDS >> Mysql

Java desktop – jak oddělit přístup k databázi od vlákna uživatelského rozhraní?

Zdá se, že vaše dotazy db jsou spouštěny z vlákna uživatelského rozhraní, i když říkáte, že naplánovaná úloha spouští dotazy (?). Pro jistotu si můžete vytisknout stacktrace, kde přistupujete k databázi:

new Exception().printStacktrace();

K vašemu navrhovanému řešení:vypadá to jako slušný design, pokud jsou vaše dotazy db pomalé a jinak by zmrazily vaše uživatelské rozhraní. Mezi vrstvou uživatelského rozhraní a vrstvou db byste mohli implementovat systém událostí, možná jednoduchý přístup založený na frontě.

UPRAVIT:

Nejpravděpodobnější jsou příklady, jak implementovat řešení založené na událostech.

Zřeknutí se odpovědnosti:Mnoho let jsem neprováděl žádné skutečné programování uživatelského rozhraní.

  1. Uživatel klikne na tlačítko v uživatelském rozhraní. Vlákno uživatelského rozhraní vloží objekt události (DataWantedEvent) do fronty (java.util.Queue), změní štítek ("Čekání na data...") a poté pokračuje a čeká na další interakce uživatele.
  2. Vlákno vrstvy db vezme událost z fronty a dotazuje se databáze. Výsledek je odeslán zpět do jiné fronty ve výsledném objektu.
  3. Vlákno uživatelského rozhraní (pravděpodobně ne hlavní vlákno) vezme výsledný objekt z fronty výsledků a aktualizuje uživatelské rozhraní.

Fronta pro odesílání výsledných objektů zpět do uživatelského rozhraní nemusí být potřeba. Metodu aktualizace lze vyvolat přímo.

Pokud uživatel klikne na tlačítko Storno, událost aktualizace/zpětné volání může být ignorována nebo, pokud je to možné, může být zrušen dotaz db.



  1. Jak migrovat databázi Oracle z AWS EC2 na AWS RDS

  2. Jak definovat dotaz na úložiště JPA s připojením?

  3. MIN/MAX cena za každý produkt (dotaz)

  4. Jak správně vyčistím data přijatá z textové oblasti při jejich výstupu zpět do textové oblasti?