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 :

Jointure indirecte à travers plusieurs niveaux d'héritage


Sujet :

Hibernate Java

  1. #21
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Le code est dans Authenticator.java.

    N'importe quel utilisateur, étudiant ou gestionnaire passe par la même page pour se connecter.
    Si celui qui se connecte est un étudiant, il accède à sa page d'accueil qui lui propose un bouton pour voir les stages auxquels il peut s'inscrire ou bien l'information sur le stage auquel il est déjà inscrit avec un bouton lui permettant de se désinscrire.

    C'est pour ça que j'avais essayé de le faire en deux étapes :
    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
        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 query = entityManager.createQuery(
                        "FROM ThUtilisateurUti u " +
                        "JOIN u.ThCandidatCnd c " +/*
                            "LEFT JOIN c.TeSessionSsn s " +
                                "LEFT JOIN s.ThStageStg stg " +*/
                        "WHERE u.utiLogin = :username " +
                            "AND u.utiMotPasse = :password");
                query.setParameter("username", credentials.getUsername());
                //query.setParameter("password", ThUtilisateurUti.generateMD5(credentials.getPassword()));
                query.setParameter("password", credentials.getPassword());
     
                this.user = (ThUtilisateurUti) query.getSingleResult();
     
                int typeUtilisateur = user.getTeTypeUtilisateurTu().getTuId();
     
                identity.addRole(user.getTeTypeUtilisateurTu().getTuLibelle());
     
     
                switch (typeUtilisateur)
                {
                    case 1 : // Administrateur
                        setPageSuivante("/home.xhtml");
                        return true;
     
                    case 2 : // Gestionnaire
     
                    case 3 : // Étudiant
                        log.info("authenticating {0} - Authentifié en tant qu'étudiant");
                        setNom(user.getPrsNom());
                        setPrenom(user.getPrsPrenom());
                        setPageSuivante("/accueilEtudiant.xhtml");
     
                        // Recherche si l'étudiant est déjà inscrit à un stage
                        /*Query q = entityManager.createQuery(
                                "FROM ThStageStg thStageStg ");/* +
                                    "JOIN thStageStg.teEtablissementEtb etb " +
                                        "JOIN etb.trCommuneCmn c " +
                                            "JOIN c.trDepartementDpt d " +
                                    "LEFT JOIN thStageStg.thCandidatCnds cnd " +
                                "WHERE cnd.getUtiLogin() = :nomuser ");*/
    Mais la seconde requête ne s'exécute pas (objet de l'autre discussion) alors j'ai voulu essayer de faire une jointure externe dans la première requête mais je n'arrive pas à descendre de ThUtilisateurUti vers ThCandidatCnd.

    La grosse requête SQL, impressionnante en apparence par le nombre de ses jointures, je l'ai écrite en 5 minutes, débuggage des fautes de frappe compris !
    La moindre requête en java me prend des jours ! Galère !
    Je progresse à pas d'escargot (qui n'a qu'un pied comme chacun sait ! ) sur ce projet car je suis novice avec toutes ces nouvelles technologies autour de Java (JPA, Hibernate, JSF, Seam...). Déjà que j'avais fait peu de Java au CNAM et que ça remonte à 5 ans !

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    sauf erreur de ma part, si tu fais un "FROM ThUtilisateurUti u where tes criteres", hibernante va te retourner l'instance qui correspond au type définit par ton discriminat utilisé dans la config pour savoir si c'est un candidat, un gestionnaire, etc.

    Autrement dit, si c'est un Candidat, ca te retournera une instance de Candidat, qui étends Utilisateur. J'ai l'impression que tu es occupé de te casser la tête a avoir hibernate qui se plie à ton shéma de base de donnée, alros que, normalement,ca devrais être l'inverse: tu cré ton arbre d'objet et tu laisse hibernate décider quel est le shéma à mettre derrière :/

  3. #23
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Je ne peux pas te laisser dire ça !
    Citation Envoyé par tchize_ Voir le message
    J'ai l'impression que tu es occupé de te casser la tête a avoir hibernate qui se plie à ton shéma de base de donnée, alros que, normalement,ca devrais être l'inverse: tu cré ton arbre d'objet et tu laisse hibernate décider quel est le shéma à mettre derrière :/
    La modélisation des données répond à des règles de maîtrise des données et est indépendante des applications qui interrogent la BDD !

    Hibernate est allé scruter la BDD pour créer le mapping avec Seam Generate Entities. J'accepte de devoir mettre les mains dans le cambouis d'Hibernate pour qu'il prenne en compte ce qui n'est pas directement visible (l'héritage des tables) mais je n'accepte pas qu'Hibernate change mon modèle de données !

    Quant au début du message :
    sauf erreur de ma part, si tu fais un "FROM ThUtilisateurUti u where tes criteres", hibernante va te retourner l'instance qui correspond au type définit par ton discriminat utilisé dans la config pour savoir si c'est un candidat, un gestionnaire, etc.
    J'interroge effectivement dans mon code le type d'utilisateur et je pense avoir une instance de l'entité du type utilisateur (teTypeUtilisateurTu) mais pas du tout sûr avec le candidat. Je regarderai.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Je ne peux pas te laisser dire ça !
    Ben pourtant je le dit. Hibernate n'est pas conçu pour attaquer à la base des modèles existant. Tu "peux" y arriver, mais aucune garantie de succès. Hibernate a une certaine souplesse (pas mal même), mais ça reste l'objet qui est au centre de ses préocuppation, pas la base de donnée. Et tous les exemples que tu trouvera sur la doc hibernante sont tous monté de la même façon: 1 je crée mes objet, 2 je regarde comment je préfère les persister, dans la mesure des options que me propose hibernante.
    mais je n'accepte pas qu'Hibernate change mon modèle de données !
    Alors tu aura deux options: 1) éventuellement tu arrivera à plier hibernate à ton shéma si il est dans le domaine de ce que supporte hibernate (je l'espère pour toi), 2) ce n'est pas le cas et tu devra laisser tomber hibernate.

  5. #25
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 960
    Points : 4 389
    Points
    4 389
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Je ne peux pas te laisser dire ça !

    La modélisation des données répond à des règles de maîtrise des données et est indépendante des applications qui interrogent la BDD !
    Faire du legacy avec un ORM implique de connaître parfaitement ce que l'ORM en question fait quand il est employé de A à Z de la taxonomie OO au schéma relationnel, sinon vous n'allez jamais percevoir les subtilités dans la manière dont il interprète un schéma existant, en particulier quand vous essayez de forcer une taxonomie : il suffit d'une FK mal exprimée entre 2 tables censées correspondre à un héritage côté OO pour avoir de mauvaises surprises sur la manière dont l'héritage est interprété.

  6. #26
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Malheureusement, je n'ai pas vraiment le temps d'éplucher la doc de JSF, Hibernate, Seam et autres technos que je découvre en vrac sur ce projet. Je suis bien obligé de m'y pencher mais plutôt pour trouver des pistes de solutions que pour apprendre dans le détail.

    En gros, je sais conduire une voiture et j'essaie de conduire un semi-remorque en posant des questions sur certains points aux routiers au fur et à mesure. C'est un peu casse-gueule mais je ne peux pas faire autrement.

    Bref...

    J'essaie une autre voie...

    Mon Authenticator.java se contente de tester le login et le mot de passe de l'utilisateur et redirige vers sa page d'accueil.

    J'ai testé ceci dans AccueilEtudiant.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
        private String libelleStage;
        private Date dateDebut;
        private Date dateFin;
        private String etablissement;
        private String commune;
        private String departement;
     
        public AccueilEtudiant()
        {
            this.inscritStage();
        }
     
        public void inscritStage()
        {
                setLibelleStage("stage bidon");
        }
    Je teste la propriété LibelleStage dans accueilEtudiant.xhtml et ça fonctionne.
    Autrement dit, je peux lancer une méthode dans le constructeur du bean instancié par la page.

    Cette méthode doit bien sûr aller chercher l'info sur l'éventuel stage de l'étudiant connecté et j'afficherai ainsi dans sa page d'accueil toutes les infos de son stage.

    Si je vais un tout petit peu plus loin, ça coince déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        private ThStageStg stage;
        public void inscritStage()
        {
            Query q = entityManager.createQuery(
                "FROM ThStageStg stg ");
            setStage((ThStageStg) q.getSingleResult());
    14:10:09,546 DEBUG [Navigator] redirecting to: /accueilEtudiant.xhtml
    14:10:09,548 DEBUG [FacesManager] redirecting to: /stamas/accueilEtudiant.seam?cid=2
    14:10:09,548 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    14:10:09,548 DEBUG [EntityTransaction] committing JPA resource-local transaction
    14:10:09,563 WARN [SeamPhaseListener] uncaught exception, passing to exception handler
    java.lang.IllegalStateException: Could not commit transaction
    at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:625)
    Caused by: javax.persistence.RollbackException: Error while commiting the transaction
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71)
    On ne peut pas lancer une simple requête depuis le constructeur ?

    Au fait, depuis longtemps, j'ai remarqué cette erreur dans la console :
    Caused by: org.hibernate.validator.InvalidStateException: validation failed for: org.domain.stamas.entity.ThEtudiantEtu
    Alors que je n'utilise pas encore ThEtudiantEtu.

    Et j'ai remarqué, dans ce qu'affiche le browser suite à l'erreur Could not commit transaction ci-dessus, à la rubrique Scoped Variables / Session Attributes que mon @In ThUtilisateurUti user a pour valeur org.domain.stamas.entity.ThEtudiantEtu@53895c4c

    Ça veut dire que comme ThEtudiantEtu hérite de ThCandidatCnd qui hérite de ThUtilisateurUti, une requête sur ThUtilisateurUti va chercher toutes les classes filles inutilement ?

    Et pourquoi il me sort cet erreur de validation sur cette classe ?

  7. #27
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    En regardant d'un peu plus près la console, je me dis que l'erreur se situe plutôt ici :
    11:27:46,308 DEBUG [FacesLifecycle] >>> Begin JSF request for /stamas/accueilEtudiant.seam
    11:27:46,310 DEBUG [Manager] Restoring conversation with id: 2
    11:27:46,310 DEBUG [SeamPhaseListener] beginning transaction prior to phase: RENDER_RESPONSE 6
    11:27:46,310 DEBUG [EntityTransaction] beginning JPA resource-local transaction
    11:27:46,311 DEBUG [ManagedPersistenceContext] created seam managed persistence context from EntityManagerFactory
    java.lang.NullPointerException
    at org.domain.stamas.session.AccueilEtudiant.inscritStage(AccueilEtudiant.java:78)
    at org.domain.stamas.session.AccueilEtudiant.<init>(AccueilEtudiant.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at java.lang.Class.newInstance0(Class.java:372)
    at java.lang.Class.newInstance(Class.java:325)
    at org.jboss.seam.Component.instantiateJavaBean(Component.java:1438)
    ...

    java.lang.NullPointerException
    at org.domain.stamas.session.AccueilEtudiant.inscritStage(AccueilEtudiant.java:78)
    at org.domain.stamas.session.AccueilEtudiant_$$_javassist_seam_3._d18inscritStage(AccueilEtudiant_$$_javassist_seam_3.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at javassist.util.proxy.RuntimeSupport$DefaultMethodHandler.invoke(RuntimeSupport.java:37)
    at org.domain.stamas.session.AccueilEtudiant_$$_javassist_seam_3.inscritStage(AccueilEtudiant_$$_javassist_seam_3.java)
    at org.domain.stamas.session.AccueilEtudiant.<init>(AccueilEtudiant.java:46)
    at org.domain.stamas.session.AccueilEtudiant_$$_javassist_seam_3.<init>(AccueilEtudiant_$$_javassist_seam_3.java)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at java.lang.Class.newInstance0(Class.java:372)
    at java.lang.Class.newInstance(Class.java:325)
    at org.jboss.seam.Component.wrap(Component.java:1504)
    at org.jboss.seam.Component.instantiateJavaBean(Component.java:1442)
    at org.jboss.seam.Component.instantiate(Component.java:1359)
    at org.jboss.seam.Component.newInstance(Component.java:2122)
    at org.jboss.seam.Component.getInstance(Component.java:2021)
    ...
    La partie _$$_javassist_ m'a mis la puce à l'oreille et j'ai trouvé quelque chose à ce propos dans le tutoriel sur l'héritage :
    A la surprise générale, le résultat affiché n'est ni une Voiture, ni un Camion, mais un Vehicule_$$_javassist_3! Mais que s'est-il passé au juste ? Comme la relation est lazy, au moment où l'objet Personne est chargé, Hibernate remplit l'attribut vehicule avec un objet de type proxy, dont la classe, Vehicule_$$_javassist_3, est générée dynamiquement et dérive de notre classe Vehicule. Le rôle de cette classe, est de déclencher le chargement à la demande de la relation et d'instancier un Vehicule au besoin. Hibernate est confronté à deux problèmes :
    Sauf que dans le tutoriel ça parle de [Entité]_$$_javassist alors que moi j'ai [bean]_$$_javassist donc ça n'a peut-être aucun rapport ?

    Je suis vraiment bloqué avec cette erreur et je ne sais plus trop où chercher.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    il y a quoi à at org.domain.stamas.session.AccueilEtudiant.inscritStage(AccueilEtudiant.java:78)

  9. #29
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    @Name("accueilEtudiant")
    @Scope(ScopeType.EVENT)
    public class AccueilEtudiant
    {
        @Logger private Log log;
     
        @In StatusMessages statusMessages;
     
        @In("Nom") String nom;
        @In("Prenom") String prenom;
        @In EntityManager entityManager;
        @In ThUtilisateurUti user;
     
        private ThStageStg thStageStg;
     
        private String libelleStage;
        private Date dateDebut;
        private Date dateFin;
        private String etablissement;
        private String commune;
        private String departement;
     
        public AccueilEtudiant()
        {
            inscritStage();
            //setLibelleStage("Stage bidon");
        }
     
        public boolean inscritStage()
        {
            try
            {
     
            /*Query q = entityManager.createNativeQuery(
                    "SELECT ssn.ssn_libelle, ssn.ssn_date_debut, ssn.ssn_date_fin, " +
                            "e.etb_nom, c.cmn_nom, d.dpt_numero " +
                    "FROM th_stage_stg AS stg " +
                    "INNER JOIN te_etablissement_etb AS e ON e.etb_id = stg.stg_id_etablissement " +
                        "INNER JOIN tr_commune_cmn AS c ON c.cmn_id = e.etb_id_commune " +
                            "INNER JOIN tr_departement_dpt AS d ON d.dpt_id = c.cmn_id_departement " +
                    "INNER JOIN te_session_ssn AS ssn ON ssn.ssn_id = stg.stg_id_session " +
                        "INNER JOIN tj_cnd_inscrire_ssn_cis AS cis ON cis.cis_id_session = ssn.ssn_id " +
                            "INNER JOIN th_candidat_cnd AS cnd ON cnd.cnd_id_utilisateur = cis_id_candidat " +
                                "INNER JOIN th_utilisateur_uti AS u ON u.uti_id_personne = cnd.cnd_id_utilisateur " +
                    "WHERE u.uti_login = :login "
                );
                //q.setParameter("login", user.getUtiLogin());
                q.setParameter("login", "etutest");
                //stage = (ThStageStg) q.getSingleResult();
                Object[] stage = ((Object[]) q.getSingleResult());
                setLibelleStage((String) stage[0]);
                setDateDebut((Date) stage[1]);
                setDateFin((Date) stage[2]);
                setEtablissement((String) stage[3]);
                setCommune((String) stage[4]);
                setDepartement((String) stage[5]);*/
                Query q = entityManager.createQuery(
                    "FROM ThStageStg thStageStg ");/* +
                    "JOIN stg.thCandidatCnds ")*/
                setThStageStg((ThStageStg) q.getSingleResult());
                return true;
            }
            catch (Exception e)
            {
                e.printStackTrace();
                return false;
            }
        }
     
        public String voirStages()
        {
            return "/listeStages.xhtml";
        }
     
        public String completerInfosPersos()
        {
            // implement your business logic here
            log.info("accueilEtudiant.completerInfosPersos() action called with: #{accueilEtudiant.nom} #{accueilEtudiant.prenom}");
            //statusMessages.add("accueilEtudiant #{accueilEtudiant.value}");
     
            return "/infosPersos.xhtml";
        }
    Si le :78 du message est le numéro de ligne, en tenant compte des commentaires ce serait la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                Query q = entityManager.createQuery(
                    "FROM ThStageStg thStageStg ");/* +
                    "JOIN stg.thCandidatCnds ")*/
                setThStageStg((ThStageStg) q.getSingleResult());

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    le entitymanager serait null? (Oui, ce qui est indiqué dans le stacktrace, ce sont les numéros de lignes dans le code source )

  11. #31
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Comment puis-je savoir ? (je découvre un monde nouveau avec Seam et tout ce qui tourne avec ! )

    J'ai fait comme dans Authenticator.java, programme généré automatiquement par New Seam Web Project et que j'ai réussi à adapter à mon appli.

    Dans Authenticator.java, il se passe ceci :
    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
    @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());
     
                Query query = entityManager.createQuery(
                        "FROM ThUtilisateurUti u " +
                        "WHERE u.utiLogin = :username " +
                            "AND u.utiMotPasse = :password");
                query.setParameter("username", credentials.getUsername());
                //query.setParameter("password", ThUtilisateurUti.generateMD5(credentials.getPassword()));
                query.setParameter("password", credentials.getPassword());
     
                this.user = (ThUtilisateurUti) query.getSingleResult();
     
                int typeUtilisateur = user.getTeTypeUtilisateurTu().getTuId();
     
                identity.addRole(user.getTeTypeUtilisateurTu().getTuLibelle());
     
     
                switch (typeUtilisateur)
                {
                    case 1 : // Administrateur
                        setPageSuivante("/home.xhtml");
                        return true;
     
                    case 2 : // Gestionnaire
                        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");
    L'étudiant se connecte, est reconnu et est redirigé vers la page AccueilEtudiant dont le bean est donné dans le message précédent.
    J'y ai mis un @In EntityManager entityManager comme dans Authenticator.java et comme dans un autre programme Identification.java qui fonctionne et qui est le bean d'une page à laquelle l'utilisateur accède via un lien depuis la page de connexion :
    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
    @Scope(EVENT)
    @Name("identification")
    public class Identification
    {
        @Logger private Log log;
     
        @In EntityManager entityManager;
        @In StatusMessages statusMessages;
        @In Identity identity;
        @In Credentials credentials;
     
        public boolean identifier() 
        {
            try
            {
                log.info("identification.identifier() "
                        + "Tentative d'identification avec les paramètres suivants : "
                        + "#{identification.nom}, #{identification.prenom}, #{identification.dateNaissance}");
     
                // 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();
    Bref j'ai vraiment l'impression d'avoir fait la même chose, ou quelque chose de similaire et je ne comprends pas pourquoi dans un cas (Identification.java) ça fonctionne alors que dans l'autre (AccueilEtudiant.java) ça plante !

  12. #32
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Toujours coincé avec ce problème !

    Je me dis que par contre, je pourrais peut-être y arriver en exportant mon ThUtilisateurUti user de Authenticator.java et en l'important dans AccueilEtudiant.java mais je ne trouve pas la syntaxe pour accéder à une colonne de la collection teSessionSsns de ThCandidatCnd.

    Eclipse me propose ce cheminement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user.getThCandidatCnd().getTeSessionSsns()
    mais ensuite comment accéder par exemple à la propriété ssnLibelle de l'entité TeSessionSsn ?

  13. #33
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Nouvelle approche qui syntaxiquement est acceptée mais qui donne toujours la même erreur.
    Dans AccueilEtudiant.java, j'ai maintenant fait ceci :
    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
        @In ThUtilisateurUti user;
     
        private String libelleStage;
        private Date dateDebut;
        private Date dateFin;
        private String etablissement;
        private String commune;
        private String departement;
     
        public AccueilEtudiant()
        {
     
            inscritStage();
        }
     
        public boolean inscritStage()
        {
            try
            {
                Set<TeSessionSsn> stages = user.getThCandidatCnd().getTeSessionSsns();
                if(! stages.isEmpty())
                {
                    for(TeSessionSsn stage : stages)
                    {
                        setLibelleStage(stage.getSsnLibelle());
                        setDateDebut(stage.getSsnDateDebut());
                        setDateFin(stage.getSsnDateFin());
                        setEtablissement(stage.getThStageStg().getTeEtablissementEtb().getEtbNom());
                        setCommune(stage.getThStageStg().getTeEtablissementEtb().getTrCommuneCmn().getCmnNom());
                        setDepartement(stage.getThStageStg().getTeEtablissementEtb().getTrCommuneCmn().getTrDepartementDpt().getDptNumero());
                    }
                }
    => Je n'utilise plus entityManager qui était soupçonné à NULL par tchize dans un précédent message.

    Mais j'ai toujours la même erreur :
    10:32:14,181 DEBUG [FacesLifecycle] <<< End JSF request for /stamas/login.seam
    10:32:14,190 DEBUG [FacesLifecycle] >>> Begin JSF request for /stamas/accueilEtudiant.seam
    10:32:14,191 DEBUG [Manager] Restoring conversation with id: 8
    10:32:14,195 DEBUG [SeamPhaseListener] beginning transaction prior to phase: RENDER_RESPONSE 6
    10:32:14,195 DEBUG [EntityTransaction] beginning JPA resource-local transaction
    10:32:14,195 DEBUG [JDBCTransaction] begin
    10:32:14,195 DEBUG [ConnectionManager] opening JDBC connection
    10:32:14,198 DEBUG [JDBCTransaction] current autocommit status: true
    10:32:14,198 DEBUG [JDBCTransaction] disabling autocommit
    java.lang.NullPointerException
    at org.domain.stamas.session.AccueilEtudiant.inscritStage(AccueilEtudiant.java:58)

    at org.domain.stamas.session.AccueilEtudiant.<init>(AccueilEtudiant.java:50)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at java.lang.Class.newInstance0(Class.java:372)
    at java.lang.Class.newInstance(Class.java:325)
    at org.jboss.seam.Component.instantiateJavaBean(Component.java:1438)
    at org.jboss.seam.Component.instantiate(Component.java:1359)
    at org.jboss.seam.Component.newInstance(Component.java:2122)
    at org.jboss.seam.Component.getInstance(Component.java:2021)
    at org.jboss.seam.Component.getInstance(Component.java:1983)
    at org.jboss.seam.Component.getInstance(Component.java:1977)
    at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:55)
    at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:50)
    at org.jboss.seam.el.SeamELResolver.resolveBase(SeamELResolver.java:148)
    at org.jboss.seam.el.SeamELResolver.getValue(SeamELResolver.java:51)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
    at org.jboss.el.parser.AstIdentifier.getValue(AstIdentifier.java:44)
    at org.jboss.el.parser.AstValue.getValue(AstValue.java:63)
    at org.jboss.el.parser.AstDeferredExpression.getValue(AstDeferredExpression.java:26)
    at org.jboss.el.parser.AstCompositeExpression.getValue(AstCompositeExpression.java:31)
    at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
    at javax.faces.component.UIOutput.getValue(UIOutput.java:184)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:201)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:284)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:154)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
    at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:281)
    at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
    at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:220)
    at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:215)
    at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:120)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
    at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
    at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:636)
    java.lang.NullPointerException
    at org.domain.stamas.session.AccueilEtudiant.inscritStage(AccueilEtudiant.java:58)
    at org.domain.stamas.session.AccueilEtudiant_$$_javassist_seam_3._d17inscritStage(AccueilEtudiant_$$_javassist_seam_3.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at javassist.util.proxy.RuntimeSupport$DefaultMethodHandler.invoke(RuntimeSupport.java:37)
    at org.domain.stamas.session.AccueilEtudiant_$$_javassist_seam_3.inscritStage(AccueilEtudiant_$$_javassist_seam_3.java)
    at org.domain.stamas.session.AccueilEtudiant.<init>(AccueilEtudiant.java:50)
    at org.domain.stamas.session.AccueilEtudiant_$$_javassist_seam_3.<init>(AccueilEtudiant_$$_javassist_seam_3.java)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at java.lang.Class.newInstance0(Class.java:372)
    at java.lang.Class.newInstance(Class.java:325)
    at org.jboss.seam.Component.wrap(Component.java:1504)
    at org.jboss.seam.Component.instantiateJavaBean(Component.java:1442)
    at org.jboss.seam.Component.instantiate(Component.java:1359)
    at org.jboss.seam.Component.newInstance(Component.java:2122)
    at org.jboss.seam.Component.getInstance(Component.java:2021)
    at org.jboss.seam.Component.getInstance(Component.java:1983)
    at org.jboss.seam.Component.getInstance(Component.java:1977)
    at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:55)
    at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:50)
    at org.jboss.seam.el.SeamELResolver.resolveBase(SeamELResolver.java:148)
    at org.jboss.seam.el.SeamELResolver.getValue(SeamELResolver.java:51)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
    at org.jboss.el.parser.AstIdentifier.getValue(AstIdentifier.java:44)
    at org.jboss.el.parser.AstValue.getValue(AstValue.java:63)
    at org.jboss.el.parser.AstDeferredExpression.getValue(AstDeferredExpression.java:26)
    at org.jboss.el.parser.AstCompositeExpression.getValue(AstCompositeExpression.java:31)
    at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
    at javax.faces.component.UIOutput.getValue(UIOutput.java:184)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:201)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:284)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:154)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
    at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:281)
    at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
    at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:220)
    at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:215)
    at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:120)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
    at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
    at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:636)
    10:32:14,364 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
    10:32:14,394 DEBUG [Component] trying to inject with hierarchical context search: Nom
    10:32:14,394 DEBUG [Component] trying to inject with hierarchical context search: Prenom
    10:32:14,394 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    10:32:14,395 DEBUG [EntityTransaction] registering synchronization: ManagedPersistenceContext(java:/entityManager)
    10:32:14,395 DEBUG [Component] trying to inject with hierarchical context search: user
    La ligne 58 est la première ligne active de la méthode, après le try :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set<TeSessionSsn> stages = user.getThCandidatCnd().getTeSessionSsns();
    Dans le log, l'injection de user se passe après l'erreur. Ceci expliquerait-il cela ?

    Au passage, les injections figurent 22 fois de suite dans le log !

    J'ai aussi essayé d'accéder directement à la propriété voulue dans dans AccueilEtudiant.xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="Vous êtes inscrit au stage #{accueilEtudiant.user.getThCandidatCnd().getTeSessionSsns().iterator().next().getSsnLibelle}." />
    Plus d'erreur dans le log mais pas d'affichage de ce texte.

  14. #34
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Problème résolu grâce à l'aide de tchize dans cette discussion.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Héritage sur plusieurs niveaux de user control
    Par lila23 dans le forum Silverlight
    Réponses: 6
    Dernier message: 14/09/2011, 16h18
  2. Réponses: 0
    Dernier message: 28/11/2009, 19h18
  3. [Framework] AOP - Héritage à plusieurs niveaux
    Par teletexte dans le forum Spring
    Réponses: 0
    Dernier message: 18/02/2009, 18h02
  4. Réponses: 10
    Dernier message: 25/01/2008, 17h24
  5. [Hibernate] Héritage sur plusieurs niveaux
    Par srvremi dans le forum Hibernate
    Réponses: 2
    Dernier message: 31/05/2006, 19h39

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