Fagioli di sessione (bean di sessione stateless, bean di sessione con stato) Sincronizzati?EJB e sincronizzazione
risposta
Solo un thread alla volta accederà ai bean. È compito del server delle applicazioni gestirlo. Quindi non dovresti usare sincronizzato dai tuoi bean. Questo è il motivo per cui un oggetto non protetto come EntityManager può essere un valore di istanza e non avere problemi di sincronizzazione.
Sì, va bene, ma qualcuno ha fatto questa domanda in un'intervista e io ho risposto allo stesso modo ma non era soddisfatto della mia risposta. –
È sempre possibile che non avessero la minima idea. –
Esattamente. Inoltre, la nuova annotazione @AccessTimeout consente di configurare, in modo portatile, esattamente per quanto tempo si desidera che un thread chiamante attenda che un'istanza diventi disponibile. Si noti inoltre che il nuovo bean @Singleton può essere configurato per consentire l'accesso multithread ma non lo è per impostazione predefinita. Tale decisione è stata presa nel tentativo di mantenere la coerenza dietro le regole predefinite per tutti i bean Session (@Stateless, @Stateful, @Singleton) –
La vera verità sui bean EJB è che, una volta creati bean EJB 3.0, i metodi dell'EJB sono per impostazione predefinita Sincronizzati.
ad es.
@Statelss Classe EJBclass {
vuoto someMethod() {}
}
ora se si farà questo SomeMethod Sincronizza mostrerà errore come è non può essere Sincronizza a questo livello in quanto è sincronizzato.
EJB 3.0 I fagioli sono intelligenti e le prestazioni sono buone.
I java enterprise non sono sincronizzati. Poiché i bean di sessione vengono gestiti dal contenitore ejb, è necessario implementare la logica di sincronizzazione a livello di applicazione.
Sei sicuro di questo? Penso che lo standard JEE sia molto chiaro e solo Entity Beans permetta la configurazione dell'accesso corrente ai loro metodi. Per favore correggimi se sbaglio. – icordoba
Il bean di sessione indica che l'utente è registrato. Se l'utente fa doppio clic accidentalmente sull'azione dell'interfaccia utente, vengono create due richieste http in due thread separati.
- I fagioli senza stato NON SONO SINCRONIZZATI. Ogni thread riceverà un'istanza diversa e entrambi eseguiranno la logica in modo parallelo. Entrambi possono accedere alle stesse risorse!
- I bean di stato vengono sincronizzati dal contenitore. Entrambi i thread avranno la stessa istanza di ejb. Il secondo thread è in attesa di finire il primo. Nessun problema.
I bean di sessione stateless/Stateful sono thread-safe. Poiché ogni richiesta otterrà un'istanza dedicata del bean e quindi non è necessario che sia sincronizzata.
I bean di sessione Singleton sono condivisi e devono essere sincronizzati dal contenitore (Container Managed Concurrency - CMC) o dall'utente (Bean Managed Concurrency - BMC).
sincronizzato con cosa? –
qualcuno mi ha fatto questa domanda, quale dovrebbe essere la risposta corretta? Non ho visto alcun metodo sincronizzato all'interno dell'EJB, direi che EJB non è sincronizzato. Come si chiedeva la gente "Hashtable è sincronizzato?" –
Tecnicamente la tua domanda non è chiara. Intendi: i bean Session devono essere fatti sicuri? o I bean di sessione sono thread-safe? –