ďťż
 
Keszowanie wartosci slownikow ďťż
 
Keszowanie wartosci slownikow
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • absolwenci.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com