2011-02-08 7 views
8

Sto utilizzando javaeventing per scrivere una shell guidata uniforme per accedere a un database. Quindi, il mio caso d'uso è:Programmazione basata su Java ed eventi

  1. aprire la shell nella riga di comando.
  2. Ora la shell si collega al database e ascolta il comando in arrivo.
  3. quando riceve un comando, lo esegue e restituisce l'output richiesto.

Ora, come posso evitare il tipo di loop while(!exit){ //do stuff } qui? Come utilizzare correttamente gli eventi di Java?

Il modo dritto in avanti può essere:

while(!exit) 
{ 
    exit = myClass.execute("command"); //when command is exit, return true. 
} 

Ma, sto cercando Se Java eventing può dare una soluzione migliore.

Update1:

Qui è quello che sto cercando di implementare:

  1. La mia domanda è una shell (come le coperture MongoDB) per provare un database chiave-valore.
  2. Il codice semplice:

init(); //Initialize the connection with database
while(!exit) {
//exit = myClass.execute("put(5)"); //This returns false
exit = myClass.execute("exit"); //returns true, i.e. the user wants to exit the shell
}

Ora, qui non vedo l'uso di Java eventing e ho risolto il mio problema, puoi dirmi, COME java eventi ng verrà in foto qui? Voglio che l'utente attivi l'evento.

+0

Forse sto malinteso tua domanda, ma non è questo esattamente quello Eventing è per? Si registra il tuo evento, qui per uscire, e quando si verifica, il tuo codice viene chiamato. Quindi non dovrebbe esservi bisogno di scrivere un ciclo come quello. Per favore correggimi se sono fuori campo. –

+0

sì, hai ragione. Ma non sono in grado di capire, come raggiungerlo? – zengr

risposta

2

Trovo difficile capire cosa stai cercando di fare esattamente, ma ho esperienza con javaEventing e cercherò di aiutarti nel miglior modo possibile. Will Hartung ha ragione, devi creare i tuoi eventi da qualche parte.Quindi, se ho capito bene, vuoi avviare la tua java-app dalla riga di comando, quindi vuoi collegarti a un database e controllare che qualche comando sia inserito, e una volta inserito, vuoi creare un evento. È corretto?

In tal caso, sarà probabilmente necessario eseguire il polling del database, poiché i database ordinari non hanno modo di notificare l'applicazione quando alcune condizioni sono vere. Ciò significa che probabilmente avrai bisogno della clausola {}, in cui esegui query sul database, in attesa di un set di risultati contenente il comando che stai cercando. Una volta trovato, è possibile creare un evento come questo:

Class ReceivedCommandEvent extends EventManager.EventObject {} // define your event 

while (command==null) { 
    command = pollDataBaseForCommand(); //poll your databae for commands 
    waitForSomePeriod(); 
} 

EventManager.triggerEvent(this, new ReceivedCommandEvent(command));  //trigger your event, with the command as payload 

Ora, eventuali altri thread in ascolto per il vostro evento (la ReceivedCommandEvent) riceveranno l'evento, e possono recuperare il comando dal payload dell'evento.

Ora, la domanda è: perché si desidera utilizzare il database per comunicare i comandi comunque? Lo usi semplicemente per comunicare tra le applicazioni? Se anche l'altra applicazione è scritta in Java, è possibile considerare l'utilizzo di eventi distribuiti, consentendo a un'app java di inviare eventi a app java in esecuzione su altre JVM su altre macchine nella rete. Potresti voler dare un'occhiata a JED (http://code.google.com/p/jed-java-event-distribution), che fa esattamente questo.

Spero che questo aiuta, Bob

2

Tutto ciò che fa la libreria di eventi è eventi di spedizione per gli ascoltatori. Oltre a ciò, hai bisogno di qualcosa per creare effettivamente gli eventi.

In questo caso, è necessario il codice per leggere la console e generare eventi, è necessario potenzialmente qualcos'altro per "ascoltare" il DB e generare eventi da tale (presupponendo che si abbiano eventi DB asincroni che si stanno cercando , come le modifiche alla tabella o alla riga).

Quel codice deve ancora essere scritto.

E a meno che tale framework non fornisca tali classi di utilità, dovrai scriverlo tu stesso, e quelle classi saranno probabilmente proprio come le descriveresti tu.

Ma quelle classi sono tutte ai margini del sistema, a guidare i dati. Il resto del codice può essere interamente basato su eventi.