31.9. Utiliser le pilote dans un environnement multithread ou de servlet

Un problème qu'ont beaucoup de pilotes JDBC est que seul le premier thread peut utiliser une Connection à la fois --- sinon un thread pourrait lancer une requête alors qu'une autre est en cours de réception de résultats, ce qui pourrait occasionner une confusion.

Le pilote JDBC de PostgreSQL est compatibles avec les threads. En conséquence, si votre application utilise plusieurs threads, alors vous n'avez pas à vous inquiéter des algorithmes complexes qui s'assurent qu'un seul thread utilise la base de données à la fois.

Si un thread tente d'utiliser la connexion alors qu'un autre est en cours d'utilisation, il attendra la fin de l'opération en cours par l'autre thread. Si l'opération est une requête SQL standard, alors l'opération consiste en l'envoi et en la récupération de ResultSet (en entier). S'il s'agit d'un appel << fast-path >> (c'est-à-dire en lisant un bloc d'un gros objet), alors il consiste en l'envoi e en la réception des données respectives.

Ceci convient pour les applications et les applets mais cela peut causer des problèmes de performance avec les servlets. Si vous avez plusieurs threads exécutant des requêtes, tous sauf un s'arrêteront. Pour résoudre ceci, il vous est conseillé de créer un pool (ensemble) de connexions. Lorsqu'un thread a besoin d'utiliser la base de données, il demande au gestionnaire de la classe un objet Connection. Le gestionnaire donne une connexion libre au thread et la marque comme occupée. S'il ne reste plus de connexions libres, il en ouvre une. Une fois que le thread a terminé d'utiliser la connexion, il la redonne au gestionnaire qui peut alors soit la fermer soit l'ajouter de nouveau au pool. Le gestionnaire pourrait aussi vérifier que la connexion est toujours vivante et la supprimer du pool si elle est morte. Le mauvais côté d'un pool de connexions est que cela accroît la charge sur le serveur parce qu'une nouvelle session est créée pour chaque objet Connection. C'est à vous de voir suivant les besoin de vos applications.