[Resolvido] Vraptor 3 + hibernate 3

E ai :slight_smile:

Estou começando com Vraptor, baixei o blank project e estou seguindo o guia inicial, tudo estava indo muito bem e estou gostando bastante. Porem ao começar a utilizar Session na classe DAO, o projeto não sobe mais dando um erro:

[code]Grave: Exception starting filter vraptor
com.google.inject.CreationException: Guice creation errors:

  1. No implementation for org.hibernate.Session was bound.
    while locating org.hibernate.Session
    for parameter 0 at br.com.sraptor.dao.ProdutoDao.(ProdutoDao.java:16)
    at br.com.caelum.vraptor.ioc.guice.GuiceComponentRegistry.bindToConstructor(GuiceComponentRegistry.java:151)

1 error
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:154)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:83)
at br.com.caelum.vraptor.ioc.guice.GuiceProvider.start(GuiceProvider.java:97)[/code]

O ponto que me refiro que começou a dar o erro foi na adição do atributo Session nessa classe:

[code]package br.com.sraptor.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;

import br.com.caelum.vraptor.ioc.Component;
import br.com.sraptor.entidades.Produto;

@Component
public class ProdutoDao {

private Session session;

public ProdutoDao(Session session) {
    this.session = session;
}

public List<Produto> listaTodos() {
	return new ArrayList<Produto>();
}

public void adiciona(Produto produto) {
    session.save(produto);
}

}[/code]

Procurei bastante no google pela solução, descobri que tenho “opções”, posso utilizar guice, spring e pico se não me engano, e analisando o que eu tenho parece que estou usando guice mesmo (o que também aparece escrito no console).

Também acho que isso ocorre por eu ter que ter um “gerenciador de sessões” ou algo que crie as conexões, não sei. Se for o caso onde posso ler sobre isso, ou algum tutorial que explique o que é e como construí-lo. Senão qual seria a “palavra chave” o termo correto para isso para que eu possa continuar minha busca :slight_smile:

Está faltando você criar um ComponentFactory, ou seja, uma classe que vai contruir componentes para você…

Aqui tem um exemplo exatamente sobre isso:
http://vraptor.caelum.com.br/pt/docs/componentes/

Edit: Me precipitei um pouco, posto o resultado em breve, grato.

Na verdade isso é documentação, para vc aprender tudo na ordem, pega a apostila para fazer isso.

vc vai precisar de OUTRO component factory para o SessionFactory.

É percebi, exatamente isso, o erro no log agora era o mesmo mas ao invés de ser para Session era para a SessionFactory e então entendi a lógica.

Sobre a documentação por estar escrito guia ali achei que dava pra seguir por ali numa boa.

Vou procurar a postila então que vai ser melhor.

Grato pela atenção.

Resolvido então, a resposta é que temos que ter no projeto ComponentFactory’s para os componentes que formos utilizar. :slight_smile:

A apostila está aqui: http://www.caelum.com.br/apostila-vraptor-hibernate/

O ComponentFactory serve apenas para as classes que você não consegue anotar com @Component, mas que você precisa que seja um component…