JSF, EJB, JPA - Dobra praktyka

Odpowiedz Nowy wątek
2011-04-17 03:34

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

W swojej aplikacji mam kilka tabel, które bardzo często będą odczytywane przez użytkowników.
Zastanawiam się czy lepiej będzie jeżeli utworze beana o zasięgu @ApplicationScope i umieszczę w nim wszystkie Tabele (encje JPA).
Drugą możliwością jest utworzenie zapytań nazwanych (@NamedQuery) i odwoływanie się do nich za każdym razem gdy zajdzie taka potrzeba (czyli bardzo często), licząc, że dane zostaną pobrane z puli.
Jak myślicie, które rozwiązanie jest lepsze?

Pozostało 580 znaków

Szczery
2011-04-17 08:07
Szczery
0

Jezeli dane zmieniaja sie rzadko to je cache'uje czyli tak jak napisales np w beanie

lub użyj mechanizmów JPA do cechowania

Pozostało 580 znaków

2011-04-18 08:46
Moderator

Rejestracja: 13 lat temu

Ostatnio: 1 tydzień temu

Lokalizacja: Stacktrace

0

Cache JPA w wersji Hibernate ma domyślnie włączony tylko jeden poziom. włącz drugi poziom cache dla tych encji i będzie po sprawie. Jedna wada jak będzie dużo zapytań aktualizujących to i tak będzie szło z bazy.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException

Pozostało 580 znaków

jambalaya
2011-04-18 12:01
jambalaya
0

A Ty jak zwykle glupoty pierdzielisz. Skad wiesz ze cache jest wylaczony? Ze specyfikacji na temat elementu <shared-cache-mode> w persistence.xml:

Defines whether caching is enabled for the persistence unit if caching is supported by the persistence
provider. When set to ALL, all entities will be cached. When set to NONE, no entities will be cached. When
set to ENABLE_SELECTIVE, only entities specified as cacheable will be cached. When set to
DISABLE_SELECTIVE, entities specified as not cacheable will not be cached. When not specified or when
set to UNSPECIFIED, provider defaults may apply.

Zatem wcale nie musi byc jak mowisz. Nie wprowadzaj w blad.

  • Mowa o JPA2, jako ze autor uzywa @ApplicationScoped czyli CDI uzywa Java EE 6, czyli JPA2. W JPA1 nie ma 2nd-level cache.

Pozostało 580 znaków

2011-04-18 12:14
Moderator

Rejestracja: 13 lat temu

Ostatnio: 1 tydzień temu

Lokalizacja: Stacktrace

0

@jambalaya: dlatego piszę o implementacji Hibernate, gdzie 2nd lvl cache był od zawsze: http://docs.jboss.org/hiberna[...]rmance.html#performance-cache i można było go włączać i wyłączać niezależnie czy używałeś JPA/JPA2 czy nie. Domyślnie jest on wyłączony ponieważ wymaga dość dużo pamięci i obniża wydajność zapytań DML.
Cache pierwszego poziomu w hibernate może być sterowany za pomocą persistance.xml (w praktyce hibernate ma odpowiedni adapter do tłumaczenia konfiguracji JPA<>Hibernate). Jest domyślnie włączony.

Warto też pobawić się z Query Cache: http://docs.jboss.org/hiberna[...]e.html#performance-querycache jeżeli dane, które wyświetlamy, są pobierane co do zasady z tymi samymi parametrami.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException

Pozostało 580 znaków

2011-04-18 17:41

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

Jako dostawce JPA używam EclipseLinka. Do cacheowania użyłem adnotacji @Cacheable, ale nic to nie dało. W logach Glassfisha widać, że za każdym razem generowane jest zapytanie do bazy danych. Chyba, że coś robię nie tak?

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0