confusione portata per quanto riguarda i bean di sessione, proxy e singletons in Spring 3 gestito JSF app

StackOverflow https://stackoverflow.com/questions/4651782

Domanda

Questo mi sembra che sia di base Primavera 101 cose, ma io non riesco a trovare il corretta modo per farlo. La situazione è la seguente; nel mio web app v'è un unico punto di ingresso, che è un controller che gli utenti maniglie provenienti da un sistema esterno. Il trasferimento è solo una richiesta POST con una serie di informazioni associate relative a tale utente. Apon ingresso, ho bisogno di creare un nuovo bean User e caricarlo con le informazioni degli utenti. Inoltre, quando l'utente preme una vista che fa scattare alcuni servizi, ho bisogno di quel servizio per essere in grado di accedere l'istanza utente appropriato.

Il primo modo per fare questo che è venuto in mente è stato quello di avere un servizio UserManager che creerebbe una nuova istanza di utente, riempirlo w / dati, e quindi registrarlo nel contenitore primavera con il nome utente come il nome di fagioli. Poi, quando un servizio viene richiamato, il servizio sarebbe fare qualcosa di simile Factory.getBean(username) per trovare l'istanza User appropriata. Il problema che vedo è che sto perdendo il legame tra l'utente e che fagiolo User appartiene a loro. Inoltre, vorrei evitare di avere l'utente portare il fagiolo giro nella sessione, se possibile. È qui che sono supposto di utilizzare Spring AOP e deleghe?

Qual è il modello tipico primavera per risolvere questo tipo di situazione?

È stato utile?

Soluzione

Quindi è ora molte settimane più tardi (dal momento che questa domanda), e di conseguenza il mio livello di conoscenza si sta espandendo in modo esponenziale, così ho pensato che potrei pure rispondere alla mia domanda per tutti coloro che potrebbero trovare utile (per non parlare della questione non era molto chiaro per cominciare).

La risposta di base è: usare i proxy. Dal momento che un Singleton è istanziare solo 1 volta, non puoi iniettare un'altra classe che ha una durata di vita più breve, ad esempio. scope di sessione. Per coloro che necessitano di ulteriori informazioni, checkout stateful vs fagioli apolidi. Più o meno quello che ho finito per fare è questo ... i servizi contengono codice STATELESS per la manipolazione dei dati (si pensi verbi; RegisterUserSvc, AddPartSvc, ecc). I dati che questi servizi manipolare è stateful. Per esempio, ogni utente ha una propria copia del proprio oggetto di dati, diciamo TodoListBean, che è in uno stato diverso per ogni utente.

Così come fa un servizio, AddTodoItemService per esempio, manipolare questi dati? Questo è dove il proxy entra in gioco. Quando istanziata, l'AddTodoItemService viene iniettato con un proxy per la TodoListBean, invece dell'oggetto reale. In questo modo quando le esigenze di servizio per accedere al TodoListBean contenitore servirà l'un TodoListBean fuori della sessione di utenti attuali, e quindi il servizio sarà operativo sul fagiolo corretta (basata su quale utente invocato il servizio), invece di fare qualcosa stupido come avere numerose copie del servizio incluso in ogni ambito sessione di utenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top