Foros del Web » Programación para mayores de 30 ;) » Java »

Spring+ehcache

Estas en el tema de Spring+ehcache en el foro de Java en Foros del Web. Hola. Tengo un pequeño problema. Tengo un bean de spring que me inicializa una propiedad cm. <bean id="cachePruebaUtil" class="main.com.solytravel.util.ehcache.CacheUtil" > <property name=" cm " ref="cachePrueba"/> ...
  #1 (permalink)  
Antiguo 07/04/2011, 06:20
 
Fecha de Ingreso: abril-2011
Mensajes: 4
Antigüedad: 13 años
Puntos: 0
Spring+ehcache

Hola. Tengo un pequeño problema.

Tengo un bean de spring que me inicializa una propiedad cm.

<bean id="cachePruebaUtil" class="main.com.solytravel.util.ehcache.CacheUtil" >
<property name="cm" ref="cachePrueba"/>
</bean>

En la clase CacheUtil tengo la propiedad cm con su get y set.

private static CacheManager cm;

public CacheManager getCm() {
return cm;
}

public void setCm(CacheManager cm) {
this.cm = cm;
}

En el constructor de la clase hago esto:

Cache cache = cm.getCache("cachePrueba");

Pero cm está a null.

Sin embargo, cuando se llama a la clase una vez arrancada la aplicación, desde otra clase por ejemplo, la variable se inicializa ok.

¿Alguien sabe como puedo inicializar esta variable por spring cuando la aplicación está arrancando?

Saludos.
  #2 (permalink)  
Antiguo 07/04/2011, 17:49
 
Fecha de Ingreso: enero-2008
Mensajes: 197
Antigüedad: 16 años, 3 meses
Puntos: 10
Respuesta: Spring+ehcache

Hola,

Necesitas revisar un poco la documentacion de Spring en cuanto al ciclo de vida de los Beans :) Lo que pasa es que estas usando el constructor pero al momento de construir el objeto util tu cache manager aun no esta inicializado por Spring ya que se lo injectas mediante una propiedad en este caso cm.

Spring puede inicializar los objetos de varias formas y puedes injectar las dependencias de varias formas tambien por constructor y por propiedad como lo estas haciendo.

Si necesitas que tu bean se inicialize con el cache manager entonces mejor define el constructor como tal (esperando un cache manager) y en tu definicion de bean usa "constructor-arg" en lugar de property.

Con eso te aseguras que tu objeto se construya con la dependencia que quieres.

Otra cosa que puedes hacer es dejarlo como esta, y quitar esa parte del constructor para que no te marque null e inicializar tu bean despues, esto mediante definiendo un metodo "init" o como quieras llamarlo que se va a llamar despues de creado el objeto siempre y cuando asi lo quieras. Tienes que definir tu bean asi:

<bean id="cachePruebaUtil" class="main.com.solytravel.util.ehcache.CacheUtil" init-method="init">
<property name="cm" ref="cachePrueba"/>
</bean>

con eso, el metodo init se va a ejecutar despues de creado el objeto y despues de que se le injecto la referencia "cm". En init puedes hacer:

Cache cache = cm.getCache("cachePrueba");

ya que en ese momento la propiedad cm ya esta injectada !

te invito a que le des una hojeada rapida a http://static.springsource.org/sprin...-collaborators

suerte y cualquier cosa aqui andamos! saludos!
  #3 (permalink)  
Antiguo 08/04/2011, 05:23
 
Fecha de Ingreso: abril-2011
Mensajes: 4
Antigüedad: 13 años
Puntos: 0
Respuesta: Spring+ehcache

Mil gracias por la ayuda.

Funcionó init-method="init".

Leeré la referencia que me habeis aconsejado.

Saludos.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:25.