2008-09-23 3 views
1

Je construis un petit site Web pour le plaisir et l'apprentissage en utilisant une conception en couches Web/Service/Accès aux données relativement standard. Pour le Data Access Layer, quelle est la meilleure façon de gérer la création d'objets Connection pour appeler mes procédures stockées SQL et pourquoi? Ayant à l'esprit que j'écris beaucoup de code à la main (je sais que je pourrais utiliser Hibernate etc pour faire beaucoup de ceci pour moi) ...Connexions de base de données JDBC dans une application Web DAL

1) Dois-je créer une instance statique de la connexion et exécuter toutes mes requêtes à travers elle ou cela causera des problèmes de concurrence?

2) Dois-je créer une instance de connexion par appel de base de données et accepter le temps système de performance? (Je me pencherai sur la mise en commun des connexions à une date ultérieure si c'est le cas)

Répondre

1

Vous devez utiliser un Connection par fil. Ne partagez pas les connexions entre les threads.

Vous pouvez utiliser Apache DBCP. C'est un moyen gratuit et standard de configurer les connexions à la base de données et de les dessiner à partir d'un pool. C'est la méthode utilisée par les serveurs Web de haute performance comme Tomcat.

En outre, si vous utilisez DBCP, puisqu'il s'agit d'un pool (lire: mis en cache), la création/fermeture de connexions est souvent pénalisée.

1

La méthode standard consiste à configurer une source de données. Tous les serveurs d'applications peuvent le faire via leur console d'administration. Le pool est ensuite accessible par son nom JNDI (par exemple "jdbc/MyDB").

La source de données devrait en fait être un pool de connexions (et l'est habituellement). Il met en cache les connexions, les teste avant de passer à l'application et fait beaucoup d'autres fonctions importantes.

Dans votre code:

  1. résoudre le nom JNDI et jeté dans DataSource
  2. obtenir une connexion de la source de données
  3. faire votre travail
  4. fermer la connexion (il remonte à la piscine ici)

Vous pouvez configurer le pool vous-même (en utilisant n'importe quelle implémentation de pool disponible gratuitement), mais c'est vraiment le cas n'a aucun sens si vous utilisez un serveur d'applications.

P.S. Puisqu'il s'agit d'une application web, un bon moyen de s'assurer que vous avez fermé votre connexion après requist est d'utiliser HttpFilter. Vous pouvez en installer un dans web.xml. Lorsque la requête arrive, activez la connexion, placez-la dans ThreadLocal. Pendant la requête, obtenez la connexion de ThreadLocal, mais ne la fermez jamais. Après la demande, dans le filtre, fermez la connexion.

Questions connexes