Hibernate - Testar conexão com banco

Tenho uma aplicação que trabalha com dois bancos, um local e um remoto…
Usando o Hibernate , a idéia é…
*Se banco remoto está funcionando, utiliza banco remoto
*Senão utiliza banco local
*Assim que conexão com banco remoto voltar, utilizar banco remoto

Para isso criei dois sessionFactory…um remoto e um para o banco local…
No hibernateUtil, tenho um método chamado getSession() que deve seguir as regrinhas que citei acima


   public static Session getSession() {
        try{
           Session session =  sessionFactoryBancoRemoto.openSession();
           if (session.isConnected())
               return session;
            else{
               session = null;
               return sessionFactoryBancoLocal.openSession();
             }
        
        }catch(Exception ex){
            return sessionFactoryBancoLocal.openSession();
         }

    }

O problema é que mesmo que eu derrube o servidor de banco de dados, ele sempre retorna true na compração “session.isConnected()”, portanto sempre retornará a conexão do banco remoto, mesmo não estando conectado a ele

Tentei fazer com socket, como sujerido em outros tópicos daqui, mas daí ele somente verificaria se a máquina está ativa e não necessariamente se o servidor está funcionando… também daria pra fazer criando uma conexão manualmente, mas daí a cada vez que acessar o banco, ele criaria uma nova conexão…perdendo desempenho na aplicação…

Não teria uma maneira de verificar se a conexão está ativa pelo sessionFactory ou pela sessão em si?

Informação…que esqueci de citar… estou usando o c3p0 para controlar o pool de conexões…

Ninguém nunca fez uma aplicação com dois bancos?

Bom…depois de muitos testes consegui fazer funcionar (em partes)

    public static Session getSession() {  
         try{  
            Session session =  sessionFactoryBancoRemoto.openSession();  
           
            ////se o servidor não estiver ativo, aqui lança uma exception que por consequencia
//retornar uma sessao na base local, caso contrário retorna a sessao da base remota
            session.connection().getTransactionIsolation();

           return session;
        }catch(Exception ex){  
            return sessionFactoryBancoLocal.openSession();  
         }  
     
   }  

fiz vários testes e funcionou…
No caso…se inicializo o aplicativo conectado, depois derrubo o server db , ele retorna a base local…como presciso…
Só numa ocasião, ele trava e ainda não consegui resolver…
Quando puxo o cabo de rede fora…então parace que ele trava na instrução session.getConnection().getTransactionIsolation();… fica aí nessa instrução…eternamente…