| El_gringo |
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 :
- package com.damaris.database;
- import javax.servlet.*;
- import com.protomatter.jdbc.pool.*;
- import java.util.*;
- import java.sql.*;
- import com.damaris.ldsweb.*;
- /** Classe d'encapsulation des drivers protomatter
- * @author mc
- */
- public class JConnectionPool {
-
- // Pool de connexions protomatter
- private JdbcConnectionPool ldsConnectionPool;
- private String strPoolName;
-
- /** Creates a new instance of JConnectionPool */
- public JConnectionPool (String strPoolName) {
- this.strPoolName = strPoolName;
- }
-
-
- /** Créé un nouveau Pool de connexion avec les paramètres entrés dans le fichier JLdsWeb.properties
- * @throws ServletException précise la nature de l'erreur
- * @param servletProperties Propriétés de la servlet. Contient les propriétés du pool de connections
- */
- public void createConnectionPool(Properties servletProperties) throws JLdsServletException {
-
- // Tentative de chargement du Driver Protomatter
- try {
- Class.forName("com.protomatter.jdbc.pool.JdbcConnectionPoolDriver" );
- }
- catch (Exception e){
- throw new JLdsServletException ("Erreur, impossible de charger le driver Protomatter", e);
- }
-
- Hashtable args;
- try {
- // Création des paramètres d'initialisation (voir doc de protomatter pour renseignements)
- args = new Hashtable();
- args.put("jdbc.driver", servletProperties.getProperty("jdbc.driver", "" ));
- args.put("jdbc.URL", servletProperties.getProperty("jdbc.URL", "" ));
- Properties jdbcProperties = new Properties();
- jdbcProperties.put("user", servletProperties.getProperty("jdbc.user", "" ));
- jdbcProperties.put("password", servletProperties.getProperty("jdbc.password", "" ));
- args.put("jdbc.properties", jdbcProperties);
- args.put("jdbc.validityCheckStatement", servletProperties.getProperty("jdbc.validityCheckStatement", "" ));
- args.put("pool.refreshThreadCheckInterval", new Integer(servletProperties.getProperty("pool.refreshThreadCheckInterval", "" )));
- args.put("pool.initialSize", new Integer(servletProperties.getProperty("pool.initialSize", "0" )));
- args.put("pool.maxSize", new Integer(servletProperties.getProperty("pool.maxSize", "-1" )));
- args.put("pool.growBlock", new Integer(servletProperties.getProperty("pool.growBlock", "1" )));
- args.put("pool.createWaitTime", new Integer(servletProperties.getProperty("pool.createWaitTime", "0" )));
- }
- catch (Exception e){
- throw new JLdsServletException ("Erreur, impossible de créer les propriétés du driver Protomatter", e);
- }
- try {
- // finallement, créé le pool, et c'est parti !
- this.ldsConnectionPool = new JdbcConnectionPool(this.strPoolName, args);
- }
- catch (Exception e){
- throw new JLdsServletException ("Erreur, impossible de créer l'objet JdbcConnectionPool", e);
- }
- }
-
- /** Tests si la connection du pool est valide.
- * @return <CODE>true</CODE> si la pool de connections à été connecté à la base de données.
- * <CODE>false</CODE> sinon.
- */
- public boolean isPoolConnected () {
- if (this.ldsConnectionPool == null)
- return false;
- else
- return true;
- }
-
- public Connection getConnection () throws JLdsServletException {
- String url = "jdbc:protomatter:pool:" + this.strPoolName;
- try {
- return (DriverManager.getConnection(url));
- }
- catch (SQLException e) {
- throw new JLdsServletException ("Erreur, impossible d'attacher une connexion au visiteur", e);
- }
- }
- }
|
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 !) |