Наш стандартный раздел кода для использования JDBC ...
Connection conn = getConnection(...);
Statement stmt = conn.conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rset = stmt.executeQuery (sqlQuery);
// do stuff with rset
rset.close(); stmt.close(); conn.close();
Вопрос 1: следует ли при использовании пула подключений закрывать подключение в конце? Если да, то не потеряна ли цель объединения? А если нет, то как DataSource узнает, что конкретный экземпляр Connection освобожден и может быть использован повторно? Я немного запутался в этом, любые указатели оценены.
Вопрос 2: близок ли следующий метод к стандартному? Похоже на попытку получить соединение из пула, и если DataSource не может быть установлен, используйте старомодный DriverManager. Мы даже не уверены, какая часть выполняется во время выполнения. Повторяя вопрос выше, следует ли закрывать соединение, выходящее из такого метода?
Спасибо, - ср.
synchronized public Connection getConnection (boolean pooledConnection)
throws SQLException {
if (pooledConnection) {
if (ds == null) {
try {
Context envCtx = (Context)
new InitialContext().lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/NamedInTomcat");
return ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
}}
return (ds == null) ? getConnection (false) : ds.getConnection();
}
return DriverManager.getConnection(
"jdbc:mysql://"+ipaddy+":"+dbPort +"/" + dbName, uName, pWord);
}
Изменить: я думаю, что мы получаем объединенное соединение, так как мы не видим трассировку стека.