terça-feira, 11 de setembro de 2007

Threads X Hibernate

Bom, tive o seguinte problema quando decide utilizar Threads no meu projeto Web para executar processos em modo batch:

  1. Quando as Threads estavão sendo executas acontecia exceções na session do Hibernate. Tudo isso porque eu tinha implementado "ThreadLocal" na minha Factory o que esta certo, e então quando as Threads entravam em processamento a Session não estava vinculada a mesma, porque a Thread foi instanciada e Startada por um processo do WebServer.
  2. Como Solucionar. Eu criei uma factory para ser utiliza unicamente pelas Threads que executão os processos em batch:
    1. Ficou assim HibernateFactoryThread que extends HibernateFactory: eu subescrevi quase tudo, exceto a SessionFactory que já esta instanciada na classe que esta sendo extendida.
      1. public class HibernateThreadFactory extends HibernateFactory {

        private static Logger log = Logger.getLogger(HibernateFactory.class);
        private static ThreadLocal sessions = new ThreadLocal();

        public static Session abreSessao(){
        if (sessions.get() != null){
        log.error("Essa Sessao nao foi fechada");
        }
        Session s = getFactory().openSession();
        //O metodo em vermelho é da Factory extendida.
        sessions.set(s);
        return s;
        }

        public static Session buscaSessaoCorrente(){
        if(sessions.get()!= null && sessions.get().isOpen()){
        return sessions.get();
        }
        return abreSessao();
        }

        public static void fechaSessao(){
        if(sessions.get().isOpen()){
        sessions.get().close();
        }
        }

        }
      2. Pronto agora é só utilizar nos metodos das Threads a HibernateThreadFactory.

Espero ter Ajudado, bom aproveito.

Red Hat Developer Studio

É a Red Hat fez um senhora IDE, no entanto deixa a desejar quando falamos no desenvolvimento visual de JSP/HTML. A IDE esta sobreposta a Versão 3.3 do eclipse que já vem por si só com muitas novidades e uma integração facil e amigavel para fazer deployer das aplicações WEB, é preferivel desenvolver um JSP/HTML com o plugin nativo do Eclipse 3.3 à Utilizar o editor que vem no pacote da Red Hat. Os editores para mapeamentos do Hibernate também não estão muito amigaveis, quer dizer esta pessimo.
Acredito que a Red Hat pode melhor e muito essa ferramenta, sendo assim tenho esperanças que uma versão oficial seja realmente coerente com as nossas necessidades de desenvolvimento produtivo.
Obs.:Eclipse 3.3