Abbiamo bisogno di implementare un meccanismo di spegnimento regolare nella nostra applicazione Servlet.Come elaborare le richieste servlet durante un arresto prolungato
MODIFICA: Vogliamo rendere il più semplice possibile, che gestirà un segnale kill inviato tramite la funzione del sistema operativo. Ciò consentirebbe agli amministratori di sistema di utilizzare utilità di shell incorporate (kill o taskkill su Windows), altrimenti dovrebbero installare un'altra utility solo per "parlare" con il server.
Questo meccanismo funziona in due fasi:
- su richiesta di arresto, negare alcune attività critiche
- blocco fino azioni critiche precedentemente avviate sono completati; questi possono richiedere diverse ore
La fase n. 1 è implementata nel nostro livello DAO. La fase n. 2 è implementata nel nostro servletContextListener # contextDestroyed method
Il nostro problema è che, una volta contextDestroyed viene chiamato, il contenitore Servlet smette di servire ulteriori richieste HTTP.
MODIFICA: contextDestroyed viene chiamato quando qualcuno chiama la funzione di eliminazione del sistema operativo sul processo del server.
Vorremmo lasciare l'applicazione attiva durante la fase n. 2, notificando agli utenti che alcune attività non sono disponibili.
Buona domanda. Se le attività che devono essere negate vengono implementate in servlet specifici, è possibile sempre rendere questi (e solo questi) restituire uno stato nell'intervallo 4xx se una ricerca DB suggerisce che è in corso una chiusura? –
Alcune delle attività sono avviate da azioni dell'interfaccia utente e alcune sono avviate da uno scheduler. Ecco perché sto pensando di controllarle a livello di DAO. –