2010-05-26 19 views
7

Ho uno scenario in cui il mio programma Java deve comunicare continuamente con la tabella del database, ad esempio il mio programma Java deve ottenere i dati della mia tabella quando vengono aggiunte nuove righe al runtime. Dovrebbe esserci una comunicazione continua tra il mio programma e il mio database.Recupero continuo dei dati dal database utilizzando Java

Se la tabella ha inizialmente 10 righe e 2 righe vengono aggiunte dall'utente, deve rilevarlo e restituire le righe.

Il mio programma non dovrebbe utilizzare AJAX e timer.

+3

Le chiamate (aggiungendo righe) al database vengono eseguite tramite il programma Java o tramite un'altra app? – JeremyFromEarth

risposta

0

Non è il problema più semplice, davvero.

Dividiamo in 2 problemi più piccoli:

1) Come attivare ricaricare senza timer e ajax

2) come implementare lato server

  1. Non c'è modo di comunicare client dal server. Quindi, è necessario utilizzare flash o silverlight o JavaFX o applet per creare un thick client. Se il problema con Ajax è che non sai come usarlo per questo problema, puoi esaminare alcune librerie pronte per l'uso di tag jsp o componenti jsf con supporto ajax.

  2. Se si dispone di un solo server, aggiungere una cache. Se ci sono diversi server, prendere in considerazione l'utilizzo di cache distribuite.

3

Se il database in uso è Oracle, considerare l'utilizzo di triggers, quella chiamata java stored procedure, che notifica il vostro client di cambiamenti nel db (utilizzando JMS, RMI o quello che volete).

0

Se si dispone di un database a basso traffico, è possibile implementare una discussione che verifica rapidamente gli aggiornamenti del DB (polling).

Se si dispone di un DB ad alto traffico, non lo consiglierei, poiché il polling crea molto traffico aggiuntivo.

2

senza Ajax e timer, non sembra eseguire questa operazione.

Ho anche affrontato lo stesso problema, in cui ho bisogno di spingere alcuni dati dal server al client quando cambia.

Per questo, è possibile l'utente Server push AKA Programmazione "Cometa".

In coment

  • facciamo un canale tra client e server, in cui cliente sottoscrive per canale particolare.
  • Il server inserisce i propri dati nel canale quando ce l'ha.
  • quando il client legge il canale, ottiene tutti i dati nel canale e il canale viene svuotato.
  • così ogni volta che il client legge dal canale, otterrà solo nuovi dati.

anche per monitorare i cambiamenti di DB, è possibile avere due cose,

  1. Alcuni grilletto/timer (Check out Quartz Scheduler)
  2. meccanismo di base Evento, che spinge i dati nel canale su particolari eventi.

In pratica, il client non può sapere nulla sul lato server, quindi è necessario inviare alcuni dati o eventi per comunicare al cliente che, i have some new data, please call some method. Il suo tipo di notifica. Quindi per favore controlla comet/server push con la notifica dell'evento.

spero che questo aiuti.

grazie.

0

Il client di notifica del server non è una buona idea (si consideri uno scenario con 1000 client). Usi qualche livello di persistenza o devi attaccarti al puro JDBC?

+0

sì, ho un livello di persistenza e il mio database è DB2. raccomanda gentilmente. – deathcaller

0

Se si dispone di registri binari attivati ​​in MYSQL, è possibile visualizzare tutte le transazioni che si verificano nel database.

0

Un modo portatile per eseguire questa operazione è l'aggiunta di una data/ora della colonna (data di creazione) che indica quando la riga è stata aggiunta alla tabella. Dopo il caricamento iniziale del contenuto, è sufficiente eseguire il polling per il nuovo contenuto che contiene una clausola where current_time> = create_date. Nel caso in cui le righe possano avere timestamp identici è necessario filtrare i duplicati prima di aggiungerli.

Problemi correlati