Spring e Dao genericos

Olá pessoal meu código esta o seguinte…

tenho uma interface chamda de DaoGenerico


import java.io.Serializable;
import java.util.List;
import java.util.Map;

public interface DaoGenerico<T, ID extends Serializable> {
	public Class<T> getObjectClass();
	
	public T salvar(T object);

	public T pesquisarPorId(ID id);

	public T atualizar(T object);

	public void excluir(T object);

	public List<T> todos();

	public List<T> listPesqParam(String query, Map<String, Object> params);

	public List<T> listPesqParam(String query, Map<String, Object> params,
			int maximo, int atual);

	public List<T> listPesq(String query);

	public T pesqParam(String query, Map<String, Object> params);

}

Tenho a classe DaoGenericoImp que implementa o DaoGenerico a cima

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.exemplo.livro.dao.DaoGenerico;


@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public class DaoGenericoImp<T, ID extends Serializable> 
implements DaoGenerico<T, ID> {

	private EntityManager entityManager; 

	private final Class<T> oClass;//object class

	public Class<T> getObjectClass() {
		return this.oClass;
	}


	@SuppressWarnings("unchecked")
	@PersistenceContext
	public void setEntityManager(EntityManager em) {
		this.entityManager = em;
	}


	protected EntityManager getEntityManager() {
		if (entityManager == null)
			throw new IllegalStateException("Erro");
		return entityManager;
	}

	@SuppressWarnings("unchecked")
	public DaoGenericoImp() {
		this.oClass = (Class<T>)
		( (ParameterizedType) getClass().getGenericSuperclass() ).
		getActualTypeArguments()[0];

	}


	
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public T atualizar(T object) {
		getEntityManager().merge(object);

		return object;

	}

	
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public void excluir(T object) {
		object = getEntityManager().merge(object);
		getEntityManager().remove(object);
	}



	
	public T pesquisarPorId(ID id) {
		return getEntityManager().find(oClass, id);
	}	


	
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public T salvar(T object) {
		getEntityManager().clear();
		getEntityManager().persist(object);


		return object;
	}

	@SuppressWarnings("unchecked")
	public List<T> todos(){
		String queryS = "SELECT obj FROM "+oClass.getSimpleName()+" obj";
		Query query = getEntityManager().createQuery(queryS);
		return query.getResultList();

	}

	@SuppressWarnings("unchecked")
	public List<T> listPesqParam(String query, Map<String, Object> params){
		Query q = getEntityManager().createQuery(query);
		for(String chave : params.keySet()){
			q.setParameter(chave, params.get(chave));

		}
		return q.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<T> listPesqParam(String query, Map<String, Object> params,
			int maximo, int atual){
		Query q = getEntityManager().
					createQuery(query).
					setMaxResults(maximo).
					setFirstResult(atual);
		
		for(String chave : params.keySet()){
			q.setParameter(chave, params.get(chave));

		}
		return q.getResultList();
	}	
	
	@SuppressWarnings("unchecked")
	public List<T> listPesq(String query){
		Query q = getEntityManager().createQuery(query);
		return q.getResultList();
	}	
	
	@SuppressWarnings("unchecked")
	public T pesqParam(String query, Map<String, Object> params){
		Query q = getEntityManager().createQuery(query);
		for(String chave : params.keySet()){
			q.setParameter(chave, params.get(chave));

		}
		try{
			return (T) q.getSingleResult();
		}catch(NoResultException nre){
			return null;
		}
	}

}

aqui está o meu hibernate-cfg.xml

<hibernate-configuration>
	<session-factory name="configuration">
		<property name="hibernate.connection.driver_class">
			org.postgresql.Driver
		</property>
		<property name="hibernate.connection.password">
			postgres
		</property>
		<property name="hibernate.connection.username">
			postgres
		</property>
		<property name="hibernate.connection.url">
			jdbc:postgresql://localhost/e-commers
		</property>
		<property name="hibernate.dialect">
			org.hibernate.dialect.PostgreSQLDialect
		</property>
		<!-- Visualização da geração do SQL -->
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		<property name="hibernate.hbn2ddl.auto">update</property>
		<!-- Esquema de conexão -->
		<property name="hibernate.c3p0.min.size">5</property>
		<property name="hibernate.c3p0.max.size">20</property>
		<property name="hibernate.c3p0.timeout.size">180</property>
		<property name="hibernate.c3p0.idle_test_period">100</property>
		<property name="hibernate.cache.provider_class">
			org.hibernate.cache.EhCacheProvider
		</property>
	
		<mapping class="com.exemplo.livro.entidade.Categoria" />

	</session-factory>
</hibernate-configuration>

aqui esta o meu applicationContext

<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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">


	<bean id="entityManagerFactory"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitName" value="ecommerce" />
	</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 />

	<bean id="categoriaDao"
		class="com.exemplo.livro.dao.imp.CategoriaDaoImp" />
</bean>

aqui esta minha classe de teste


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.exemplo.livro.dao.CategoriaDao;
import com.exemplo.livro.entidade.Categoria;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "ClassPaht:**/applicationContext*.xml" })
public class TestCategoriaDao {
	
	@Autowired
	private CategoriaDao categoriaDao;
	
	private final Integer id = 1;

	public void setCaegoriaDao(CategoriaDao categoriaDao) {
		this.categoriaDao = categoriaDao;
	}

	@Test
	public void test() {
		Categoria teste = null;
		teste.setCatNome("a");
		teste.setId(2);
		Categoria categoria = new Categoria();
		categoria = this.categoriaDao.salvar(teste);

	}

quando eu rodo o teste, da o seguinte erro,


[ERROR][2009-09-20:11:28:56]= (org.springframework.test.context.TestContextManager.prepareTestInstance(258)) - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@c2b2f6] to prepare test instance [br.com.integrator.daos.tests.TestCategoriaDao@737371]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.integrator.daos.tests.TestCategoriaDao': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.exemplo.livro.dao.CategoriaDao br.com.integrator.daos.tests.TestCategoriaDao.categoriaDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.exemplo.livro.dao.CategoriaDao] is defined: Unsatisfied dependency of type [interface com.exemplo.livro.dao.CategoriaDao]: expected at least 1 matching bean

meus arquivos de hibernate-cfg.xml esta no classpath igualmente com o applicationContext.xml, o livro que estou acompanhando faz dessa maneira e ele diz que funciona xD alguém consegue ver algum erro ae ?!

ajuda aew meu povooooooo! xD

alguemm ajuda aew plz xD

Pelo jeito o seu autowire está procurando uma implementação da interface do CategoriaDao, vc tem alguma?

Saca só: [quote]expected at least 1 matching bean [/quote]

Cade a interface CategoriaDao e a sua implementacao CategoriaDaoImp???

Vc configurou os pacotes do spring e hibernate certinho?colocou todos os jar nos projetos?

pelo que parece algum jar podera esta faltando.

consegui resolver… tava passando o caminho do arquivo errado no

@ContextConfiguration(locations = { "ClassPaht:**/applicationContext*.xml" })  

o certo era…

@ContextConfiguration(locations = { "ClassPaht:applicationContext*.xml" })  

erro besta xD.

[quote=Douglas.Mesquita]consegui resolver… tava passando o caminho do arquivo errado no

@ContextConfiguration(locations = { "ClassPaht:**/applicationContext*.xml" })  

o certo era…

@ContextConfiguration(locations = { "ClassPaht:applicationContext*.xml" })  

erro besta xD.[/quote]

Colega, o anterior também estaria certo por um detalhe, é ClassPath e não ClassPaht.