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>
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.