2012-04-18 20 views
6

Próbuję zrozumieć, jaki jest efekt wywoływania EntityManager.lock (entity, LockModeType.READ). Dokumentacja API brzmi dla mnie bardzo myląco.JPA: Jak działa blokada odczytu?

Jeśli muszę do równoczesnych wątków i wątku 1 wywołania blokada (entity, LockModeType.READ), wątek 2 nadal czytać i pisać encji?

Czego nauczyłem się do tej pory:

typu lock odczytywane JPA1 jest taka sama jak w JPA2 optymistyczne. Jeśli taka blokada jest ustawiona, EntityManager sprawdza atrybut wersji przed zatwierdzeniem transakcji, ale jej nie aktualizuje. Znalazłem wyjaśnienie dla trybu blokady OPTIMISTIC: Link. Wyszukaj OPTIMISTIC (READ) LockMode Przykład. Tak, jak rozumiem, ustawienie blokady odczytu w wątku 1 nie ma wpływu na wątki 2 ... n. Wszystkie pozostałe wątki mogą nadal czytać i zapisywać encje. Ale gdy transakcja w wątku 1 zostanie zatwierdzona, a inny wątek zaktualizuje jednostkę, transakcja w wątku 1 zostanie wycofana.

Czy rozumiem to poprawnie?

Odpowiedz

4

Read curently przestarzała i tak, ale tylko za wyrozumiałość:

odczytu blokada zapewnia, że ​​stan obiektu nie zmienia on popełnić, ponieważ blokada ZOBACZ umożliwia transakcje zaktualizować lub usunąć go wtedy, gdy Wątek 1 zmienia się, a następnie zatwierdza najpierw kontrolę stanu (wersji) jednostki, jeśli sprawdza, jest zobowiązany, jeśli nie jest to dozwolone,

tak podstawowe, że twoje zrozumienie jest poprawne.

istnieje również OPTIMISTIC_READ, który jest nowoczesnym sposobem korzystania z niego (również jest _WRITE).

UPDATE

Ok to article bardzo mi pomogło w zrozumieniu nadzieję, że to pomaga.

+0

Nadal nie rozumiem. Czy ktoś może zrestrukturyzować zdania lub dodać przykład? – stoefln

+0

Zaktualizowałem swoją odpowiedź, proszę sprawdzić podany link – engma