Boa pessoal!
Estou tentando compartilhar minha conexão JPA com o spring security. Porem quando faço o teste com o Junit me retorna uma exception dizendo que o EntityManager em está null. Alguém poderia me esclarecer pq isso está acontecendo? segue minhas classes para análise:
Persistence.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="persistence-init" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="connection.datasource" value="java:/comp/env/jdbc/requisicao"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
</properties>
</persistence-unit>
</persistence>
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean id="requisicaoDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/requisicao</value>
</property>
</bean>
</beans>
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
<Resource name="jdbc/requisicao"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="postgres"
password="postgres"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/requisicaoDB?autoReconnect=true"/>
</Context>
applicationContext-security
<?xml version="1.0" encoding="UTF-8"?>
<b:beans xmlns="http://www.springframework.org/schema/security"
xmlns:b="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<http>
<intercept-url pattern="/admin/**" access="ROLE_ADMINISTRADOR" />
<intercept-url pattern="/restrito/**" access="ROLE_USUARIO" />
<form-login login-page="/publico/login.xhtml"
always-use-default-target="true" default-target-url="/restrito/**"
authentication-failure-url="/publico/**" />
<logout/>
<remember-me />
</http>
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="requisicaoDataSource" />
</authentication-provider>
</authentication-manager>
</b:beans>
GenericDAO.java
package br.com.crweb.model.persistence;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.crweb.model.util.JPAUtil;
public class GenericDAO<T> implements IDAO<T>, Serializable{
EntityManager em = JPAUtil.getConnection();
T obj;
public GenericDAO(T obj) {
this.obj = obj;
}
public void save(T obj) throws Exception {
em.getTransaction().begin();
em.persist(obj);
em.getTransaction().commit();
em.close();
}
public void update(T obj) throws Exception {
em.getTransaction().begin();
em.merge(obj);
em.getTransaction().commit();
em.close();
}
public void delete(T obj) throws Exception {
em.getTransaction().begin();
em.remove(obj);
em.getTransaction().commit();
em.close();
}
@SuppressWarnings("unchecked")
public T findById(Integer id) throws Exception {
return (T)em.find(this.getClass(), id);
}
@SuppressWarnings("unchecked")
public List<T> findAll() throws Exception {
Query query = em.createQuery("from " + getClass().getName() + "t");
//Query query2 = em.createQuery("select u from Usuario u");
return query.getResultList();
}
}
TestUsuarioDAO - Junit
package br.com.crweb.teste;
import org.junit.Test;
import br.com.crweb.model.entity.Usuario;
import br.com.crweb.model.persistence.UsuarioDAO;
public class TestUsuarioDAO {
@Test
public void testSalvar(){
Usuario usuario = new Usuario();
usuario.setNome("José");
usuario.setLogin("jose");
usuario.setSenha("123");
usuario.setTipo('m');
usuario.setAtivo(true);
try {
UsuarioDAO usuarioDAO = new UsuarioDAO();
usuarioDAO.save(usuario);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
Desde já muito obrigado.