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

Servlets/JSP Java Discussion :

Variable accessible par toutes classes


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut Variable accessible par toutes classes
    Bonjour,
    je développe une grosse appli Web en JAVA. J'utilise le design pattern des DAO.
    Mon problème est que dans ma 1ere couche ou je récupère la request, je récupère l'id de l'utilisateur qui a lancé l'opération mais ensuite dans les couches DTO et DAO je ne sais plus qui a lancé ces actions.

    J'aimerai savoir si il y a un moyen de créer une variable "globale" accessible de partout ou mon seul moyen de savoir qui a passé l'action et de passer l'id de l'user à chaque appel de méthode ?

    Apache/Tomcat - JAVA7

    Merci.
    Bonne journée.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il n'y a pas de variable globale pour ça. Suivant les frameworks que tu utilise, certaines possibilités te sont offertes. Spring, par exemple, te permettra d'injecter dans ton DAO un donnée qui a un scope request, et qui donc change à chaque requete. JSF te permet d'accédr au FacesContext, mais du coup ton DAO dépend de ton UI. Pas top, mais enrobable dans une classe à part que tu pourra changer le jour ou tu change de vue.

    Enfin, en dernier recours, il reste les ThreadLocal, mais c'est vraiment pas évident de les utiliser sans générer des fuites de mémoire

  3. #3
    Membre confirmé Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Salut et Merci tchize_.
    Le soucis c'est que je n'utilise aucun framework Tout en brut !

    Donc pour toi, la "meilleure" solution (par meilleure, j'entends facile, moins risqué et rapide) est de passer ma variable a chaque appel de méthode jusqu'au DAO ?

    Tomcat ne peut pas gérer ce genre de choses ?

    Merci encore.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Federico_muy_bien Voir le message
    Donc pour toi, la "meilleure" solution (par meilleure, j'entends facile, moins risqué et rapide) est de passer ma variable a chaque appel de méthode jusqu'au DAO ?
    Oui, j'ai tendance à dire: si cette donnée est nécessaire au DAO, il faut la lui fournir.

    Maintenant, rien ne t'empche non plus d'instancer 1 DAO par requête et de l'initialiser avec tout ce dont il a besoin.

    Tomcat ne peut pas gérer ce genre de choses ?
    Non, ça ne fait pas partie de ses rôles.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    Tu peux implémenter un singleton qui sera chargé de conserver l'id de l'utilisateur qui correspond à chaque thread. Tu appelle une première fois ton singleton pour stocker l'id quand tu es dans ta première couche (servlet ?!).

    Tu peux ensuite appeler ton singleton de n'importe où et il te renverra l'id qu'il faut en utilisant Thread.currentThread().getId()

    Reste un problème, il faut trouver un moyen de vider ton singleton sinon il va grossir sans cesse.

  6. #6
    Membre confirmé Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Citation Envoyé par renoj Voir le message
    Tu peux implémenter un singleton qui sera chargé de conserver l'id de l'utilisateur qui correspond à chaque thread. Tu appelle une première fois ton singleton pour stocker l'id quand tu es dans ta première couche (servlet ?!).

    Tu peux ensuite appeler ton singleton de n'importe où et il te renverra l'id qu'il faut en utilisant Thread.currentThread().getId()

    Reste un problème, il faut trouver un moyen de vider ton singleton sinon il va grossir sans cesse.
    PARFAIT !
    Ça marche impec cette solution !!
    Merci !

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par renoj Voir le message
    Tu peux implémenter un singleton qui sera chargé de conserver l'id de l'utilisateur qui correspond à chaque thread. Tu appelle une première fois ton singleton pour stocker l'id quand tu es dans ta première couche (servlet ?!).

    Tu peux ensuite appeler ton singleton de n'importe où et il te renverra l'id qu'il faut en utilisant Thread.currentThread().getId()

    Reste un problème, il faut trouver un moyen de vider ton singleton sinon il va grossir sans cesse.
    Bref exactement ce que fait ThreadLocal en beaucoup moins performant mais avec la même problématique du netoyage

  8. #8
    Membre confirmé Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Oui c'est vrai. Mais en fait c'est moins pénible à mettre en place que le passage de variable (surtout après avoir commencé a coder). Merci.

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Bref exactement ce que fait ThreadLocal en beaucoup moins performant mais avec la même problématique du netoyage
    Effectivement j'ai réinventé la roue !

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

Discussions similaires

  1. Variable accessible par plusieurs clients
    Par mezoo dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/10/2006, 10h08
  2. Réponses: 6
    Dernier message: 22/08/2006, 15h37
  3. [WinCE][CF 1.2/VB.net]variable visible par toute l'apli
    Par zitoun dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 01/06/2006, 14h28
  4. Variable accessible par différentes classe
    Par jbidou88 dans le forum Langage
    Réponses: 6
    Dernier message: 03/05/2006, 10h27
  5. [C#] Variables accessibles à toutes les méthodes
    Par defacta dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/05/2004, 11h20

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