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:
  1. Abilitare il crossContext nel file context.xml presente nella cartella config di Tomcat:
  2. <context crosscontext="true">
    
        ...
    
    </context>
  3. Recuperare dalla WebAppA il ServletContext della WebAppB in questo modo:
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

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java