Keszowanie wartosci slownikow
Mikolaj Rydzewski - 22-11-2006 00:40
Keszowanie wartosci slownikow
Witam,
Jest sobie aplikacja webowa (struts + hibernate). Jest w niej sporo roznych tabel slownikowych ktore sa uzywane w sporej ilosci selectow na formularzach.
Zeby nie zasmiecac sobie form-beanow danymi slownikowymi (dla akcji istotne jest wybrane id a nie zawartosc calego slownika) pobieranie zawartosci listy robie na stronie JSP - umieszczam java.util.List w pageContext i odwoluje sie do tego z poziomu <html:select>.
Te dane sa stale, nie beda wogole zmieniane. Wiec srednio jest sens za kazdym razem siegac po nie do bazy danych. I teraz:
1. moge trzymac wartosci tych slownikow w sesji uzytkownika 2. moge tez je trzymac w kontekscie aplikacji (chyba lepiej, skoro one i tak sa stale) 3. wogole sie tym nie przejmowac i keszowac je na poziomie hibernate
Z tym trzecim mam problem, bo mimo takiego mapowania klasy:
<class name="Ocena" table="dOcena" mutable="false"> <cache usage="read-only"/>
widze w logu bazy danych, ze za kazdym razem odpytuje sie o wartosci. A ustawilem odpowiedniego cache providera i wlaczylem second level cache w hibernate.cfg.xml. Jakis pomysl?
Jesli jednak musialbym skorzystac z rozwiazania drugiego, to chcialbym zrobic cos takiego, zeby odwolanie do bazy nastapilo dopiero wtedy, gdy faktycznie jest konieczne. Czyli: umieszczam odpowiedniego beana w applicationScope, podaje go jako atrybut dla html:select i dopiero wtedy gdy strutsy beda renderowac selecta to moj bean siegnie do bazy danych, przy okazji keszujac zawartosc w pamieci. Tylko jak cos takiego przechwycic? Zrobic obiekt proxy dla java.util.List i reagowac na wywolanie iterator() czy jakos inaczej?
Choc najlepiej byloby chyba zmusic hibernate do keszowania, byloby najprosciej ;-)
-- Mikolaj Rydzewski <miki@ceti.pl> http://ceti.pl/~miki/ PGP KeyID: 8b12ab02 There are three kinds of people: men, women, and unix.
TeWu - 22-11-2006 00:40
Witam,
> 2. moge tez je trzymac w kontekscie aplikacji (chyba lepiej, skoro one i > tak sa stale)
ja wybrałem takie rozwiązanie - używając do tego ServletContextListener'a, np:
public class FlushListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event)
{ ServletContext ctx = event.getServletContext();
List magazineLineList = null; magazineLineList = DictionaryService.getInstance().getMagazineLineLis t(); ctx.setAttribute("magazineLineList",magazineLineLi st); System.out.println( "Init was called..." ); }
public void contextDestroyed(ServletContextEvent event) { Introspector.flushCaches(); System.out.println( "Destroy was called..." ); }
}
Mikołaj Rydzewski - 22-11-2006 00:41
TeWu wrote: > Witam, > >> 2. moge tez je trzymac w kontekscie aplikacji (chyba lepiej, skoro one i >> tak sa stale) > > ja wybrałem takie rozwiązanie - używając do tego > ServletContextListener'a, np:
Listenera to sobie umiem napisac ;-) A jesli juz, to wolalbym rozwiazanie z lazy-loading slownikow, a nie wszystkiego na starcie.
Dzieki jednak za aktywnosc ;-)
-- Mikolaj Rydzewski <miki@ceti.pl> http://ceti.pl/~miki/ PGP KeyID: 8b12ab02 There are three kinds of people: men, women and unix.
Mikołaj Rydzewski - 22-11-2006 00:41
Mikolaj Rydzewski wrote: > 3. wogole sie tym nie przejmowac i keszowac je na poziomie hibernate > > Z tym trzecim mam problem, bo mimo takiego mapowania klasy: > > <class name="Ocena" table="dOcena" mutable="false"> > <cache usage="read-only"/> > > widze w logu bazy danych, ze za kazdym razem odpytuje sie o wartosci. A > ustawilem odpowiedniego cache providera i wlaczylem second level cache w > hibernate.cfg.xml. Jakis pomysl?
Odpowiedz dla siebie i potomnosci:
Second level cache jest wykorzystywany tylko przy pobieraniu obiektow po ich id. W tym przypadku nalezy wlaczyc query_cache i dodatkowo w zapytaniu pobierajacym ww obiekty ustawic flage keszowania:
session.createQuery("from Ocena").setCacheable(true).list()
-- Mikolaj Rydzewski <miki@ceti.pl> http://ceti.pl/~miki/ PGP KeyID: 8b12ab02 There are three kinds of people: men, women and unix.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Zwracanie wartości, z funkcji, w funkcji [Js, Ajax]
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
Insert do tabeli z danych innej tabeli plus dodatkowa wartośćpola (Firebird)
Ms SQL Server 2000 i błąd przy nie wypełnionej wartościo w polusmalldatetime
Jak wyswietlic dane z dwoch tabel gdy dla jednej z nich jest brak jest danej wartosci
[mysql 4.0.24] INSERT do tabeli z automatyczną inkrementacją wartości pola.
=?iso-8859-1?q?mysql_domyslna_wartosc_kom=F3rki?=
[Oracle] PLSQL - wartosc z innego pola w zmienianaym rekordzie
[MySQL] wektor wartosci jako typ danej?
dynamiczny sql w plsql, szukanie wartosci w kolumnach
zanotowane.pldoc.pisz.plpdf.pisz.plabsolwenci.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|