2011-12-08 18 views
5

Używam mechanizmu abstrakcji bufora z Spring 3.0 RC1: Ustawiłem kod bajtowy (oparty na AspectJ), tak aby mechanizm cache mógł być zastosowany do metod wywoływanych z samej klasy. Warto powiedzieć, że najpierw używałem podejścia opartego na proxy: wszystko działało poprawnie (metody są wywoływane z innego obiektu).Problemy z buforowaniem sprężynowym podczas używania AspectJ LTW

Jak tylko przełączyłem się na AspectJ (aktywowałem LTW przez, dodałem odpowiednie słoiki na swoje miejsce - wszystko działa poprawnie, nie są zgłaszane żadne wyjątki), nie ma buforowania

Jakieś sugestie? Dziękuję Ci.

==== później edytować ========

skonfigurować dzienniki debugowania dla org.springframework.

Jeśli w trybie proxy, można wyraźnie zobaczyć komunikat Dodawanie metody Cacheable „getLargeAssetContent” .... gdzie getLargeAssetContent jest mój „buforowalny” metoda ... (patrz poniżej)

W przypadku korzystania z trybu AspectJ, Nie widzę tego komunikatu ... każde żądanie trafia do warstwy DAO ... gdzie jako, w sytuacji, gdy działa pamięć podręczna, żądania zatrzymują się na warstwie usługi.

Co robię źle? Czy potrzebuję pliku aop.xml? Nie korzystałem z AOP ...., więc nie mam jeszcze pliku aop.xml.

Dziękuję za pomoc.

*> * 2011-12-12 16: 38: 55998 DEBUGOWANY [org.springframework.cache.annotation.AnnotationCacheOperationSource]

(http 127.0.0.1-8080-6) Dodawanie sposób w pamięci podręcznej " getLargeAssetContent” z atrybutu: [CacheOperation [public com.mycompany.myprj.model.AssetContent com.mycompany.myprj.dao.jcr.AssetDAOImpl.getLargeAssetContent (java.lang.String) rzuca com.mycompany.myprj.dao .MyPrjPersistenceException] Pamięć podręczna = [zasoby] | condition = '' | key = '# nodeId'] 2011-12-12 16: 38: 56,013 INFO [com.mycompany.myprj.dao.jcr.AssetDAOImpl] (http-127.0.0.1-8080-6) Pobieranie zawartości (getLargeAssetContent) o wartości aktywów od węzła o identyfikatorze = 575d8dc0-01be-41e4-85ce-a654fab97fe8 2011-12-12 16: 38: 56,092 INFO [com.mowompany.myprj.dao.jcr.AssetDAOImpl] (http-127.0.0.1- 8080-6) Wracając zawartość składnika od węzła z id = 575d8dc0-01be-41e4-85ce-a654fab97fe8 **

*

// Conte nt jest buforowany do tej pory 2011-12-12 16: 38: 57,654 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] (http-127.0.0.1-8080-6) Zwracanie buforowanej instancji pojedynczej fasoli ' assetController '2011-12-12 16: 38: 57,654 DEBUG [org.springframework.web.servlet.DispatcherServlet] (http-127.0.0.1-8080-6) Ostatnio zmodyfikowana wartość dla [/ myprj/asset/get/575d8dc0-01be-41e4-85ce-a654fab97fe8] jest: -1 2011-12-12 16: 38: 57,654 INFO [com.mowompany.myprj.services.AssetService] (http-127.0.0.1-8080-6) Pierwsze aktywów o identyfikatorze: 57

*

+0

Kiedy powiedziałeś, że włączony LTW, dodałeś '' w twoim kontekście, prawda? – Kilokahn

+0

Mam do czynienia z e = dokładnie ten sam problem. Czy byłeś w stanie znaleźć rozwiązanie? –

+0

Tak samo ja, nadal nie mogę tego zrobić z LTW. Wróć na tryb proxy teraz. –

Odpowiedz

1

Należy upewnić AspectJ tryb jest włączony (patrz 28.3.3 Enable caching annotations):

<cache:annotation-driven mode="aspectj"/> 

Domyślnie buforowania abstrakcji wykorzystuje tryb proxy, pomimo włączenia LTW (powinien automatycznie przełączyć się na IMHO na aspectj, ale tak się nie dzieje).

Jeśli to nie pomoże w sprawdzeniu śledzenia stosu podczas wywoływania metody buforowanej z zewnątrz i od środka - jakie są różnice?

+0

Dzięki, ale to zrobiłem (). Spróbuję spojrzeć na ślady. – silverb77

+2

Tylko z ciekawości, komuś udało się sprawić, że to coś działa? (używając abstrakcji pamięci podręcznej z aspektj) – silverb77

0

próbowałem go z projektem próbki i trzeba wykonać następujące czynności, aby przełączyć się z regularnym pełnomocnika do AspectJ LTW

  • Zmień <cache:annotation-driven mode="aspectj"/>
  • Dodaj AspectJ Weaver i wiosenno-aspekty do ścieżki klasy (łatwy do identyfikuj w obliczu wyrzucanego wyjątku ClassNotFoundException)
  • Miej domyślny plik aop.xml w pliku META-INF/aop.xml (ten jest z ustawieniami domyślnymi i konfiguracją dla klas proxy w moim określonym pakiecie - w przeciwnym razie będzie klasy proxy w cała JVM - do której musisz zadzwonić)
  • Dodaj <context:load-time-weaver aspectj-weaving="on"/> (Domyślnie jest autodetect który będzie cicho, jeśli nie META-INF/aop.xml nie zostanie znaleziony)
  • Dodaj przełącznik javaagent VM i skierować go do słoika wiosna-rozdzielczej jeśli używasz go samodzielnie. Jeśli jesteś w kontenerze, możesz użyć programu javaagent lub skonfigurować go do określonego programu ładującego klasy, o którym mowa w reference.