View Full Version : [Java] Risposta immediata Servlet
Dovrei scrivere una servlet Java che quando riceve una richiesta , risponda subito con una risposta NULL (nel senso che non mi interessa il contenuto della risposta) al client, pero' poi continui a fare altre cose (scrittura su DB).
Devo creare a mano un thread che gestisca la scrittura su DB , mentre nell'altro flusso torno null ?
Dovrei scrivere una servlet Java che quando riceve una richiesta , risponda subito con una risposta NULL (nel senso che non mi interessa il contenuto della risposta) al client, pero' poi continui a fare altre cose (scrittura su DB).
Devo creare a mano un thread che gestisca la scrittura su DB , mentre nell'altro flusso torno null ?
il modo più semplice è scrivere prima sul DB e poi restituire NULL, in questo modo ti assicuri di aver scritto prima di dare la risposta e nel caso fallisce la scrittura puoi anche mandare un messaggio di errore.
comunque il dialogo servlet/DB è diretto?
No , appunto, mi serve proprio ritornare subito NULL perche' non mi interessa l'esito della scrittura sul DB (sia che vada bene sia che fallisca) , l'importante e' che la risposta della servlet sia IMMEDIATA per non far attendere troppo.
Il colloquio servlet/db e' diretto.
Cmq la soluzione e' col thread ?
No , appunto, mi serve proprio ritornare subito NULL perche' non mi interessa l'esito della scrittura sul DB (sia che vada bene sia che fallisca) , l'importante e' che la risposta della servlet sia IMMEDIATA per non far attendere troppo.
Il colloquio servlet/db e' diretto.
Cmq la soluzione e' col thread ?
mmm ma con che istruzione mandi la risposta NULL? io ho usato le servlet solo in campo WEB.. comunque non è possibile farlo sequenzialmente, cioè prima mandare la risposta e poi scrivere sul DB?
se puoi evitare i thread evitali, altrimenti se proprio devi usali :)
Come sarebbe "se puoi evitare i Thread evitali" :D
I Thread sono nostri amici, usali.
Sì, la soluzione è un meccanismo di scrittura asincrono. Crei un oggetto Pippo che accetta una richiesta di scrittura e processa quella richiesta in un Thread diverso da quello che l'ha inviata.
La tua servlet altro non farà che dire:
ilPippo.scrivi(qualcosa);
rispondi NULL;
Essendo asincrono, scrivi restituirà immediatamente il controllo. Per la concreta esecuzione del compito affidatogli, Pippo può usare una coda di consumazione.
E' molto semplice ed efficace.
Come sarebbe "se puoi evitare i Thread evitali" :D
I Thread sono nostri amici, usali.
beh certo ma se è possibile fare:
rispondi(NULL);
scrivi(qualcosa);
io non complicherei ulteriormente usando i thread.. in fondo se a lui non interessa sapere se la scrittura è andata a buon fine può benissimo farla dopo la risposta. inoltre non perde nemmeno tempo perchè rispondi(NULL) credo che non si porti via molto tempo :p
cioè se è possibile fare in questo modo io non userei un thread in pratica. se invece rispondi corrisponde a una return e per cui non si può eseguire qualcosa dopo, allora il discorso è diverso ed è necessario usare un thread.
Bisognerebbe accordarsi sul termine complicazione. Un consumatore concorrente in Java è roba di venti righe. Per la servlet, scrivi(qualcosa) era e scrivi(qualcosa) rimane.
Considerando poi che la stessa istanza della Servlet gestisce le richieste di più client, scrivere prima di rispondere o rispondere prima di scrivere non cambia i termini del problema. Rispondere prima renderà immediata solo la prima richiesta.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.