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

Hibernate Java Discussion :

Une sélection engendre un UPDATE ?


Sujet :

Hibernate 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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut Une sélection engendre un UPDATE ?
    Je croyais avoir résolu le problème de l'enregistrement du mot de passe évoqué dans cette discussion par l'externalisation d'une méthode mais je suis confronté à un nouveau problème que je trouve pour le moins original. J'espère que quelqu'un pourra m'expliquer clairement ce qui se passe.

    Donc j'ai créé une classe MD5 dans un nouveau package contenant une méthode de cryptage MD5 compatible avec MySQL.
    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
    package org.domain.stamas.utils;
     
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
     
    import org.apache.commons.codec.binary.Hex;
     
    /**
     * Crypte en MD5 une chaîne
     * @author plemenager
     *
     */
    public class MD5 
    {
        /** generateMD5
         * Chiffre en MD5 sur 32 bits conforme à la fonction MD5 de MySQL.
         * @param password : le mot de passe à coder en MD5
         * @return : le mot de passe codé.
         */
        public static String generateMD5passwd(String password) 
        {
            try 
            {
                MessageDigest md = MessageDigest.getInstance("MD5");
                byte[] bytes = md.digest(password.getBytes());
                return new String(Hex.encodeHex(bytes));
     
                /*md.update(password.getBytes());
                StringBuilder result = new StringBuilder();
                for (byte b : md.digest())
                    result.append(String.format("%02x", b));
                return result.toString();*/
            } 
            catch (NoSuchAlgorithmException e) 
            {
                e.printStackTrace();
                return null;
            }
        }
     
    }
    => Il n'y a ici aucune allusion à une entité de mon projet.

    J'utilise cette fonction dans Authenticator.java pour authentifier l'utilisateur :
    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
        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());
                String passwd = MD5.generateMD5passwd(credentials.getPassword());
                log.info("authenticating {0} - avant paramètre password saisi", credentials.getPassword());
                log.info("authenticating {0} - avant paramètre password MD5", passwd);
                query.setParameter("password", passwd);
                log.info("authenticating {0} - après paramètre password");
     
                //query.setParameter("password", credentials.getPassword());
     
                this.user = (ThUtilisateurUti) query.getSingleResult();
    => Je mets dans la variable passwd le MD5 du mot de passe saisi par l'utilisateur.
    => J'affecte cette variable passwd en paramètre à ma requête et j'interroge la BDD.

    Voici le résultat :
    15:54:43,758 INFO [Authenticator] authenticating etutest
    15:54:43,759 INFO [Authenticator] authenticating T101210T - avant paramètre password saisi
    15:54:43,759 INFO [Authenticator] authenticating add6a73c4f31d9d91fa77f56afbff07d - avant paramètre password MD5
    15:54:43,759 INFO [Authenticator] authenticating {0} - après paramètre password
    Hibernate:
    select
    thutilisat0_.uti_id_personne as prs1_4_,
    thutilisat0_1_.prs_adrel as prs2_4_,
    thutilisat0_1_.prs_nom as prs3_4_,
    thutilisat0_1_.prs_prenom as prs4_4_,
    thutilisat0_1_.prs_telephone as prs5_4_,
    thutilisat0_.uti_id_type_utilisateur as uti4_5_,
    thutilisat0_.uti_login as uti1_5_,
    thutilisat0_.uti_mot_passe as uti2_5_,
    thutilisat0_3_.etu_adresse as etu1_7_,
    thutilisat0_3_.etu_code_postal as etu2_7_,
    thutilisat0_3_.etu_date_naissance as etu3_7_,
    thutilisat0_3_.etu_id_concours as etu5_7_,
    thutilisat0_3_.etu_id_etablissement_origine as etu6_7_,
    thutilisat0_3_.etu_id_commune_residence as etu7_7_,
    case
    when thutilisat0_3_.etu_id_candidat is not null then 3
    when thutilisat0_2_.cnd_id_utilisateur is not null then 2
    when thutilisat0_.uti_id_personne is not null then 1
    end as clazz_
    from
    stamas.th_utilisateur_uti thutilisat0_
    inner join
    stamas.te_personne_prs thutilisat0_1_
    on thutilisat0_.uti_id_personne=thutilisat0_1_.prs_id
    left outer join
    stamas.th_candidat_cnd thutilisat0_2_
    on thutilisat0_.uti_id_personne=thutilisat0_2_.cnd_id_utilisateur
    left outer join
    stamas.th_etudiant_etu thutilisat0_3_
    on thutilisat0_.uti_id_personne=thutilisat0_3_.etu_id_candidat
    where
    thutilisat0_.uti_login=?
    and thutilisat0_.uti_mot_passe=? limit ?
    Hibernate:
    select
    tetypeutil0_.tu_id as tu1_15_0_,
    tetypeutil0_.tu_libelle as tu2_15_0_
    from
    stamas.te_type_utilisateur_tu tetypeutil0_
    where
    tetypeutil0_.tu_id=?
    15:54:43,767 INFO [Authenticator] authenticating {0} - Authentifié en tant qu'étudiant
    15:54:43,768 DEBUG [Identity] Login successful for: etutest
    15:54:43,769 DEBUG [ResourceLoader] resource bundle missing: login
    15:54:43,786 DEBUG [Component] trying to inject with hierarchical context search: identity
    15:54:43,795 DEBUG [Component] trying to inject with hierarchical context search: credentials
    15:54:43,795 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    15:54:43,795 DEBUG [Component] trying to inject from specified context: MotPasse, scope: EVENT
    15:54:43,796 DEBUG [Navigator] redirecting to: /accueilEtudiant.xhtml
    15:54:43,796 DEBUG [FacesManager] redirecting to: /stamas/accueilEtudiant.seam?cid=6
    15:54:43,796 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    15:54:43,796 DEBUG [EntityTransaction] committing JPA resource-local transaction
    Hibernate:
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    Le mot de passe saisi est 'T101210T' et son MD5 est bien add6a73c4f31d9d91fa77f56afbff07d qui figure bien dans la BDD. D'ailleurs, le login s'effectue.
    Sauf que quand on passe à la page suivante, il s'opère un UPDATE que je n'ai demandé nulle part et dans la BDD le mot de passe est changé en MD5('
    add6a73c4f31d9d91fa77f56afbff07d') !

    La seule cause que j'imagine serait que dans Authenticator.java, j'exporte user :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        @Out(scope = ScopeType.SESSION)
        private ThUtilisateurUti user = new ThUtilisateurUti();
    Et que dans AccueilEtudiant.java je l'importe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        @In ThUtilisateurUti user;
    Sauf que, à mon humble avis de débutant dans le monde étrange de Seam, jamais je ne demande de changer la valeur du mot de passe.

    Une explication et une solution à me donner ?
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    J'ai rendu Hibernate plus verbeux dans le log et voici ce qui se passe, avec un autre mot de passe mais bien saisi puisque l'authentification se fait :
    10:53:31,596 DEBUG [Navigator] redirecting to: /accueilEtudiant.xhtml
    10:53:31,597 DEBUG [FacesManager] redirecting to: /stamas/accueilEtudiant.seam?cid=8
    10:53:31,598 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    10:53:31,598 DEBUG [EntityTransaction] committing JPA resource-local transaction
    10:53:31,598 DEBUG [JDBCTransaction] commit
    10:53:31,599 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    10:53:31,602 DEBUG [AbstractFlushingEventListener] dirty checking collections
    10:53:31,618 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2], was: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2] (uninitialized)
    10:53:31,620 DEBUG [Collections] Collection found: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2], was: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2] (uninitialized)
    10:53:31,621 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3] (uninitialized)
    10:53:31,621 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3] (uninitialized)
    10:53:31,621 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 1 updates, 0 deletions to 2 objects
    10:53:31,621 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 4 collections
    10:53:31,625 DEBUG [Printer] listing entities:
    10:53:31,626 DEBUG [Printer] org.domain.stamas.entity.ThEtudiantEtu{etuDateNaissance=18 décembre 1992, teTypeUtilisateurTu=org.domain.stamas.entity.TeTypeUtilisateurTu#3, utiLogin=etutest, teSessionSsns=<uninitialized>, teEtablissementEtb=org.domain.stamas.entity.TeEtablissementEtb#1, etuCodePostal=31100, etuAdresse=229 route de Seysses, prsAdrel=test@enfa.fr, prsTelephone=0561753232, prsNom=Test, prsPrenom=Test, prsId=2, thStageStgs=<uninitialized>, teConcoursCcr=org.domain.stamas.entity.TeConcoursCcr#1, trCommuneCmn=org.domain.stamas.entity.TrCommuneCmn#1, utiMotPasse=6613826fa0e3fcb2b2cb5c7ce7801948}
    10:53:31,626 DEBUG [Printer] org.domain.stamas.entity.TeTypeUtilisateurTu{tuLibelle=Étudiant, tuId=3, thUtilisateurUtis=<uninitialized>, teFonctionFcts=<uninitialized>}
    10:53:31,656 DEBUG [AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    10:53:31,656 DEBUG [SQL]
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    Hibernate:
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    10:53:31,659 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    10:53:31,660 DEBUG [JDBCTransaction] re-enabling autocommit
    10:53:31,660 DEBUG [JDBCTransaction] committed JDBC Connection
    10:53:31,661 DEBUG [ConnectionManager] aggressively releasing JDBC connection
    10:53:31,661 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    10:53:31,661 DEBUG [Manager] Storing conversation state: 8
    10:53:31,661 DEBUG [FacesLifecycle] After render response, destroying contexts
    Apparemment il y a même deux UPDATE successifs ! Déjà que je ne comprends pas la présence du premier !

    N'y a t-il donc personne qui puisse m'expliquer ce qui se passe ?
    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 !

  3. #3
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Je comprends de moins en moins !

    1) Dans un projettest, j'ai cet 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
    @Name("authenticator")
    public class Authenticator
    {
        @Logger private Log log;
     
        @In Identity identity;
        @In Credentials credentials;
     
        @In EntityManager entityManager;
     
     
        public boolean authenticate()
        {
            try
            {
                log.info("authenticating {0}", credentials.getUsername());
                //write your authentication logic here,
                //return true if the authentication was
                //successful, false otherwise
                Query query = entityManager.createQuery("from Users where username = :username "
                        + "and password = :password");
                query.setParameter("password", credentials.getPassword());
                query.setParameter("username", credentials.getUsername());
     
                Users user = (Users) query.getSingleResult();
     
                if (user.getRoles() != null) 
                {
                    for (Role mr : user.getRoles()) 
                    {
                        identity.addRole(mr.getRolename());
                    }
                }
                return true;
            }
            catch (NoResultException ex)
            {
                return false;
            }
                /*if ("admin".equals(credentials.getUsername()))
                {
                    identity.addRole("admin");
                    return true;
                }*/
     
     
        }
     
    }
    => Y figure une requête sur une entité Users.
    => J'instancie un Users auquel j'affecte le résultat de la requête.

    Dans le log, pas d'UPDATE.
    Hibernate:
    select
    roles0_.user_id as user1_1_,
    roles0_.role_id as role2_1_,
    role1_.role_id as role1_0_0_,
    role1_.rolename as rolename0_0_
    from
    test.users_roles roles0_
    left outer join
    test.role role1_
    on roles0_.role_id=role1_.role_id
    where
    roles0_.user_id=?
    15:49:19,706 DEBUG [AbstractBatcher] about to open ResultSet (open ResultSets: 0, globally: 0)
    15:49:19,706 DEBUG [Loader] result set contains (possibly empty) collection: [org.domain.projettest.entity.Users.roles#1]
    15:49:19,709 DEBUG [Loader] result row: EntityKey[org.domain.projettest.entity.Role#1]
    15:49:19,709 DEBUG [Loader] found row of collection: [org.domain.projettest.entity.Users.roles#1]
    15:49:19,712 DEBUG [AbstractBatcher] about to close ResultSet (open ResultSets: 1, globally: 1)
    15:49:19,712 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    15:49:19,712 DEBUG [TwoPhaseLoad] resolving associations for [org.domain.projettest.entity.Role#1]
    15:49:19,713 DEBUG [TwoPhaseLoad] done materializing entity [org.domain.projettest.entity.Role#1]
    15:49:19,713 DEBUG [CollectionLoadContext] 1 collections were found in result set for role: org.domain.projettest.entity.Users.roles
    15:49:19,713 DEBUG [CollectionLoadContext] collection fully initialized: [org.domain.projettest.entity.Users.roles#1]
    15:49:19,713 DEBUG [CollectionLoadContext] 1 collections initialized for role: org.domain.projettest.entity.Users.roles
    15:49:19,713 DEBUG [StatefulPersistenceContext] initializing non-lazy collections
    15:49:19,714 DEBUG [Loader] done loading collection
    15:49:19,730 DEBUG [Identity] Login successful for: plemenager
    15:49:19,736 DEBUG [ResourceLoader] resource bundle missing: login
    15:49:19,738 DEBUG [ResourceLoader] resource bundle missing: messages
    15:49:19,739 DEBUG [ResourceLoader] resource bundle missing: ValidatorMessages
    15:49:19,740 DEBUG [ResourceLoader] loaded resource bundle: org/hibernate/validator/resources/DefaultValidatorMessages
    15:49:19,752 DEBUG [ResourceLoader] loaded resource bundle: javax.faces.Messages
    15:49:19,753 DEBUG [Navigator] redirecting to: /home.xhtml
    15:49:19,755 DEBUG [FacesManager] redirecting to: /projettest/home.seam?cid=3
    15:49:19,755 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    15:49:19,755 DEBUG [EntityTransaction] committing JPA resource-local transaction
    15:49:19,756 DEBUG [JDBCTransaction] commit
    15:49:19,756 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    15:49:19,758 DEBUG [AbstractFlushingEventListener] dirty checking collections
    15:49:19,764 DEBUG [Collections] Collection found: [org.domain.projettest.entity.Users.roles#1], was: [org.domain.projettest.entity.Users.roles#1] (initialized)
    15:49:19,764 DEBUG [Collections] Collection found: [org.domain.projettest.entity.Role.userses#1], was: [org.domain.projettest.entity.Role.userses#1] (uninitialized)
    15:49:19,764 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 0 updates, 0 deletions to 2 objects
    15:49:19,764 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 2 collections
    15:49:19,766 DEBUG [Printer] listing entities:
    15:49:19,766 DEBUG [Printer] org.domain.projettest.entity.Role{rolename=Administrateur, userses=<uninitialized>, roleId=1}
    15:49:19,766 DEBUG [Printer] org.domain.projettest.entity.Users{username=plemenager, usrId=1, roles=[org.domain.projettest.entity.Role#1], name=Philippe Leménager, password=PhiLemen}
    15:49:19,767 DEBUG [JDBCTransaction] re-enabling autocommit
    15:49:19,767 DEBUG [JDBCTransaction] committed JDBC Connection
    15:49:19,767 DEBUG [ConnectionManager] aggressively releasing JDBC connection
    15:49:19,767 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    15:49:19,767 DEBUG [Manager] Storing conversation state: 3
    15:49:19,779 DEBUG [FacesLifecycle] After render response, destroying contexts
    2) Dans mon vrai projet, il y a ceci dans 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
    @Name("authenticator")
    public class Authenticator
    {
        @Logger private Log log;
     
        @In Identity identity;
        @In Credentials credentials;
     
        @In EntityManager entityManager;
     
        private String pageSuivante = "/home.xhtml";
     
        @Out(value="Nom", required=false, scope = ScopeType.SESSION)
        private String nom;
     
        @Out(value="Prenom", required=false, scope = ScopeType.SESSION)
        private String prenom;
     
        @In(value="MotPasse", required=false, scope = ScopeType.CONVERSATION) 
        private String motPasse;
     
        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());
                setMotPasse(MD5.generateMD5passwd(credentials.getPassword()));
                log.info("authenticating - password saisi : {0}", credentials.getPassword());
                log.info("authenticating - password MD5 {0}", this.getMotPasse());
                query.setParameter("password", this.getMotPasse());
                log.info("authenticating - après paramètre password");
                ThUtilisateurUti user = (ThUtilisateurUti) query.getSingleResult();
    => Y figure une requête sur une entité ThUtilisateurUti.
    => J'instancie un ThUtilisateurUti auquel j'affecte le résultat de la requête.
    Bref, ça me semble très similaire au projettest !
    Pourtant, dans le log, il y a UPDATE !
    Hibernate:
    select
    tetypeutil0_.tu_id as tu1_15_0_,
    tetypeutil0_.tu_libelle as tu2_15_0_
    from
    stamas.te_type_utilisateur_tu tetypeutil0_
    where
    tetypeutil0_.tu_id=?
    15:58:42,285 DEBUG [AbstractBatcher] about to open ResultSet (open ResultSets: 0, globally: 0)
    15:58:42,285 DEBUG [Loader] result row: EntityKey[org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    15:58:42,285 DEBUG [AbstractBatcher] about to close ResultSet (open ResultSets: 1, globally: 1)
    15:58:42,285 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    15:58:42,286 DEBUG [TwoPhaseLoad] resolving associations for [org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    15:58:42,286 DEBUG [TwoPhaseLoad] done materializing entity [org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    15:58:42,286 DEBUG [StatefulPersistenceContext] initializing non-lazy collections
    15:58:42,286 DEBUG [Loader] done entity load
    15:58:42,286 INFO [Authenticator] authenticating {0} - Authentifié en tant qu'étudiant
    15:58:42,288 DEBUG [Identity] Login successful for: etutest

    15:58:42,294 DEBUG [ResourceLoader] resource bundle missing: login
    15:58:42,295 DEBUG [Component] trying to inject with hierarchical context search: identity
    15:58:42,296 DEBUG [Component] trying to inject with hierarchical context search: credentials
    15:58:42,297 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    15:58:42,298 DEBUG [Component] trying to inject from specified context: MotPasse, scope: EVENT
    15:58:42,298 DEBUG [Navigator] redirecting to: /accueilEtudiant.xhtml
    15:58:42,298 DEBUG [FacesManager] redirecting to: /stamas/accueilEtudiant.seam?cid=5
    15:58:42,299 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    15:58:42,299 DEBUG [EntityTransaction] committing JPA resource-local transaction
    15:58:42,306 DEBUG [JDBCTransaction] commit
    15:58:42,315 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    15:58:42,315 DEBUG [AbstractFlushingEventListener] dirty checking collections
    15:58:42,316 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2], was: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2] (uninitialized)
    15:58:42,316 DEBUG [Collections] Collection found: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2], was: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2] (uninitialized)
    15:58:42,316 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3] (uninitialized)
    15:58:42,316 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3] (uninitialized)
    15:58:42,316 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 1 updates, 0 deletions to 2 objects
    15:58:42,316 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 4 collections
    15:58:42,316 DEBUG [Printer] listing entities:
    15:58:42,317 DEBUG [Printer] org.domain.stamas.entity.ThEtudiantEtu{etuDateNaissance=18 décembre 1992, teTypeUtilisateurTu=org.domain.stamas.entity.TeTypeUtilisateurTu#3, utiLogin=etutest, teSessionSsns=<uninitialized>, teEtablissementEtb=org.domain.stamas.entity.TeEtablissementEtb#1, etuCodePostal=31100, etuAdresse=229 route de Seysses, prsAdrel=test@enfa.fr, prsTelephone=0561753232, prsNom=Test, prsPrenom=Test, prsId=2, thStageStgs=<uninitialized>, teConcoursCcr=org.domain.stamas.entity.TeConcoursCcr#1, trCommuneCmn=org.domain.stamas.entity.TrCommuneCmn#1, utiMotPasse=6613826fa0e3fcb2b2cb5c7ce7801948}
    15:58:42,317 DEBUG [Printer] org.domain.stamas.entity.TeTypeUtilisateurTu{tuLibelle=Étudiant, tuId=3, thUtilisateurUtis=<uninitialized>, teFonctionFcts=<uninitialized>}
    15:58:42,317 DEBUG [AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    15:58:42,322 DEBUG [SQL]
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    Hibernate:
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    15:58:42,323 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    15:58:42,328 DEBUG [JDBCTransaction] re-enabling autocommit
    15:58:42,328 DEBUG [JDBCTransaction] committed JDBC Connection
    15:58:42,328 DEBUG [ConnectionManager] aggressively releasing JDBC connection
    15:58:42,328 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    15:58:42,328 DEBUG [Manager] Storing conversation state: 5
    15:58:42,328 DEBUG [FacesLifecycle] After render response, destroying contexts
    15:58:42,328 DEBUG [Contexts] destroying business process context
    15:58:42,329 DEBUG [Contexts] flushing server-side conversation context
    15:58:42,329 DEBUG [Contexts] flushing session context
    15:58:42,329 DEBUG [Contexts] destroying event context
    15:58:42,329 DEBUG [Contexts] destroying: com.sun.faces.util.RequestStateManager
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.core.manager
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.faces.validation
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.transaction.synchronizations
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.web.requestContextPath
    15:58:42,329 DEBUG [Contexts] destroying: com.exade.vcp.Filter.ResponseWrapper
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.core.conversationPropagation
    15:58:42,329 DEBUG [Contexts] destroying: authenticator
    15:58:42,330 DEBUG [Contexts] destroying: com.exade.vcp.Filter.done
    15:58:42,330 DEBUG [Contexts] destroying: org.jboss.seam.transaction.transaction
    15:58:42,330 DEBUG [Contexts] destroying: org.jboss.seam.web.servletContexts
    15:58:42,330 DEBUG [Contexts] destroying: org.jboss.seam.core.events
    15:58:42,330 DEBUG [Contexts] destroying: org.jboss.seam.web.requestServletPath
    15:58:42,330 DEBUG [Contexts] destroying: ajaxContext
    15:58:42,330 DEBUG [FacesLifecycle] <<< End JSF request for /stamas/login.seam
    15:58:42,335 DEBUG [FacesLifecycle] >>> Begin JSF request for /stamas/accueilEtudiant.seam
    15:58:42,336 DEBUG [Manager] Restoring conversation with id: 5
    15:58:42,336 DEBUG [SeamPhaseListener] beginning transaction prior to phase: RENDER_RESPONSE 6
    15:58:42,336 DEBUG [EntityTransaction] beginning JPA resource-local transaction
    15:58:42,336 DEBUG [JDBCTransaction] begin
    15:58:42,337 DEBUG [ConnectionManager] opening JDBC connection
    15:58:42,337 DEBUG [JDBCTransaction] current autocommit status: true
    15:58:42,337 DEBUG [JDBCTransaction] disabling autocommit
    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 !

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     setMotPasse(MD5.generateMD5passwd(credentials.getPassword()));
    Que fait cette méthode ?

  5. #5
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Elle met à jour la propriété password de la classe Authenticator.
    D'ailleurs depuis j'ai rechangé, sans effet, en faisant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                String passwd = MD5.generateMD5passwd(credentials.getPassword());
                log.info("authenticating - password saisi : {0}", credentials.getPassword());
                log.info("authenticating - password MD5 {0}", passwd);
                query.setParameter("password", passwd);
                log.info("authenticating - après paramètre password");
    motPasse est en effet une propriété éventuellement importée quand l'étudiant revient sur la page d'authentification après s'être identifié et avoir été reconnu comme ayant le droit d'accéder à l'application.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        @In(value="MotPasse", required=false, scope = ScopeType.CONVERSATION) 
        private String motPasse;
    C'est donc différent du mot de passe saisi par l'utilisateur sur l'écran d'authentification.
    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 !

  6. #6
    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
    tu pourrais faire un "flush" de hibernante dans une finally de ta méthode, histoire de voir si c'est elle la responsable. En effet, lors du flush, si update a faire il y a, hibernate le fera à ce moment là. Tu sera au moins fixé de savoir si c'est ta méthode qui est en cause ou quelque chose que l'appelant ferait avec ton objet utilisateur. Edit: et on pourrais avoir la méthode authenticate au complet? Et eventuellement tu pourrais tracer les appels à setPassword sur ton objet utilisateur :p

  7. #7
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tu pourrais faire un "flush" de hibernante dans une finally de ta méthode, histoire de voir si c'est elle la responsable.
    Euh... plus concrètement... faire quoi ?
    Rappel, suis nouveau sur la planète Seam !

    Edit: et on pourrais avoir la méthode authenticate au complet?
    Voici son état actuel, purgée de toutes les lignes que j'ai commentées :
    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
        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());
                String passwd = MD5.generateMD5passwd(credentials.getPassword());
                log.info("authenticating - password saisi : {0}", credentials.getPassword());
                log.info("authenticating - password MD5 {0}", passwd);
                query.setParameter("password", passwd);
                log.info("authenticating - après paramètre password");
     
                ThUtilisateurUti 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
                        setPageSuivante("/accueuilGestionnaire.xhtml");
                        return true;
     
                    case 3 : // Étudiant
                        log.info("authenticating {0} - Authentifié en tant qu'étudiant");
                        setNom(user.getPrsNom());
                        setPrenom(user.getPrsPrenom());
                        setPageSuivante("/accueilEtudiant.xhtml");
     
                        return true;
                }
                setPageSuivante("/login.xhtml");
                return false;
     
            }
            catch (NoResultException ex)
            {
                 return false;
            }
        }
    Et eventuellement tu pourrais tracer les appels à setPassword sur ton objet utilisateur :p
    Euh... plus concrètement... faire quoi ?
    Rappel, suis nouveau sur la planète Seam !
    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 !

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try{
     // tous le contenu de ta méthode actuel
    } finally {
       log.debug("flushing");
       entityManager.flush();
       log.debug("flush done");
    }

  9. #9
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Je ne sais pas si j'ai bien fait mais j'ai mis le finally après le catch et je ne trouve pas trace de "flushing" ni de "flush done" dans le log.
    Est-ce que ça correspond à ce que j'ai mis en gras ci-dessous ?
    J'ai toujours le UPDATE !
    18:00:21,059 INFO [Authenticator] authenticating - password saisi : etutest
    18:00:21,059 INFO [Authenticator] authenticating - password MD5 c02ef82c54150b3260680d17651db8b9
    18:00:21,059 INFO [Authenticator] authenticating - après paramètre password
    18:00:21,065 DEBUG [AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    18:00:21,087 DEBUG [SQL]
    select
    thutilisat0_.uti_id_personne as prs1_4_,
    thutilisat0_1_.prs_adrel as prs2_4_,
    thutilisat0_1_.prs_nom as prs3_4_,
    thutilisat0_1_.prs_prenom as prs4_4_,
    thutilisat0_1_.prs_telephone as prs5_4_,
    thutilisat0_.uti_id_type_utilisateur as uti4_5_,
    thutilisat0_.uti_login as uti1_5_,
    thutilisat0_.uti_mot_passe as uti2_5_,
    thutilisat0_3_.etu_adresse as etu1_7_,
    thutilisat0_3_.etu_code_postal as etu2_7_,
    thutilisat0_3_.etu_date_naissance as etu3_7_,
    thutilisat0_3_.etu_id_concours as etu5_7_,
    thutilisat0_3_.etu_id_etablissement_origine as etu6_7_,
    thutilisat0_3_.etu_id_commune_residence as etu7_7_,
    case
    when thutilisat0_3_.etu_id_candidat is not null then 3
    when thutilisat0_2_.cnd_id_utilisateur is not null then 2
    when thutilisat0_.uti_id_personne is not null then 1
    end as clazz_
    from
    stamas.th_utilisateur_uti thutilisat0_
    inner join
    stamas.te_personne_prs thutilisat0_1_
    on thutilisat0_.uti_id_personne=thutilisat0_1_.prs_id
    left outer join
    stamas.th_candidat_cnd thutilisat0_2_
    on thutilisat0_.uti_id_personne=thutilisat0_2_.cnd_id_utilisateur
    left outer join
    stamas.th_etudiant_etu thutilisat0_3_
    on thutilisat0_.uti_id_personne=thutilisat0_3_.etu_id_candidat
    where
    thutilisat0_.uti_login=?
    and thutilisat0_.uti_mot_passe=? limit ?
    Hibernate:
    select
    thutilisat0_.uti_id_personne as prs1_4_,
    thutilisat0_1_.prs_adrel as prs2_4_,
    thutilisat0_1_.prs_nom as prs3_4_,
    thutilisat0_1_.prs_prenom as prs4_4_,
    thutilisat0_1_.prs_telephone as prs5_4_,
    thutilisat0_.uti_id_type_utilisateur as uti4_5_,
    thutilisat0_.uti_login as uti1_5_,
    thutilisat0_.uti_mot_passe as uti2_5_,
    thutilisat0_3_.etu_adresse as etu1_7_,
    thutilisat0_3_.etu_code_postal as etu2_7_,
    thutilisat0_3_.etu_date_naissance as etu3_7_,
    thutilisat0_3_.etu_id_concours as etu5_7_,
    thutilisat0_3_.etu_id_etablissement_origine as etu6_7_,
    thutilisat0_3_.etu_id_commune_residence as etu7_7_,
    case
    when thutilisat0_3_.etu_id_candidat is not null then 3
    when thutilisat0_2_.cnd_id_utilisateur is not null then 2
    when thutilisat0_.uti_id_personne is not null then 1
    end as clazz_
    from
    stamas.th_utilisateur_uti thutilisat0_
    inner join
    stamas.te_personne_prs thutilisat0_1_
    on thutilisat0_.uti_id_personne=thutilisat0_1_.prs_id
    left outer join
    stamas.th_candidat_cnd thutilisat0_2_
    on thutilisat0_.uti_id_personne=thutilisat0_2_.cnd_id_utilisateur
    left outer join
    stamas.th_etudiant_etu thutilisat0_3_
    on thutilisat0_.uti_id_personne=thutilisat0_3_.etu_id_candidat
    where
    thutilisat0_.uti_login=?
    and thutilisat0_.uti_mot_passe=? limit ?
    18:00:21,106 DEBUG [AbstractBatcher] about to open ResultSet (open ResultSets: 0, globally: 0)
    18:00:21,110 DEBUG [Loader] result row: EntityKey[org.domain.stamas.entity.ThUtilisateurUti#2]
    18:00:21,120 DEBUG [AbstractBatcher] about to close ResultSet (open ResultSets: 1, globally: 1)
    18:00:21,120 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    18:00:21,122 DEBUG [TwoPhaseLoad] resolving associations for [org.domain.stamas.entity.ThEtudiantEtu#2]
    18:00:21,139 DEBUG [TwoPhaseLoad] done materializing entity [org.domain.stamas.entity.ThEtudiantEtu#2]
    18:00:21,139 DEBUG [StatefulPersistenceContext] initializing non-lazy collections
    18:00:21,140 DEBUG [SessionImpl] initializing proxy: [org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    18:00:21,140 DEBUG [Loader] loading entity: [org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    18:00:21,140 DEBUG [AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    18:00:21,140 DEBUG [SQL]
    select
    tetypeutil0_.tu_id as tu1_15_0_,
    tetypeutil0_.tu_libelle as tu2_15_0_
    from
    stamas.te_type_utilisateur_tu tetypeutil0_
    where
    tetypeutil0_.tu_id=?
    Hibernate:
    select
    tetypeutil0_.tu_id as tu1_15_0_,
    tetypeutil0_.tu_libelle as tu2_15_0_
    from
    stamas.te_type_utilisateur_tu tetypeutil0_
    where
    tetypeutil0_.tu_id=?
    18:00:21,142 DEBUG [AbstractBatcher] about to open ResultSet (open ResultSets: 0, globally: 0)
    18:00:21,142 DEBUG [Loader] result row: EntityKey[org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    18:00:21,142 DEBUG [AbstractBatcher] about to close ResultSet (open ResultSets: 1, globally: 1)
    18:00:21,142 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    18:00:21,143 DEBUG [TwoPhaseLoad] resolving associations for [org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    18:00:21,143 DEBUG [TwoPhaseLoad] done materializing entity [org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    18:00:21,143 DEBUG [StatefulPersistenceContext] initializing non-lazy collections
    18:00:21,143 DEBUG [Loader] done entity load
    18:00:21,144 INFO [Authenticator] authenticating {0} - Authentifié en tant qu'étudiant
    18:00:21,145 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    18:00:21,148 DEBUG [AbstractFlushingEventListener] dirty checking collections
    18:00:21,174 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2], was: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2] (uninitialized)
    18:00:21,174 DEBUG [Collections] Collection found: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2], was: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2] (uninitialized)
    18:00:21,175 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3] (uninitialized)
    18:00:21,175 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3] (uninitialized)
    18:00:21,175 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 1 updates, 0 deletions to 2 objects
    18:00:21,175 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 4 collections
    18:00:21,177 DEBUG [Printer] listing entities:
    18:00:21,178 DEBUG [Printer] org.domain.stamas.entity.ThEtudiantEtu{etuDateNaissance=18 décembre 1992, teTypeUtilisateurTu=org.domain.stamas.entity.TeTypeUtilisateurTu#3, utiLogin=etutest, teSessionSsns=<uninitialized>, teEtablissementEtb=org.domain.stamas.entity.TeEtablissementEtb#1, etuCodePostal=31100, etuAdresse=229 route de Seysses, prsAdrel=test@enfa.fr, prsTelephone=0561753232, prsNom=Test, prsPrenom=Test, prsId=2, thStageStgs=<uninitialized>, teConcoursCcr=org.domain.stamas.entity.TeConcoursCcr#1, trCommuneCmn=org.domain.stamas.entity.TrCommuneCmn#1, utiMotPasse=6613826fa0e3fcb2b2cb5c7ce7801948}
    18:00:21,178 DEBUG [Printer] org.domain.stamas.entity.TeTypeUtilisateurTu{tuLibelle=Étudiant, tuId=3, thUtilisateurUtis=<uninitialized>, teFonctionFcts=<uninitialized>}
    18:00:21,185 DEBUG [AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    18:00:21,186 DEBUG [SQL]
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    Hibernate:
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    18:00:21,189 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    18:00:21,248 DEBUG [Identity] Login successful for: etutest
    18:00:21,257 DEBUG [ResourceLoader] resource bundle missing: login
    18:00:21,264 DEBUG [ResourceLoader] loaded resource bundle: messages
    18:00:21,264 DEBUG [ResourceLoader] resource bundle missing: ValidatorMessages
    18:00:21,266 DEBUG [ResourceLoader] loaded resource bundle: org/hibernate/validator/resources/DefaultValidatorMessages
    18:00:21,268 DEBUG [ResourceLoader] loaded resource bundle: javax.faces.Messages
    18:00:21,285 DEBUG [Component] trying to inject with hierarchical context search: identity
    18:00:21,285 DEBUG [Component] trying to inject with hierarchical context search: credentials
    18:00:21,286 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,286 DEBUG [Component] trying to inject from specified context: MotPasse, scope: EVENT
    18:00:21,286 DEBUG [Navigator] redirecting to: /accueilEtudiant.xhtml
    18:00:21,288 DEBUG [FacesManager] redirecting to: /stamas/accueilEtudiant.seam?cid=2
    18:00:21,289 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    18:00:21,289 DEBUG [EntityTransaction] committing JPA resource-local transaction
    18:00:21,289 DEBUG [JDBCTransaction] commit
    18:00:21,289 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    18:00:21,289 DEBUG [AbstractFlushingEventListener] dirty checking collections
    18:00:21,289 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2], was: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2] (uninitialized)
    18:00:21,289 DEBUG [Collections] Collection found: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2], was: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2] (uninitialized)
    18:00:21,290 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3] (uninitialized)
    18:00:21,290 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3] (uninitialized)
    18:00:21,290 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 0 updates, 0 deletions to 2 objects
    18:00:21,290 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 4 collections
    18:00:21,290 DEBUG [Printer] listing entities:
    18:00:21,290 DEBUG [Printer] org.domain.stamas.entity.ThEtudiantEtu{etuDateNaissance=18 décembre 1992, teTypeUtilisateurTu=org.domain.stamas.entity.TeTypeUtilisateurTu#3, utiLogin=etutest, teSessionSsns=<uninitialized>, teEtablissementEtb=org.domain.stamas.entity.TeEtablissementEtb#1, etuCodePostal=31100, etuAdresse=229 route de Seysses, prsAdrel=test@enfa.fr, prsTelephone=0561753232, prsNom=Test, prsPrenom=Test, prsId=2, thStageStgs=<uninitialized>, teConcoursCcr=org.domain.stamas.entity.TeConcoursCcr#1, trCommuneCmn=org.domain.stamas.entity.TrCommuneCmn#1, utiMotPasse=6613826fa0e3fcb2b2cb5c7ce7801948}
    18:00:21,291 DEBUG [Printer] org.domain.stamas.entity.TeTypeUtilisateurTu{tuLibelle=Étudiant, tuId=3, thUtilisateurUtis=<uninitialized>, teFonctionFcts=<uninitialized>}
    18:00:21,292 DEBUG [JDBCTransaction] re-enabling autocommit
    18:00:21,292 DEBUG [JDBCTransaction] committed JDBC Connection
    18:00:21,293 DEBUG [ConnectionManager] aggressively releasing JDBC connection
    18:00:21,293 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    18:00:21,293 DEBUG [Manager] Storing conversation state: 2
    18:00:21,293 DEBUG [FacesLifecycle] After render response, destroying contexts
    18:00:21,293 DEBUG [Contexts] destroying business process context
    18:00:21,293 DEBUG [Contexts] flushing server-side conversation context
    18:00:21,294 DEBUG [Contexts] flushing session context

    18:00:21,294 DEBUG [Contexts] destroying event context
    18:00:21,294 DEBUG [Contexts] destroying: com.sun.faces.util.RequestStateManager
    18:00:21,294 DEBUG [Contexts] destroying: org.jboss.seam.core.manager
    18:00:21,295 DEBUG [Contexts] destroying: org.jboss.seam.faces.validation
    18:00:21,295 DEBUG [Contexts] destroying: org.jboss.seam.transaction.synchronizations
    18:00:21,295 DEBUG [Contexts] destroying: org.jboss.seam.web.requestContextPath
    18:00:21,295 DEBUG [Contexts] destroying: com.exade.vcp.Filter.ResponseWrapper
    18:00:21,295 DEBUG [Contexts] destroying: org.jboss.seam.core.conversationPropagation
    18:00:21,295 DEBUG [Contexts] destroying: authenticator
    18:00:21,295 DEBUG [Contexts] destroying: com.exade.vcp.Filter.done
    18:00:21,295 DEBUG [Contexts] destroying: org.jboss.seam.transaction.transaction
    18:00:21,295 DEBUG [Contexts] destroying: org.jboss.seam.web.servletContexts
    18:00:21,295 DEBUG [Contexts] destroying: org.jboss.seam.core.events
    18:00:21,296 DEBUG [Contexts] destroying: org.jboss.seam.web.requestServletPath
    18:00:21,296 DEBUG [Contexts] destroying: ajaxContext
    18:00:21,296 DEBUG [FacesLifecycle] <<< End JSF request for /stamas/login.seam
    18:00:21,335 DEBUG [FacesLifecycle] >>> Begin JSF request for /stamas/accueilEtudiant.seam
    18:00:21,336 DEBUG [Manager] Restoring conversation with id: 2
    18:00:21,337 DEBUG [SeamPhaseListener] beginning transaction prior to phase: RENDER_RESPONSE 6
    18:00:21,337 DEBUG [EntityTransaction] beginning JPA resource-local transaction
    18:00:21,337 DEBUG [JDBCTransaction] begin
    18:00:21,337 DEBUG [ConnectionManager] opening JDBC connection
    18:00:21,337 DEBUG [JDBCTransaction] current autocommit status: true
    18:00:21,337 DEBUG [JDBCTransaction] disabling autocommit
    18:00:21,459 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,461 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,461 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,461 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,461 DEBUG [EntityTransaction] registering synchronization: ManagedPersistenceContext(java:/entityManager)
    18:00:21,463 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,465 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,465 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,465 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,466 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,467 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,467 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,467 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,467 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,468 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,468 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,468 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,468 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,469 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,469 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,469 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,469 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,470 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,470 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,470 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,470 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,471 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,471 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,471 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,471 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,472 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,472 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,472 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,472 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,473 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,473 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,473 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,474 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,474 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,475 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,475 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,476 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,476 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,477 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,477 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,478 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,478 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,478 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,478 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,479 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,479 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,479 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,480 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,480 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,481 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,481 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,481 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,482 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,482 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,482 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,482 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,483 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,483 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,483 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,483 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,484 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,484 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,484 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,484 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,485 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,485 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,485 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,485 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,486 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,486 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,486 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,486 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,487 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,487 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,487 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,487 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,488 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,488 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,488 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,489 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,489 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    18:00:21,489 DEBUG [Component] trying to inject with hierarchical context search: Nom
    18:00:21,489 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    18:00:21,490 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    18:00:21,518 DEBUG [SeamPhaseListener] committing transaction after phase: RENDER_RESPONSE 6
    18:00:21,519 DEBUG [EntityTransaction] committing JPA resource-local transaction
    18:00:21,519 DEBUG [JDBCTransaction] commit
    18:00:21,519 DEBUG [JDBCTransaction] re-enabling autocommit
    18:00:21,519 DEBUG [JDBCTransaction] committed JDBC Connection
    18:00:21,519 DEBUG [ConnectionManager] aggressively releasing JDBC connection
    18:00:21,519 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    18:00:21,520 DEBUG [Manager] Discarding conversation state: 2
    18:00:21,520 DEBUG [FacesLifecycle] After render response, destroying contexts
    18:00:21,520 DEBUG [Contexts] destroying business process context
    18:00:21,520 DEBUG [Contexts] destroying conversation context
    18:00:21,520 DEBUG [Contexts] destroying: org.jboss.seam.faces.redirect
    18:00:21,520 DEBUG [Contexts] destroying: org.jboss.seam.persistence.persistenceContexts
    18:00:21,520 DEBUG [Contexts] destroying: org.jboss.seam.core.conversation
    18:00:21,520 DEBUG [Contexts] destroying: org.jboss.seam.international.statusMessages
    18:00:21,521 DEBUG [Contexts] destroying: entityManager
    18:00:21,521 DEBUG [ManagedPersistenceContext] destroying seam managed persistence context for persistence unit: java:/entityManager
    18:00:21,521 DEBUG [Contexts] flushing server-side conversation context
    18:00:21,521 DEBUG [Contexts] flushing session context
    18:00:21,522 DEBUG [Contexts] destroying event context
    18:00:21,522 DEBUG [Contexts] destroying: css/panel.xcss
    18:00:21,522 DEBUG [Contexts] destroying: /stamas/stylesheet/theme.css
    18:00:21,522 DEBUG [Contexts] destroying: com.sun.faces.util.RequestStateManager
    18:00:21,522 DEBUG [Contexts] destroying: org/richfaces/renderkit/html/scripts/skinning.js
    18:00:21,522 DEBUG [Contexts] destroying: org.ajax4jsf.framework.HEAD_EVENTS_LIST
    18:00:21,522 DEBUG [Contexts] destroying: org.ajax4jsf.framework.HEADER_PROCESSED
    18:00:21,522 DEBUG [Contexts] destroying: org.ajax4jsf.captured_view_state
    18:00:21,522 DEBUG [Contexts] destroying: org.jboss.seam.core.manager
    18:00:21,523 DEBUG [Contexts] destroying: org/richfaces/renderkit/html/scripts/menu.js
    18:00:21,523 DEBUG [Contexts] destroying: org/richfaces/renderkit/html/css/extended_classes.xcss
    18:00:21,523 DEBUG [Contexts] destroying: facelets.ContentType
    18:00:21,523 DEBUG [Contexts] destroying: scripts/menu.js
    18:00:21,523 DEBUG [Contexts] destroying: org.ajax4jsf.javascript.AjaxScript
    18:00:21,523 DEBUG [Contexts] destroying: org.jboss.seam.transaction.synchronizations
    18:00:21,523 DEBUG [Contexts] destroying: org.ajax4jsf.skin.HASH_CODES_MAP
    18:00:21,523 DEBUG [Contexts] destroying: org.jboss.seam.web.requestContextPath
    18:00:21,523 DEBUG [Contexts] destroying: com.exade.vcp.Filter.ResponseWrapper
    18:00:21,523 DEBUG [Contexts] destroying: org/ajax4jsf/javascript/scripts/form.js
    18:00:21,523 DEBUG [Contexts] destroying: org.jboss.seam.core.conversationPropagation
    18:00:21,523 DEBUG [Contexts] destroying: org/richfaces/renderkit/html/scripts/form.js
    18:00:21,523 DEBUG [Contexts] destroying: css/menucomponents.xcss
    18:00:21,524 DEBUG [Contexts] destroying: accueilEtudiant
    18:00:21,524 DEBUG [Contexts] destroying: facelets.Encoding
    18:00:21,524 DEBUG [Contexts] destroying: css/toolBar.xcss
    18:00:21,524 DEBUG [Contexts] destroying: org.ajax4jsf.context.ViewResources$1
    18:00:21,524 DEBUG [Contexts] destroying: css/dropdownmenu.xcss
    18:00:21,524 DEBUG [Contexts] destroying: org/richfaces/renderkit/html/scripts/utils.js
    18:00:21,524 DEBUG [Contexts] destroying: org.ajax4jsf.component.QueueRegistry
    18:00:21,524 DEBUG [Contexts] destroying: /stamas/stylesheet/theme.xcss
    18:00:21,524 DEBUG [Contexts] destroying: org.ajax4jsf.javascript.PrototypeScript
    18:00:21,524 DEBUG [Contexts] destroying: org/richfaces/renderkit/html/css/basic_classes.xcss
    18:00:21,524 DEBUG [Contexts] destroying: com.exade.vcp.Filter.done
    18:00:21,524 DEBUG [Contexts] destroying: org.jboss.seam.transaction.transaction
    18:00:21,524 DEBUG [Contexts] destroying: org.jboss.seam.web.servletContexts
    18:00:21,525 DEBUG [Contexts] destroying: org.jboss.seam.core.events
    18:00:21,525 DEBUG [Contexts] destroying: org.jboss.seam.web.requestServletPath
    18:00:21,525 DEBUG [Contexts] destroying: org.ajax4jsf.VIEW_ID
    18:00:21,525 DEBUG [Contexts] destroying: ajaxContext
    18:00:21,525 DEBUG [FacesLifecycle] <<< End JSF request for /stamas/accueilEtudiant.seam
    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 !

  10. #10
    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
    le logger que tu utilise pour afficher flush/flush done doit etre en niveau debug avec mon code. Vu que tu utilise du info partout ailleur, utilise du info là aussi. tu dois voir explicitement les 2 messages du logger entourant l'opération de flush. Après, seulement, on pourra voir ce qui se passe entre les 2

  11. #11
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Ce coup-ci ça apparaît autour du update :
    18:19:11,053 INFO [Authenticator] authenticating {0} - Authentifié en tant qu'étudiant
    18:19:11,053 INFO [Authenticator] flushing
    18:19:11,054 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    18:19:11,056 DEBUG [AbstractFlushingEventListener] dirty checking collections
    18:19:11,067 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2], was: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2] (uninitialized)
    18:19:11,068 DEBUG [Collections] Collection found: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2], was: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2] (uninitialized)
    18:19:11,068 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3] (uninitialized)
    18:19:11,068 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3] (uninitialized)
    18:19:11,068 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 1 updates, 0 deletions to 2 objects
    18:19:11,068 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 4 collections
    18:19:11,069 DEBUG [Printer] listing entities:
    18:19:11,070 DEBUG [Printer] org.domain.stamas.entity.ThEtudiantEtu{etuDateNaissance=18 décembre 1992, teTypeUtilisateurTu=org.domain.stamas.entity.TeTypeUtilisateurTu#3, utiLogin=etutest, teSessionSsns=<uninitialized>, teEtablissementEtb=org.domain.stamas.entity.TeEtablissementEtb#1, etuCodePostal=31100, etuAdresse=229 route de Seysses, prsAdrel=test@enfa.fr, prsTelephone=0561753232, prsNom=Test, prsPrenom=Test, prsId=2, thStageStgs=<uninitialized>, teConcoursCcr=org.domain.stamas.entity.TeConcoursCcr#1, trCommuneCmn=org.domain.stamas.entity.TrCommuneCmn#1, utiMotPasse=6613826fa0e3fcb2b2cb5c7ce7801948}
    18:19:11,070 DEBUG [Printer] org.domain.stamas.entity.TeTypeUtilisateurTu{tuLibelle=Étudiant, tuId=3, thUtilisateurUtis=<uninitialized>, teFonctionFcts=<uninitialized>}
    18:19:11,075 DEBUG [AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    18:19:11,076 DEBUG [SQL]
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    Hibernate:
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    18:19:11,080 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    18:19:11,080 INFO [Authenticator] flush done
    18:19:11,106 DEBUG [Identity] Login successful for: etutest
    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 !

  12. #12
    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
    dans le setPassword de ta classe utilisateur, pourrais-tu mettre, temporairerement un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    log.error("Somone is changing password to "+password,new Exception("password changed"))
    par curiosité?
    avec ça on devrais assez vite trouver le coupable, il me semble :p

  13. #13
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Tu parles bien de ThUtilisateurUti ?
    Il n'a pas aimé du tout !
    J'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public void setUtiMotPasse(String utiMotPasse) {
            log.error("Somone is changing password to "+ utiMotPasse,new Exception("password changed"));
            this.utiMotPasse = MD5.generateMD5passwd(utiMotPasse);
        }
    Et erreur au login :
    18:31:33,040 INFO [Authenticator] flushing
    18:31:33,040 INFO [Authenticator] flush done
    18:31:33,041 DEBUG [EntityTransaction] marking JPA resource-local transaction for rollback
    18:31:33,042 WARN [SeamLoginModule] Error invoking login method
    javax.el.ELException: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: Exception occurred inside setter of org.domain.stamas.entity.ThUtilisateurUti.utiMotPasse
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:339)
    ...
    Caused by: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: Exception occurred inside setter of org.domain.stamas.entity.ThUtilisateurUti.utiMotPasse
    at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
    ...
    Caused by: org.hibernate.PropertyAccessException: Exception occurred inside setter of org.domain.stamas.entity.ThUtilisateurUti.utiMotPasse
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:89)
    ...
    Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ...
    Caused by: java.lang.NullPointerException
    at org.domain.stamas.entity.ThUtilisateurUti.setUtiMotPasse(ThUtilisateurUti.java:143)
    18:31:33,045 DEBUG [Identity] Login failed for: etutest
    ...
    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 !

  14. #14
    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
    Caused by: java.lang.NullPointerException
    at org.domain.stamas.entity.ThUtilisateurUti.setUtiMotPasse(ThUtilisateurUti.java:143)

    ton log est probablement à null


    par contre je suis étonné du contenu de ton setter, il modifie la valeur au vol :/ Tu va avoir un problème car hibernate passe par le setter pour mettre la valeur dans ton bean. Résultat, hibernate va mettre dans ton bean le md5 lu de la db, tu va le remd5iser et hibernate persistera le changement! Il faudrait que tu aie un getter/setter hibernate sans modification au vol et un avec modif pour utiliser depuis ton code quand tu veux qu'il calcule le md5!

  15. #15
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    C'est un des problèmes de mon incompréhension d'Hibernate !
    Comme je veux que la valeur stockée soit en MD5, ça me semblait logique de lui dire de le faire systématiquement quand je veux modifier la valeur, c'est à dire setUtiMotPasse !
    Là il modifie sans que je le lui demande et forcément ça coince mais je comprends ce que tu veux dire. Je vais laisser le setter simple sans MD5.

    Merci pour ton aide, j'espère que ça ira pour ce sujet, je verrai ça demain au boulot.

    Jusqu'au prochain problème, sans compter les autres non résolus !
    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 !

  16. #16
    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
    c'est pas ça, quand Hibernate hydrate ton objet, il le fait par les points de contact que tu lui a donnés. tu lui donne ce setter, il y passe la donnée venant de la DB. Et toi tu viens la modifier. Du coup hibernate, lorsque qu'on fera un saveorupdate sur cet objet, le stockera dans la DB. Du coup au final, on prend la donnée DB, on y applique un MD5 et on la sauve dans la DB.

    Maintenant ceci n'explique pas pourquoi ton objet est balancé dans un saveorupdate, mais a priori c'est que ton code le fait, quelque part entre la query et la fermeture de l'entitymanager.

    Quand j'ai besoin de donnée qui ont du calcul buisness, je les sépare en deux, et j'ai ce genre de truc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Transient
    public int getX(){
       return x;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void setX(int x){
       //calculs buisness
       setXImpl(nouveauX);
    }
    protected void setXImpl(int x){this.x=x;}
    protected int getXImpl(){return x;}
    Ainsi hibernate ne passe plus par la couche buisness.

  17. #17
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    c'est pas ça, quand Hibernate hydrate ton objet, il le fait par les points de contact que tu lui a donnés. tu lui donne ce setter, il y passe la donnée venant de la DB. Et toi tu viens la modifier. Du coup hibernate, lorsque qu'on fera un saveorupdate sur cet objet, le stockera dans la DB. Du coup au final, on prend la donnée DB, on y applique un MD5 et on la sauve dans la DB.
    Tu veux dire que le processus d'Hibernate serait le suivant ?
    1) Hibernate lit les données dans la BDD
    2) Hibernate affecte les valeurs aux propriétés de l'entité Java en utilisant leur setter

    C'est vrai qu'à la réflexion, ça semble assez logique !

    Pour le reste, je verrai ça demain. Pas envie de m'y mettre ce soir à la maison !

    Encore merci.
    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 !

  18. #18
    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
    ben oui

  19. #19
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    J'ai refait le setter du mot de passe de façon basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public void setUtiMotPasse(String utiMotPasse) {
            this.utiMotPasse = utiMotPasse;
        }
    Résultat : plus d'UPDATE !
    Hibernate:
    select
    thutilisat0_.uti_id_personne as prs1_4_,
    thutilisat0_1_.prs_adrel as prs2_4_,
    thutilisat0_1_.prs_nom as prs3_4_,
    thutilisat0_1_.prs_prenom as prs4_4_,
    thutilisat0_1_.prs_telephone as prs5_4_,
    thutilisat0_.uti_id_type_utilisateur as uti4_5_,
    thutilisat0_.uti_login as uti1_5_,
    thutilisat0_.uti_mot_passe as uti2_5_,
    thutilisat0_3_.etu_adresse as etu1_7_,
    thutilisat0_3_.etu_code_postal as etu2_7_,
    thutilisat0_3_.etu_date_naissance as etu3_7_,
    thutilisat0_3_.etu_id_concours as etu5_7_,
    thutilisat0_3_.etu_id_etablissement_origine as etu6_7_,
    thutilisat0_3_.etu_id_commune_residence as etu7_7_,
    case
    when thutilisat0_3_.etu_id_candidat is not null then 3
    when thutilisat0_2_.cnd_id_utilisateur is not null then 2
    when thutilisat0_.uti_id_personne is not null then 1
    end as clazz_
    from
    stamas.th_utilisateur_uti thutilisat0_
    inner join
    stamas.te_personne_prs thutilisat0_1_
    on thutilisat0_.uti_id_personne=thutilisat0_1_.prs_id
    left outer join
    stamas.th_candidat_cnd thutilisat0_2_
    on thutilisat0_.uti_id_personne=thutilisat0_2_.cnd_id_utilisateur
    left outer join
    stamas.th_etudiant_etu thutilisat0_3_
    on thutilisat0_.uti_id_personne=thutilisat0_3_.etu_id_candidat
    where
    thutilisat0_.uti_login=?
    and thutilisat0_.uti_mot_passe=? limit ?
    10:05:10,455 DEBUG [AbstractBatcher] about to open ResultSet (open ResultSets: 0, globally: 0)
    10:05:10,460 DEBUG [Loader] result row: EntityKey[org.domain.stamas.entity.ThUtilisateurUti#2]
    10:05:10,491 DEBUG [AbstractBatcher] about to close ResultSet (open ResultSets: 1, globally: 1)
    10:05:10,492 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    10:05:10,493 DEBUG [TwoPhaseLoad] resolving associations for [org.domain.stamas.entity.ThEtudiantEtu#2]
    10:05:10,510 DEBUG [TwoPhaseLoad] done materializing entity [org.domain.stamas.entity.ThEtudiantEtu#2]
    10:05:10,510 DEBUG [StatefulPersistenceContext] initializing non-lazy collections
    10:05:10,511 INFO [Authenticator] authenticating etutest - Authentifié en tant qu'étudiant
    10:05:10,511 INFO [Authenticator] flushing

    10:05:10,512 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    10:05:10,514 DEBUG [AbstractFlushingEventListener] dirty checking collections
    10:05:10,529 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2], was: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2] (uninitialized)
    10:05:10,530 DEBUG [Collections] Collection found: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2], was: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2] (uninitialized)
    10:05:10,530 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 0 updates, 0 deletions to 1 objects
    10:05:10,530 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 2 collections
    10:05:10,532 DEBUG [Printer] listing entities:
    10:05:10,533 DEBUG [Printer] org.domain.stamas.entity.ThEtudiantEtu{etuDateNaissance=18 décembre 1992, teTypeUtilisateurTu=org.domain.stamas.entity.TeTypeUtilisateurTu#3, utiLogin=etutest, teSessionSsns=<uninitialized>, teEtablissementEtb=org.domain.stamas.entity.TeEtablissementEtb#1, etuCodePostal=31100, etuAdresse=229 route de Seysses, prsAdrel=test@enfa.fr, prsTelephone=0561753232, prsNom=Test, prsPrenom=Test, prsId=2, thStageStgs=<uninitialized>, teConcoursCcr=org.domain.stamas.entity.TeConcoursCcr#1, trCommuneCmn=org.domain.stamas.entity.TrCommuneCmn#1, utiMotPasse=c02ef82c54150b3260680d17651db8b9}
    10:05:10,533 INFO [Authenticator] flush done
    10:05:10,550 DEBUG [Identity] Login successful for: etutest

    10:05:10,556 DEBUG [ResourceLoader] resource bundle missing: login
    10:05:10,586 DEBUG [ResourceLoader] loaded resource bundle: messages
    10:05:10,586 DEBUG [ResourceLoader] resource bundle missing: ValidatorMessages
    10:05:10,587 DEBUG [ResourceLoader] loaded resource bundle: org/hibernate/validator/resources/DefaultValidatorMessages
    10:05:10,592 DEBUG [ResourceLoader] loaded resource bundle: javax.faces.Messages
    10:05:10,618 DEBUG [Component] trying to inject with hierarchical context search: identity
    10:05:10,619 DEBUG [Component] trying to inject with hierarchical context search: credentials
    10:05:10,619 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    10:05:10,619 DEBUG [Component] trying to inject from specified context: MotPasse, scope: EVENT
    10:05:10,620 DEBUG [Navigator] redirecting to: /accueilEtudiant.xhtml
    10:05:10,621 DEBUG [FacesManager] redirecting to: /stamas/accueilEtudiant.seam?cid=8
    10:05:10,621 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    10:05:10,621 DEBUG [EntityTransaction] committing JPA resource-local transaction
    10:05:10,622 DEBUG [JDBCTransaction] commit
    Du coup il a fallu aussi que je modifie Identification.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
                // Recherche de l'étudiant
                Query query = entityManager.createQuery(
                        "from ThEtudiantEtu e " +
                        "where e.prsNom = :nom " +
                            "and e.prsPrenom = :prenom " +
                            "and e.etuDateNaissance = :dateNaissance ");
                query.setParameter("nom", this.getNom());
                query.setParameter("prenom", this.getPrenom());
                query.setParameter("dateNaissance", this.getDateNaissance());
     
                ThEtudiantEtu etudiant = (ThEtudiantEtu) query.getSingleResult();
     
                // Génération de son mot de passe
                log.info("identification.identifier() : affectation du mot de passe");
                this.setMotPasse(etudiant.generatePassword(this.getPrenom(), this.getNom()));
                log.info("identification.identifier() : enregistrement du mot de passe #{identification.motPasse}");
                etudiant.setUtiMotPasse(MD5.generateMD5passwd(this.getMotPasse()));
     
                entityManager.flush();
                log.info("identification.identifier() : mot de passe enregistré");
    Et tout fonctionne ! Le nouveau mot de passe est généré et enregistré en BDD !

    Mille mercis, voilà un problème

    Maintenant, je m'attaque de nouveau à la requête à faire à l'ouverture de la page d'accueil de l'étudiant.
    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 !

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

Discussions similaires

  1. Faire un UPDATE à partir d'une sélection avec jointure
    Par grping dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/03/2009, 17h06
  2. Besoin d'un conseil pour une sélection Access/fichier
    Par Oluha dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/03/2005, 19h10
  3. Redirection automatique lors d'une sélection dans un Select
    Par MiJack dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/12/2004, 18h09
  4. Réponses: 17
    Dernier message: 03/12/2004, 14h33
  5. Fonction de zoom à partir d'une sélection souris
    Par mick74 dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/08/2004, 21h41

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