2009-05-21 12 views
6

Fagioli di sessione (bean di sessione stateless, bean di sessione con stato) Sincronizzati?EJB e sincronizzazione

+1

sincronizzato con cosa? –

+1

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?" –

+0

Tecnicamente la tua domanda non è chiara. Intendi: i bean Session devono essere fatti sicuri? o I bean di sessione sono thread-safe? –

risposta

6

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.

+0

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. –

+3

È sempre possibile che non avessero la minima idea. –

+1

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) –

-1

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.

-1

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.

+0

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

1

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.
1

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).