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

Persistance des données Java Discussion :

Pas de trace de ma requête


Sujet :

Persistance des données Java

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut Pas de trace de ma requête
    Bonjour,

    Lors de l'authentification d'un étudiant, je souhaite rechercher s'il est déjà inscrit à un stage afin de lui proposer une interface différente sur sa page d'accueil.

    Voici un extrait du code de Authenticator.java :
    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
        public boolean authenticate()
        {
     
            try
            {
                log.info("authenticating {0}", credentials.getUsername());
     
                Query query = entityManager.createQuery(
                        "FROM ThUtilisateurUti u " +
                        "WHERE u.utiLogin = :username " +
                            "AND u.utiMotPasse = :password");
                query.setParameter("username", credentials.getUsername());
                //query.setParameter("password", ThUtilisateurUti.generateMD5(credentials.getPassword()));
                query.setParameter("password", credentials.getPassword());
     
                this.user = (ThUtilisateurUti) query.getSingleResult();
     
                int typeUtilisateur = user.getTeTypeUtilisateurTu().getTuId();
     
                identity.addRole(user.getTeTypeUtilisateurTu().getTuLibelle());
     
     
                switch (typeUtilisateur)
                {
                    case 1 : // Administrateur
                        setPageSuivante("/home.xhtml");
                        return true;
     
                    case 2 : // Gestionnaire
     
                    case 3 : // Étudiant
                        log.info("authenticating {0} - Authentifié en tant qu'étudiant");
                        setNom(user.getPrsNom());
                        setPrenom(user.getPrsPrenom());
                        setPageSuivante("/accueilEtudiant.xhtml");
     
                        // Recherche si l'étudiant est déjà inscrit à un stage
                        Query q = entityManager.createQuery(
                                "SELECT thStageStg " +
                                "FROM ThStageStg thStageStg " +
                                    "JOIN thStageStg.teEtablissementEtb etb " +
                                        "JOIN etb.trCommuneCmn c " +
                                            "JOIN c.trDepartementDpt d " +
                                    "JOIN thStageStg.thCandidatCnds cnd " +
                                "WHERE cnd.utiLogin = :login ");
                        //q.setParameter("login", user.getUtiLogin());
                        q.setParameter("login", "etutest");
                        stage = (ThStageStg) q.getSingleResult();
                        log.info("authenticating {0} - après requête sur le stage");
                        return true;
                }
                setPageSuivante("/login.xhtml");
                return false;
     
            }
            catch (NoResultException ex)
            {
                //setPageSuivante("/login.xhtml");
                return false;
            }
        }
    Sans la seconde requête, la connexion se passe bien et l'utilisateur accède à sa page d'accueil. Avec la requête de recherche de stage, j'obtiens ceci dans la console d'Eclipse :
    12:23:00,594 INFO [Authenticator] authenticating {0} - Authentifié en tant qu'étudiant
    12:23:00,620 DEBUG [EntityTransaction] marking JPA resource-local transaction for rollback
    12:23:00,621 WARN [SeamLoginModule] Error invoking login method
    javax.el.ELException: org.hibernate.validator.InvalidStateException: validation failed for: org.domain.stamas.entity.ThEtudiantEtu
    ...
    Caused by: org.hibernate.validator.InvalidStateException: validation failed for: org.domain.stamas.entity.ThEtudiantEtu
    at org.hibernate.validator.event.ValidateEventListener.validate(ValidateEventListener.java:148)
    ...
    12:23:00,623 DEBUG [Identity] Login failed for: etutest
    javax.security.auth.login.LoginException: org.hibernate.validator.InvalidStateException: validation failed for: org.domain.stamas.entity.ThEtudiantEtu
    ...
    12:23:00,628 DEBUG [ResourceLoader] resource bundle missing: login
    ...
    Je ne pense pas que ce soit dû à l'erreur de validation sur une entité puisque j'ai aussi cette erreur sans la seconde requête et que ça marche quand même. D'ailleurs, si quelqu'un peut m'expliquer de quoi il s'agit, je suis preneur.

    On voit que l'utilisateur est bien authentifié en tant qu'étudiant mais il n'y a pas de trace d'exécution de la requête ni du log qui suis la requête dans le code.

    Je ne comprends pas non plus le dernier message à propos du ressource bundle missing.

    La requête qui fonctionne sur le serveur SQL est la suivante :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT ssn.ssn_libelle, ssn.ssn_date_debut, ssn.ssn_date_fin,
        e.etb_nom, c.cmn_nom, d.dpt_numero
    FROM th_stage_stg AS stg
    INNER JOIN te_etablissement_etb AS e ON e.etb_id = stg.stg_id_etablissement
        INNER JOIN tr_commune_cmn AS c ON c.cmn_id = e.etb_id_commune
            INNER JOIN tr_departement_dpt AS d ON d.dpt_id = c.cmn_id_departement
    INNER JOIN te_session_ssn AS ssn ON ssn.ssn_id = stg.stg_id_session
        INNER JOIN tj_cnd_inscrire_ssn_cis AS cis ON cis.cis_id_session = ssn.ssn_id
            INNER JOIN th_candidat_cnd AS cnd ON cnd.cnd_id_utilisateur = cis_id_candidat
                INNER JOIN th_utilisateur_uti AS u ON u.uti_id_personne = cnd.cnd_id_utilisateur
    WHERE u.uti_login = 'etutest'
    J'ai essayé une createNativeQuery mais ensuite le getSingleResult ne se castait pas dans l'entité ThStageStg alors j'ai essayé de traduire cette requête SQL en createQuery mais ça ne fonctionne pas.

    Pour comprendre la traduction, il faut savoir que thStageStg hérite de teSessionSsn et que thCandidatSsn hérite de thUtilisateurUti.

    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je progresse, mais ce n'est pas encore ça...

    Avec le code ci-dessous, c'est à dire avec une nativeQuery, je n'ai plus d'erreur et la page d'accueil de l'étudiant s'affiche.
    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
                    case 3 : // Étudiant
                        log.info("authenticating {0} - Authentifié en tant qu'étudiant");
                        setNom(user.getPrsNom());
                        setPrenom(user.getPrsPrenom());
                        setPageSuivante("/accueilEtudiant.xhtml");
     
                        // Recherche si l'étudiant est déjà inscrit à un stage
                        /*Query q = entityManager.createQuery(
                                "SELECT thStageStg " +
                                "FROM ThStageStg thStageStg " +
                                    "JOIN thStageStg.teEtablissementEtb etb " +
                                        "JOIN etb.trCommuneCmn c " +
                                            "JOIN c.trDepartementDpt d " +
                                    "JOIN thStageStg.thCandidatCnds cnd " +
                                "WHERE cnd.utiLogin = :login ");*/
                        Query q = entityManager.createNativeQuery(
                            "SELECT ssn.ssn_libelle, ssn.ssn_date_debut, ssn.ssn_date_fin, " +
                                    "e.etb_nom, c.cmn_nom, d.dpt_numero " +
                            "FROM th_stage_stg AS stg " +
                            "INNER JOIN te_etablissement_etb AS e ON e.etb_id = stg.stg_id_etablissement " +
                                "INNER JOIN tr_commune_cmn AS c ON c.cmn_id = e.etb_id_commune " +
                                    "INNER JOIN tr_departement_dpt AS d ON d.dpt_id = c.cmn_id_departement " +
                            "INNER JOIN te_session_ssn AS ssn ON ssn.ssn_id = stg.stg_id_session " +
                                "INNER JOIN tj_cnd_inscrire_ssn_cis AS cis ON cis.cis_id_session = ssn.ssn_id " +
                                    "INNER JOIN th_candidat_cnd AS cnd ON cnd.cnd_id_utilisateur = cis_id_candidat " +
                                        "INNER JOIN th_utilisateur_uti AS u ON u.uti_id_personne = cnd.cnd_id_utilisateur " +
                            "WHERE u.uti_login = :login "
                        );
                        //q.setParameter("login", user.getUtiLogin());
                        q.setParameter("login", "etutest");
                        //stage = (ThStageStg) q.getSingleResult();
                        setStage((Object) q.getSingleResult());
                        log.info("authenticating {0} - après requête sur le stage");
                        return true;
    Le cast en Objet est le seul que j'aie réussi à faire fonctionner.
    J'exporte l'objet stage de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        @Out(required=false, scope=ScopeType.CONVERSATION)
        private Object stage;
    Je le récupère dans AccueilEtudiant.java de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @In(required=false) Object stage;
    Et dans la page AccueilEtudiant.xhtml, j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:outputText value="Vous êtes inscrit au stage X" 
                        rendered="#{not empty accueilEtudiant.stage}" />
    Mais le texte ne s'affiche pas alors que mon etutest est bel et bien inscrit à un stage.

    J'ai essayé avec empty et le texte s'affiche, ce qui tend à prouver que l'objet récupéré est vide.

    Une idée ?

    EDIT : J'aimerais aussi savoir comment je récupère les infos qui sont dans l'objet, c'est à dire les données du stage, pour les afficher à la place de X. Sinon tout ce machin ne sert à rien !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [AC-2007] pas de valeur dans ma requête
    Par vince3457 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 27/05/2009, 17h49
  2. Réponses: 11
    Dernier message: 10/12/2008, 20h49
  3. Alors là j'comprends pas le résultat de cette requête.
    Par mouche dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/02/2008, 10h14
  4. [C# Dataset] Je n'arrive pas a faire une simple requête.?
    Par zoltix dans le forum Accès aux données
    Réponses: 4
    Dernier message: 16/02/2007, 16h22
  5. pas de trace de php dans httpd.conf ?
    Par ludophil dans le forum Apache
    Réponses: 2
    Dernier message: 27/08/2005, 10h06

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