Pool de connexions Tomcat JDBC (libération de la connexion)

En ce qui concerne le pool de connexions Tomcat JBDC , je vois dans l’exemple Java autonome donné ici que l’on obtient la connexion à l’aide de datasource.getConnection() ce qui est cool. Mais dans le bloc finally, il est écrit con.close() .

Question: Quand j’implémente cela, il semble évident que le con je reçois de la source de données sera fermé à chaque fois dans le fichier finally. Une fois celui-ci fermé, le mécanisme de regroupement de connexions va-t-il acquérir une nouvelle connexion et l’append au pool?

Je suppose qu’il devrait exister un appel de méthode comme releaseConnection() qui laissera le pool prendre sa propre décision, qu’il s’agisse de le fermer ou de le laisser ouvert pour un autre usage.

J’ai aussi essayé de faire ceci ConnectionPool aPool = datasource.createPool(); Mais je vois qu’il n’y a rien de tel que la libération d’une connexion sur cet aPool .

Je pense que je manque quelque chose ici? Apprécier ton aide.

Extrait de code provenant du pool de connexions Tomcat JBDC :

  DataSource datasource = new DataSource(); datasource.setPoolProperties(p); Connection con = null; try { con = datasource.getConnection(); Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from user"); int cnt = 1; while (rs.next()) { System.out.println((cnt++)+". Host:" +rs.getSsortingng("Host")+ " User:"+rs.getSsortingng("User")+" Password:"+rs.getSsortingng("Password")); } rs.close(); st.close(); } finally { if (con!=null) try {con.close();}catch (Exception ignore) {} } 

Puisque vous appelez la méthode close () sur une méthode obtenue par le pool, il appartient au pool de décider quoi faire dans cet appel de méthode. Il n’est pas nécessaire de fermer la connexion à la firebase database en pool. Il peut effectuer un nettoyage, puis append la connexion au pool.

Cela a déjà été résolu dans Fermeture de connexions JDBC dans le pool

OK, mon dieu, que je n’ai pas vu l’implémentation de DataSource . Il étend DataSourceProxy qui crée en interne un pool avant de renvoyer une Connection basée sur les PoolProperties

Si j’ai bien compris, c’est jusqu’à cette DataSource de gérer les connexions, même si je ferme la con finalement, DataSource peut prendre les mesures nécessaires.

Ajoutez un commentaire / une réponse si quelqu’un pense autrement.

Cet exemple montre uniquement how to create and use a data source . Pour le pool de connexions sur Tomcat, vous pouvez configurer JNDI .

 // Sample public static Connection getConnectionFromPool() { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup("jdbc/TestDB"); return ds.getConnection(); ... 

Citation de Comment fonctionne le regroupement de connexions en Java et JDBC :

Un pool de connexions consiste à créer des connexions à l’avance. Dans le cas d’un pool de connexions JDBC, un pool d’objects Connection est créé au moment du démarrage du serveur d’applications (ou d’un autre serveur). Ces objects sont ensuite gérés par un gestionnaire de pool qui répartit les connexions à la demande des clients et les renvoie au pool lorsqu’il détermine que le client a terminé avec l’object Connection. La gestion de ces relations nécessite beaucoup d’entretien.

Lorsque le serveur de pool de connexions démarre, il crée un nombre prédéterminé d’objects Connection. Une application client effectue ensuite une recherche JNDI pour récupérer une référence à un object DataSource qui implémente l’interface ConnectionPoolDataSource. L’application cliente n’a pas besoin de prendre de dispositions spéciales pour utiliser la source de données en pool; le code ne serait pas différent du code écrit pour un DataSource non groupé.