2011-12-08 13 views
5

Estoy utilizando el mecanismo de abstracción de caché de Spring 3.0 RC1: he configurado bytecode (basado en AspectJ) weawing para que el mecanismo de caché se pueda aplicar a métodos llamados desde la propia clase. Vale la pena decir que primero estaba usando un enfoque basado en proxy: todo funcionaba bien (para los métodos se invocan desde otro objeto)Problemas de almacenamiento en caché de primavera cuando se utiliza AspectJ LTW

Tan pronto como cambio a AspectJ (activé LTW vía, agregué los contenedores correctos en su lugar - todo está funcionando bien, no se lanzan excepciones), no hay almacenamiento en caché

¿Alguna sugerencia? Gracias.

==== tarde editar ========

puedo configurar los registros de depuración para org.springframework.

Si se utiliza el modo de proxy, puedo ver claramente el mensaje Adición método cacheables 'getLargeAssetContent' .... donde getLargeAssetContent es mi método "cacheable" ... (ver abajo)

Si se utiliza el modo aspectj, No veo este mensaje ... todas las solicitudes van a la capa DAO ... donde, en la situación en que funciona la memoria caché, las solicitudes se detienen en la capa de servicio.

¿Qué estoy haciendo mal? ¿Necesito un aop.xml? No estaba usando AOP ...., así que aún no tengo un aop.xml.

Gracias por su ayuda.

*> * 2011-12-12 16: 38: 55 998 DEBUG [org.springframework.cache.annotation.AnnotationCacheOperationSource]

(http-127.0.0.1-8080-6) Adición método cacheable ' getLargeAssetContent' con el atributo: [CacheOperation [pública com.mycompany.myprj.model.AssetContent com.mycompany.myprj.dao.jcr.AssetDAOImpl.getLargeAssetContent (java.lang.String) lanza com.mycompany.myprj.dao .MyPrjPersistenceException] caches = [activos] | condición = '' | key = '# nodeId'] 2011-12-12 16: 38: 56,013 INFO [com.mycompany.myprj.dao.jcr.AssetDAOImpl] (http-127.0.0.1-8080-6) Obtención del contenido (getLargeAssetContent) de activo del nodo con id = 575d8dc0-01be-41e4-85ce-a654fab97fe8 2011-12-12 16: 38: 56,092 INFO [com.mycompany.myprj.dao.jcr.AssetDAOImpl] (http-127.0.0.1- 8080-6) Volviendo el contenido de activo de nodo con id = 575d8dc0-01be-41e4-85ce-a654fab97fe8 **

*

// el conte nt está guardado en caché por ahora 2011-12-12 16: 38: 57,654 DEPURO [org.springframework.beans.factory.support.DefaultListableBeanFactory] (http-127.0.0.1-8080-6) Devolución de la instancia en caché de singleton bean ' assetController '2011-12-12 16: 38: 57,654 DEPURO [org.springframework.web.servlet.DispatcherServlet] (http-127.0.0.1-8080-6) Valor de última modificación para [/ myprj/asset/get/575d8dc0-01be-41e4-85ce-a654fab97fe8] es: -1 2011-12-12 16: 38: 57,654 INFO [com.mycompany.myprj.services.AssetService] (http-127.0.0.1-8080-6) Conseguir activo con id: 57

*

+0

Cuando dice que ha habilitado LTW, ha agregado '' en su contexto, ¿no? – Kilokahn

+0

Estoy frente a e = exactamente el mismo problema. ¿Pudiste encontrar una solución? –

+0

Yo también, todavía no puedo hacerlo con LTW. Vuelve al modo proxy por ahora. –

Respuesta

1

modo Hacer AspectJ seguro está habilitado (ver 28.3.3 Enable caching annotations):

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

por abstracción de almacenamiento en caché por defecto utiliza proxy modo, a pesar de tener habilitado LTW (debe cambiar automáticamente a aspectj en mi humilde opinión, pero no es así).

Si esto no ayuda a examinar el seguimiento de la pila al llamar al método en caché desde el exterior y desde dentro, ¿cuáles son las diferencias?

+0

Gracias, pero lo hice (). Trataré de buscar los rastros. – silverb77

+2

Simplemente por curiosidad, ¿alguien logró hacer que esto funcionara? (es decir, usar la abstracción de almacenamiento en caché con aspectj) – silverb77

0

he probado con un proyecto de ejemplo y tenía que hacer lo siguiente para cambiar de proxy de regular a aspectj LTW

  • Cambio <cache:annotation-driven mode="aspectj"/>
  • Añadir aspectj-Weaver y primavera-aspectos a la ruta de clase (fácil identificar frente a la excepción ClassNotFoundException)
  • Tener un aop.xml predeterminado en un META-INF/aop.xml (este es con la configuración predeterminada y las clases de proxy en mi paquete específico; de lo contrario, las clases proxy en el JVM completa, para la que debe realizar una llamada)
  • Añadir <context:load-time-weaver aspectj-weaving="on"/> (por defecto es la detección automática que en silencio fallar si no se encuentra META-INF/aop.xml)
  • Añadir el interruptor javaagent la máquina virtual y el punto a la jarra de primavera-instrumento si lo está utilizando independiente. Si está en un contenedor, puede usar javaagent o configurarlo para un cargador de clases específico como se menciona en el reference.
Cuestiones relacionadas