Ejb 3, bean basato sui messaggi che collabora con un bean di sessione stateful?
Domanda
Ehi! Sono relativamente nuovo sia con Java EE sia con Stackowerflow, per favore sii gentile :-)
Ho un sacco di dispositivi che attivano i messaggi Java da inviare ad ogni cambio di stato. Questi dispositivi sono in genere attivi per intervalli di circa 30-90 minuti. Ogni messaggio di evento contiene un ID dispositivo oltre ai dettagli dell'evento.
Centrale nella mia applicazione è un bean basato sui messaggi che si iscrive a quegli eventi. Ogni volta che ricevo un evento devo accedere al database per cercare alcune informazioni sul dispositivo.
Sarebbe assolutamente fantastico se potessi associare un bean di sessione stateful a ciascun dispositivo attivo! Se fosse stata un'applicazione Web, avrei utilizzato la sessione http per memorizzare un handle o un riferimento al bean stateful (ho ragione?). Esiste un modo per archiviarlo dal mio bean di messaggio?
Soluzione
Sarebbe bello, tranne che non può essere fatto come hai spiegato. Gli MDB (e gli SLSB) sono apolidi per definizione, quindi è sicuro tenere una conversazione solo durante l'invocazione.
Alla fine potresti rompere le specifiche e creare un attributo statico da qualche parte (forse nello stesso MDB) ma questo non sarebbe certamente portatile, né scalabile.
Il mio suggerimento è di abilitare la memorizzazione nella cache a livello di JPA (per i dettagli, consultare il provider di persistenza delle preferenze), in modo da poter cercare tutti i dati necessari molto velocemente (molto velocemente). Questo è portatile e adatto ai cluster. Questo è il modo in cui lo uso nei miei progetti e ne sono molto contento.
Spero che sia d'aiuto.
Altri suggerimenti
Non mi sento a mio agio nel raccomandare prodotti specifici, ma le esigenze di indirizzo del server Terracotta non sono così?