目的:すべてのコード パスが有効な接続をスローまたは返すことを確認します。接続オブジェクトが「null」として返されることを明示的に回避しようとしています。
これは私が思いつくことができる最高のものです:
public class JdbcConnectionManager {
public static class JdbcConnectionFailureException extends Exception {
private static final String JDBC_CONNECTION_INVALID_MESSAGE =
"JDBC connection invalid, checked with timeout value of: "
+ JdbcConnectionManager.JDBC_CONNECTION_VALIDATION_TIMEOUT_IN_SECONDS;
private static final long serialVersionUID = 1L;
public JdbcConnectionFailureException(String message) {
super(message);
}
public JdbcConnectionFailureException(Throwable throwable) {
super(throwable);
}
}
private static int JDBC_CONNECTION_VALIDATION_TIMEOUT_IN_SECONDS = 3;
public static Connection getJdbcConnection(
JdbcConnectionParameters jdbcConnectionParameters)
throws JdbcConnectionFailureException {
try {
if (jdbcConnectionParameters
.driverNeedsHelpRegisteringUsingClassForName()) {
Class.forName(jdbcConnectionParameters
.getClassForNameDriverRegistrationString());
}
Connection jdbcConnection =
DriverManager.getConnection(jdbcConnectionParameters
.getJbdcConnectionUrl());
if (!jdbcConnection
.isValid(JdbcConnectionManager.JDBC_CONNECTION_VALIDATION_TIMEOUT_IN_SECONDS)) {
throw new JdbcConnectionManager.JdbcConnectionFailureException(
JdbcConnectionManager.JdbcConnectionFailureException.JDBC_CONNECTION_INVALID_MESSAGE);
}
// TODO: perform further validation on the connection
return jdbcConnection;
} catch (ClassNotFoundException classNotFoundException) {
throw new JdbcConnectionManager.JdbcConnectionFailureException(
classNotFoundException);
} catch (SQLException sqlException) {
throw new JdbcConnectionManager.JdbcConnectionFailureException(
sqlException);
}
}
}
私はここで堅実ですか?「接続」が「null」にならないようにするための、より簡潔でエレガントで堅牢な方法はありますか?
編集:
jdbcConnection.isValid() チェックを追加しましたが、入力検証を省略しました。実際のコードでそれを行います。