Domanda

Per quanto mi risulta, i session bean senza stato vengono utilizzati per codificare la logica aziendale.Non possono archiviare dati nelle variabili di istanza perché la loro istanza è condivisa da più richieste.Quindi sembrano essere più simili alle classi Singleton.Tuttavia la differenza è che il contenuto crea (o riutilizza dal pool) l'istanza separata dei bean di sessione senza stato per ogni richiesta.

Dopo aver cercato su Google ho potuto trovare il ragionamento secondo cui le specifiche Java EE affermano che dovrebbero essere a thread singolo.Ma non riesco a capire il motivo per cui sono specificati FILETTATURA SINGOLA?

È stato utile?

Soluzione

Gli SLSB sono a thread singolo a causa del contesto TX, Principal è associato a un'istanza di bean quando viene chiamato.Questi bean vengono raggruppati e, a meno che non venga raggiunta la dimensione massima del pool, vengono elaborati in thread separati (a seconda del fornitore).

Se gli SLSB fossero stati progettati thread-safe, ogni chiamata sarebbe apparsa come un servlet doGet/Post con informazioni sulla richiesta contenenti Tx Context, informazioni sul contesto di sicurezza e così via.Quindi almeno il codice sembra pulito (dipende dallo sviluppatore).

Altri suggerimenti

Il motivo principale per cui i bean di sessione senza stato sono a thread singolo è renderli altamente scalabili per il contenitore.Il contenitore può fare molte ipotesi semplificative sull'ambiente di runtime.Una seconda ragione è rendere la vita più facile allo sviluppatore perché lo sviluppatore non deve preoccuparsi di alcuna sincronizzazione o rientro nella sua logica di business perché il bean non verrà mai chiamato in un altro contesto di thread.

Ricordo il ragionamento discusso nelle revisioni della specifica EJB 1.0 originale.Vorrei esaminare la sezione degli obiettivi delle specifiche.Vedere http://java.sun.com/products/ejb/docs.html per l'elenco delle specifiche.

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