10 Pozostałe elementy Hibernate(1)id 11016 ppt

background image

Pozostałe elementy

Hibernate

Rafał Kasprzyk

background image

Wykorzystanie adnotacji

Adnotacje to metadane, które mogą

być stosowane dla pakietów, klas,

atrybutów, metod, parametrów, a

nawet zmiennych

Adnotacje maja postać pary

nazwa=wartość. Do dyspozycja są

typy adnotacji wbudowane w język

Java, ale można również definiować

własne niestandardowe typy

adnotacji

Rafał Kasprzyk

background image

Metadane Hibernate

@hibernate.class

table = nazwa_tabeli

@hibernate.id

column = nazwa_kolumny

generator-class = native

@hibernate.property

column = nazwa_kolumny

length = rozmiar_kolumny

not-null = true|false

Rafał Kasprzyk

background image

Metadane Hibernate

@hibernate.bag

lazy = true|false
order-by = pole_sortujace

@hibernate.collection-key

column =

kolumna_klucza_obcego

@hibernate.collection-one-to-

many
class = klasa_bedaca_w_relacji

Rafał Kasprzyk

background image

Metadane Hibernate

@hibernate.many-to-one

column = kolumna_klucza_obcego

not-null = true|false

@hibernate.set

table = nazwa_tabeli_intersekcji

lazy = true|false

@hibernate.collection-key

column = kolumna_klucza_obcego

@hibernate.collection-many-to-

many

class = klasa_na_koncu_asocjacji

column = kolumna_klucza_obcego

Rafał Kasprzyk

background image

Przykład klasy z metadanymi

/**

* @hibernate.class

* table="Person"

*/

public class Person {

private Long id;

private String name;

/*

* @hibernate.id

* generator-class="native"

* column="ID"

*/

public Long getId() { return id;}

private void setId(Long id) {

this.id=id;

}

/*

* @hibernate.property

* column="NAME"

*/

public String getName() { return id;}

private void setName(Name name) {

this.name=name;

}

}

Rafał Kasprzyk

background image

XDoclet i Hibernate

XDoclet jest narzędziem,

generującym kod na podstawie

metadanych umieszczonych w

komentarzach JavaDoc.

Na podstawie adnotacji XDoclet

pozwala na wygenerowanie plików

mapowań dla każdej klasy trwałej

Rafał Kasprzyk

background image

Idea słuchaczy

Często pożądanym okazuje się możliwość

reakcji na zdarzenie generowane przez

Hibernate:

Możliwość audytu, modyfikacji obiektu przed

zapisem

np. ustawienie daty aktualizacji

Sprawdzenie spójności obiektu

Weryfikacja pobieranych danych

W wersji 3 biblioteki Hibernate, każda akcja

generuje odpowiadające jej zdarzenie z

którym można związać dowolną liczbę

obiektów nasłuchujących (ang. listener)

Istnieje dokładnie 25 typów zdarzeń posiadających

możliwość dowiązania stosownego słuchacza

PreDeleteEvent, PreInsertEvent, PreLoadEvent,

PreUpdateEvent

PostDeleteEvent, PostInsertEvent, PostLoadEvent,

PostUpdateEvent

EventListener, DeleteEvent, FlushEvent,

LoadEvent, MergeEvent, SaveOrUpdateEvent, …

Rafał Kasprzyk

background image

Przykład wykorzystania

słuchacza

Instalacja słuchacza odbywa się

deklaratywnie

<listener type="post-load" class =

"pl.isolution.hibernate.util.LoggingEventListener"/

>

Kod słuchacza realizujący pobranych

obiektów trwałych może przyjąć

następującą postać

public class LoggingEventListener

implements

PostLoadEventListener{
private static final Log log =
LogFactory.getLog(LoggingEventListener.class);
public void onPostLoad(PostLoadEvent event) {
Log.inf(event.getEntity());
}

}

hibernate.cf
g.xml

Rafał Kasprzyk

background image

Ograniczenia mechanizmu

słuchaczy

Brak jest niestety możliwości

konfiguracji mechanizmu słuchaczy

dla każdego obiektu trwałego

osobno

Możliwe rozwiązania tego problemu:

Stosowanie instrukcji if-else

Wykorzystanie wzorca projektowego

Controller do implementacji słuchacza

z listy zainstalowanych słuchaczy dla

każdego typu encji

Rafał Kasprzyk

background image

Transakcje J2EE w Hibernate

Transakcje mają ogromne znaczenie praktyczne

Umożliwiają synchronizację mechanizmu utrwalania

obiektów z bazą danych

API udostępniane przez Hibernate jest niezależne

od użytego w aplikacji typu transakcji

Hibernate dostarcza trzy strategie:

org.hibernate.transaction.JDBCTransactionFacto

ry

Transakcja realizowana bezpośrednio na bazie danych tj. poza

środowiskiem J2EE

org.hibernate.transaction.JTATransactionFactory

Transakcja zarządzana przez kontener (ang. Container

Management Transaction – CMT) jeżeli istnieje już transakcje

w tym kontekście, w przeciwnym przypadku tworzona jest

transakcja zarządzana przez komponent (ang. Bean

Management Transaction – BMT)

org.hibernate.transaction.CMTTransactionFactor

y

Transakcje realizowane przez kontener (CMT)

Rafał Kasprzyk

background image

Transakcje J2EE w Hibernate

Wyboru strategii dokonuje się w pliku

hibernate.cfg.xml korzystając z własności

transaction.factory_class

Kolejnym krokiem jest odnalezienie menedżera

transakcji niezbędnego do pobrania aktualnego

kontekstu transakcji i ewentualnej rejestracji

uczestnika transakcji

Hibernate dostarcza odpowiednich wyszukiwaczy, którego

wybór dokonuje się w pliku hibernate.cfg.xml korzystając

z własności transaction.manager_lookup_class

JBoss

org.hibernate.transaction.JBossTransactionManagerLookup

WebLogic

org.hibernate.transaction.WebLogicTransactionManagerLookup

WebSphere

org.hibernate.transaction.WebSphereTransactionManagerLooku

p

Rafał Kasprzyk

background image

Transakcje J2EE w Hibernate

Hibernate w wersji 3 uwalnia

programistę od konieczności

samodzielnej synchronizacji i zapisu

do bazy danych

Programista nie musi się martwić o

niespójność cache pierwszego poziomu

oraz zamykanie sesji w odpowiednim,

odpowiedni ustalonym miejscu

Dzięki integracji Hibernate z JTA

dostajemy mechanizm automatycznej

rejestracji jako uczestnik transakcji

Rafał Kasprzyk

background image

Transakcje J2EE w Hibernate

Aktywacja mechanizmy

automatycznego procesu

synchronizacji i zapisu do bazy

danych

<property name =

transaction.flush_before_completion>
true

</property>

<property name =

transaction.auto_close_session>
true

</property>

hibernate.cf
g.xml

Rafał Kasprzyk

background image

Zapewnianie bezpieczeństwa w

Hibernate

Hibernate w wersji 3 wprowadza model

deklaratywnego bezpieczeństwa na poziomie

zdarzeń i encji

Mechanizm bezpieczeństwa zbudowany został w

oparciu o idee słuchaczy i korzysta ze

specyfikacji JACC (ang. Java Authorization

Contract for Container)

Autoryzacja odbywa się poprzez JAAS (ang. Java

Authentication and Authorization Service), a

konfiguracja znajduje się w pliku

hibernate.cfg.xml

Mechanizm zapewniania bezpieczeństwa

dostarczany przez Hibernate jest jeszcze w fazie

rozwoju i na razie nie została dostrzeżona przez

liczną społeczność korzystającą z Hibernate

Rafał Kasprzyk

background image

Przykład zabezpieczeń

Instalacja dedykowanego słuchacza JACC

<listener type= "pre-insert" class =

org.hibernate.secure.JACCPreInsertEventListene

r/>

Przypisanie uprawnień do

poszczególnych ról odpowiadającym tym,

które zostały zdefiniowane przez

dostawcę JACC

<grant role = "admin"

entity-name = "pl.isolution.hibernate.Employee"
action = "insert, update, read" />

hibernate.cf
g.xml

hibernate.cf
g.xml

Rafał Kasprzyk

background image

Hibernate Tools

Zbiór narzędzi, które ułatwiają

korzystanie z biblioteki Hibernate

Dostępne są w postaci

Zadań Ant

Zbioru wtyczek do środowiska Eclipse

Całość dostępna jako JBoss IDE Eclips

Rafał Kasprzyk

background image

Funkcjonalność Hibernate Tools

Inżynieria w przód

W oparciu o klasy trwałe generowane są:

schemat bazy danych, pliki *.hbm.xml i plik

konfiguracyjnego hibernate.cfg.xml

Inżynieria wstecz

W oparciu o istniejący schemat bazy danych

generowane są: klasy POJO, pliki *.hbm.xml i

plik konfiguracyjnego hibernate.cfg.xml

Edytor konfiguracji i odwzorowań

Uzupełnianie i kolorowanie kodu

Interaktywne zapytania HQL (HQL

Scratchpad)

Wykonanie zapytania ad-hoc i podgląd jego

translacji do SQL

Rafał Kasprzyk

background image

Podsumowanie

Na dzień dzisiejszy prawdopodobnie

najpopularniejszy ORM (1500 pobrań

dziennie)

Bardzo dużo materiałów

Udział twórców Hibernate w pracach nad

specyfikacją EJB 3.0

Cykl wydawniczy kolejnych wersji wynoszący

około 3 tygodnie wskazuje, że biblioteka jest

intensywnie rozwijana i udoskonalana

Według dokumentacji celem Hibernate

jest zwolnienie programisty aplikacji z

konieczności kodowania ponad 95%

zadań związanych z zapewnieniem

trwałości danych

Rafał Kasprzyk

background image

Źródła

www.google.com

www.hibernate.org

www.jboss.org

Hibernate in Action – wyd. Manning

Rafał Kasprzyk


Document Outline


Wyszukiwarka

Podobne podstrony:
05 Konfiguracja Hibernate(1)id 5724 ppt
06 Przykład wykorzystania Hibernate(1)id 6376 ppt
10 Z TTS Wzmacniacze (1)id 11312 ppt
2 Proces gospodarczy i jego elementy(1)id 20676 ppt
10 Preparaty ułatwiające pracę narzędzi endodontycznych w kanałach korzeniowych (2)id 10611 ppt
2009 10 13 Wstęp do SI [w 01]id 26833 ppt
10 Metody otrzymywania zwierzat transgenicznychid 10950 ppt
13 ZMIANY WSTECZNE (2)id 14517 ppt
!!! ETAPY CYKLU PROJEKTU !!!id 455 ppt
10 Reprezentacja liczb w systemie komputerowymid 11082 ppt
2 Podstawowe definicje (2)id 19609 ppt
2 Realizacja pracy licencjackiej rozdziałmetodologiczny (1)id 19659 ppt

więcej podobnych podstron