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 :

Limiter nombre de connexions pour plusieurs SGBD


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 30
    Points : 12
    Points
    12
    Par défaut Limiter nombre de connexions pour plusieurs SGBD
    Bonjour,
    Je vais essayer d'être clair et bref, car je ne suis pas un spécialiste des BD
    J'ai une application développée en JAVA avec laquelle je peux me connecter à différents SGBD (MySQL, ASA, Oracle, PostgreSQL) et il m'a été demandé de limiter le nombre de connexions utilisateur...
    Y'a-t-il un moyen en JAVA de limiter les connexions pour tous les SGBD quelqu'il soit (une propriété ou autre...) ou faut-il le faire au cas par cas, à chaque fois en fonction de la base utilisée etc... ?

    Merci d'avance pour vos réponses.

    Edit: désolé si je n'ai pas bien utiliser la fonction "Recherche"

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut
    Comment gérez-vous vos connexions au niveau de votre application Java ?
    Vous ouvrez une connexion par base ?

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Bonjour fadace et merci de de me répondre.
    Au niveau des ouvertures de connexions les applis ne se connectent pas à plusieurs bases en même temps c'est en fonction de la base installée chez le client.
    Ensuite ça a un peu changé (au fil du développement), plusieurs applications, x y z..., utilisent une classe de connexion commune pour se connecter aux bases.
    Il est demandé à ce que seulement l'application y par exemple (administration) soit limitée à un seul utilisateur, si il y a déjà un utilisateur connecté alors on refuse les autres utilisateurs. Donc à faire au niveau java, mais je ne maîtrise pas très bien JDBC.
    Comment récupérer le nombre de connexions (utilisateurs connectés) ?
    Comment refuser une autre connexion si déjà un utilisateur connecté ?

    merci.

  4. #4
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Il faut utiliser un pool de connexion (voir "Apache DBCP") différents pour chaque application : avec des paramètres comme "maxActive" sur le nombre de connexions possibles simultanément, et "initialSize" sur le nombre de connexion initialisé au minimum.

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Ok merci g_rare, je vais me pencher sur cette solution.

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 30
    Points : 12
    Points
    12
    Par défaut Je ré-ouvre pour un peu plus d'explication
    Bonjour,

    je ré-ouvre car je souhaiterais un peu plus d'explications.
    Je me repenche sur le sujet et je suis un peu perdu.
    En fait pour être très clair:
    J'installe la même application sur deux machines différentes, et je souhaite que si par hasard, les deux applis sont lancées en même temps (1s ou 2s d'écart par ex) et tentent de se connecter à la même base de données sur un serveur, une seule appli (sur le 2) ai le droit de se connecter (l'autre appli doit être refoulée car l'autre appli à déjà ouvert une connexion ).

    (C'est valable si on lance 2 fois la même appli sur le même PC.)

    Comment gérer celà par JAVA - JDBC si c'est possible ? Comment intérroger la base de données sur le nombre de connexions ouvertes ? Sinon quelle autre technique employer ?

    Merci d'avance pour les réponses.

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Euh pas sans intercaler une pièce supplémentaire entre ton appli et ta base.

    Grosso merdo tu auras un serveur gérant un pool de connexions à ta base de données. Puis les diverses applis passeront par ton serveur pour récupérer une connexion. Le serveur pourra leur transmettre au moyen de RMI afin que ton appli puisse l'utiliser la connexion.

    Ou alors faire en sorte que ton serveur traite toutes les interactions directes avec la base et fournisse un WebServices que les différentes applis puissent consommer sans problème (le serveur ayant la main sur toutes les connexion et pouvant les gérer de fait à sa guise)

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Tout d'abord, merci pour ta réponse.

    Mais dans le cas où je lance la même appli sur deux machines disctinctes, le seul moyen est d'interroger le SGBD pour connaître le nombre de connexions ouvertes non ? Sinon comment faire pour gérer les 2 pools de connexions de chaque applis ?

    Désolé si je pose des questions de noob mais là je cale....

  9. #9
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    En fait ce que je t'explique est de faire un troisième appli qui centralisera le pool.
    Les deux autre applis utiliseront la troisième pour obtenir les connexions.

    C'est la solution qui me semble la plus simple, car sinon tu vas devoir te fader du natif ou des requêtes diverses et variées suivant chaque SGBD

    Images attachées Images attachées  

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Ok je vois ce que tu veux dire, mais le pb reste le même:

    A1 = appli 1
    A2 = appli 2 (même appli que A1)
    A3 = appli3 - gestion des connexions vers SGBD (pool)

    Si je lance A1 et A3 sur une même machine, comment A2, alors sur une autre machine, aura accès à A3 puisque A2 n'est pas censée savoir que A3 se trouve sur telle machine ?

    Désolé de t'embêter avec mes questions...

  11. #11
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bon on va repartir de la base

    Pour l'instant ton appli est un client se connectant directement à une base de donnée.

    Ce que je te propose est de créer un serveur mettant un niveau d'indirection entre ta base et tes applis.

    Donc tes clients n'ont besoin de connaitre uniquement 'adresse du serveur et non plus celle de la base de données.

    D'un point de vue sécurité le mieux serait que seul le serveur puisse faire directement des actions SQL sur la DB.

    Puis ce serveur propose des webservices aux clients afin que ceux cis puissenty effectuer des action bien spécifiques.

    De cette façon c'est uniquement le serveur a qui attaque la base de données, et donc celui ci peut manager son pool de connections comme il l'entend


    Ensuite c'est une problèmatique réseau, il faut que ton serveur ait une adresse bien reconnue et accessible depuis tes clients...

  12. #12
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Et pourquoi pas simplement mettre un flag dans la base à chaque connexion, i.e. au démarrage de l'application (donc penser à "libérer" la connexion à la fermeture de l'application) : et tu gères un nombre max simultané en fermant systématiquement l'application dès son lancement si il y a déjà trop d'instances en parallèle ?!...

  13. #13
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 201
    Points : 179
    Points
    179
    Par défaut
    Je penses que le mieux est en effet un serveur qui pourrait tourner sur le même pc que la base.

    L'idée du flag est bonne, mais demande une gestion différente suivant le sgbd. Il faut prendre en compte les caches, ... ce qui fait que 2 connexions pourraient se retrouver simultannée. Le flag bien que parraissant plus simple, est certainement plus complexe à mettre en place.

Discussions similaires

  1. Limiter nombre de caractères de PLUSIEURS textarea
    Par watchabongo dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/12/2008, 11h15
  2. Réponses: 1
    Dernier message: 02/08/2008, 00h05
  3. Tester le nombre de connexions pour un site / IIS
    Par identifiant_bidon dans le forum IIS
    Réponses: 10
    Dernier message: 23/05/2007, 08h50
  4. Test du nombre de connexions pour un site via IIS
    Par identifiant_bidon dans le forum IIS
    Réponses: 1
    Dernier message: 20/04/2007, 10h33

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