Considerare il seguente scenario:
Stiamo lavorando a un progetto JavaEE per il quale la scalabilità inizia a diventare un problema. Fino ad ora, siamo stati in grado di scalare ma questa non è più un'opzione. Pertanto, dobbiamo considerare la possibilità di ridimensionare e preparare l'app per un ambiente cluster.
La nostra principale preoccupazione in questo momento è la serializzazione delle sessioni utente. Purtroppo, non abbiamo considerato fin dall'inizio il problema e stiamo incontrando la seguente excetion:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.catalina.session.StandardSessionFacade
Ho fatto qualche ricerca e questa eccezione è generata perché ci sono oggetti memorizzati nella sessione che non implementano l'interfaccia Serializable
. Considerando che in tutta l'app ci sono parecchi oggetti personalizzati che sono memorizzati nella sessione senza implementare questa interfaccia, richiederebbe molto lavoro e dedizione tediosi per correggere tutte queste dichiarazioni delle classi.
Fisseremo tutte queste dichiarazioni, ma la preoccupazione principale è che, in futuro, ci possa essere uno sviluppatore che aggiungerà un oggetto non Serializable
nella sessione e interromperà la serializzazione e l'amp; replica su più nodi.
Come rapida panoramica del progetto, stiamo sviluppando utilizzando un framework nazionale basato su Struts 1 con l'API Servlet 3.0. Ciò significa che a questo punto, stiamo utilizzando lo standard session.getAttribute()
e session.setAttribute()
per lavorare con la sessione e la gestione della sessione è sparsa su tutto il codice base.
Oltre all'aggiornamento delle classi degli oggetti archiviati in sessione e assicurandoci di implementare l'interfaccia Serializable
, quali altre misure di precauzione dovremmo adottare al fine di garantire un'affidabile capacità di replica di sessione sul livello applicazione?
So che è un po 'tardi per considerarlo, ma quale sarebbe la migliore pratica in questo caso? Inoltre, ci sono altri problemi che dovremmo prendere in considerazione per questa transizione?
Grazie in anticipo!