Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di salvod
    Registrato dal
    Feb 2002
    Messaggi
    314

    scatenare evento

    salve a tutti,
    ho una classe che implementa runnable, questa esegue ogni N minuti delle query su un database e aggiorna un i dati di un Vector con quelli ottenuti dalla query..
    ho l'esigenza che quando i dati dal db siano diversi di quelli presenti nel Vector sia scatenato un evento in modo tale che vegano dati in pasto ad una determinata "procedura" che deve fare delle operazioni che non sto a spiegare...
    come posso far scattare l'evento??

    Salvo.
    cercasi siti con 1000 accessi al giorno di media per testing servizio di statistiche professionale... per info pvt me

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il controllo sui dati mi sa che lo devi fare tu.
    Per scatenare l'evento puoi affidarti al paradigma Observer/Observable.

    Trovi tutto il materiale nella documentazione della Sun.

    Observable
    Observer

    Se cerchi su questo forum dovresti trovare altri post in cui indico questo paradigma e c'è anche una breve spiegazione di cos'è e come funziona.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di salvod
    Registrato dal
    Feb 2002
    Messaggi
    314
    mi potresti fare un esempio con quelche riga di codice?
    cercasi siti con 1000 accessi al giorno di media per testing servizio di statistiche professionale... per info pvt me

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Per costruire un piccolo esempio mi ci vuole un po' di tempo, ma vedrò di postarlo.
    A grandi linee, comunque, il modo di procedere è il seguente:

    1) Crei una classe che estende Observable. Questa sarà la classe che contiene i dati: ogni volta che essa subisce un cambiamento, provvederà a notificare tutti i suoi osservatori.

    2) Crei una classe che implementa l'interfaccia Observer: questa classe si registrerà come osservatore dell'altra classe e, ogni volta che l'altra viene modificata, sarà avvisata e riceverà una copia dell'oggetto modificato.

    Un po' di codice a grandi linee:
    codice:
    public class MieiDati extends Observable implements Runnable {
       private Vector v;   // Uso un Vector per contenere tutti i record dei dati
       ...
       public MieiDati() {
          v = new Vector();
       }
       ...
       public void eseguiQuery(String qry) {
          ...   // Eseguo la query sul DB
          if ( dati_modificati ) {   // Se i dati sono stati modificati
             notifyObservers();   // Notifico il cambiamento a tutti gli osservatori
          }
       }
    
       public Vector getVettore() { return v; }
    }
    
    public class Osservatore implements Observer {
       public Osservatore() {
          ...   // Inizializzazioni
       }
    
       public void update(Observable obj, Object arg) {
          // Quando eseguo questo codice significa che sono avvenuti dei cambiamenti
          // nella classe che contiene i dati. Ricevo una copia della classe modificata
          // nel parametro obj
          MieiDati md = (MieiDati) obj;
          Vector nuoviDati = md.getVettore();
       }
    }
    
    ..
    
    nella classe con il main:
    
    MieiDati md = new MieiDati();   // Creo il contenitore dei dati
    Osservatore oss = new Osservatore();   // Creo l'osservatore
    md.addObserver( oss );   // Registro l'osservare sulla classe oggetto di osservazione
    Tengo a farti notare che la classe che osserva può essere un qualunque oggetto, anche una tabella, una finestra, un thread... L'unica "limitazione" è imposta sull'oggetto osservato (nell'esempio di sopra ho citato il fatto che la tua classe implementa Runnable...) che deve per forza estendere Observable, ma l'osservatore è un'interfaccia, che quindi può essere quello che vuoi (nel mio esempio non è nient'altro che un oggetto semplice).

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di salvod
    Registrato dal
    Feb 2002
    Messaggi
    314
    sei stato chiarissimo
    grazie mille!

    Salvo.
    cercasi siti con 1000 accessi al giorno di media per testing servizio di statistiche professionale... per info pvt me

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    153
    Se leggi come funziona il pattern Observer è più facile che capire un esempio.

  7. #7
    Utente di HTML.it L'avatar di salvod
    Registrato dal
    Feb 2002
    Messaggi
    314
    niente da fare.. ho appena finito di mettere su tutto comprese le interfacce grafiche ma non funziona.... è come che non mandi il notify.
    ho fatto un println("Aggiornamento") dentro il metodo update(Observable obj, Object arg) ma non viene mai visualizzato
    cercasi siti con 1000 accessi al giorno di media per testing servizio di statistiche professionale... per info pvt me

  8. #8
    Utente di HTML.it L'avatar di salvod
    Registrato dal
    Feb 2002
    Messaggi
    314
    mi riposndo da solo..
    mancava la chiamata a setChanged(); prima di fare la notifica
    cercasi siti con 1000 accessi al giorno di media per testing servizio di statistiche professionale... per info pvt me

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da salvod
    mi riposndo da solo..
    mancava la chiamata a setChanged(); prima di fare la notifica
    Già... mi sono dimenticato io di specificarlo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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