Vous devez utiliser une connexion par tâche. Si vous utilisez le regroupement de connexions, vous ne pouvez pas utiliser les instructions préparées préparées par une autre connexion. Tous les objets créés par la connexion (ResultSet, PreparedStatements) ne sont pas valides après la connexion au pool.
Ainsi, il est aussi bien
public void getSomeData() {
Connection conn = datasource.getConnection();
PreparedStatement st;
try {
st = conn.prepareStatement(...);
st.execute();
} finally {
close(st);
close(conn);
}
}
Donc dans ce cas tous vos objets DAO prennent pas la connexion, mais l'objet DataSource (java.sql.DataSource) qui est l'usine de connexion piscinable en effet. Et dans chaque méthode, vous devez d'abord vous connecter, faire tout votre travail et établir une connexion étroite. Vous devriez retourner la connexion à la piscine aussi vite que possible. Une fois la connexion renvoyée, elle peut ne pas être physiquement fermée, mais réinitialisée (toutes les transactions actives sont fermées, toutes les variables de session ont été détruites, etc.)