Boa tarde Pessoal,
Estou precisando de ajuda para terminar o exec 8.2 item:9 da apostila FJ28
Obs: estava funcionando até entrar na parte de Refatorando os Daos.
Segue o erro:
http://localhost:8080/goodbuy/produtos/formulario
root cause
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘produtoDao’: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.Session]: : Error creating bean with name ‘br.com.caelum.goodbuy.infra.CriadorDeSession’: FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘br.com.caelum.goodbuy.infra.CriadorDeSession’: FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
Classes:
package br.com.caelum.goodbuy.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.caelum.goodbuy.infra.CriadorDeSession;
import br.com.caelum.goodbuy.modelo.Produto;
import br.com.caelum.vraptor.ioc.Component;
//endica que esta classe é uma dependencia e pode
//ser instanciada pelo Vraptor
@Component
public class ProdutoDao {
//classe responsavel por encapsular as
//chamadas do Hibernate
private final Session session;
public ProdutoDao(Session session){
this.session = session;
}
public void salva(Produto produto) {
Transaction tx = session.beginTransaction();
session.save(produto);
tx.commit();
}
@SuppressWarnings("unchecked")
public List<Produto>listaTudo(){
return this.session.createCriteria(Produto.class).list();
}
//carrega do banco o id de entrada do parametro
public Produto carrega(Long id){
return (Produto)this.session.load(Produto.class, id);
}
public void atualiza(Produto produto){
Transaction tx=session.beginTransaction();
this.session.update(produto);
tx.commit();
}
public void remove(Produto produto){
Transaction tx = session.beginTransaction();
this.session.delete(produto);
tx.commit();
}
}
package br.com.caelum.goodbuy.infra;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
@Component
public class CriadorDeSessionFactory implements ComponentFactory{
public static final Session Produto = null;
public SessionFactory getInstance() {
AnnotationConfiguration configuration = new AnnotationConfiguration();
configuration.configure();
SessionFactory factory=configuration.buildSessionFactory();
return factory;
}
}
package br.com.caelum.goodbuy.infra;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
@Component
public class CriadorDeSession implements ComponentFactory {
private SessionFactory factory;
public void CriadordeSession(SessionFactory factory){
this.factory = factory;
}
public Session getInstance(){
Session session= factory.openSession();
return session;
}
}
package br.com.caelum.goodbuy.testes;
import org.hibernate.Session;
import br.com.caelum.goodbuy.dao.ProdutoDao;
import br.com.caelum.goodbuy.modelo.Produto;
import br.com.caelum.vraptor.ioc.Component;
@Component
public class AdicaoDeProduto {
private static Session session;
public static void main(String[] args) {
Produto produto = criaProduto();
new ProdutoDao(session).salva(produto);
}
private static Produto criaProduto() {
Produto produto = new Produto();
produto.setNome("Office 2007");
produto.setDescricao("Teste do dia 29/08");
produto.setPreco(2.90);
return produto;
}
}
Grato desde já,