私は JavaSE アプリケーションで JPA を使用しており、データベース接続を管理し、オブジェクトをデータベースに永続化するためのクラスを作成しました。データベース接続の接続パラメーターはクラス コンストラクターを使用して渡され、クラスには接続パラメーターを検証するメソッドがあります。
public class DatabaseManager{
private EntityManagerFactory entityManagerFactory = null;
public DatabaseManager(String connectionDriver, String connectionUrl, String username, String password) {
Properties props = new Properties();
props.put("javax.persistence.jdbc.driver", connectionDriver);
props.put("javax.persistence.jdbc.url", connectionUrl);
props.put("javax.persistence.jdbc.user", username);
props.put("javax.persistence.jdbc.password", password);
entityManagerFactory = Persistence.createEntityManagerFactory("name of persistence unit", props);
}
public boolean checkConnection(){
try{
entityManagerFactory.createEntityManager();
}catch(Exception e){
return false;
}
return true;
}
}
checkConnection メソッドを呼び出すと、指定されたパラメーターで新しいエンティティ マネージャーを作成しようとします。接続を確立できない場合、entitymanagerfactory は例外をスローし、メソッドは false を返します。
メソッドをテストすると、次の結果が表示されます。
- すべてのパラメーターが正しい -> メソッドは期待どおりに true を返します。
- URL またはユーザー名が正しくありません -> メソッドは予想どおり false を返します。
- ドライバ名またはユーザー パスワードが正しくありません -> メソッドは true を返しますが、false を返す必要があります。<-これは私の問題です。
なぜこのように動作するのか、データベーステーブルにデータを書き込まずに接続パラメータをテストする適切な方法は何か教えてもらえますか?
現時点では EclipseLink を使用していますが、プロバイダーに依存しない方法を探しています。
回答ありがとうございます。