IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[jdbc] nb de connections / pb d'utilisations multiples


Sujet :

JDBC Java

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut [jdbc] nb de connections / pb d'utilisations multiples
    bonjour,

    voici mon souci, dans mon programme, on peut ouvrir un projet faisont partie d'une liste de projets stockés sous formes de tuples dans une base de données. Il est impératif que chacun des projets ne puisse etre ouvert que par un utilisateur a la fois.

    Voici comment je fais : j'ai un booleén "in_use" dans la table "project" de la base de données. a l'ouverture d'un projet je sette ce booléen à "vrai" (notez déjà que ce n'est pas infaillible, admettons que deux c**** ouvrent le même projet pile en même temps), et a la fermeture du projet (ou du programme si il n'y a pas de sauvegarde) je sette c booléen a faux.

    si quelq'un veut ouvrir le projet, on regarde si le booléen est a vrai, si c'est le cas, on interdit l'ouverture du projet.

    le problème, qui est un peu le même que lors d'un précédent post qui voulait interdire le lancment de plusierus instances d'un programmepar l'utilisation d'un fichier, c'est qu'en cas de plantage (ou meme de coupure volontaire sèche du programme avec le carré rouge d'éclipse ou meme par le gestionnaire de programmes), le booleen en question reste a vrai dans la base et le projet ne peut plus s'ouvrir!

    la solution consite alors a faire la super requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE project SET in_use = 0 WHERE 1;
    il serait meme possible de l'inclure dans le prog avec un boutton mais c'est particulièrement crade car qui prouve que le projet est effectivement inutilisé.? et qui va appuyer sur ce bouton hein?

    Le projet etant destiné a etre utilisé dans un environnement a relativement petite echelle, je pensais faire un systeme qui detecte le nombre de connection a la base (car il n'y a qu'une base et plusieurs postes). si ce nombre vaut 1, c'est que je suis le seul connecté et dans ce cas le prog effectue de lui mem la requete ce qui est a la fois sur et a peu pres couvrant tous les cas. (sauf le cas ou il n'y a jamais moins de 2 gus conectés mais c'est quand meme peu probable que 5 jours de suite tous les mecs eteignent le prog a la meme heure)

    Maintenant que j'ai exposé le problème, j'aimerai savoir comment faire pour connaitre le nombre de connections a une base de donnée (distante), dans mon cas c'est une mySQL. (mais ca peut changer en prime )

    A moins que quelq'un voie une autre technique pour contourner le problème que je viens d'exposer.

    Merci de vos réponses (nombreuses comme d'habitude )[/code]

  2. #2
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    est-ce que t'as penser a utiliser entre ta bd et ton client, un serveur.
    ce serveur recevrait les connexions de tes clients et testerai en permanence l'intégrité de la connexion tant que tes clients accedent a la base.
    ce serveur redirigerait les requetes sql vers la bd, et les resultats vers tes clients
    Colère et Haine mènent à la Puissance

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut
    il y a un serveur qui 'contient' la DB en fait.

    je ne vois pas en quoi rajouter un maillon reglerais le probleme spécifique que j'ai. peut etre que je n'ai pas bien compris ou tu veux en venir.

    ce que j'aimerai faire c'est detecter le nombre de connections a cette base sur ce serveur , et ce a partir d'un poste client et avec JDBC.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Ben si tu passes par un seul poste (en l'occurence le serveur) pour lancer les requetes sur la base, tu peux facilement detecter a la fois si la connexion a la base est utilisée, et en plus, si tu mets les accès en synchronized, tu evites les problemes de requetes concurentes, style deux c**** qui appuies sur le bouton pile poil au meme moment...

    Tu peux en effet avoir un tableau au niveau de ton appli cote serveur (type servlet en fait, je pense que pierre.celard voulait parler de ce genre de technologie...), qui te donne a un instant T l'etat d'utilisation de chaque base.

    A ce niveau la, en faisant un acces synchronisé, sur la methode de recuperation de l'etat au niveau du serveur, tu evites les acces concurents, du fait que un seul utilisateur peut lancer cette requete a la fois...

    Si tous tes accès passent par le meme point, et de maniere successifs, tu evites les deux problemes en une seule methode...

    En plus, meme en cas de plantage, tu as la possibilité de réinitialiser les valeurs de ta servlet facilement, pour liberer les ressources, en cas de redemarrage de la servlet, en as de plantage du serveur de base de données, etc...

    Enfin, moi c'est comme ca que je ferais en tout cas, et que j'ai fait pour tes consultations/modifications multi-utilisateurs d'une base de données...

    Tu peux dire que le fait de ne passer que par un point pour tes requetes va ralentir le traitement, mais comme tu le dis, le projet est a relativement petite echelle, ca ne devrait pas poser de problemes de ralentissement notable...

  5. #5
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut
    tout d'abord merci de ta réponse argumentée, meme si j'avoue que j'ai un peu de lack of knowledges sur le coup.

    Ben si tu passes par un seul poste (en l'occurence le serveur) pour lancer les requetes sur la base, tu peux facilement detecter a la fois si la connexion a la base est utilisée, et en plus, si tu mets les accès en synchronized, tu evites les problemes de requetes concurentes, style deux c**** qui appuies sur le bouton pile poil au meme moment...
    mouis?


    Tu peux en effet avoir un tableau au niveau de ton appli cote serveur (type servlet en fait, je pense que pierre.celard voulait parler de ce genre de technologie...), qui te donne a un instant T l'etat d'utilisation de chaque base.
    ben en fait non, ne part pas en courant mais je fais toutes les requetes coté client

    A ce niveau la, en faisant un acces synchronisé, sur la methode de recuperation de l'etat au niveau du serveur, tu evites les acces concurents, du fait que un seul utilisateur peut lancer cette requete a la fois...
    Si tous tes accès passent par le meme point, et de maniere successifs, tu evites les deux problemes en une seule methode...
    c'est plus compliqué car il y a quand meme plusieurs tables et moi kan je balance des nouveaux tuples, je le fais en interogeant ce qui existe deja sur la base pour mettre le bon id par exemple.


    En plus, meme en cas de plantage, tu as la possibilité de réinitialiser les valeurs de ta servlet facilement, pour liberer les ressources, en cas de redemarrage de la servlet, en as de plantage du serveur de base de données, etc...
    en fait il faudrait que je garde une copie de ce qui est ouvrt d'une facon ou d'une autre sur le serveur? (ce qui ne va pas etre possible de toutes manières)


    Enfin, moi c'est comme ca que je ferais en tout cas, et que j'ai fait pour tes consultations/modifications multi-utilisateurs d'une base de données...
    oui mais tes connaissances en servlet t'y autorise, les miennes sont quasi nulles dans ce domaine.

    Tu peux dire que le fait de ne passer que par un point pour tes requetes va ralentir le traitement, mais comme tu le dis, le projet est a relativement petite echelle, ca ne devrait pas poser de problemes de ralentissement notable...
    a part pour le projet car il me faudrait réécrire toutes les methodes d'acces

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Pas franchement, car les acces, les methodes et le traitement resterait le meme...

    Mais si tu ne veux pas passer par une servlet, et rester uniquement en mode client, et sans tenir compte de tes deux c****, tu peux simplement passer par une base tierce, dans lequel tu mets le nom de la base, et l'etat. A chaque demande, tu peux a ce niveau la te logger d'abord sur cette table, pour voir l'etat de la base a laquelle tu veux acceder...

    Mais ca ne te regle pas le probleme de tes deux c****... Et par experience, quand on pense que ca peut arriver, meme si il y a tres peu de chances, ca arrive... malheureusement...

  7. #7
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut
    ben ca reviens pas au meme que mon token "in_use" ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Quand j'y pense, si...

    Je commence a etre fatigue ce soir moi... Il est temps que j'aille me coucher (-> Decalage horaire, il est 18h05...)

    Je me rappelais plus que c'etait au sein de ta table que tu avais ca...

    Sinon, juste une question, tu as quel systeme de base de données ?

    Si c'est du MySQL, tu dois avoir une base deja toute faite la dessus...

  9. #9
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut
    oui c'est du mySQL, mais le pb c'est que ca peut etre amené a varier dans le futur. enfin si une soltution marche avec mySQL je m'en contenterai

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/07/2009, 10h25
  2. Réponses: 2
    Dernier message: 27/05/2006, 12h13
  3. [JDBC][SQL Server]Connection Pooling
    Par WE dans le forum JDBC
    Réponses: 4
    Dernier message: 14/03/2006, 09h15
  4. Savoir si la connection est en utilisation
    Par spyk dans le forum Langage
    Réponses: 3
    Dernier message: 23/11/2005, 17h23
  5. [débutant][tomcat][jdbc] pool de connection DBCP
    Par zozolh2 dans le forum JDBC
    Réponses: 6
    Dernier message: 19/05/2004, 17h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo