Наш стандартный раздел кода для использования 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. Мы даже не уверены, какая часть будет выполняться во время выполнения. Повторяя вопрос выше, следует ли закрыть соединение, исходящее из такого метода?
Спасибо, - MS.
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);
}
Изменить: Я думаю, что мы получаем объединенное соединение, так как мы не видим трассировку стека.