Spago thread safety BUG
Situazione
•
•
L’utente richiama una pagina PAGE con
publisher jsp (padre)
La jsp (padre) di presentazione fa 3
chiamate ajax a 3 PAGE spago diverse
Passo 2
•
•
Ogni page richiamata via ajax ha un publisher jsp (figlie)
Ogni jsp figlia si limita a mostrare la service response tramite oggetti diversi in tempi diversi:
– ResponseContainerAccess.getResponseContainer(request).getServiceResponse()
– ResponseContainer.getResponseContainer().getServiceResponse()
– E anche dopo un attesa di 100ms.
– ResponseContainerAccess.getResponseContainer(request).getServiceResponse()
– ResponseContainer.getResponseContainer().getServiceResponse()
1
2
4
3
In teoria le 4 textarea dovrebbero mostrare la service_response
prodotta dalla PAGE corrispondente
Codice JSP (figlie)
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
<table style="font-size: 70%;">
<tr><td>
<b>ResponseContainerAccess.getResponseContainer(request).getServiceResponse()</b>
<textArea cols="50" rows="5"><%=
ResponseContainerAccess.getResponseContainer(request).getServiceResponse()%></textArea>
</td>
<td>
<b>ResponseContainer.getResponseContainer().getServiceResponse()</b>
<textArea cols="50" rows="5"><%= ResponseContainer.getResponseContainer().getServiceResponse()%></textArea><br/>
</td></tr>
<tr><td colspan="2">Sleep di 100ms</td></tr>
<%
Thread t = new Thread();
t.sleep(100);
%>
<tr><td>
<b>ResponseContainerAccess.getResponseContainer(request).getServiceResponse()</b>
<textArea cols="50" rows="5"><%=
ResponseContainerAccess.getResponseContainer(request).getServiceResponse()%></textArea>
</td>
<td>
<b>ResponseContainer.getResponseContainer().getServiceResponse()</b>
<textArea cols="50" rows="5"><%= ResponseContainer.getResponseContainer().getServiceResponse()%></textArea><br/>
</td></tr>
</table>
BUG?
•
•
In pratica, a fronte di più richieste contemporanee ( es 3 chiamate ajax ) eseguite su pagine
diverse il ResponseContainerAccess confonde la service response di request con quella di
un’altra.
Il risultato è visibile nel seguente screenshoot
Nella stessa jsp l’accesso alla serviceResponse in istanti diversi
produce risultati diversi (sempre nell’esecuzione della stessa
page)
in particolare la serviceResponse errata visualizzata dalla chiamata ajax 1 è relativa a quella
prodotta da un’altra chiamata ajax Page 2
Ajax Page 1
AjaxPage 2
AjaxPage 3
Scarica

Spago Thread Bug