Galera, estou com um projeto que estou fazendo para dar uma reciclada em meus conhecimentos. Pois bem. Comprei um livro que só me deixou dúvidas, tentei seguir sozinho e me senti menos perdido que através do livro (Java Na web Com JSF, Spring e netbeans 6)
Porém estou com dificuldades…
Vamos lá
Não consigo com que a classe abaixo “UsuarioFacade” recebe a Injeção de uma instancia da classe “UsuarioDao” na variavel “usuarioDao” conforme a classe abaixo (Quando ele tenta acessar usuarioDao da Null Pointer, ou seja, não conseguiu receber a instancia da classe via DI:
package facade;
import dao.UsuarioDao;
import dominio.Usuario;
import java.util.List;
public class UsuarioFacade {
private UsuarioDao usuarioDao;
/** Creates a new instance of UsuarioFacade */
public UsuarioFacade() {
}
public Usuario gravar(Usuario usuario) {
return usuarioDao.gravar(usuario);
}
public void excluir(Usuario usuario) {
usuarioDao.excluir(usuario);
}
public Usuario carregar(Integer id) {
return usuarioDao.carregar(id);
}
public List obterTodos() {
return usuarioDao.obterTodos();
}
public List obterPorNome(String nome) {
return usuarioDao.obterPorNome(nome);
}
public List obterPorLogin(String login) {
return usuarioDao.obterPorLogin(login);
}
public Usuario obterPorLoginSenha(String login, String senha) {
return usuarioDao.obterPorLoginSenha(login, senha);
}
public UsuarioDao getUsuarioDao() {
return usuarioDao;
}
public void setUsuarioDao(UsuarioDao usuarioDao) {
this.usuarioDao = usuarioDao;
}
}
Eis agora o 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.0.xsd">
<!-- Configurador que substitui os marcadores ${...} com os valores definidos no arquivo de properties -->
<!-- (in this case, JDBC-related settings for the dataSource definition below) -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:/jdbc.properties"/>
</bean>
<!-- Local C3P0 DataSource que trabalha em qualquer ambiente, em ambientes de produção use jndi -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- JPA EntityManagerFactory -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
<property name="generateDdl" value="false"/>
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
</bean>
</property>
</bean>
<!-- Transaction manager para um JPA EntityManagerFactory simples (alternativa ao JTA) -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<!-- PostProcessors para realizar injeção de recursos de acordo com a especificação JPA (@PersistenceContext, @PersistenceUnit). -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<!-- PostProcessors para realizar a conversão de exceções nas classes @Repository (das exceções nativas como JPA PersistenceExceptions to Spring's DataAccessException). -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<!-- Será automaticamente transacional graças ao @Transactional. EntityManager irá ser auto-injetado graças ao @PersistenceContext. PersistenceExceptions irá ser auto-convertido graças ao @Repository. -->
<bean id="usuario" class="dominio.Usuario" scope="session" />
<bean id="usuarioDao" class="dao.UsuarioDao" />
<bean id="usuarioFacade" class="facade.UsuarioFacade">
<property name="usuarioDao" ref="usuarioDao" />
</bean>
<bean id="contato" class="dominio.Contato" scope="session" />
<bean id="contatoDao" class="dao.ContatoDao" />
<bean id="contatoFacade" class="facade.ContatoFacade">
<property name="contatoDao" ref="contatoDao" />
</bean>
<bean id="endereco" class="dominio.Endereco" scope="session" />
<bean id="enderecoDao" class="dao.EnderecoDao" />
<bean id="enderecoFacade" class="facade.EnderecoFacade">
<property name="enderecoDao" ref="enderecoDao" />
</bean>
<bean id="meioContato" class="dominio.MeioContato" scope="session" />
<bean id="meioContatoDao" class="dao.MeioContatoDao" />
<bean id="meioContatoFacade" class="facade.MeioContatoFacade">
<property name="meioContatoDao" ref="meioContatoDao" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>
</beans>
Obs: applicationContext está na pasta: Projeto/src
jdbc.properties:
jdbc.driverClassName= com.mysql.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/agenda
jdbc.username=root
jdbc.password=senhaUltraSecreta
Agora a classe de testes que utilizo para verificar a implementação acima
```
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import java.util.List;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import dominio.Usuario;
import facade.UsuarioFacade;
/**
*
* @author Yuri
*/
public class UsuarioFacadeTeste {
private ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
public UsuarioFacadeTeste() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Test of gravar method, of class UsuarioFacade.
*/
@Test
public void gravar() {
Usuario usuarioTeste = new Usuario();
usuarioTeste.setLogin("guest");
usuarioTeste.setNome("guest");
usuarioTeste.setSenha("guest");
System.out.println("gravar usuário");
UsuarioFacade instance =(UsuarioFacade)context.getBean("usuarioFacade");
Usuario result = instance.gravar(usuarioTeste);
try {
assertNotNull(result.getIdUsuario());
} catch (AssertionError e){
fail("Falhou a gravação de usuário.");
}
}
/**
* Test of excluir method, of class UsuarioFacade.
*/
@Test
public void excluir() {
System.out.println("excluir");
Usuario usuario = null;
UsuarioFacade instance = new UsuarioFacade();
instance.excluir(usuario);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
/**
* Test of carregar method, of class UsuarioFacade.
*/
@Test
public void carregar() {
System.out.println("carregar");
Integer id = null;
UsuarioFacade instance = new UsuarioFacade();
Usuario expResult = null;
Usuario result = instance.carregar(id);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
/**
* Test of obterTodos method, of class UsuarioFacade.
*/
@Test
public void obterTodos() {
System.out.println("obterTodos");
UsuarioFacade instance = new UsuarioFacade();
List expResult = null;
List result = instance.obterTodos();
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
/**
* Test of obterPorNome method, of class UsuarioFacade.
*/
@Test
public void obterPorNome() {
System.out.println("obterPorNome");
String nome = "";
UsuarioFacade instance = new UsuarioFacade();
List expResult = null;
List result = instance.obterPorNome(nome);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
/**
* Test of obterPorLogin method, of class UsuarioFacade.
*/
@Test
public void obterPorLogin() {
System.out.println("obterPorLogin");
String login = "";
UsuarioFacade instance = new UsuarioFacade();
List expResult = null;
List result = instance.obterPorLogin(login);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
/**
* Test of obterPorLoginSenha method, of class UsuarioFacade.
*/
@Test
public void obterPorLoginSenha() {
System.out.println("obterPorLoginSenha");
String login = "";
String senha = "";
UsuarioFacade instance = new UsuarioFacade();
Usuario expResult = null;
Usuario result = instance.obterPorLoginSenha(login, senha);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
/**
* Test of getUsuarioDao method, of class UsuarioFacade.
*/
}
Peço encarecidamente, se alguem tiver uma luz ai! Fico mt agradecido. Pois com o Livro que citei, já estou revoltado. Como publicam um livro sendo que nem o exemplo passo-a-passo fornecido não funciona? Coisa de doido rsrsrs.
