Bom dia pessoa, após 2 dias sem solução peço ajuda…
Estou fazendo um teste numa aplicação, utilizo ela com Hibernate e Spring, porem, nao utilizava o @Transactional
Após tentar utiliza-lo, adicionando o
<tx:annotation-driven transaction-manager="transactionManager" />
Recebo um erro que não consegue mais injetar meus @Autowired em meus controllers
Alguem pode me dar uma luz?
Segue abaixo applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="br.edu.utfpr.videoLocadora.*" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="videoLocadora" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true" />
<property name="database" value="MYSQL" />
</bean>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map><entry key="view"><bean class="br.scope.ViewScope" /></entry></map>
</property>
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<aop:aspectj-autoproxy />
</beans>
Meu Controller (apesar do nome ser LoginMB, hehe)
package br.edu.utfpr.videoLocadora.managedBean;
imports..
@Controller("loginMB")
@Scope("session")
public class LoginMB implements Serializable {
private static final long serialVersionUID = 8062040463665038771L;
@Autowired
private UsuarioDao usuarioDao;
public String doLogin() throws IOException, ServletException {
Usuario user = new Usuario();
user.setLogin("AAA");
user.setSenha("aaaa");
usuarioDao.save(user);
return null;
}
public Usuario getUsuarioLogado() {
Usuario usuario = null;
return usuario;
}
}
e meu UsuarioDao está limpo, apenas extendendo meu Genericdao
GenericDao
@Repository
@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public class GenericDao<T extends Serializable> implements Serializable {
/**
*
*/
private static final long serialVersionUID = -2352352352352352;
private Class<T> entityClass;
@PersistenceContext
protected EntityManager entityManager;
@SuppressWarnings("unchecked")
public void getEC() {
this.entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void save(GenericModel entity) {
Deste modo, ele nao detecta mais o bean par a injeção
javax.servlet.ServletException: Error creating bean with name 'loginMB': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private br.edu.utfpr.videoLocadora.repository.UsuarioDao br.edu.utfpr.videoLocadora.managedBean.LoginMB.usuarioDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.edu.utfpr.videoLocadora.repository.UsuarioDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
Alguem ja passou por algo parecido?
Ou se tiver uma aplicação exemplo utilizando injeção e transação, posso ir fazendo em cima… ja nao sei mais o que fazer…
Abraços…