Problema com SessionFactory em tentativas de conexao

1 resposta
root_

Tenho a seguinte janela de conexao:

E a seguinte HibernateHelpper.

package sdp2000.persistencia;

/*
 * HibernateUtil.java
 *
 * Created on 22 de Abril de 2007, 16:03 by Rogerio M.Q.
 *
 * Classe de Infra-Estrutura
 */

import java.sql.SQLException;
import org.hibernate.cfg.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.StatelessSession;
import sdp2000.SdpConexao;

public class HibernateUtil
{
    private static SessionFactory sessionFactory=null;
    private static StatelessSession statelessSession = null;
    
    //Criando uma threadLocal garantindo que seja reutilizada a sessao aberta, caso ja exista;
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    
static
    {

        //Pegando as informaçoes das propriedades de conexao com a base de dados do software...
        private static String usuario = SdpConexao.sdpProps.getProperties().getProperty("db.usuario");
        private static String senha = SdpConexao.sdpProps.getProperties().getProperty("db.senha");
        private static String dbUrl = SdpConexao.sdpProps.getProperties().getProperty("db.url");
        try
        {
            sessionFactory = new AnnotationConfiguration().configure("sdp2000/hibernate.cfg.xml").
                    setProperty("hibernate.connection.username", usuario).
                    setProperty("hibernate.connection.password", senha).
                    setProperty("hibernate.connection.url", dbUrl).buildSessionFactory();
            
        }
        catch(Exception ex)
        {   
            System.err.println("Initial SessionFactory creation failed. \n" + ex.getMessage() );

        }   
                
    }

    public static Session getSession()
    {
        Session localSession = threadLocal.get();
        localSession = sessionFactory.openSession();
        threadLocal.set(localSession);
        return localSession;
    }
        
}

Quando clico em no Botao “OK” … Executo a seguinte açao:

new HibernateUtil();

Quando o DB está rodadando, usuario e senha e caminho para o banco estao corretos, conecta sem erros e assim liberando o frame da aplicaçao.
Massssssssssssssss, quando, por exemplo, usuario ou senha ou url do banco n está correto (o que pode acontecer dependendo do usuario final), não está me gerando nenhuma Exception e fica demorando muito nessa janela… o que não deveria acontecer.
Ja tentei colocar isso em uma Thread, e determinar um timeout, mais n deu certo. pois o processamento da SessionFactory ainda permanece.

Como faço para verificar se a sessionFactory é válida ou não???

1 Resposta

root_

BOM… como n achei nenhuma solução rapida e viavel… fiz da seguinte forma… Criar uma funçao pra vefiricar a profundidade de realizaçao de conexão usando o nativo JDBC mesmo, soh assim tenho um retorno rapido se a conexao é bem sucedida ou não, e ainda descobrir se foi por causa de driver JDBC ou se usuario/senha não estão de acordo:

public void analizaConexao()
    {  
        try{  
            Connection conn = null;  
            Class.forName("org.firebirdsql.jdbc.FBDriver");  
            conn = DriverManager.getConnection(jTextArea1.getText(), jTextField1.getText(),
                    new String(jPasswordField1.getPassword()));  
            System.out.println("Sistema OK!!!");  
            status = true;
            conn.close();
        }  
        catch(SQLException e)
        {
            
            status = false;
            System.out.println("Error de SQLException : "  + e.getMessage() );  
            JOptionPane.showMessageDialog(null, "VERIFIQUE SE USUARIO E SENHA ESTÃO CORRETOS!", "ERRO INESPERAO!", JOptionPane.ERROR_MESSAGE);
            jLabel4.setForeground(java.awt.Color.BLACK);
            jLabel4.setText("NÃO CONECTADO!");
        }  
        catch(ClassNotFoundException e)
        {   
            status = false;
            System.out.println("Error de ClassNotFoundException" + e.getMessage() );
            JOptionPane.showMessageDialog(null, "VERIFIQUE O DRIVER DE CONEXAO COM O BANCO DE DADOS.", "ERRO INESPERAO!", JOptionPane.ERROR_MESSAGE);
            jLabel4.setForeground(java.awt.Color.BLACK);
            jLabel4.setText("NÃO CONECTADO!");
        }  
          
    }

SE status der TRUE, eh pq posso iniciar o HibernateUtil sem problemas… pq ai eu tenho certeza de que a criaçao da SessionFactory será vádila durante a aplicaçao!
Se alguem achar uma forma mellhor! Postem. xD

Criado 14 de dezembro de 2007
Ultima resposta 20 de dez. de 2007
Respostas 1
Participantes 1