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

Java EE Discussion :

La différence ou la relation entre une session utilisateur et une connexion datasource ?


Sujet :

Java EE

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut La différence ou la relation entre une session utilisateur et une connexion datasource ?
    Bonjour,

    Je me suis retrouvé un peu perdu suite à une question qu'on m'a posé.

    Une entreprise effectue et stock son paramétrages de sessions utilisateurs au niveau de la base de donnée. Comme ils sont en plein migration ils m'ont posé la question sur ce qui va se passer qd ils vont déployer une application Java/ JEE sur un serveur d'applications.
    L'application est basée sur un ORM hibernante par exemple.
    L'application en général délègue à l'ORM et ce dernier délègue au serveur d'applications la gestion de la datasource et le pool de connexions vers la base de données.
    Un utilisateur se connecte à une page de cette application du coup il aura sa session utilisateur créée par le serveur d'applications, quand il effectue une opération qui nécessite d'afficher des données de la base, une connexion va lui être attribué pr effectuer la sélection, et elle sera restitué au pool de connexions ensuite. le même utilisateur va vouloir modifier les données de cette sélection et enregistrer ses modifications en base, il y a très peu de chance qu'il utilise la même connexion précédente ?

    Peut on attribuer à une session d'utilisateur la même connexion vers la base de données dans ce cas ? si oui comment ?

    le cas de figure est la suivante :

    - l'utilisateur se connecte
    - sélectionne une liste de produits
    - clique sur un de ces produits pr afficher ses détails
    - modifie les caractéristiques du produit et les insère en base.

    Peut on m'expliquer la relation entre la session utilisateur et les connexions dans un pool de connexion vers une bdd ?


    En vous remerciant par avance.

  2. #2
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 178
    Points : 274
    Points
    274
    Par défaut
    Si tu utilises un pool, ta connexion vers la SGBD est 'anonymisée' donc c'est l'utilisateur de la SGBD associé à ton pool qui effectuera les reqêtes, les resultats seront ensuite retournés à ton application et mis en mémoire dans le thread associé à ta session utilisateur final.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Bonjour,
    D'abord merci pour ta réponse.

    Je comprends aussi de ta réponse qu'il n'y aucun moyen de surcharger le fonctionnement de pool de connexions afin de lier les connexions de ce dernier aux sessions d'utilisateurs ?

    d'avance merci

  4. #4
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 178
    Points : 274
    Points
    274
    Par défaut
    C'est possible mais ca n'a pas de sens : si tu crées un pool c'est justement pour reutiliser tes connexions. Les lier à une session ne fait que poser des soucis :
    * HTTP est un protocol deconnecté (d'où le besoin de session) tu vas donc bloquer une connexion à ton SGBD tant que la session est 'active' (souvent environ 1/2 à 1 h après la dernière requête de l'utilisateur).
    * tu vas donc limiter ton nombre d'utilisateurs simultanés au nombre de connexions à ton SGBD
    * pour ce que tu décris ca n'a pas de sens sauf si tu utilises la sécurité de la base de données pour controler l'accès ( ce qui est mal) mais là encore tu peux préciser le login/password à utiliser lorsque tu récupères la connexion de la datasource.

    Tout est possible, c'est juste que tu pars dans une direction peu courante et qui n'a guère d'intérêt (après cela depend de ton use-case) si on se base sur ce que tu écris.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je rajoute que si t'associe la connexion à la session, il sera alors impossible de répondre à deux requêtes HTTP en même temps (une connexion n'est pas multithread safe), tu va donc devoir mettre les requetes http en attente (parce que le browser, lui, il va joyeusement requérir en parallèle) et tu va DOS comme un grand ton sserveur J2EE en épuisant son pool HTTP.

    Ca va aussi poser problème pour calibrer ton pool de connexion. Rappelons à toutes fins utiles que la taille minimum d'un pool de connexions, pour éviter les deadlocks et l'arrêt du serveur c'est (H*(C-1))+1 , où H est le nombre max de thread HTTP, C est le nombre max de connexions dont aura besoin dans le pire des cas une requête. Si tu associe un connexion à une session, tu va grandiosement exploser la taille de ton pool requis en y ajoutant le nombre max de sessions.

    Et d'une manière générale, en plus de poser de gros problèmes techniques (timeout, taille de pool, performances, transactions), ça n'a strictement aucun intérêt.

    Si tu élaborais un peu plus sur le pourquoi tu pense avoir besoin de ça, on pourrait t'expliquer "pourquoi tu va t'en passer et c'est mieux ainsi"

    Donc pour répondre à ta question finale: il y a absolument zéro relation entre la session utilisateur et la connexion DB.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    Description du besoin :

    Une entreprise disposant d'une grosse application Oracle Forms datant d'il y a longtemps, ils avaient mis en place un ensemble de paramétrage au niveau de la base de données pour la gestions des accès. Aujourd'hui ils veulent migrer vers une application JEE déployé sur un serveur weblogic. Ils souhaitent exploiter l'existant de l'ancienne application pour réutiliser la sécurité de la base de données pour contrôler les accès.


    Par curiosité, pourquoi l'utilisation de la sécurité de la base de données pour contrôler les accès est mal ?

  7. #7
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 178
    Points : 274
    Points
    274
    Par défaut
    Ce n'est pas mal c'est juste que tu passes d'une application en client-serveur sur ta dabase à une application multi-tiers donc comme tu changes de paradigme tu dois t'adapter.
    La sécurité est censée être gérée au niveau du conteneur aka le serveur application ou au niveau de l'application elle-même, si tu la fais gérer par la SGBD alors tu dois gérer l'authentification toi-même.
    En fait tu n'as pas besoin d'associer une connexion à ta session http mais juste les credentials d'accès à la SGBD, Datasource a une méthode "getConnection(String username, String password)" pour gérer ton souci.
    Après va falloir écrire plein de code à la main : genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Map<String, String> properties = new HashMap<String, String>();
      properties.put("javax.persistence.jdbc.user", "user1");
      properties.put("javax.persistence.jdbc.password", "user1pwd");
      EntityManager em = emf.createEntityManager(properties);
    bref, bon courage

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    et accessoirement

    utiliser un seul compte oracle VS 200 compte oracle. Ca fait une putain de différence sur le tarif annuel

    Dans tous les cas comme expliquer, l'association d'un connexion à un session http est irrelevant à ton problème. Tu as juste besoin d'un connexion pool sans password. Mais forcément une partie des api vont être vachement plus chiantes à gérer comme ça.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Merci bcp pour vos retours bien détaillés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Relation entre deux requêtes pour rechercher une valeur de champs commune
    Par Debutant10 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 01/11/2011, 15h25
  2. Initier une session telnet dans une session telnet
    Par benbs dans le forum Modules
    Réponses: 3
    Dernier message: 18/11/2006, 14h05
  3. [session] gestion d'une session par fenetre de navigateur
    Par devtele dans le forum Développement Web en Java
    Réponses: 9
    Dernier message: 14/12/2005, 11h20
  4. [Session]Récupération d'une session dans une servlet
    Par frizby dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 18/11/2005, 18h02
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 22h24

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