2017-07-03 10 views
0

認証時に間違ったパラメータを誤って捕捉する必要があります。私はそれについて何も見つかりません。私はスレッドでプロシージャを分離しました。HibernateアプリケーションからMongoDBへの認証を処理する方法

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; 

}私はworngパラメータを挿入すると、問題は、それがスローされること

:しかし、この悪い方法で、ユーザーが間違っ以下

、私のコードを行くかを理解することはできませんMongoSecurityException。しかし、私はそれをキャッチすることはできません、私はモニタースレッドで読むことができます。何か案は?

答えて

0

これは、あなたのバージョンのHibernateがMongoSecurityExceptionをキャッチする結果であると信じています。私はMongoSecurityExceptionがネストされたtry catchブロックの中に捕まえられたと信じています。

正解は、Hibernateのバージョンを最新リリースに更新することです。しかし、あなたがその例外を見たいと思っているなら、あなたは次のことができると思います。

String message = ""; 
try { 
    logThread.join(); 
} catch(Throwable e) { 
    throw e; 
} catch(Exception e) { 
    message = e.getMessage(); 
} 

これでうまくいかない場合は、次のようにチェーンできます。

String message = ""; 
try { 
    logThread.join(); 
} catch(Throwable e) { 
    e.getCause(); 
    e.getCause().getCause(); 
    e.getCause()..getCause().getCause(); 
} 
+0

パラメータが間違っているとlogThreadが停止しないという問題があります。それで私はtimeOutスレッドを作ったのです! –

関連する問題