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 Discussion :

Test d'un thread


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de nadsky
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 118
    Par défaut Test d'un thread
    Bonjour à tous,

    J'ai écrit une classe intitulée CezarSecuriteFonctionnelleManager dans laquelle j'ai déclaré un thread local, ainsi que les getter et setter et la méthode remove.

    Or, je me sers de mon getter dans les méthodes services de ma couche métier et de mon setter pour les méthodes Action de ma couche Présentation.(En effet, l'appli sur laquelle je travaille utilise le framework Struts).


    Ma question concerne le test du thread, où dois-je écrire ma méthode run()?
    Où dois-je écrie le main()?

    En effet, dans la plupart des tutos sur les threads que j'ai lus, soit :
    - le main était écrit direct dans la classe où il y-avait la déclaration du thread
    - soit il n'y-avait que deux principales classes : celle où le thread était déclaré et une classe de test.

    Vu le découpage de l'appli, cela me semble difficile à voir...

    Pouvez-vous m'aider,svp??
    Merci d'avance

  2. #2
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 90

  3. #3
    Membre confirmé Avatar de nadsky
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 118
    Par défaut
    merci pour ce lien.

    Seulement, dans la plupart des tutos que j'ai lus, on teste le thread dans le main à l'intérieur même de la classe où l'on a déclaré le thread ou bien dans une classse de test.

    Or, ici, le découpage de l'appli en couches et selon le framework Struts me pose problème quant au test de mon thread :

    - Où dois-je créer l'objet runnable et le passer en paramètre au thread?
    - Où dois-je faire le thread.start()?
    ( dans les méthodes de service lorsque je fais un get du thread ou dans les classes action où je fais un set pour fixer les valeurs à l'intérieur du thread?)

    Je sais que mon exmplication peut paraitre confuse, mais je suis vraiment perdue.
    Merci d'avance

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 43
    Par défaut
    Oui, c'est un peu confus.

    Déjà la classe CezarSecuriteFonctionnelleManager contient un thread local de la classe Thread ou ThreadLocal ? (je suppose Thread).

    Si elle contient le thread, c'est que c'est elle qui contrôle l'exécution de ce thread ?
    Pour moi, il faudrait créer une classe TestCezarSecuriteFonctionnelleManager qui créer une classe Runnable pour l'occasion et qui teste le comportement des méthodes de la classe CezarSecuriteFonctionnelleManager (setter, getter et remove). C'est aussi cette classe de test qui fera l'appel au Thread.start(), sauf si c'est la responsabilité de CezarSecuriteFonctionnelleManager.

    Cale convient il ?

  5. #5
    Membre confirmé Avatar de nadsky
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 118
    Par défaut
    Bonjour baos! et merci de m'avoir répondu aussi rapidement.

    La classe CezarSecuriteFonctionnelleManager.java appartient à la couche métier et a comme attribut un thread local, voici son code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    package i2.application.cezar.metier.securite;
     
     
    public class CezarSecuriteFonctionnelleManager implements Runnable{
     
    //attributs de la classe
    private static ThreadLocal<CezarInfosUtilisateurFonctionnel> infosUser = new ThreadLocal <CezarInfosUtilisateurFonctionnel>();
     
     
    //constructeur
    public CezarSecuriteFonctionnelleManager(){}
     
    //getter
    public static CezarInfosUtilisateurFonctionnel getInfosUser(){
    	return (CezarInfosUtilisateurFonctionnel)infosUser.get();
    }
     
    //setter
    public static void setInfosUser(CezarInfosUtilisateurFonctionnel inf){
    	infosUser.set(inf);
    }
     
    //méthode remove
    public void remove(){
    	//vider le thread local	
    }
    Je vais tenter de faire comme tu as dit, créer une classe de test du thread, au même niveau (donc dans la couche métier) afin de tester les méthodes du thread.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 43
    Par défaut
    Bonjour nadsky,

    J'avoue être un peu perplexe à la lecture du code. La classe CezarSecuriteFonctionnelleManager implémente Runnable. Donc, elle est à l'origine d'un nouveau thread. Pourquoi contient-elle alors une instance static ThreadLocal<CezarInfosUtilisateurFonctionnel> infosUser et pas directement une instance non static CezarInfosUtilisateurFonctionnel infosUser ?

    Soit tu as une instance de CezarSecuriteFonctionnelleManager par thread et tu n'as pas besoin de ThreadLocal, soit tu as une seule instance de CezarSecuriteFonctionnelleManager (de type singleton) et tu n'as pas besoin du "implements Runnable". Enfin, il me semble .

Discussions similaires

  1. "pure method called" au test d'un wrapper boost::thread simple
    Par kidpaddle2 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 02/07/2010, 08h36
  2. [Thread] Test et interprétation
    Par AsPrO dans le forum C#
    Réponses: 3
    Dernier message: 25/07/2009, 10h04
  3. test unitaire d'une action qui lance un thread
    Par jawed84 dans le forum Struts 1
    Réponses: 1
    Dernier message: 29/02/2008, 17h12
  4. Teste si un thread existe déjà.
    Par ouranos21 dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 15/01/2008, 14h41
  5. Réponses: 4
    Dernier message: 12/11/2005, 14h02

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