2013-01-22 11 views
7

Vorrei chiedere qual è l'approccio migliore per eseguire un lungo processo da un servlet Java. Ho una webapp e quando il client fa una richiesta esegue un servlet. Questo servlet dovrebbe ottenere alcuni parametri dalla richiesta e quindi eseguire un processo. Questo processo potrebbe richiedere molto tempo, quindi è necessario eseguirlo separatamente. Al termine dell'esecuzione di questo processo, invia un'email con i risultati.Qual è l'approccio migliore per eseguire un processo lungo da un servlet Java?

Grazie in anticipo.

risposta

5

Utilizzare un pool di thread. Ogni volta che si riceve una richiesta, creare un'attività e inviarla al pool di thread. Ciò garantirà che troppe richieste non mettano il server in ginocchio, perché hai il controllo di quanti thread simultanei puoi avere e quanti compiti possono attendere nella coda di thread di attività in attesa.

Vedere javadoc per Executors e ThreadPoolExecutor.

1

vedo due possibilità per farlo:

  1. creare un thread separato per ogni attività (approccio pool di thread). Questo è possibile, ma potenzialmente potrebbe creare un problema di prestazioni.
  2. Creare una seconda applicazione. Ad esempio è possibile salvare parametri in DB. La seconda applicazione monitorerà questo DB con un certo intervallo e farà qualcosa. Invece DB è possibile utilizzare alcuni gestore code messaggio come WebSphere MQ

Secondo approccio ha il vantaggio: se l'applicazione non è in grado di elaborare la richiesta ora per qualche motivo, l'applicazione può tornare in un secondo momento

2

se questo suoni un po 'pericoloso che l'invocazione di un servlet genera un processo (senza opportune capacità di limitazione), è possibile generare un processo usando Runtime.getRuntime().exec(). Molto meglio sarebbe usare ProcessBuilder per preparare gli argomenti del processo e generarlo.

2

Normalmente questo tipo di attività è delegato a un altro tipo di modulo dell'applicazione come un bean basato su messaggi e sembra essere la soluzione più pulita e conforme agli standard. Sebbene la maggior parte dei server non si lamenterà se crei i tuoi thread (che è vietato dallo standard ma applicato raramente), la quantità di gestione necessaria per impostare la tua coda di lavoro e l'ambiente di esecuzione in pool non vale la pena a mio avviso.

Problemi correlati