2010-05-14 15 views
6

Sto sperimentando con EJB3Come si ottiene un nuovo bean di sessione stateful in un thread servlet?

Vorrei inserire un bean di sessione stateful in un servlet, in modo che ogni utente che colpisce il servlet ottenga un nuovo bean.

Ovviamente, non posso lasciare che il bean sia una variabile di istanza per il servlet, poiché verrà condiviso. E non è permesso iniettare apparentemente variabili locali.

Posso utilizzare il nuovo operatore per creare un bean, ma non sembra l'approccio corretto.

C'è un modo giusto per farlo? Sembra che quello che sto cercando di fare sia abbastanza semplice, dopotutto vorremmo che ogni nuovo cliente trovasse un carrello della spesa vuoto.

risposta

14

Non è possibile utilizzare new per ottenere un nuovo SFSB.

Quello che in genere si fa è lookup uno nuovo utilizzando InitialContext.

MyBean bean = (MyBean) new InitialContext().lookup(name); 

Si ottiene quindi un riferimento a un SFSB specifico che è possibile riutilizzare tra le richieste.

Da this answer:

Non si dovrebbe in genere iniettare SFSB, meno che non sia in un altro SFSB o in un client Java EE. È necessario utilizzare @EJB sulla classe di riferimento (ad esempio il servlet ) per dichiarare l'ejb-ref e quindi eseguire una ricerca JNDI nel codice per ottenere l'istanza. Questa istanza potrebbe quindi essere inserita direttamente nella sessione Http di .

Per ulteriori informazioni su SFSB, potreste essere interessati a queste altre risposte da me:

Speranza che aiuta.

+0

Quale dovrebbe essere il nome per un nuovo SFSB? –

+0

Dovresti essere in grado di fornire un 'name' in' @Stateful (name = "xxx") 'e usarlo per la ricerca. In realtà è un po 'più complicato, e ci sono vari tipi di nomi (vedi 'beanName',' name' e 'mappedName') e se il prefisso' java: comp/env/'deve essere usato o meno. Non ricordo mai le sottigliezze tra tutti questi. Fai un tentativo nel caso più semplice e genera un'altra domanda altrimenti. – ewernli

Problemi correlati