Cykl życia encji

, , piątek, 9 kwietnia 2010

Stany charakteryzujące instancję encji:
• NEW - instancja encji nie ma identyfikatora perystencji i nie jest skojarzona z kontekstem persystencji
• MANAGED - instancja encji ma identyfikator persystencji i jest skojarzona z bieżącym kontekstem persystencji
• DETACHED - instancja encji ma identyfikator persystencji i nie jest skojarzona z kontekstem persystencji
• REMOVED - instancja encji ma identyfikator persystencji i jest skojarzona z kontekstem persystencji i dodatkowo jest zaplanowana do usunięcia z bazy danych.

Efekty operacji związanych z cyklem życia encji opisano poniżej.
1. Perystencja instancji encji - nowa instancja encji staje się zarządzana (managed) oraz persystentna (peristent) poprzez wywołanie metody persist na niej lub w wyniku kaskadowej operacji persystencji.

Znaczenie operacji persist:
• gdy encja jest w stanie NEW staje się zarządzana (MANAGED). Encja zostanie zapisana w bazie w trakcie komita transakcji lub jako rezultat wykonania flush.
• gdy encja jest w stanie MANAGED jest ignorowana w trakcie operacji.
• gdy encja jest w stanie REMOVED staje się MANAGED.
• gdy encja jest obiektem odłączonym może być wyzwolony wyjątek EntityExistsException w przypadku wywołania operacji lub EntityExistsException lub PersistenceException w trakcie flush lub commit
• dla wszystkich encji (nazwijmy je Y) do których odwołuje się poprzez relacje dana encja, jeżeli relacja do tych encji jest oznaczona jako kaskadowa z cascade=PERSIST lub cascade=ALL operacja jest stosowana do encji skojarzonych (Y).

2. Usunięcie - zarządzana (managed) instancja encji staje się usuniętą (removed) poprzez wywołanie metody remove lub w wyniku wykonania operacji kaskadowej.

Znaczenie operacji remove:
• gdy encja jest w stanie NEW operacja jest ignorowana, ale jest propagowana do encji w relacji
• gdy encja jest w stanie MANAGED operacja powoduje przejście do stanu REMOVED
• gdy encja jest odłączona operacja powoduje wyrzucenie wyjątku IllegalArgumentException
• gdy encja jest w stanie REMOVED operacja jest ignorowana
• faktyczne usunięcie encji z bazy danych następuje po wykonaniu comit lub po wykonaniu flush-a

3. Synchronizacja z bazą danych - stan encji persystentnych jest synchronizowany (synchronized) z bazą danych po zakomitowaniu transakcji. Ta synchronizacja polega na zapisie do bazy danych jakichkolwiek aktualizacji na encji i jej relacjach. Aktualizacja stanu encji zawiera przypisanie nowych wartości do właściwości lub pól persystentnych encji oraz modyfikację zmienialnych wartości dla właściwości i pól persystentnych. Synchonizacja z bazą danych nie zawiera odświeżenia jakichkolwiek zarządzanych encji dopóki operacja odświeżenia nie jest eksplicite wywołana na tych encjach.

Jest ważnym by zapewnić, że zmiany dokonane w części odwrotnej relacji powodowały odpowiednie zmiany w części właściwej, tak by zapewnić by zmiany nie zostały utracone po synchronizacji z bazą danych.


Silnik dostawcy persystencji jest uprawniony do wykonywania synchronizacji z bazą danych w trakcie, gdy transakcja jest aktywna. Można użyć metody flush w celu wymuszenia synchronizacji z bazą danych przez aplikację. Synchronizacja stosuje się do encji skojarzonych z kontekstem persystencji.

4. Encje odłączone (Detached entities) - odłączenie encji może nastąpić w wyniku zakomitowania transakcji gdy używany jest zarządca encji (entity manager) typu transaction-scoped container-managed, zrolbekowania transakcji, wyczyszczenia kontekstu persystencji, zamknięcia zarządcy encji oraz serializacji encji lub przekazania encji przez wartość do separowanej warstwy aplikacji przy użyciu interfejsu zdanego.

Merging Detached Entity State: operacja łączenia (merge) dopuszcza propagację stanu z encji odłączonych do encji persystentnych zarządzanych przez EntityManager-a.

5. Instancje zarządzane - odpowiedzialność aplikacji za zapewnienie, że instancja jest zarządzana w dokładnie jednym kontekście persystencji. Zachowanie nie jest zdefiniowane jeżeli ta sama instancja jest przypisywana do zarządzania w więcej niż pojedynczym kontekście persystencji.

W celu stwierdzenia czy dana instancja encji jest zarządzana w bieżącym kontekście persystencji można użyć metody contains.

contains zwraca true:
• gdy encja została pobrana z bazy danych i nie została usunięta i odłączona,
• gdy instancja encji jest nową i została na rzecz encji wykonana metoda persist
contains zwraca false:
• gdy instancja jest odłączona
• gdy metoda remove została wywołana na rzecz encji lub wystapiło usunięcie kaskadowe
• gdy instancja jest nową i nie została jeszcze wywołana metoda persist na rzecz encji.

0 komentarze:

Prześlij komentarz

GlossyBlue Blogger by Black Quanta. Theme & Icons by N.Design Studio
Entries RSS Comments RSS