Usando Guice Com Hibernate

3 respostas
A

Pessoal, eu estava querendo usar o Guice para fazer a injeção da session do hibernate nos meus DAO’s, felizmente consegui resolver, e vou postar o codigo aqui para quem precisar.

/**
 * Provider para fornecer a session do hibernate atraves do Guice.
 * @author Alberto Pc
 *
 */
public class HibernateSessionProvider implements Provider<Session> {

	public Session get() {
		// TODO Auto-generated method stub
		System.out.println("Pegando session do hibernate");
               // aqui cada um implementa do seu jeito.t
		return HibernateUtil.getSession();
	}

}

@ImplementedBy(DBLogDAO.class)
public interface LogDAO {

	public Long save(Log log) throws HelpFrameworkException;
	
}

public class DBLogDAO implements LogDAO {

	private Session session;
	
	@Inject
	public DBLogDAO(Session session){
		this.session = session;
	}
	
	public Long save(Log log) throws HelpFrameworkException {
		// TODO Auto-generated method stub
		return null;
	}


}

public class DaoGuiceUtil<T> {

	private static Injector injector;
	
	static{
		injector = Guice.createInjector(new HibernateSessionGuiceModule());
	}
	
	
	public T createSomeDAO(Class<? extends T> classDAO){
		return injector.getInstance(classDAO);
	}
	
	
}

Sempre que vc cirar um DAO, o Guice vai injetar a Session para vc. Pelo menos nos testes funcionou :slight_smile:

Alberto

3 Respostas

A
import org.hibernate.Session;

import com.google.inject.Binder;
import com.google.inject.Module;

public class HibernateSessionGuiceModule implements Module {

	public void configure(Binder binder) {
		// TODO Auto-generated method stub		
		binder.bind(Session.class).toProvider(HibernateSessionProvider.class);
	}

}

Tinha faltado o module do Guice.

Alberto

faelcavalcanti

interessante. não conhecia o guice, geralmente o pessoal usa muito o spring para resolver estes problemas de IoC.

gostei dos comentários abordados na própria wiki do site em menção ao spring como comparativo

achei interessante quanto ao destacado pelos autores abaixo:

Eric Burke recently ported a Spring application to Guice:
At the end of the day, I compared my (Guice) modules ? written in Java ? to my Spring XML files. The modules are significantly smaller and easier to read.
Then I realized about 3/4 of the code in my modules was unnecessary, so I stripped it out. They were reduced to just a few lines of code each.

tá aí, gostei do guice. 8)

uma pergunta, alguém já teve experiência de uso ou contratempos da adoção de uso em projetos ou componentes ?

A

Rapaz, eu uso o guice nos meus projetos para fazer a injeção de dependências e ele serve tb pa gente usar como uma Fabrica de Objetos, fazendo injecttor.getInstance(ClasseDaInterface), de vez em quando é melhor do que ficar escrevendo fabricas para construir seus objetos.

Alberto

Criado 18 de setembro de 2008
Ultima resposta 19 de set. de 2008
Respostas 3
Participantes 2