Caros amigos,
Estou com erro estranho na inicialização do Tomcat. Minha aplicação usa Spring MVC com DAO genérico. Estendi o conceito de DAO genérico para Service genérico, ou seja, tenho um Service genérico ( com método genérico - CRUD) que tem os outros Services que estendem este Service genérico. Este Service genérico depende do DAO genérico que possui outros DAOs que o estendem. Pois bem o meu problema está na injeção do DAO da classe Usuario no Service da classe Usuario. O DAO está anotado como Repository (ou seja um bean) o Service anotado como serviço. No log de DEBUG do Tomcat os beans são criados mas há erro na injeção. O qu estou fazendo de errado??? :(
Erro
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
GenericSercice
package br.com.snclavalinmarte.portal.controllers.service;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import br.com.snclavalinmarte.portal.controllers.dao.GenericDAO;
import br.com.snclavalinmarte.portal.controllers.exception.ApplicationException;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectExistsExcepetion;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectNotFoundException;
@Service
@SuppressWarnings({ "unchecked", "rawtypes" })
public abstract class GenericService<T> implements Serializable
{
private static final long serialVersionUID = 1L;
// ******************** Atributos ********************
protected GenericDAO dao;
@SuppressWarnings("unused")
private Class<T> classe;
//get log4j handler
protected static final Logger logger = Logger.getLogger(GenericDAO.class);
// ********************** Contrutores **********************
public GenericService(Class<T> classe)
{
this.classe = classe;
}
// ******************** Outros métodos ********************
public T create(T t) throws ApplicationException{...}
public T update(T t){...}
public void delete(T t) throws ApplicationException{...}
public T retrieve(Long id){...}
public List<T> retrieveAll() throws ApplicationException{...}
public List<T> retrieveByNamedQuery(String namedQueryName) throws ApplicationException{...}
public List<T> retrieveByNamedQuery(String namedQueryName, Map<String, Object> parameters) throws ApplicationException{...}
public T retrieveByNamedQueryWithOneResult(String namedQueryName, Map<String, Object> parameters) throws ApplicationException{...}
public List<T> retrieveByNativeQuery(String sql, Class type) throws ApplicationException{...}
}
UsuarioService
package br.com.snclavalinmarte.portal.controllers.service;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO;
import br.com.snclavalinmarte.portal.controllers.exception.ApplicationException;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectNotFoundException;
import br.com.snclavalinmarte.portal.model.usuario.Usuario;
@Service
public class UsuarioService extends GenericService<Usuario>
{
private static final long serialVersionUID = 1L;
// ******************** Atributos ********************
private final UsuarioDAO usuarioDAO;
@Autowired
public UsuarioService(UsuarioDAO usuarioDAO)
{
super(Usuario.class);
this.usuarioDAO = usuarioDAO;
}
public Usuario findUserByUsername(String username) throws ApplicationException{...}
public List<Usuario> findAllUsers() throws ApplicationException{...}
public boolean resetPassword(Usuario usuarioConectado){...}
public boolean changePassword(Usuario usuarioConectado){...}
public String encryptPassword (String noEncryptedPassword){...}
}
GenericDAO
package br.com.snclavalinmarte.portal.controllers.dao;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectExistsExcepetion;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectNotFoundException;
@Repository
@SuppressWarnings({ "unchecked", "rawtypes" })
public abstract class GenericDAO<T> implements Serializable
{
private static final long serialVersionUID = 1L;
// ******************** Atributos ********************
@PersistenceContext
protected EntityManager em;
//get log4j handler
protected static final Logger logger = Logger.getLogger(GenericDAO.class);
private Class<T> classe;
public GenericDAO(Class<T> classe)
{
this.classe = classe;
}
public T create(T t) throws ObjectExistsExcepetion{...}
public T update(T t){...}
public void delete(T t){...}
public T retrieve(Long id) throws ObjectNotFoundException{...}
public List<T> retrieveAll() throws ObjectNotFoundException{...}
public List<T> retrieveByNamedQuery(String namedQueryName) throws ObjectNotFoundException{...}
public List<T> retrieveByNamedQuery(String namedQueryName, Map<String, Object> parameters) throws ObjectNotFoundException{...}
public T retrieveByNamedQueryWithOneResult(String namedQueryName, Map<String, Object> parameters) throws ObjectNotFoundException{...}
public List<T> retrieveByNativeQuery(String sql, Class type) throws ObjectNotFoundException{...}
}
UsuarioDAO
package br.com.snclavalinmarte.portal.controllers.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Repository;
import br.com.snclavalinmarte.portal.controllers.exception.ObjectNotFoundException;
import br.com.snclavalinmarte.portal.model.usuario.Usuario;
@Repository
public class UsuarioDAO extends GenericDAO<Usuario>
{
private static final long serialVersionUID = 1L;
public UsuarioDAO()
{
super(Usuario.class);
}
public Usuario findUserByUsername(String username) throws ObjectNotFoundException{...}
public List<Usuario> findAllUsers() throws ObjectNotFoundException{...}
}
Log Tomcat - modo DEBUG - LOG COMPLETO NO ARQUIVO EM ANEXO.
...
18:08:40,243 DEBUG DefaultListableBeanFactory:215 - Creating shared instance of singleton bean 'usuarioDAO'
18:08:40,243 DEBUG DefaultListableBeanFactory:435 - Creating instance of bean 'usuarioDAO'
18:08:40,244 DEBUG InjectionMetadata:71 - Registered injected element on class [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO]: PersistenceElement for protected javax.persistence.EntityManager br.com.snclavalinmarte.portal.controllers.dao.GenericDAO.em
18:08:40,245 DEBUG DefaultListableBeanFactory:509 - Eagerly caching bean 'usuarioDAO' to allow for resolving potential circular references
18:08:40,259 DEBUG InjectionMetadata:85 - Processing injected method of bean 'usuarioDAO': PersistenceElement for protected javax.persistence.EntityManager br.com.snclavalinmarte.portal.controllers.dao.GenericDAO.em
18:08:40,259 DEBUG DefaultListableBeanFactory:246 - Returning cached instance of singleton bean 'entityManagerFactory'
18:08:40,260 DEBUG JdkDynamicAopProxy:115 - Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO@2009634]
18:08:40,260 DEBUG DefaultListableBeanFactory:463 - Finished creating instance of bean 'usuarioDAO'
...
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usuarioService' defined in file [C:\Users\marcelo\Desenvolvimento\apache-tomcat-7.0.41\webapps\portal\WEB-INF\classes\br\com\snclavalinmarte\portal\controllers\service\UsuarioService.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO]: : No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1051)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:955)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:505)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
... 29 more
Jul 18, 2013 6:08:40 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /portal threw load() exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1051)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:955)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:505)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
18:08:40,438 ERROR DispatcherServlet:467 - Context initialization failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usuarioService' defined in file [C:\Users\marcelo\Desenvolvimento\apache-tomcat-7.0.41\webapps\portal\WEB-INF\classes\br\com\snclavalinmarte\portal\controllers\service\UsuarioService.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO]: : No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1051)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:955)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:505)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.snclavalinmarte.portal.controllers.dao.UsuarioDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
... 29 more
...