[Java/jdbc] Vous utilisez quoi comme pool de connexions ?

Vous utilisez quoi comme pool de connexions ? [Java/jdbc] - Programmation

Marsh Posté le 19-06-2002 à 10:10:08    

Je me lance dans une appli serveur qui fonctionne avec une base de données, et je voudrais passer par un pool de connexions. Dans le bouquin que j'ai, ils parlent de PoolMan, qui apparemment a été abandonné. Sur le site du defunt, ils parlent de Tomcat, mais j'ai pas trouvé comment utiliser cette fonctionnalité.
Je sais qu'un pool de connexions, c'est pas grand-chose et j'envisage sérieusement de me faire le mien (après tout, c'est pour un prototype et je suis en stage, donc j'apprends), mais avant je voudrais votre avis sur la question : qu'utilisez-vous, qu'est-ce qui est bien, est-ce que je prends des gros risques en faisant mon propre pool ??


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 19-06-2002 à 10:10:08   

Reply

Marsh Posté le 19-06-2002 à 10:33:58    

tu parles de ton "moteur de recherche" là ? Juste par curiosité ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-06-2002 à 10:35:15    

R3g a écrit a écrit :

Je me lance dans une appli serveur qui fonctionne avec une base de données, et je voudrais passer par un pool de connexions. Dans le bouquin que j'ai, ils parlent de PoolMan, qui apparemment a été abandonné. Sur le site du defunt, ils parlent de Tomcat, mais j'ai pas trouvé comment utiliser cette fonctionnalité.
Je sais qu'un pool de connexions, c'est pas grand-chose et j'envisage sérieusement de me faire le mien (après tout, c'est pour un prototype et je suis en stage, donc j'apprends), mais avant je voudrais votre avis sur la question : qu'utilisez-vous, qu'est-ce qui est bien, est-ce que je prends des gros risques en faisant mon propre pool ??  




 
Tu prends pas de gros risques. Tu prend juste le risque de perdre du temps à programmer un truc que d'autre ont déja fait mieux que tu n'pourras le faire (le prend pas mal, ms c sur. y a des purs expert qui ont fait ces trucs).
Perso, j'utilise le driver protomatter ( http://protomatter.sourceforge.net/ ) qui est open source, libre à la diffusion (commerciale ou non), et simple d'utilisation. Je te le conseille.

Reply

Marsh Posté le 19-06-2002 à 10:57:02    

DarkLord a écrit a écrit :

tu parles de ton "moteur de recherche" là ? Juste par curiosité ...  



??? Soit tu confonds avec quelqu'un d'autre, soit j'ai pas compris la vanne, désolé.
El_gringo >> merci, je vais jeter un oeil sur ce truc


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 19-06-2002 à 10:59:08    

indeed je me suis trompé de personne. Désolé :(
 
 :hello:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-06-2002 à 11:27:09    

R3g a écrit a écrit :

??? Soit tu confonds avec quelqu'un d'autre, soit j'ai pas compris la vanne, désolé.
El_gringo >> merci, je vais jeter un oeil sur ce truc  




 
ça peut paraitre un petit peu complexe au début, ms tu verras, en fait c tout bête (t'auras besoin que du package com.protomatter.jdbc.pool).

Reply

Marsh Posté le 19-06-2002 à 11:41:11    

el_gringo a écrit a écrit :

 
 
ça peut paraitre un petit peu complexe au début, ms tu verras, en fait c tout bête (t'auras besoin que du package com.protomatter.jdbc.pool).  



J'ai regardé, ca a l'air très bien. Je vais essayer ca cet apres-midi. Merci ;)


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 19-06-2002 à 14:39:54    

R3g a écrit a écrit :

J'ai regardé, ca a l'air très bien. Je vais essayer ca cet apres-midi. Merci ;)  




 
...donne moi ds nouvelles

Reply

Marsh Posté le 19-06-2002 à 17:15:47    

el_gringo a écrit a écrit :

 
 
...donne moi ds nouvelles  



Pfff... le boss a organisé une reunion-surprise cet apres-midi pour me donner plein de nouveau boulot. Mais des que j'aurais pu tester, je dis quoi (j'ai lu la doc, ca a l'air bien bon quand meme) ;)


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 21-06-2002 à 09:04:53    

Bon, ca y est, ce fut long, mais j'ai pu essayer une petite appli de test, et c'est tres satisfaisant. Il y a toutefois un petite question qui me titille : quelle serait le meilleur endroit pour placer le code d'initialisation du pool ? (je rappelle que je fait nue appli en jsp/servlets). Je pensait créer un bean encapsulant le  processus, et le lier au contexte de servlet. Mais le fait de pouvoir passer par le DriverManager pour obtenir une connexion devrait m'en dispenser, non ?
Question subsidiaire (je devrais trouver tout seul, mais bon...) : Est-ce que je suis obligé de garder une reference sur l'objet JdbcConnectionPool, ou est-ce qu'une fois celui-ci créé, il est maintenu par le Driver ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 21-06-2002 à 09:04:53   

Reply

Marsh Posté le 21-06-2002 à 09:16:23    

R3g a écrit a écrit :

Bon, ca y est, ce fut long, mais j'ai pu essayer une petite appli de test, et c'est tres satisfaisant. Il y a toutefois un petite question qui me titille : quelle serait le meilleur endroit pour placer le code d'initialisation du pool ? (je rappelle que je fait nue appli en jsp/servlets). Je pensait créer un bean encapsulant le  processus, et le lier au contexte de servlet. Mais le fait de pouvoir passer par le DriverManager pour obtenir une connexion devrait m'en dispenser, non ?
Question subsidiaire (je devrais trouver tout seul, mais bon...) : Est-ce que je suis obligé de garder une reference sur l'objet JdbcConnectionPool, ou est-ce qu'une fois celui-ci créé, il est maintenu par le Driver ?  




 
Je suis pas vraiement expérimenté en Java, ms c pour du jsp/servlet que j'utilise le pool protomatter moi aussi. Donc, je peux te dire ce que g fait (on verra bien si je me fais allumer par Darklord et compagnie... :D )
Moi je me suis fait une classe JConnectionPool qui encapsule mon JdbcConnectionPool.
voila la classe (je rajouterai des méthode si g besoin):

Code :
  1. package com.damaris.database;
  2. import javax.servlet.*;
  3. import com.protomatter.jdbc.pool.*;
  4. import java.util.*;
  5. import java.sql.*;
  6. import com.damaris.ldsweb.*;
  7. /** Classe d'encapsulation des drivers protomatter
  8. * @author mc
  9. */
  10. public class JConnectionPool {
  11.    
  12.     // Pool de connexions protomatter
  13.     private JdbcConnectionPool ldsConnectionPool;
  14.     private String             strPoolName;
  15.    
  16.     /** Creates a new instance of JConnectionPool */
  17.     public JConnectionPool (String strPoolName) {
  18.         this.strPoolName = strPoolName;
  19.     }
  20.    
  21.    
  22.     /** Créé un nouveau Pool de connexion avec les paramètres entrés dans le fichier JLdsWeb.properties
  23.      * @throws ServletException précise la nature de l'erreur
  24.      * @param servletProperties Propriétés de la servlet. Contient les propriétés du pool de connections
  25.      */
  26.     public void createConnectionPool(Properties servletProperties) throws JLdsServletException {
  27.        
  28.         // Tentative de chargement du Driver Protomatter
  29.         try {
  30.             Class.forName("com.protomatter.jdbc.pool.JdbcConnectionPoolDriver" );
  31.         }
  32.         catch (Exception e){
  33.             throw new JLdsServletException ("Erreur, impossible de charger le driver Protomatter", e);
  34.         }
  35.        
  36.         Hashtable args;
  37.         try {
  38.             // Création des paramètres d'initialisation (voir doc de protomatter pour renseignements)
  39.             args = new Hashtable();
  40.             args.put("jdbc.driver", servletProperties.getProperty("jdbc.driver", "" ));
  41.             args.put("jdbc.URL", servletProperties.getProperty("jdbc.URL", "" ));
  42.             Properties jdbcProperties = new Properties();
  43.             jdbcProperties.put("user", servletProperties.getProperty("jdbc.user", "" ));
  44.             jdbcProperties.put("password", servletProperties.getProperty("jdbc.password", "" ));
  45.             args.put("jdbc.properties", jdbcProperties);
  46.             args.put("jdbc.validityCheckStatement", servletProperties.getProperty("jdbc.validityCheckStatement", "" ));
  47.             args.put("pool.refreshThreadCheckInterval", new Integer(servletProperties.getProperty("pool.refreshThreadCheckInterval", "" )));
  48.             args.put("pool.initialSize", new Integer(servletProperties.getProperty("pool.initialSize", "0" )));
  49.             args.put("pool.maxSize", new Integer(servletProperties.getProperty("pool.maxSize", "-1" )));
  50.             args.put("pool.growBlock", new Integer(servletProperties.getProperty("pool.growBlock", "1" )));
  51.             args.put("pool.createWaitTime", new Integer(servletProperties.getProperty("pool.createWaitTime", "0" )));
  52.         }
  53.         catch (Exception e){
  54.             throw new JLdsServletException ("Erreur, impossible de créer les propriétés du driver Protomatter", e);
  55.         }
  56.         try {
  57.         // finallement, créé le pool, et c'est parti !
  58.         this.ldsConnectionPool = new JdbcConnectionPool(this.strPoolName, args);
  59.         }
  60.         catch (Exception e){
  61.             throw new JLdsServletException ("Erreur, impossible de créer l'objet JdbcConnectionPool", e);
  62.         }
  63.     } 
  64.    
  65.     /** Tests si la connection du pool est valide.
  66.      * @return <CODE>true</CODE> si la pool de connections à été connecté à la base de données.
  67.      * <CODE>false</CODE> sinon.
  68.      */   
  69.     public boolean isPoolConnected () {
  70.         if (this.ldsConnectionPool == null)
  71.             return false;
  72.         else
  73.             return true;       
  74.     }
  75.    
  76.     public Connection getConnection () throws JLdsServletException {
  77.         String url = "jdbc:protomatter:pool:" + this.strPoolName;
  78.         try {
  79.             return (DriverManager.getConnection(url));
  80.         }
  81.         catch (SQLException e) {
  82.             throw new JLdsServletException ("Erreur, impossible d'attacher une connexion au visiteur", e);
  83.         }
  84.     }   
  85. }


 
Je garde une référence de mon instance unique de cette classe dans ma classe ServletHttp (tient, y faudra que j'en fasse un singleton en fait !)

Reply

Marsh Posté le 21-06-2002 à 09:25:21    

Ouais, c'est à peu près à ca que je pensais. Mais comme j'ai plusieurs servlets et que toutes devraient utiliser le meme pool, je pensais lier cet objet à mon contexte.
Ce que je me disais, c'est que comme le pool peut être atteint eu travers du DriverManager, avec un truc du genre
DriverManager.getConnection("jdbc:protomatter:poolname" ), on peut tres bien se passer de la methode getConnection que tu a fait, et donc on a plus besoin de cet objet une fois le pool créé.
M'enfin t'as raison, je cherche peut-être un peu la petite bête....
 
sinon une dernière question après promis je te lache ; est-ce que tu utilises aussi le logger de protomatter (syslog je crois), et est-ce que c'est bien (comprendre est-ce que ca vaut le coup que je  tape la doc) ? Merci pour tout.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 21-06-2002 à 09:33:24    

R3g a écrit a écrit :

Ouais, c'est à peu près à ca que je pensais. Mais comme j'ai plusieurs servlets et que toutes devraient utiliser le meme pool, je pensais lier cet objet à mon contexte.
Ce que je me disais, c'est que comme le pool peut être atteint eu travers du DriverManager, avec un truc du genre
DriverManager.getConnection("jdbc:protomatter:poolname" ), on peut tres bien se passer de la methode getConnection que tu a fait, et donc on a plus besoin de cet objet une fois le pool créé.
M'enfin t'as raison, je cherche peut-être un peu la petite bête....
 
sinon une dernière question après promis je te lache ; est-ce que tu utilises aussi le logger de protomatter (syslog je crois), et est-ce que c'est bien (comprendre est-ce que ca vaut le coup que je  tape la doc) ? Merci pour tout.  




 
ça me permet d'avoir une classe qui gère les connexions, j'aime mieux. Ms en fait, c vrai que c peut être un peu superflu. On pourrait surement se passer de ma classe, ms dans ce cas, j'pense qu'il faut qd même que tu garde une référence vers le JdbcConnectionPool. Pour rafraichir les connectionp par exemple, ou pr les fermer. Enfin, garder les fonctionnalités du pool, ça serai dommage de pas profiter de ça !
Le syslog, je t'avoue que je m'y suis pas tellement attardé, parce que, celui qui m'interresse (DataBaseLog, log ds une BD) ne me parait pas très souple, et nécessite une structure de table spécicifque, hors, g pas le choix sur la structure de ma table de log (ma boite me l'impose). Voila.

Reply

Marsh Posté le 21-06-2002 à 09:34:30    

ok, merci  :hello:


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 01-05-2003 à 12:47:45    

je me permet de upper ce topic pour savoir si quelqu'un connaît ce pool de connexion là :  
http://sourceforge.net/projects/proxool
 
il m'a l'air d'être plutôt bien ... même si il est pas encore arrivé à sa version 1.0 :/


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 29-06-2004 à 13:57:32    

benou a écrit :

je me permet de upper ce topic pour savoir si quelqu'un connaît ce pool de connexion là :  
http://sourceforge.net/projects/proxool
 
il m'a l'air d'être plutôt bien ... même si il est pas encore arrivé à sa version 1.0 :/


 
Ouais, il avait l'air bien parti. Le projet semble mort, dommage.

Reply

Marsh Posté le 07-03-2005 à 13:33:02    

bonjour,
Quelqu'un naurait une idée de comment configurer PoolMan avec tomcat 4.x sous ecplise pour unne application jsp/servlet
 
le bouquin que j'ai n'est pas clair la -dessus
 
Merci d'avance


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed