Domanda

Nel podcast #15, menzionato da Jeff ha twittato su come eseguire un normale evento in background come se fosse una normale funzione - purtroppo non riesco a trovare che attraverso twitter.Ora ho bisogno di fare una cosa simile e sta per buttare la domanda per le masse.

Il mio piano attuale è quando il primo utente (probabilmente me) entra nel sito inizia un thread in background che attende il tempo previsto (ora allo scoccare dell'ora) e poi prende il via la manifestazione bloccando gli altri (io sono un programmatore di Windows mediante il commercio, e quindi penso che in termini di eventi e WaitOnMultipleObjects) fino al completamento.

Come ha fatto Jeff farlo in Asp.Net ed è il suo metodo applicabile per Java web-app world?

È stato utile?

Soluzione

Penso che lo sviluppo di una soluzione personalizzata per l'esecuzione di attività in background non sempre vale la pena, quindi vi consiglio di usare il Quartz Scheduler in Java.

Nella tua situazione (bisogno di eseguire operazioni in background in una applicazione web), è possibile utilizzare il ServletContextListener inclusi nella distribuzione inizializzare il motore all'avvio del vostro contenitore web.

Dopo di che si dispone di un numero di possibilità per lo start (trigger) la vostra attività in background (posti di lavoro), ad es.è possibile utilizzare i Calendari o cron espressioni.Nella tua situazione probabilmente si dovrebbe risolvere con SimpleTrigger che consente di eseguire i lavori in fisso, a intervalli regolari.

I lavori stessi, può essere descritto facilmente anche in Quarzo, tuttavia non è stato fornito alcun dettaglio su ciò che è necessario eseguire, quindi non posso fornire un suggerimento in zona.

Altri suggerimenti

Come accennato, il Quarzo è una soluzione standard.Se non si cura di clustering o la persistenza di attività in background tra un riavvio, è possibile utilizzare il costruito nel pool di thread di supporto (in Java 5,6).Se si utilizza un ScheduledExecutorService si può mettere Runnables nel pool di thread in background che attendere un determinato periodo di tempo prima di eseguirlo.

Se ti interessa il clustering e/o di persistenza, è possibile utilizzare code JMS per l'esecuzione asincrona, se hai ancora bisogno di qualche modo per ritardare le attività in background (è possibile utilizzare il Quarzo o il ScheduledExecutorService per fare questo).

Jeff meccanismo era quello di creare una sorta di cache oggetto che ASP.Net vorresti ricreare automaticamente a una sorta di intervallo - sembrava di essere un ASP.Net soluzione specifica, quindi probabilmente non ti aiuterà (o me) molto nel mondo Java.

Vedere https://stackoverflow.fogbugz.com/default.asp?W13117

Atwood:Beh, io inizialmente chiesto su Twitter, perché volevo qualcosa di leggero peso.Io davvero non volevo, come scrivere un servizio di windows.Mi sentivo che era al di fuori della banda di codice.Inoltre il codice che esegue effettivamente il lavoro è una pagina web, infatti, perché per me è un'unità logica di lavoro su un sito web una pagina web.Così, è davvero come siamo chiamate al sito web, è come un'altra richiesta sul sito, così ho visto come qualcosa che dovrebbe stare in linea, e il piccolo approccio che abbiamo fatto che mi era stato consigliato su Twitter è stata essenzialmente di aggiungere qualcosa alla cache dell'applicazione, con una scadenza fissata, allora si ha una chiamata di ritorno, in modo che quando scade si chiama una certa funzione che fa il lavoro e poi si aggiungono nuovamente la cache con la stessa scadenza.Così, è un po', forse "ghetto" è la parola giusta.

Il mio approccio è sempre stato quello di avere per OS (es.Cron o l'utilità di pianificazione di Windows) caricare un URL specifico a qualche intervallo, e quindi l'installazione di una pagina all'URL di controllo della coda, e di eseguire qualsiasi attività sono stati richiesti, ma sarei interessato a sapere se c'è un modo migliore.

Dalla trascrizione, sembra FogBugz utilizza il servizio di windows caricamento di un URL tipo di approccio.

Spolsky:Così abbiamo questa speciale pagina chiamata battito cardiaco.asp.E che la pagina, ogni volta che si colpisce, e nessuno può colpire in qualsiasi momento:male non fa.Ma quando la pagina viene eseguita verifica una coda di attività in attesa di vedere se c'è qualcosa che deve essere fatto.E se c'è qualcosa che deve essere fatto, si fa una cosa e poi guarda che coda di nuovo e se c'è qualcos'altro da fare restituisce un plus, e l'intera pagina web che restituisce è solo un singolo carattere con un plus in esso.E se non c'è niente altro da fare, la coda è vuota, restituisce un segno meno.Così, chiunque può chiamare questo e colpire molte volte, è possibile caricare fino battito cardiaco.asp nel tuo web browser premere Ctrl + R Ctrl + R Ctrl + R Ctrl-R fino a quando si inizia a ottenere svantaggi, invece di plus.E quando hai fatto che FogBugz avrà completato il suo lavoro di manutenzione che si deve fare.In modo che la prima parte e la seconda parte è un molto, molto semplice servizio di Windows che viene eseguito, e il suo compito è quello di chiamare il battito cardiaco.asp e se si ottiene un plus, chiamata di nuovo presto, e se si arriva a meno di chiamare di nuovo, ma non per un po'.Quindi, in pratica c'è questo servizio di Windows che è sempre in esecuzione, che ha un molto, molto, molto semplice compito di colpire un URL, e cercando di vedere se si ottiene un più o un meno, e quindi la pianificazione, quando viene eseguito di nuovo in base a se si ha un più o un meno.E, ovviamente, si può fare qualsiasi tipo di variazione che si desidera su questo tema, come per esempio, uh, in realtà si potrebbe, invece di restituire solo una in più o in meno si potrebbe dire "Bene di chiamare me back in 60 secondi" o "Call me back, subito ho più lavoro da fare." Ed è così che funziona...in modo che il servizio di manutenzione appena eseguito, si sa, è come dire, una mezza pagina di codice che esegue il servizio di manutenzione e non ha mai cambiare, e non la logica c'è, è solo contiene il solletico che le cause di queste pagine web vengono chiamati con un certo garantito frequenza.E all'interno di quella pagina web battito cardiaco.asp c'è il codice che gestisce una coda di compiti che devono essere fatte e guarda quanto tempo è trascorso e non, si sa, a tarda notte di manutenzione e ogni sette giorni di cancellare tutti i vecchi messaggi che sono stati contrassegnati come spam e tutti i tipi di manutenzione le attività in background.E uh, questo è come che non.

Usiamo jtcron per prevista attività in background.Funziona bene, e se si capisce cron dovrebbe dare un senso a voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top