Mentawai Web Framework

Integração com Hibernate

O Mentawai já vem com um filtro para que você possa trabalhar facilmente com o Hibernate em suas aplicações. O org.mentawai.filter.HibernateFilter.

Esse filtro elimina do programador a repetitiva tarefa de configurar, inicializar, abrir e fechar sessões do Hibernate fornecendo uma org.hibernate.Session no input da action pronta para ser usada. A action não precisa nem se preocupar em fechar ou retornar a session. Isso é feito de maneira transparente pelo filtro.

Por padrão, o Mentawai configura a SessionFactory do Hibernate utilizando a configuração padrão do Hibernate, mas se você quiser você pode também espeficicar onde o Hibernate deve procurar o arquivo de configurações ou então fornecer uma SessionFactory já criada.

O filtro irá injetar a session do Hibernate no input da action utilizando por padrão a chave "session", mas você pode mudar isso com o método setKey().

As sessions do Hibernate são injetadas usando o padrão pull a partir da versão 1.4, ou seja, ela é injetada apenas quando você explicitamente pede, chamando input.getValue("session") (ou input.getValue passando o nome chave que você configurou). Lembre-se que se você estiver usando o InjectionFilter ele mesmo irá chamar o input.getValue("session") para você, caso a sua action possua uma session do Hibernate como atributo.

A session injetada é aberta no momento em que ela é requisitada e é fechada somente depois do processamento completo da requisição (o que inclui o processamento da página JSP, pois o HibernateFilter é um AfterConsequenceFilter). Com isso, pode-se usar o lazy loading do Hibernate sem problemas.

Abaixo segue um exemplo de uma action que usa o filtro HibernateFilter:

import org.hibernate.Query;
import org.hibernate.Session;
import org.mentawai.filter.HibernateFilter;

public class ListUsers extends BaseAction {

	public String execute() throws Exception {
		Session session = (Session) input.getValue(HibernateFilter.KEY);
		Query q = session.createQuery("from User");
		input.setValue("users", q.list());
		return SUCCESS;

	}

}
 	

E para configurar o HibernateFilter no ApplicationManager, tudo que você tem que fazer é:


public class ApplicationManager extends org.mentawai.core.ApplicationManager {        

    public void loadActions() {
        
        // Java-style
        addGlobalFilter(new HibernateFilter("/WEB-INF/hibernate/hiber.xml"));
        
        // Ruby-style
        filter(new HibernateFilter("/WEB-INF/hibernate/hiber.xml"));
        
    }
}
        

O Mentawai ainda fornece um serviço de controle de transações, para detalhes veja: Controle de Transação