Buenas tardes, tengo un problema a la hora de desplegar un war formado con estas 3 tecnologías. En concreto las versiones son apache-cxf v 2.5.2, spring 2.5.6 e hibernate v v 3.2.1. Estoy usando anotaciones, por aprender esta nueva forma que spring nos provee. Me esta dando esta excepción: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'storeService': Can not resolve reference to bean 'storeService' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'storeService': Requested bean is Currently in creation: is there an unresolvable loop reference?
storeService es la implementacion del servicio Web, que esta definido en un fichero que he llamado beans.xml. Esta es su definición: <?xml version="1.0" encoding="UTF-8"?>
<!-- DECLARACION DE LOS ENDPOINTS DE LOS WEB SERVICES--> <jaxws:endpoint id="storeService" implementor="#storeService" implementorClass="com.aironman.core.cxf.service.StoreServiceImpl" address="/Store" />
El applicationContext.xml es tal que asi: <?xml version="1.0" encoding="UTF-8"?>
Ambos ficheros están incluidos en el web.xml. Esta es una aproximacion de la implementacion del servicio web, que tiene a su vez otras dependencias: @Service("storeService") @WebService(endpointInterface = "com.aironman.core.cxf.service.StoreService") public class StoreServiceImpl implements StoreService[/B] { private Log log = LogFactory.getLog(StoreServiceImpl.class); @Autowired @Qualifier("servicioUsuarios") private ServicioUsuarios servicioUsuarios; @Autowired @Qualifier("servicioItems") private ServicioItems servicioItems; @Autowired @Qualifier("servicioApuntes") private ServicioApuntesContables servicioApuntesContables; [B]public StoreServiceImpl()[/B]{ log.info("CONSTRUCTOR SIN tipo StoreServiceImpl..."); } some methods... getters and setters ... }
Esta es la implementacion del servicioUsuarios, no la pongo completa pq no me cabria todo el post :) package com.aironman.core.service; [B]@Service("servicioUsuarios") public class ServicioUsuariosImpl implements ServicioUsuarios [/B]{ private static ConcurrentHashMap <String,Usuario>hashMapUsuarios = new ConcurrentHashMap <String,Usuario> () ; private Log log = LogFactory.getLog(ServicioUsuariosImpl.class); @Autowired @Qualifier("servicioEncriptacion") private ServicioEncriptacion servicioEncriptacion; @Autowired @Qualifier("servicioPersistenciaUsuarios") private ServicioPersistenciaUsuarios servicioPersistenciaUsuarios; [B]public ServicioUsuariosImpl()[/B]{ log.info("Constructor SIN tipo ServicioUsuariosImpl..."); //TODO pendiente cargar el mapa con una llamada al servicioPersistencia } [B]@PostConstruct public void init()[/B] { log.info("init method on ServicioUsuariosImpl. Initializing hashMap..."); //i need to call persistence layer to fill the hashMap } some methods, getters and setters }
Como podeis ver, este servicio tiene inyectado una capa de persistencia llamado ServicioPersistenciaUsuarios, el cual usa un dao marcado como @repository package com.aironman.core.service; [B]@Service("servicioPersistenciaUsuarios") public class ServicioPersistenciaUsuariosImpl implements ServicioPersistenciaUsuarios [/B]{ @Autowired @Qualifier("usuarioHibernateDao") private UsuarioHibernateDao usuarioHibernateDao; private Log log = LogFactory.getLog(ServicioPersistenciaUsuariosImpl.class); public ServicioPersistenciaUsuariosImpl() { log.info("Constructor ServicioPersistenciaUsuariosImpl..."); } some methods, getters and setters }
Este es la implementacion del dao de usuarios, muy simple e incompleto pq no me cabe. package com.aironman.core.hibernate; [B]@Repository public class UsuarioHibernateDao extends HibernateGenericDao<Usuario, String> implements UsuarioDao [/B]{ private Log log = LogFactory.getLog(UsuarioHibernateDao.class); [B]@Autowired public UsuarioHibernateDao(@Qualifier("sessionFactory") SessionFactory sessionFactory) [/B]{ super(sessionFactory); } some methods... }
ServicioUsuariosImpl tiene otra dependencia, servicioEncriptacion package com.aironman.core.service; [B]@Service("servicioEncriptacion") public class ServicioEncriptacionImpl implements ServicioEncriptacion[/B]{ private static final String algoritmo = "SHA-256"; private Log log = LogFactory.getLog(ServicioEncriptacionImpl.class); private static java.security.MessageDigest diggest ; [B]public ServicioEncriptacionImpl()[/B] {some code... } some methods... }
Otra dependencia de storeService es servicioItemsImpl package com.aironman.core.service; [B]@Service("servicioItems") public class ServicioItemsImpl implements ServicioItems[/B]{ private static final ConcurrentHashMap <String,com.aironman.core.pojos.Item> //La pk es el isbn del item hashMapItems = new ConcurrentHashMap<String,com.aironman.core.pojos.Item>() ; private Log log = LogFactory.getLog(ServicioItemsImpl.class); @Autowired @Qualifier("servicioPersistenciaItems") private ServicioPersistenciaItems servicioPersistenciaItems; [B]public ServicioItemsImpl()[/B] { log.info("Constructor SIN TIPO ServicioItemsImpl"); } [B]@PostConstruct public void init()[/B] { log.info("init method on ServicioItemsImpl. Initializing hashMap..."); } some methods, getters and setters }
ServicioPersistenciaItemsImpl que es una dependencia de ServicioItemsImpl package com.aironman.core.service;
@Service("servicioPersistenciaItems") public class ServicioPersistenciaItemsImpl implements ServicioPersistenciaItems[/B] { @Autowired @Qualifier("itemHibernateDao") private ItemHibernateDao itemHibernateDao; private Log log = LogFactory.getLog(ServicioPersistenciaItemsImpl.class); [B]public ServicioPersistenciaItemsImpl()[/B] { log.info("Constructor SIN tipo ServicioPersistenciaItemsImpl..."); } some methods, getters and setters... }
y para acabar servicioApuntesContablesImpl, que por ahora no tengo ninguna dependencia, (aunque la tendrá). package com.aironman.core.service; [B]@Service("servicioApuntes") public class ServicioApuntesContablesImpl implements ServicioApuntesContables[/B]{
//TODO al final tendre que persistir los apuntes contables, por ahora los mantendre en memoria... [B]public ServicioApuntesContablesImpl()[/B] {} some methods }
en resumen, el problema ocurre cuando spring intenta instanciar la implementación del endpoint y no entiendo el porque. En ppio spring tiene que resolver las dependencias por mi no? marcando los objetos con el @ necesario. No tengo constructores tipados, tengo los getters y setters necesarios... Podria por favor alguien arrojarme algo de luz? llevo unos días buscando la solución leyendo en los foros oficiales y ya estoy algo desesperado. No he puesto todo el código por motivos de facilidad de lectura y por no alcanzar un limite de caracteres. Si alguien necesita que ponga el código de algo en particular, haganmelo saber. Gracias por leer hasta aquí.
Hola, podrìas poner tu web.xml para ver que ficheros y como los estas cargando? es que es ahí donde tienes el problema. Mira el ContextConfigLocation y lo que le pasas como ficheros de configuracion a tus servlets.
Buenas tardes, tengo un problema a la hora de desplegar un war formado con estas 3 tecnologías. En concreto las versiones son apache-cxf v 2.5.2, spring 2.5.6 e hibernate v v 3.2.1. Estoy usando anotaciones, por aprender esta nueva forma que spring nos provee.
Me esta dando esta excepción:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'storeService': Can not resolve reference to bean 'storeService' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'storeService': Requested bean is Currently in creation: is there an unresolvable loop reference?
storeService es la implementacion del servicio Web, que esta definido en un fichero que he llamado beans.xml. Esta es su definición:
<?xml version="1.0" encoding="UTF-8"?>
<!-- DECLARACION DE LOS ENDPOINTS DE LOS WEB SERVICES-->
<jaxws:endpoint
id="storeService" implementor="#storeService"
implementorClass="com.aironman.core.cxf.service.StoreServiceImpl"
address="/Store" />
El applicationContext.xml es tal que asi:
<?xml version="1.0" encoding="UTF-8"?>
<context:component-scan base-package="com.aironman.core" />
<tx:annotation-driven transaction-manager="txManager"/>
<property name="sessionFactory" ref="sessionFactory"/>
<property name="location" value="classpath:hibernate.properties"/>
<property name="driverClassName" value="${database.driverClassName}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=${database.hibernate.dialect}
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
hibernate.show_sql=true
hibernate.use_sql_comments=true
hibernate.jdbc.batch_size=0
hibernate.hbm2ddl.auto=create-drop
hibernate.default_schema=${hibernate.default_schema}
hibernate.generate_statistics=true
hibernate.cache.use_structured_entries=true
</value>
</property>
<property name="annotatedClasses">
<list>
<value>com.aironman.core.pojos.Usuario</value>
<value>com.aironman.core.pojos.Item</value>
<value>com.aironman.core.pojos.Persona</value>
</list>
</property>
Ambos ficheros están incluidos en el web.xml.
Esta es una aproximacion de la implementacion del servicio web, que tiene a su vez otras dependencias:
@Service("storeService")
@WebService(endpointInterface = "com.aironman.core.cxf.service.StoreService")
public class StoreServiceImpl implements StoreService[/B] {
private Log log = LogFactory.getLog(StoreServiceImpl.class);
@Autowired
@Qualifier("servicioUsuarios")
private ServicioUsuarios servicioUsuarios;
@Autowired
@Qualifier("servicioItems")
private ServicioItems servicioItems;
@Autowired
@Qualifier("servicioApuntes")
private ServicioApuntesContables servicioApuntesContables;
[B]public StoreServiceImpl()[/B]{
log.info("CONSTRUCTOR SIN tipo StoreServiceImpl...");
}
some methods... getters and setters ...
}
Esta es la implementacion del servicioUsuarios, no la pongo completa pq no me cabria todo el post :)
package com.aironman.core.service;
[B]@Service("servicioUsuarios")
public class ServicioUsuariosImpl implements ServicioUsuarios [/B]{
private static ConcurrentHashMap <String,Usuario>hashMapUsuarios = new ConcurrentHashMap <String,Usuario> () ;
private Log log = LogFactory.getLog(ServicioUsuariosImpl.class);
@Autowired
@Qualifier("servicioEncriptacion")
private ServicioEncriptacion servicioEncriptacion;
@Autowired
@Qualifier("servicioPersistenciaUsuarios")
private ServicioPersistenciaUsuarios servicioPersistenciaUsuarios;
[B]public ServicioUsuariosImpl()[/B]{
log.info("Constructor SIN tipo ServicioUsuariosImpl...");
//TODO pendiente cargar el mapa con una llamada al servicioPersistencia
}
[B]@PostConstruct
public void init()[/B]
{
log.info("init method on ServicioUsuariosImpl. Initializing hashMap...");
//i need to call persistence layer to fill the hashMap
}
some methods, getters and setters
}
Como podeis ver, este servicio tiene inyectado una capa de persistencia llamado ServicioPersistenciaUsuarios, el cual usa un dao marcado como @repository
package com.aironman.core.service;
[B]@Service("servicioPersistenciaUsuarios")
public class ServicioPersistenciaUsuariosImpl implements ServicioPersistenciaUsuarios [/B]{
@Autowired
@Qualifier("usuarioHibernateDao")
private UsuarioHibernateDao usuarioHibernateDao;
private Log log = LogFactory.getLog(ServicioPersistenciaUsuariosImpl.class);
public ServicioPersistenciaUsuariosImpl()
{
log.info("Constructor ServicioPersistenciaUsuariosImpl...");
}
some methods, getters and setters
}
Este es la implementacion del dao de usuarios, muy simple e incompleto pq no me cabe.
package com.aironman.core.hibernate;
[B]@Repository
public class UsuarioHibernateDao extends HibernateGenericDao<Usuario, String> implements UsuarioDao
[/B]{
private Log log = LogFactory.getLog(UsuarioHibernateDao.class);
[B]@Autowired
public UsuarioHibernateDao(@Qualifier("sessionFactory") SessionFactory sessionFactory) [/B]{
super(sessionFactory);
}
some methods...
}
ServicioUsuariosImpl tiene otra dependencia, servicioEncriptacion
package com.aironman.core.service;
[B]@Service("servicioEncriptacion")
public class ServicioEncriptacionImpl implements ServicioEncriptacion[/B]{
private static final String algoritmo = "SHA-256";
private Log log = LogFactory.getLog(ServicioEncriptacionImpl.class);
private static java.security.MessageDigest diggest ;
[B]public ServicioEncriptacionImpl()[/B]
{some code...
}
some methods...
}
Otra dependencia de storeService es servicioItemsImpl
package com.aironman.core.service;
[B]@Service("servicioItems")
public class ServicioItemsImpl implements ServicioItems[/B]{
private static final ConcurrentHashMap
<String,com.aironman.core.pojos.Item>
//La pk es el isbn del item
hashMapItems = new ConcurrentHashMap<String,com.aironman.core.pojos.Item>() ;
private Log log = LogFactory.getLog(ServicioItemsImpl.class);
@Autowired
@Qualifier("servicioPersistenciaItems")
private ServicioPersistenciaItems servicioPersistenciaItems;
[B]public ServicioItemsImpl()[/B]
{
log.info("Constructor SIN TIPO ServicioItemsImpl");
}
[B]@PostConstruct
public void init()[/B]
{
log.info("init method on ServicioItemsImpl. Initializing hashMap...");
}
some methods, getters and setters
}
ServicioPersistenciaItemsImpl que es una dependencia de ServicioItemsImpl
package com.aironman.core.service;
@Service("servicioPersistenciaItems")
public class ServicioPersistenciaItemsImpl implements ServicioPersistenciaItems[/B]
{
@Autowired
@Qualifier("itemHibernateDao")
private ItemHibernateDao itemHibernateDao;
private Log log = LogFactory.getLog(ServicioPersistenciaItemsImpl.class);
[B]public ServicioPersistenciaItemsImpl()[/B]
{
log.info("Constructor SIN tipo ServicioPersistenciaItemsImpl...");
}
some methods, getters and setters...
}
y para acabar servicioApuntesContablesImpl, que por ahora no tengo ninguna dependencia, (aunque la tendrá).
package com.aironman.core.service;
[B]@Service("servicioApuntes")
public class ServicioApuntesContablesImpl implements ServicioApuntesContables[/B]{
private Log log = LogFactory.getLog(ServicioApuntesContablesImpl.class);
private static ConcurrentHashMap <ClaveApunteContable,ApunteContable> mapaApuntesContables
= new ConcurrentHashMap <ClaveApunteContable,ApunteContable> ();
//TODO al final tendre que persistir los apuntes contables, por ahora los mantendre en memoria...
[B]public ServicioApuntesContablesImpl()[/B]
{}
some methods
}
en resumen, el problema ocurre cuando spring intenta instanciar la implementación del endpoint y no entiendo el porque. En ppio spring tiene que resolver las dependencias por mi no? marcando los objetos con el @ necesario. No tengo constructores tipados, tengo los getters y setters necesarios...
Podria por favor alguien arrojarme algo de luz? llevo unos días buscando la solución leyendo en los foros oficiales y ya estoy algo desesperado.
No he puesto todo el código por motivos de facilidad de lectura y por no alcanzar un limite de caracteres.
Si alguien necesita que ponga el código de algo en particular, haganmelo saber.
Gracias por leer hasta aquí.