je suis en train de faire des services web avec Tomcat + Axis qui g=E8re
une base de donn=E9e.
Le pro-bl=E8me c'est qu'=E0 chaque fois que j'appele une fonction du
service web, un nouvel objet est construit et rouvre au passage une
nouvelle connexion. La destruction de cet objet ne peut se faire
explicitement.
Je me retrouve donc avec un pl=E9thore de connexions.
Comment dois-je donc faire pour qu'=E0 un client (qui utilise un tas de
fonctions du service web donc qui va aussi construire un tas d'objets)
ne corresponde qu'une seule connexion =E0 la BD ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Franck
Salut le groupe,
je suis en train de faire des services web avec Tomcat + Axis qui gère une base de donnée.
Le pro-blème c'est qu'à chaque fois que j'appele une fonction du service web, un nouvel objet est construit et rouvre au passage une nouvelle connexion. La destruction de cet objet ne peut se faire explicitement. Je me retrouve donc avec un pléthore de connexions.
Comment dois-je donc faire pour qu'à un client (qui utilise un tas de fonctions du service web donc qui va aussi construire un tas d'objets) ne corresponde qu'une seule connexion à la BD ?
Merci à tous et aux autres seb
Bonjour,
Il faut que tu fermes tes connexions explicitement dans ton SW (dans le finally{} )
@+
-- - Franck mailto:
Salut le groupe,
je suis en train de faire des services web avec Tomcat + Axis qui gère
une base de donnée.
Le pro-blème c'est qu'à chaque fois que j'appele une fonction du
service web, un nouvel objet est construit et rouvre au passage une
nouvelle connexion. La destruction de cet objet ne peut se faire
explicitement.
Je me retrouve donc avec un pléthore de connexions.
Comment dois-je donc faire pour qu'à un client (qui utilise un tas de
fonctions du service web donc qui va aussi construire un tas d'objets)
ne corresponde qu'une seule connexion à la BD ?
Merci à tous et aux autres
seb
Bonjour,
Il faut que tu fermes tes connexions explicitement dans ton SW
(dans le finally{} )
je suis en train de faire des services web avec Tomcat + Axis qui gère une base de donnée.
Le pro-blème c'est qu'à chaque fois que j'appele une fonction du service web, un nouvel objet est construit et rouvre au passage une nouvelle connexion. La destruction de cet objet ne peut se faire explicitement. Je me retrouve donc avec un pléthore de connexions.
Comment dois-je donc faire pour qu'à un client (qui utilise un tas de fonctions du service web donc qui va aussi construire un tas d'objets) ne corresponde qu'une seule connexion à la BD ?
Merci à tous et aux autres seb
Bonjour,
Il faut que tu fermes tes connexions explicitement dans ton SW (dans le finally{} )
@+
-- - Franck mailto:
Jacques-Olivier Haenni
Bonjour,
Il faut utiliser un pool de connexion. Ainsi, le serveur pourra réutiliser une connexion déjà ouverte lorsqu'une nouvelle requête arrive.
Avantages: - le nombre de connexions ouvertes sur la base est limité (économie de ressources) - le serveur n'a pas besoin d'ouvrir une nouvelle connexion à chaque requête; il en réutilise une qu'il a déjà (gain en performance)
Il n'y a alors aucune garantie que la même connexion soit toujours utilisée pour le même client, mais ce n'est pas du tout un problème.
Utilisez le pool de Tomcat en prenant les connexion via une datasource obtenue par un accès au JNDI ou utilisez une librairie telle que Apache DBCP.
Jacques-Olivier
Franck wrote:
Salut le groupe,
je suis en train de faire des services web avec Tomcat + Axis qui gère une base de donnée.
Le pro-blème c'est qu'à chaque fois que j'appele une fonction du service web, un nouvel objet est construit et rouvre au passage une nouvelle connexion. La destruction de cet objet ne peut se faire explicitement. Je me retrouve donc avec un pléthore de connexions.
Comment dois-je donc faire pour qu'à un client (qui utilise un tas de fonctions du service web donc qui va aussi construire un tas d'objets) ne corresponde qu'une seule connexion à la BD ?
Merci à tous et aux autres seb
Bonjour,
Il faut que tu fermes tes connexions explicitement dans ton SW (dans le finally{} )
@+
Bonjour,
Il faut utiliser un pool de connexion. Ainsi, le serveur pourra
réutiliser une connexion déjà ouverte lorsqu'une nouvelle requête arrive.
Avantages:
- le nombre de connexions ouvertes sur la base est limité (économie de
ressources)
- le serveur n'a pas besoin d'ouvrir une nouvelle connexion à chaque
requête; il en réutilise une qu'il a déjà (gain en performance)
Il n'y a alors aucune garantie que la même connexion soit toujours
utilisée pour le même client, mais ce n'est pas du tout un problème.
Utilisez le pool de Tomcat en prenant les connexion via une datasource
obtenue par un accès au JNDI ou utilisez une librairie telle que Apache
DBCP.
Jacques-Olivier
Franck wrote:
Salut le groupe,
je suis en train de faire des services web avec Tomcat + Axis qui gère
une base de donnée.
Le pro-blème c'est qu'à chaque fois que j'appele une fonction du
service web, un nouvel objet est construit et rouvre au passage une
nouvelle connexion. La destruction de cet objet ne peut se faire
explicitement.
Je me retrouve donc avec un pléthore de connexions.
Comment dois-je donc faire pour qu'à un client (qui utilise un tas de
fonctions du service web donc qui va aussi construire un tas d'objets)
ne corresponde qu'une seule connexion à la BD ?
Merci à tous et aux autres
seb
Bonjour,
Il faut que tu fermes tes connexions explicitement dans ton SW
(dans le finally{} )
Il faut utiliser un pool de connexion. Ainsi, le serveur pourra réutiliser une connexion déjà ouverte lorsqu'une nouvelle requête arrive.
Avantages: - le nombre de connexions ouvertes sur la base est limité (économie de ressources) - le serveur n'a pas besoin d'ouvrir une nouvelle connexion à chaque requête; il en réutilise une qu'il a déjà (gain en performance)
Il n'y a alors aucune garantie que la même connexion soit toujours utilisée pour le même client, mais ce n'est pas du tout un problème.
Utilisez le pool de Tomcat en prenant les connexion via une datasource obtenue par un accès au JNDI ou utilisez une librairie telle que Apache DBCP.
Jacques-Olivier
Franck wrote:
Salut le groupe,
je suis en train de faire des services web avec Tomcat + Axis qui gère une base de donnée.
Le pro-blème c'est qu'à chaque fois que j'appele une fonction du service web, un nouvel objet est construit et rouvre au passage une nouvelle connexion. La destruction de cet objet ne peut se faire explicitement. Je me retrouve donc avec un pléthore de connexions.
Comment dois-je donc faire pour qu'à un client (qui utilise un tas de fonctions du service web donc qui va aussi construire un tas d'objets) ne corresponde qu'une seule connexion à la BD ?
Merci à tous et aux autres seb
Bonjour,
Il faut que tu fermes tes connexions explicitement dans ton SW (dans le finally{} )
@+
sebdijon
où ça que je le met le finally ?
Exemple :
Le SW : ===== class SW { public SW() { try { // Ouverture connexion } catch(...) }
public finalize() { // Fermeture connexion }
public void AjouterEnBD(String truc) { try { // Ajout en BD } catch(...) } }
Le Client (c#): ====== SW MonSW = new SW() // Création objet C# !! SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW = null; // Destruction objet C# !!
Merci à vous.
où ça que je le met le finally ?
Exemple :
Le SW :
=====
class SW
{
public SW() {
try {
// Ouverture connexion
} catch(...)
}
public finalize() {
// Fermeture connexion
}
public void AjouterEnBD(String truc) {
try {
// Ajout en BD
}
catch(...)
}
}
Le Client (c#):
======
SW MonSW = new SW() // Création objet C# !!
SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel
SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel
SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel
SW = null; // Destruction objet C# !!
Le SW : ===== class SW { public SW() { try { // Ouverture connexion } catch(...) }
public finalize() { // Fermeture connexion }
public void AjouterEnBD(String truc) { try { // Ajout en BD } catch(...) } }
Le Client (c#): ====== SW MonSW = new SW() // Création objet C# !! SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW = null; // Destruction objet C# !!
Merci à vous.
Jacques-Olivier Haenni
Bonjour,
Il faut plutôt faire ainsi:
class SW { public void ajouter en DB(String truc) { // open DB connexion or get it from the pool try { // use the DB connexion (e.g. insert truc in DB) } catch (...) { // handle errors } finally { // close DB connexion (actually closes it or puts // it back to the pool) } } }
Si vous devez vraiment utiliser la même connexion d'un appel remote à un autre, c'est qu'il y a un problème de design.
Jacques-Olivier
sebdijon wrote:
où ça que je le met le finally ?
Exemple :
Le SW : ==== > class SW { public SW() { try { // Ouverture connexion } catch(...) }
public finalize() { // Fermeture connexion }
public void AjouterEnBD(String truc) { try { // Ajout en BD } catch(...) } }
Le Client (c#): ===== > SW MonSW = new SW() // Création objet C# !! SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW = null; // Destruction objet C# !!
Merci à vous.
Bonjour,
Il faut plutôt faire ainsi:
class SW {
public void ajouter en DB(String truc) {
// open DB connexion or get it from the pool
try {
// use the DB connexion (e.g. insert truc in DB)
} catch (...) {
// handle errors
} finally {
// close DB connexion (actually closes it or puts
// it back to the pool)
}
}
}
Si vous devez vraiment utiliser la même connexion d'un appel remote à un
autre, c'est qu'il y a un problème de design.
Jacques-Olivier
sebdijon wrote:
où ça que je le met le finally ?
Exemple :
Le SW :
==== > class SW
{
public SW() {
try {
// Ouverture connexion
} catch(...)
}
public finalize() {
// Fermeture connexion
}
public void AjouterEnBD(String truc) {
try {
// Ajout en BD
}
catch(...)
}
}
Le Client (c#):
===== > SW MonSW = new SW() // Création objet C# !!
SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel
SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel
SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel
SW = null; // Destruction objet C# !!
class SW { public void ajouter en DB(String truc) { // open DB connexion or get it from the pool try { // use the DB connexion (e.g. insert truc in DB) } catch (...) { // handle errors } finally { // close DB connexion (actually closes it or puts // it back to the pool) } } }
Si vous devez vraiment utiliser la même connexion d'un appel remote à un autre, c'est qu'il y a un problème de design.
Jacques-Olivier
sebdijon wrote:
où ça que je le met le finally ?
Exemple :
Le SW : ==== > class SW { public SW() { try { // Ouverture connexion } catch(...) }
public finalize() { // Fermeture connexion }
public void AjouterEnBD(String truc) { try { // Ajout en BD } catch(...) } }
Le Client (c#): ===== > SW MonSW = new SW() // Création objet C# !! SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW.AjouterEnBD("SOS"); // Création objet sur le serveur + appel SW = null; // Destruction objet C# !!
Merci à vous.
sebdijon
super génial j'utilise la librairie DBCP et ça à l'air de marcher
merci les gars !
super génial j'utilise la librairie DBCP et ça à l'air de marcher