To usando o Hibernate 3 e toda vez que executo um deploy na minha aplicação e pego uma sessão, o Hibernate inicia todas as configurações iniciais (leitura dos arquivos hbm e pool de conexões)
demorando muito tempo tornando o trabalho improdutivo, existe alguma forma de pular isso ? Ou que isso seja executado uma única vez.
Esse esquema foi feito de acordo com o manual do hibernate:
publicclassHibernateUtil{privatestaticLoggerlogger=Logger.getLogger(HibernateUtil.class);privatestaticfinalSessionFactorysessionFactory;static{try{// Create the SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();}catch(Throwableex){// Make sure you log the exception, as it might be swallowedlogger.error("Não foi possível configurar o hibernate.",ex);thrownewExceptionInInitializerError(ex);}}publicstaticfinalThreadLocalsession=newThreadLocal();publicstaticSessiongetSessao(){Sessions=(Session)session.get();// Open a new Session, if this Thread has none yetif(s==null){s=sessionFactory.openSession();session.set(s);logger.debug("Nova sessão do hibernate aberta.");}elselogger.debug("Retornada sessão do hibernate aberta anteriormente.");returns;}publicstaticvoidfechaSessao(){Sessions=(Session)session.get();if(s!=null){logger.debug("Sessão do hibernate fechada.");s.close();}session.set(null);}}
Como a configuração é num bloco static, só é feita na primeira vez que vc
requisita uma sessão, pelo método HibernateUtil.getSessao(). Usar isso ainda tem a vantagem de vc só ter uma sessão do hiber aberta por thread, por causa do uso do ThreadLocal.
Maiores informações, consulte o manual do hiber, tem um código quase igual e explicadinho.
Espero que ajude.