EcommerceDEV. Développement, optimisation et sécurisation des sites de commerce électronique.
arrowAccueil
Mercredi 7 jan 2009
Nom d'utilisateur     Mot de passe      Conserver       Mot de passe perdu ?  Inscription
Menu
Accueil
A propos du site
Carte du site
Moteur de recherche
Nouvelles
Contactez-nous
Evénements
- - - - - - -
Analyse
Conception
Optimisation
Programmation
Sécurité
Produits/Services
Dec 28 2005
Pooling des objets J2EE Version imprimable Suggérer par mail
Appréciation des utilisateurs: / 6
FaibleMeilleur 
Optimisation - Performance
Ecrit par Kamal AOUDA   
28-12-2005
Un pool est un ensemble d

Un pool est un ensemble d'objets réutilisables. Il permet de partager des objets déjà crées entre plusieurs requêtes de manière à éviter les coûts liés à de nouvelles instanciations. Dans les applications J2EE on retrouve les pools à plusieurs niveaux :

 

Au niveau des servlets : une servlet associe un thread à chaque requête nouvellement reçue mais cela ne veut pas dire qu’elle crée autant de threads qu’il y a de requêtes entrantes. Pour ne pas épuiser les ressources du serveur, le conteneur crée un nombre limité de threads et les place dans un pool. Parce que le nombre des requêtes entrantes est largement supérieur à celui des threads placés dans le pool, il doit mettre les requêtes excédentaires dans une file d’attente jusqu'à ce qu’un nouveau thread soit libéré. A l’issue du traitement d’une requête le thread qui lui a été assigné n’est pas détruit. Il est gardé dans le pool et réinitialisé pour qu’une nouvelle requête puisse s’en servir.
 


Figure 37: Pool de threads maintenu par un serveur d’application [177]

 

 

 

Au niveau des bases de données : la connexion à une base de données est une opération très coûteuse en mémoire et en processeur. A l’instar des threads un développeur ne peut pas se permettre de créer autant de connexions qu’il y a de requêtes entrantes. De la même manière, il ne peut pas partager une seule connexion entre toutes les requêtes au risque de condamner les traitements parallèles et les accès concurrentiels à la base de données.  Comme le montre le diagramme de classe de la figure 38 le ConnectionPool regroupe un nombre limité de connexions déjà créées (ConnectionImpl). Lorsqu’une nouvelle requête arrive le ConnectionPool appelle la méthode acquireImpl() qui lui retourne une connexion prête à l’emploi. Une fois le traitement de la requête terminé le ConnectionPool appelle la méthode releaseImpl() pour libérer la connexion et permettre à de nouvelles requêtes de la réutiliser.

 

Figure 38: Diagramme de classe du ConnectionPool [178]

 

 

Au niveau de la couche métier : à la différence des stateful session beans, les stateless session beans ne conservent pas de données personnalisées dans les objets de session. Cette propriété facilite énormément leur conservation dans des pools. Lorsque le conteneur d’EJB reçoit une requête, il n’a pas à se soucier des données personnalisées du client qui l’a envoyée. Parce qu’elles sont identiques, il peut lui retourner n’importe quelle instance de l’EJB pool. Ce raisonnement s’applique par transitivité aux entity beans et aux message driven beans mais pas aux stateful session beans parce qu’ils conservent pendant la session les données personnalisées de chaque client. En fait, sans réinitialisation, une réutilisation des stateful session beans peut affecter la confidentialité et l’intégrité des données (par exemple si un client réutilise le panier d’achat rempli par autre client).

Cela dit il n’y a pas de restrictions quant aux types d’objets qu’on peut placer dans un pool. La reutilisabilité est pratiquement la seule condition qu’ils doivent vérifier. Comme le montre la figure 39 un resource pool peut être par abstraction généralisé à tous les types d’objets via une classe intermédiaire (Factory) qui permet la factorisation des méthodes et des propriétés du pool.

 

Figure 39: Factorisation des ressources d’un pool [179]

 

 

La méthode createResource() de la classe Factory permet de créer une nouvelle instance de l’objet qu’on souhaite placer dans le pool. Avant de pouvoir réutiliser cette instance le pool doit appeler la méthode validateResource( ) pour la réinitialiser.

 

Notes de bas de page

 

[177] Source : Adaptation d’une figure publiée dans: Threading/queuing "funnel." From IBM Software Group Services Performance Workshop presented by Stacy Joines, 2001, Hursley, U.K. © IBM Corp. 2001

[178]  Adaptation d’un diagramme de classe publié à l’adresse: http://www.developer.com/java/other/article.php/626291 , Wiebe de Jong, Implement a JDBC Connection Pool via the Object Pool Pattern

[179] Source: William Crawford, Jonathan Kaplan, J2EE Design Patterns, O'Reilly, September 2003, ISBN: 0-596-00427-3, 368

 

Dernière mise à jour : ( 28-05-2007 )
Suivant >
Recommander ce site
Collaboration
Téléchargements
Derniers événements
Aucun événement
Blogs Ecommerce
Blog de capitaine commerce
top

Ce site a été crée avec le CMS Mambo. Un logiciel gratuit disponible sous licence GPL.

Copyright Ecommerce DEV 2006.

Hosted by SiteGround