Abilitazione Cross Application Scope in Tomcat per condivisione dati tra webapp
DOMANDA:
Come posso condividere dati tra diverse webapp utilizzando l'Application Scope?
RISPOSTA:
Di default l'Application Scope è utilizzato per memorizzare oggetti a livello di web application. Questo livello di scope è il più alto rispetto ai classici scope di Request e Session
Nome
|
Scope
|
Durata
|
Request
|
Singola richiesta, verso il server
|
Fino a quando la risposta non viene inviata al client
|
Session
|
Tutte le richieste inviate dallo stesso browser
|
Fino a quando non scade il timeout della sessione o l'ID di sessione non viene invalidato (ad es. chiusura del browser)
|
Application
|
Tutte le richieste inviate a una stessa Web Application
|
Container
|
Per poter recuperare un oggetto memorizzato a livello di Application Scope è necessario utilizzare il ServletContext.
Se vogliamo recuperare un oggetto memorizzato nell'Application Scope della WebAppA dalla WebAppB è necessario fare attenzione ai seguenti aspetti:
- Abilitare il crossContext nel file context.xml presente nella cartella config di Tomcat:
- Recuperare dalla WebAppA il ServletContext della WebAppB in questo modo:
<context crosscontext="true"> ... </context>
import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/ServletWebAppA/CrossApplicationScopeServlet") public class CrossApplicationScopeServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext sc = request.getServletContext().getContext("/WebAppB"); String valore = (String)sc.getAttribute("CHIAVE"); } }
Quando si utilizzano dati condivisi, bisogna stare attenti ai possibili errori di ClassCastException. Potete consultare il post ClassCastException con oggetto in ClassLoader diversi per prendere le giuste precauzioni.
Commenti
Posta un commento