Sto codificando un'applicazione Java EE che fornisce servizi REST tramite classi di risorse JAX-RS, l'applicazione fa ampio uso di CDI. Le mie classi di risorse sono @RequestScoped, l'applicazione restituisce lo stato HTTP 202 Accettato al chiamante ed esegue il lavoro in modo asincrono.
Desidero restituire un "ID di processo" in modo che il chiamante possa richiedere periodicamente lo stato generale del "processo" a esecuzione prolungata che sto eseguendo per loro conto.
Durante l'elaborazione di queste richieste, la mia applicazione interagisce in modo asincrono con altri sistemi tramite REST fornendo un "URL di richiamata" che questi server remoti riportano (insieme ai risultati e allo stato) alla mia applicazione quando l'attività assegnata è completa.
Sto cercando un modo per tutti i bean coinvolti nell'esecuzione di un "processo" per condividere uno stato comune per quel "id di processo". Il mio pensiero iniziale era quello di iniettare un bean di stato con un nuovo scope CDI @ProcessScoped per formare un bean pool comune per ogni dato processo.
Il punto cruciale del mio problema è dove conservare questi bean e come raggrupparli? Sembra una situazione di pollo e uova perché CDI avrà bisogno di conoscere l'id di processo per ogni bean dato per riunirli insieme.
Ho letto articoli su come CDI fa questo per i suoi ambiti standard; e ho esaminato il codice di esempio per la creazione di ambiti CDI personalizzati. Ad esempio, @SessionContext utilizza HttpSession dalle specifiche Servlet per archiviare le istanze bean. Poiché il nostro "processo" è alquanto arbitrario, sto cercando di trovare qualcosa che sia comune usare per indicizzare o archiviare questi fagioli.
Idealmente @ProcessScope funzionerebbe in modo trasparente al codice dell'applicazione, cioè l'ID del processo può essere interrogato ma viene creato e gestito solo dall'estensione CDI.
Grazie per qualsiasi aiuto o consiglio o ispirazione che puoi offrire.