Hibernate +Spring + @Transactional

0 respostas
D

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…

Criado 14 de novembro de 2011
Respostas 0
Participantes 1