Erro ao configurar hibernate + spring + jsf

Boa noite pessoal,

estou com o seguinte problema:


SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalStateException: Erro
	at br.com.fic.bancoFic.dao.DAOGenericoImpl.getEntityManager(DAOGenericoImpl.java:77)

isso porque estou tentando executar o seguinte:


public boolean verificarExistenciaConta(String agencia, String conta){
		
		boolean existeConta = false;
		
		ContaBancaria contaBancaria = new ContaBancaria();
		
		Query query = getEntityManager().createNamedQuery("procurarConta");
			
			query.setParameter(1, agencia);
			query.setParameter(2, conta);
			
			
			contaBancaria = (ContaBancaria) query.getSingleResult();
			
			
			if (contaBancaria!=null)
				
				existeConta=true;
			
			
		return existeConta;
		
		
	}

e o meu entityManager vem == null…

alguem saberia me ajudar ?

Aqui minha classe genérica

package br.com.fic.bancoFic.dao;

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

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

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

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

	private EntityManager entityManager;
	
	private final Class<T> oClass;
	
	@SuppressWarnings("unchecked")
	public DAOGenericoImpl() {
		
		this.oClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
		
	}
	
	
	
	public Class<T> getObjectClass(){
		return this.oClass;
	}
	

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

	@Override
	public T pesquisarPorId(Serializable id) {
		return (T)getEntityManager().find(oClass, id);
	}

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

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

	@Override
	public List<T> todos() {
		return null;
	}

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

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

	
	
	
}

Sei não, camarada, mas se o entity vem nulo, não seria mais interessante rever o mapeamento?

Olá,

Provavelmente está faltando a annotation @PersistenceContext no seu EnityManager para que o container possa realizar a Injeção de Dependência

Alias corrigindo, ele está no set, poste o seu xml de configuraçao.

Abraços
Daniel.

ola daniel,

aqui está o getter and setter do entity manager

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

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

e ele entra justamente nessa exceção ae…

llegaStateException…

Euclides,como está teu applicationContext.xml?

Jovem,

Debugando o seu getEntityManager veio nulo ? Caso ele não esteja retornando null verifique o mapeamento para o seu namedQuery “procurarConta”.

Abs,

Sim,

debbugando ele vem nulo.

entityManager = null.

por isso ele entra naquela exceção


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

Já já eu posto o meu applicationContext.

Aqui está meu applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?>

<beans default-autowire="byName"

	xmlns="http://www.springframework.org/schema/beans"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">



	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

		<property name="persistenceUnitName" value="conexao"/>

	</bean>

	

	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

		<property name="entityManagerFactory" ref="entityManagerFactory"/>

	</bean>

	

	<tx:annotation-driven/>

	

	<context:component-scan base-package="br.com.fic.bancoFic"/>

	

	<context:annotation-config/>

	

	<bean id="contaDao"

	class="br.com.fic.bancoFic.dao.ContaDAOImp"	/>

	





</beans>

e ae galera, nada ?

Bom dia pessoal,

e ae, ngm mais pra poder me ajudar :?

Para ativar no spring a detecção de annotations como @PersistenceContext e @PersistenceUnit, JSR250 (@PostContruct, @PreDestroy,…), JAX-WS (@WebServiceRef,…), etc… é necessário adicionar a tag abaixo no seu applicationContext.xml.

<context:annotation-config />

Lembrando que também é necessário, caso seu applicationContext.xml ainda não tenha, adicionar o namespace abaixo

xmlns:context="http://www.springframework.org/schema/context"

E o schemaLocation abaixo

http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd

Exemplo do xml abaixo:

<?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:context="http://www.springframework.org/schema/context"
       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">
	
	<context:annotation-config/>
		
	<!-- ... -->
	<!-- demais configurações da sua aplicação -->
	<!-- ... -->
	
</beans>

Espero ter ajudado.