Unser Standardcode-Abschnitt für die Verwendung von JDBC ist ...
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();
Frage 1: Sollte man bei Verwendung des Verbindungspools die Verbindung am Ende schließen? Wenn ja, ist der Zweck des Pooling nicht verloren? Und wenn nicht, woher weiß die DataSource, wann eine bestimmte Instanz von Connection freigegeben wurde und wiederverwendet werden kann? Ich bin ein wenig verwirrt, alle Hinweise sind willkommen.
Frage 2: Entspricht die folgende Methode dem Standard? Sieht aus wie ein Versuch, eine Verbindung aus dem Pool herzustellen. Wenn DataSource nicht hergestellt werden kann, verwenden Sie den altmodischen DriverManager. Wir sind uns nicht einmal sicher, welcher Teil zur Laufzeit ausgeführt wird. Wenn man die obige Frage wiederholt, sollte man die Verbindung schließen, die aus einer solchen Methode hervorgeht?
Vielen Dank, - 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);
}
Bearbeiten: Ich denke, wir bekommen die gepoolte Verbindung, da wir keinen Stack-Trace sehen.