OpenSessionInView

24 views
Skip to first unread message

Marcio Eduardo

unread,
Oct 19, 2011, 2:14:23 PM10/19/11
to hibernat...@googlegroups.com
Olá Senhores,

Solicito a ajuda dos senhores pois, preciso adaptar um aplicativo que hoje está com eclipseLink para Hibernate para poder colocar no JBoss 7.

Mas acontece que não estou conseguindo desenvolver o OpenSessionInView, pois não estou conseguindo pegar a conexão do servidor e não
estou conseguindo adaptar para o que desejo em relação ao padrão que existe no wiki do hibernate.

Alguém pode me ajudar?

--
Márcio Eduardo Luz
Bacharel em Sistemas de Informação

gabriel aguena

unread,
Oct 19, 2011, 2:50:04 PM10/19/11
to hibernat...@googlegroups.com
Você pode utilizar o antigo esquema de HibernateUtils (Factory) que add a session na ThreadLocal, então no Filter (OpenSessionView) você recupera pelo HibernateUtils.

package br.com.jsf2.dals.orm;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
   
    private static final SessionFactory sessionFactory;   
    private static final ThreadLocal<Session> sessions = new ThreadLocal<Session>();
   
    static {
       
        try {
           
            Configuration cfg = new Configuration();
            sessionFactory = cfg.configure().buildSessionFactory();
           
        } catch (Throwable ex) {
           
            ex.printStackTrace();
           
            throw new ExceptionInInitializerError(ex);
        }
    }
   
   /**
    * Realiza a operação de devolução de uma sessão.
    * @return Session    Sessão falsa
    */   
    public static Session getSession() {
        if(sessions.get() == null) openSession();
        return sessions.get();
    }
   
    /**
     * Realiza a operação de fechamento de uma sessão.
     * @return Sessão verdadeira
     */   
    public static void closeSession() {
       
        if(sessions.get() != null) {
            //sessions.get().close();
            sessions.set(null);
        }
    }
   
    /**
     * Realiza a operação abertura de uma sessão, para ser chamado pelo filtro.
     * @return Session     Sessão verdadeira
     */
    public static Session openSession() {
        Session s = sessionFactory.openSession();
        sessions.set(s);
        return s;
    }
}




E no Filter:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc)
            throws IOException, ServletException {

        Session session = HibernateUtils.getSession();
        Transaction transaction = session.getTransaction();

        try {

            // Sessão do Hibernate
            session.beginTransaction();
            fc.doFilter(req, res);
            transaction.commit();
           
        } catch (Exception ex) {
           
                transaction.rollback();
                ex.printStackTrace();

        } finally {
            HibernateUtils.closeSession();
        }

        /* Verifica se a exception é uma instancia de GTException e se a referência está inicializada.
         * Caso seja, é eviada como GTException senão irá como ServletException.
         */
    }

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Hibernate Brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para hibernat...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para hibernate-bras...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/hibernate-brasil?hl=pt-BR.

Reply all
Reply to author
Forward
0 new messages