2009-05-21 21 views
6

Czy ziarna sesji (bezstanowe ziarna sesji, stanowe ziarna sesji) są zsynchronizowane?EJB i synchronizacja

+1

zsynchronizowany z czym? –

+1

ktoś zadał mi to pytanie, jaka powinna być poprawna odpowiedź? Nie widziałem żadnych zsynchronizowanych metod wewnątrz EJB, powiedziałbym, że EJB nie jest zsynchronizowany. Tak jak ludzie pytali "czy Hashtable jest zsynchronizowany?" –

+0

Technicznie twoje pytanie nie jest jasne. Czy masz na myśli: Potrzebujesz fasoli Sesji, aby uczynić ją bezpieczną dla wątków? lub Czy komponenty bean sesji są wątkowo bezpieczne? –

Odpowiedz

6

tylko jeden wątek na raz będzie dostępu do swoich fasoli. To do serwera aplikacji należy zarządzanie. Więc nie powinieneś używać synchronizacji z poziomu swoich ziaren. Z tego powodu obiekt, który nie jest tak bezpieczny jak EntityManager, może być wartością instancji i nie może mieć problemów z synchronizacją.

+0

Tak, to dobrze, ale ktoś zadał to pytanie w wywiadzie, a ja odpowiedziałem w ten sam sposób, ale nie był zadowolony z mojej odpowiedzi. –

+3

Zawsze jest możliwe, że nie mieli pojęcia. –

+1

Dokładnie. Co więcej, nowa adnotacja @AccessTimeout umożliwia skonfigurowanie, w sposób przenośny, czasu, przez jaki wątek wywołujący ma czekać na udostępnienie instancji. Zauważ również, że nowy komponent bean @Singleton można skonfigurować tak, aby zezwalał na dostęp wielowątkowy, ale nie jest tak ustawiony domyślnie. Ta decyzja została podjęta w celu zachowania spójności z domyślnymi regułami dla wszystkich ziaren Sesji (@Stateless, @Stateful, @Singleton). –

-1

bardzo prawdziwe rzeczą ziaren EJB jest, że po utworzeniu EJB 3.0 fasolę następnie metody EJB jest domyślnie zsynchronizowane.

np.

@Statelss Klasa EJBclass {

void SomeMethod() {}

}

teraz jeśli zrobisz to SomeMethod Synchronizacja pokaże jak to jest błąd nie można synchronizować na ten poziom, ponieważ jest zsynchronizowany.

EJB 3.0 Beans są inteligentne i wydajność jest dobra.

-1

Komponenty Java Enterprise nie są synchronizowane. Ponieważ komponenty bean sesji są utrzymywane przez kontener ejb, musisz wdrożyć logikę synchronizacji na poziomie aplikacji.

+0

Czy jesteś tego pewien? Myślę, że standard JEE jest bardzo przejrzysty i tylko Entity Beans umożliwiają konfigurację bieżącego dostępu do ich metod. Proszę popraw mnie jeżeli się mylę. – icordoba

1

sesji fasoli oznacza, że ​​użytkownik jest rejestrowany. Jeśli użytkownik przypadkowo dwukrotnie kliknie na działanie interfejsu użytkownika, dwa żądania http są tworzone w dwóch osobnych wątkach.

  • Bezpaństwowe ziarna NIE są SYNCHRONIZOWANE. Każdy wątek otrzyma inną instancję i oba będą realizowały logikę paralelnie. Oba mogą uzyskać dostęp do tych samych zasobów!
  • Fasolki stanowe są synchronizowane przez kontener. Oba wątki otrzymają tę samą instancję ejb. Drugi wątek czeka, aby zakończyć pierwszy. Nie ma problemu.
1

Stateless/sesja stanowe ziarna są bezpieczne dla wątków. Ponieważ każde żądanie otrzyma dedykowaną instancję komponentu bean, więc nie musi być synchronizowana.

Ziarna sesji Singleton są współużytkowane i muszą być synchronizowane przez kontener (Kontenerowy Współdziałający Współdziałanie - CMC) lub przez użytkownika (Współzależność zarządzana przez ziarno - BMC).