2017-06-28 3 views
0

Je dois détecter les erreurs lors de l'authentification (comme les mauvais paramètres). Je n'y trouve rien. J'ai isolé la procédure avec des threads. Mais avec cette mauvaise façon, l'utilisateur ne peut pas comprendre ce qui se passe malComment gérer l'authentification à la base de données Mongo à partir de l'application Hibernate

Ci-dessous, mon code:

public static boolean access(String db, String ip, String usr, String pwd){ 
    Map<String, String> persistenceMap = new HashMap<>(); 

    persistenceMap.put("hibernate.ogm.datastore.database", db); 
    persistenceMap.put("hibernate.ogm.datastore.host", ip); 
    persistenceMap.put("hibernate.ogm.datastore.username", usr); 
    persistenceMap.put("hibernate.ogm.datastore.password", pwd); 

    Thread mainThread = Thread.currentThread(); 
    Thread logThread = new Thread(() -> { 
     Connection.EMF = Persistence.createEntityManagerFactory("ogm-jpa-mongo", persistenceMap); 
     Connection.EM = Connection.EMF.createEntityManager(); 
     Connection.isOpen = true; 
    }); 
    Thread timeOut = new Thread(() -> { 
     try{ Thread.sleep(5000); } 
     catch(InterruptedException ex){ } 
     mainThread.interrupt(); 
    }); 


    logThread.start(); 
    timeOut.start(); 

    try{ logThread.join(); } 
    catch(InterruptedException ex){ return false; } 

    Connection.TM = com.arjuna.ats.jta.TransactionManager.transactionManager(); 

    return Connection.isOpen; 
} 

Répondre

0

Si les informations d'identification sont fausses, une org.hibernate.HibernateException est levée.

La cause de cette exception contient les détails retournés par mongodb et c'est la seule façon de comprendre ce qui s'est passé.

+0

C'est vrai, mais je ne peux pas l'attraper avec la construction try-catch classique. –

+0

Vous n'avez pas de bloc try-catch dans votre exemple qui contient la création d'usine – Davide

+0

Je ne l'ai pas inséré car il est inutile. L'exception est levée et gérée sans que je puisse faire quoi que ce soit –