|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 5035
|
Multi Threading + Servlet
Ciao a tutti,
vorrei sapere come si devono gestire i multi threading nelle servlet Java. Grazie 1000 Stefano
__________________
Id PSN: StefanoCsl (PS4): Battlefield 4 | Killzone Shadow Fall | The Division (clan IHSV)
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
devi evitare di utilizzare all'interno della servlet dei membri della classe che potrebbero essere accedute da thread diversi contemporaneamente.
Ti faccio un esempio su cosa NON devi fare: Codice:
public class Example extends HttpServlet { HttpSession session; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { session = request.getSession(); //ecc.ecc. } } ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Quote:
Qual'è il modo corretto di fare qualcosa di analogo a quello che hai scritto?
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
la maniera corretta e' quella di utilizzare solo variabili locali ai metodi. Nel caso debba passare un oggetto da un metodo all'altro devi passarlo come parametro a un metodo e non accedere a un membro della classe (ad esempio un metodo nell'esempio precedente che necessita dell'oggetto Session dovrebbe prevederlo tra i parametri con cui viene richiamato). So benissimo che a livello di design e' una limitazione notevole, ma se si vogliono scrivere servlet che possano essere deployate senza remore su application server diversi e' l'unica maniera di scriverle. L'alternativa (sugli application che lo consentono) e di implementare l'interfaccia SingleThreadModel e utilizzare il pooling delle servlet a livello di container (e' per questo che ho detto: se l'application lo consente). So che le specifiche sarebbero dovute cambiare con gli ultimi rilasci (2.4) ma non ho avuto il tempo di leggere niente, anche perche' sto lavorando su altre tecnologie in questo momento.. |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
mi sono letto le specifiche delle servlet 2.4, non e' cambiato nulla rispetto a cio' che ho scritto sopra a parte che l'utilizzo di SingleThreadModel e' stato deprecato (ed e' quindi sconsigliato).
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Dimmi se ho capito bene: se faccio una servlet, al cui interno ho un oggetto SESSIONE, e due utilizzatori diversi accedono all'oggetto SESSIONE della servlet, possono crearsi dei problemi.
Tutto questo a prescindere dal fatto che la "sessione" è (dovrebbe essere) unica per ogni utilizzatore? Oppure il problema consiste nel fatto che la "sessione" viene memorizzata in una variabile membro della servlet? In tal caso vale esattamente anche per le pagine JSP, giusto?
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
ho fatto un esempio con un oggetto di classe Session perche' e' un caso tipico, ma naturalmente vale per qualsiasi oggetto membro della classe (servlet). non sono un esperto di JSP ma se non ricordo male gli oggetti che dichiari con scope "page" sono tradotti in servlet in cui sono comunque locali al metodo service(). Se hai voglia/tempo puoi fare una prova e verificare il codice della servlet generata per rendertene conto, quando ho un attimo magari lo faccio io ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:04.