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

JPA Java Discussion :

Utiliser la méthode CreateNamedQuery pour obtenir un enregistrement dans une BD


Sujet :

JPA Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Utiliser la méthode CreateNamedQuery pour obtenir un enregistrement dans une BD
    Salut tout le monde.

    Je travaille actuellement sur un projet de gestion de mission et par suite lors de la connexion à l'application je voudrais vérifier dans ma base si le login fourni par l'utilisateur est bien réel. Pour cela je voudrai utiliser CreateNamedQuery pour avoir son login et son mot de passe mais ça ne marche pas. J'ai dans mon contrôleur le code qui permet de faire ça :


    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public Boolean session(String user, String pass) {
     
            if(!user.isEmpty() && !pass.isEmpty()){
                //List<Compteuser> comp = null;
     
                Query query =  em.createNamedQuery("Compteuser.findByLogin");
                query.setParameter("login", user);
                List list = query.getResultList();
                //Compteuser comp = (Compteuser) query.getResultList();
                //System.out.println("" + comp.get(0).getLogin() + "" + comp.get(0).getIdcompte());
                HttpSession hs;
                hs = SessionFacade.getSession();
                hs.setAttribute("username", user);
                hs.setAttribute("motdepasse", pass);
                //if(comp != null){
                return true;
            }
           return false;
     
        }
        public Boolean login() {  
                Compteuser user;
                List<Compteuser> list =  this.compteuserFacade.findAll();
                int size = list.size();
                int i = 0;
                while (size != 0) {
                    user = list.get(i);
                    if (!user.getLogin().isEmpty()) {               
                        if (user.getLogin().equals(this.username)) {
                            return this.session(this.username, this.pass);    //break;
                        }
                    }
                    ++i;--size;
                }
                return false;
        }
    Je teste à chaque fois mais je reçois toujours des erreurs :


    javax.servlet.ServletException: java.lang.NullPointerException
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
    at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
    at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:326)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:812)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
    Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    ... 39 more
    Caused by: java.lang.NullPointerException
    at com.app.controler.SessionBean.session(SessionBean.java:65)
    at com.app.controler.SessionBean.login(SessionBean.java:89)
    at com.app.controler.SessionBean.createSession(SessionBean.java:100)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at javax.el.ELUtil.invokeMethod(ELUtil.java:311)
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:415)
    at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:285)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 47 more

  2. #2
    Membre éprouvé Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Points : 1 014
    Points
    1 014
    Par défaut
    Il faudrait plus d'informations pour qu'on puisse t'aider. Là on ne peut pas comprendre ce que tu cherche à faire, ni comment. Peux tu poster l'intégralté de ton controleur ?

    Si tu as une nullPointerException, c'est que quelque part tu appelle une fonction sur un objet null.

    Comment génère tu ton EntityManager ?
    Est-ce que ta query est bien retournée ou elle est null ?
    Ta requête me parait bizarre, tu en est sûr ? c'est peut-etre elle qui te génère l'erreur si Compteuser est null ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour tout le monde, bonjour Drowan,

    Voici mon controleur :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package com.app.controler;
     
     
    import com.app.entity.Compteuser;
    import com.app.model.CompteuserFacadeLocal;
    import com.app.model.SessionFacade;
    import java.io.IOException;
    import javax.inject.Named;
    import javax.enterprise.context.SessionScoped;
    import java.io.Serializable;
    import java.util.List;
    import javax.ejb.EJB;
    import javax.persistence.EntityManager;
    import javax.persistence.Query;
    import javax.servlet.http.HttpSession;
     
    /**
     *
     * @author Aboudramane DIARRA
     */
    @Named(value = "sessionBean")
    @SessionScoped
    public class SessionBean implements Serializable {
     
        @EJB
        private CompteuserFacadeLocal compteuserFacade;
        private SessionFacade sessionFacade;
        private EntityManager em;
        String username;
        String pass;
        String matricule;
     
        public SessionBean() {
        }
     
        public String getUsername() {
            return username;
        }
     
        public void setUsername(String username) {
            this.username = username;
        }
     
        public String getPass() {
            return pass;
        }
     
        public void setPass(String pass) {
            this.pass = pass;
        }
     
         public Boolean session(String user, String pass) {
            //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
     
            if(!user.isEmpty() && !pass.isEmpty()){
                Query query =  em.createNamedQuery("Compteuser.findByLogin");
                query.setParameter("login", user);
                List list = query.getResultList();
                HttpSession hs;
                hs = SessionFacade.getSession();
                hs.setAttribute("username", user);
                hs.setAttribute("motdepasse", pass);
                //if(comp != null){
                return true;
            }
           return false;
     
        }
        public Boolean login() {
            Compteuser user;
            List<Compteuser> list =  this.compteuserFacade.findAll();
            int size = list.size();
            int i = 0;
            if (!list.isEmpty()) {
                while (size != 0) {
                    user = list.get(i);
                    if (!user.getLogin().isEmpty()) {
                        if (user.getLogin().equals(this.username)) {
                            return this.session(this.username, this.pass);    //break;
                        }
                    }
                    ++i;
                    --size;
                }
            }
            return false ;//!list.isEmpty();
        }
        public String createSession() {
     
     
     
                if (this.login()) {
                    return "index";
                }
                else{
                    return "login";
                }
        }
     
        public String logout() throws IOException {
    //        HttpSession hs = SessionFacade.getSession();
    //        hs.setAttribute("usename", null);
    //        hs.invalidate();
            //SessionFacade.session("", "");
            return "login.xhtml?faces-redirect=true";
        }
     
    }
    Pour générer un EntityManager j'utilise ceci mais ça ne marche
    Au fait ce code retourne un NullPointerException
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @PersistenceContext(name="testPU")
        private final EntityManagerFactory emf = null;
     
     
        public EntityManager getEntityManager() {
            return emf.createEntityManager();
        }
    Voici le problème :
    Dans mon projet j'ai un classe Compteuser dans lequel je veut
    l'enregistrement de la personne qui se connecte a l'application,
    c'est pourquoi j'ai utilisé une requête nommée pour retourner les informations de l'utilisateur,
    En fait je veut seulement tester s'il est dans ma base pour le connecter.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour tout le monde, bonjour Drowan,

    Voici mon controleur :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package com.app.controler;
     
     
    import com.app.entity.Compteuser;
    import com.app.model.CompteuserFacadeLocal;
    import com.app.model.SessionFacade;
    import java.io.IOException;
    import javax.inject.Named;
    import javax.enterprise.context.SessionScoped;
    import java.io.Serializable;
    import java.util.List;
    import javax.ejb.EJB;
    import javax.persistence.EntityManager;
    import javax.persistence.Query;
    import javax.servlet.http.HttpSession;
     
    /**
     *
     * @author Aboudramane DIARRA
     */
    @Named(value = "sessionBean")
    @SessionScoped
    public class SessionBean implements Serializable {
     
        @EJB
        private CompteuserFacadeLocal compteuserFacade;
        private SessionFacade sessionFacade;
        private EntityManager em;
        String username;
        String pass;
        String matricule;
     
        public SessionBean() {
        }
     
        public String getUsername() {
            return username;
        }
     
        public void setUsername(String username) {
            this.username = username;
        }
     
        public String getPass() {
            return pass;
        }
     
        public void setPass(String pass) {
            this.pass = pass;
        }
     
         public Boolean session(String user, String pass) {
            //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
     
            if(!user.isEmpty() && !pass.isEmpty()){
                Query query =  em.createNamedQuery("Compteuser.findByLogin");
                query.setParameter("login", user);
                List list = query.getResultList();
                HttpSession hs;
                hs = SessionFacade.getSession();
                hs.setAttribute("username", user);
                hs.setAttribute("motdepasse", pass);
                //if(comp != null){
                return true;
            }
           return false;
     
        }
        public Boolean login() {
            Compteuser user;
            List<Compteuser> list =  this.compteuserFacade.findAll();
            int size = list.size();
            int i = 0;
            if (!list.isEmpty()) {
                while (size != 0) {
                    user = list.get(i);
                    if (!user.getLogin().isEmpty()) {
                        if (user.getLogin().equals(this.username)) {
                            return this.session(this.username, this.pass);    //break;
                        }
                    }
                    ++i;
                    --size;
                }
            }
            return false ;//!list.isEmpty();
        }
        public String createSession() {
     
     
     
                if (this.login()) {
                    return "index";
                }
                else{
                    return "login";
                }
        }
     
        public String logout() throws IOException {
    //        HttpSession hs = SessionFacade.getSession();
    //        hs.setAttribute("usename", null);
    //        hs.invalidate();
            //SessionFacade.session("", "");
            return "login.xhtml?faces-redirect=true";
        }
     
    }
    Pour générer un EntityManager j'utilise ceci mais ça ne marche
    Au fait ce code retourne un NullPointerException
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @PersistenceContext(name="testPU")
        private final EntityManagerFactory emf = null;
     
     
        public EntityManager getEntityManager() {
            return emf.createEntityManager();
        }
    Voici le problème :
    Dans mon projet j'ai un classe Compteuser dans lequel je veut
    l'enregistrement de la personne qui se connecte a l'application,
    c'est pourquoi j'ai utilisé une requête nommée pour retourner les informations de l'utilisateur,
    En fait je veut seulement tester s'il est dans ma base pour le connecter. merci

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Pas le temps de lire tout ton code, mais juste pour t'indiquer l'erreur
    Caused by: java.lang.NullPointerException
    at com.app.controler.SessionBean.session(SessionBean.java:65)
    at com.app.controler.SessionBean.login(SessionBean.java:89)
    at com.app.controler.SessionBean.createSession(SessionBean.java:100)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hs = SessionFacade.getSession(); // cette méthode retourne null
    hs.setAttribute("username", user); // tu as un NullPointerException a cette ligne
    A+.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour tout le monde,

    J'ai pu resoudre mon probleme.
    D'abord Ce que andry.aime a suggeré, fut resolu aussi,

    En fait j'utilise maintenant cette methode pour creer une session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     public static HttpSession getSession(){
            return (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
     }
    Aussi mon probleme de connxion a la BD etait que je faisait les requetes sql avec un EntityManager
    non initialiser; la nouvelle astuce que j'ai pu faire est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected EntityManager getEntityManager() {
            EntityManagerFactory  emf = Persistence.createEntityManagerFactory("testPU");
            return emf.createEntityManager();
        }
    Ensuite je peut appeler EntityManager pour avoir une connexion au BD et faire ma requete sql dans une methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
              List<Localite> list = getEntityManager().createNamedQuery("Localite.findAllLocalite").getResultList();
    Merci à tout le monde
    cordialement

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

Discussions similaires

  1. [AC-2007] Probleme pour Concaténer plusieurs enregistrements dans une seule colonne
    Par severik dans le forum Requêtes et SQL.
    Réponses: 23
    Dernier message: 08/11/2017, 15h15
  2. Réponses: 2
    Dernier message: 21/05/2011, 13h30
  3. Réponses: 0
    Dernier message: 26/01/2010, 16h01
  4. Réponses: 24
    Dernier message: 17/04/2008, 14h24

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