My Ordinary Thoughts

Uruchomienie cacheowania encji w JBoss AS 4.2.x

Posted by: Marek Goldmann on: 15/11/2008

Aby scacheować encję w serwerze JBoss należy opatrzyć ją adnotacją @org.hibernate.annotations.Cache:

import javax.persistence.Entity;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name = "role_permissions")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class RolePermission extends BaseEntity {

	private static final long serialVersionUID = 6778357970340362708L;

	private String role;
	private String target;

...

}

oraz dodać odpowiednie właściwości do pliku persistence.xml:

<property name="hibernate.cache.provider_class" value="org.jboss.ejb3.entity.TreeCacheProviderHook" />
<property name="treecache.mbean.object_name" value="jboss.cache:service=EJB3EntityTreeCache" />

Dodatkowo należy posiadać odpowiednio skonfigurowany serwer. Są na to dwa sposoby:

  1. Uruchomienie serwera w konfiguracji all,
  2. Uruchomienie serwera w konfiguracji default po jej uprzednim przygotowaniu.

Drugi sposób jest o tyle lepszy, że jest start serwera jest zdecydowanie szybszy, co na maszynie deweloperskiej jest dużym atutem. Konfiguracja all pozwala na klastrowanie, ale komu to potrzebne przy tworzeniu i testowaniu aplikacji?

Aby uruchomić cacheowanie encji przy konfiguracji default (domyślnej) należy skopiować z katalogu $JBOSS_HOME/server/all/lib/ biblioteki jboss-cache-jdk50.jar oraz jgroups.jar do katalogu $JBOSS_HOME/default/lib/.

Dodatkowo należy skopiować plik $JBOSS_HOME/server/all/deploy/ejb3-entity-cache-service.xml do katalogu $JBOSS_HOME/default/deploy/.

I to wszystko – możemy już cieszyć się encjami z pamięci podręcznej.

Poprawność uruchomienia cacheowania można sprawdzić w konsoli JMX serwera JBoss pod adresem http://localhost:8080/jmx-console/ wyszukując usługę *:service=EJB3EntityTreeCache,*, a następnie uruchamiająć akcję printDetails(). Na wynikowym ekranie powinna się znaleźć encja oznaczona adnotacją @Cache.

Odpowiedzi: 10 do "Uruchomienie cacheowania encji w JBoss AS 4.2.x"

Wajny tutek,

Niestety u mnie chyba to za bardzo nie dziala.

Zrobilem wszystko jak napisales plus dodatkowo musialem wylaczyc second level cache oraz query cache w hibernate

No i wszystko niby dziala, ale za kazdym razem gdy wywoluje metode, ktora odpytuje encje (to samo zapytanie) widze ze logi hibernata nadal leca, czyli zapytania do bazy ida.

Nie wiem jak moglbym jeszcze to skonfigurowac aby dane byly cachowane.

Service z jbossCache staruje ale w consoli jmx nie widac zadnej cacheowanej encji.

fresh,

Ustawiając parametr hibernate.cache.use_second_level_cache na false wyłączasz używanie pamięci podręcznej, również dla encji. Parametr ten musi być ustawiony na true. Pamięć podręczna dla zapytań może być wyłączona.

Zmień ten parametr i spróbuj ponownie. Dlaczego go wyłączyłeś?

Ustawilem w persistence unit hibernate.cache.use_second_level_cache na true oraz na encjach adnotacje @Cache(usage = CacheConcurrencyStrategy.READ_ONLY) ale nadal leca zapytania przy kolejnym odwolaniu do encji.

Odezwij sie do mnie na maila “yazoo22 malpa o2 kropka pl”

@fresh,

Pokaż zawartość pliku persistence.xml. Pokaż logi z zapytań.

Cześć,
mam pytanie dotyczące zachowania pól oznaczonych @Transient, czy one też są zapamiętywane w cache ?
Przeprowadzałem małe testy, i gdy chciałem odczytać wartość tego pola zawsze dostawałem nulla.

Tak jak mówisz, pola oznaczone @Transient nie są zapisywane w pamięci podręcznej.

Znalezione w sieci:

Zmienna oznaczona jako transient jest pomijana w procesie serializacji obiektu (serializacja (dodana w Java 5) – zapis stanu obiektu np. do pliku, aby móc go w późniejszym czasie odtworzyć).

Dzięki za tak szybką odpowiedź.
http://books.google.pl/books?id=fVCuB_Xq3pAC&printsec=frontcover&dq=pro+ejb+3&ei=KkhwSoLwNYmGzASGu6zdDg#v=onepage&q=&f=false
Na 82 stronie tejże książki jest napisane (przynajmniej tak mi się wydaje :) ) że w odróźnieniu od javowego słowa kluczowego transient, adnotacja @Tranisent powoduje że zmienna jest serializowana

Myślę, że warto zajrzeć również tutaj oraz tutaj. Zauważ, że są to dwie różne adnotacje, nie wiem której używasz.

Przyznam się, że tego kawałka o @Transient w Pro EJB nie do końca rozumiem.

Dodaj komentarz

O mnie

Marek Goldmann
JBoss by Red Hat Software Engineer.

Pasjonują mnie technologie i rozwiązania oparte i tworzone za pomocą wolnego, otwartego oprogramowania.

Jestem członkiem Silesia JUG.

Twitter

Buttony





Creative Commons License

Statystyki

  • 8,320 odwiedzin

Strony

 

Listopad 2008
P W Ś C P S N
    gru »
 12
3456789
10111213141516
17181920212223
24252627282930