6blog
Accueil du site > Tutoriaux > Pool de connexion

Pool de connexion

mercredi 9 avril 2008

La gestion des base de données sous Struts est un vrai problème. Les tags du framework ( tel <sql:setDataSource> ) commence à perturber l’idée originelle de Struts. Struts n’est qu’un framework de présentation, et le fait de lui permettre de gérer les bases de données revient à mélanger les différentes couches d’une application MVC2 . Il est donc conseillé de ne pas utiliser cette librairie de tag ( qui devrait disparaître dans les versions futures )

Une meilleur approche serait de configurer la gestion de ses bases de données par tomcat lui même grâce encore une fois au fameux fichier de context : /META-INF/context.xml . Quelques lignes permettront de peaufiner toute une gestion tel que le nombre de connexion maximale, le nombre minimal à prévoir, le timeout, etc. Ce que l’on appel un pool de connexion !

 Configuration du pool

La configuration commence donc par ces quelques lignes dans un fichier context.xml :

<Context reloadable="true">
        <Resource name="jdbc/myProject" auth="Container"
                type="javax.sql.DataSource"
                username="database_user" password="database_passwd"
                driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://localhost:3306/database_base" maxActive="8" maxIdle="8"
                removeAbandoned="true" removeAbandonedTimeout="30" logAbandoned="true" />
</Context>

Pour la signification des attributs je vous suggère d’aller voir : common apache

 Lier le pool à l’application

Une fois ce pool créé, il peut être intéressant de le lier à l’application dans son fichier web.xml par la balise resource-ref :

        <resource-ref>
                <description>
                        Pool de connexion à la base de données
                </description>
                <res-ref-name>jdbc/myProject</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
        </resource-ref>

 L’utilisation dans vos servlets

Ensuite pour l’utiliser, il vous suffira de récupérer une connexion du context par ces quelques lignes :

        try {
                Context initCtx = new InitialContext(); // récupération du context
                DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/myProject"); // récupération de la source
                Connection con = ds.getConnection(); // récupération de la connexion
                .....
        } catch (Exception e) {
                Logger.getLogger(this.CLASS).error("DATABASE : "+e.getMessage());
        }

Il pourra être subtil de créer une classe s’occupant de récupérer cette connexion et d’effectuer une requête dessus.

 Erreurs fréquentes

Attention toute fois à bien comprendre ce que vous faites. La création d’un pool de connexion et sa limitation implique de fermer correctement toute demande de connexion une fois la requête achevée. Un appel à con.close() terminera la connexion courrante, mais prenez garde à bien fermer vos ResultSet et PreparedStatement dans le bon ordre et avant la fermeture de la connexion principale.

Si votre script se bloque ou se met en pause ; cela est généralement du à l’oubli de fermeture de connexion. Le pool de connexion voyant son capital de connexions s’amenuiser, ne distribuera plus de nouvelles connexions tant que les précédentes n’auront pas été libérées ..

 Dernières précisions

  • Si vraiment, vraiment, vraiment vous préférez quand même, contre toute opposition sensée et argumentée, utiliser la taglib ’sql’ de struts, vous pouvez en haut de vos pages renseigner la source précédemment configurée dans le web.xml et dans le context.xml par <sql:setDataSource dataSource="jdbc/myProject" />
  • Vous pouvez également vouloir configurer un pool de connexion au niveau du serveur tomcat directement, et partager ce pool avec plusieurs applications en créant une section ressource dans le server.xml (plus facilement faisable par l’administration de tomcat ) ; ensuite il conviendra de spécifier dans chaque contexte le pool à utiliser par :
    <ResourceLink
                    name="jdbc/myProject"
                    global="jdbc/myProject"
                    type="javax.sql.DataSource"/>

Cette solution écarte l’étape de configuration du web.xml

1 Message

  • Pool de connexion 10 mars 00:20, par wHyGUztMSwBxWJ

    Gaelle-Marie Zimmermann dit : Je saisis votre point de vue Ceci dit, si vous uohsaitez des conseils pour reme9dier e0 la baisse de libido, sans rire, la presse fe9minine en regorge. ZoneZeroGene n’adhe8re pas e0 ces recettes, mais je ne nie pas qu’elles puissent re9conforter les gens Sinon, peut-eatre Doctissimo pourra-t-il vous aider ? Il y a pas mal de dossiers inte9ressants Sinon, le site de Myle8ne Leroy, qui est une chouette sexologue, peut vous aider un peu. Envoyez-moi un message si vous uohsaitez que je vous contacte par mail, et pre9cisez-moi ce que vous cherchez comme conseils, je ferai en sorte de vous trouver des pistes.

    Répondre à ce message

Répondre à cet article

SPIP | squelette | | Plan du site | Suivre la vie du site RSS 2.0