IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Insertion en cascade


Sujet :

Java EE

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut Insertion en cascade
    Bonjour,

    J'ai une question car je bloque sur un problème que je n'arrives pas à résoudre.

    Admettons une entité MAISON qui à une Collection d'entités PIECE mappées bidirectionnellement. L'entité PIECE à une Collection de MEUBLEs mappées bidirectionnellement.

    Depuis l'application WEB

    Pour permettre à l'internaute de créer sa maison, il peut créer une MAISON en session et y ajouter des PIECEs. Il peut ensuite ajouter des MEUBLEs à ses pièces. Une fois qu'il désire enregistrer sa MAISON, je fais un persist de la MAISON mais cela échoue à chaque fois.

    Une constatation aussi : Si je fais un persist de la MAISON et qu'elle n'a aucune PIECE dans sa Collection, l'insertion réussi parfaitement.

    Directement dans le session bean

    Si je créé une MAISON dans une méthode quelconque du session bean avec des PIECEs et que je fais un persist, cela fonctionne parfaitement.


    Merci si vous pouvez m'aider.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    J'ai trouvé plusieurs infos sur des forums américains notamment :

    • Ajouter les librairies TopLink à l'application cliente
    • Utiliser des types EAGER et non LAZY pour les insertions


    J'ai beau avoir effectué ces tâches, impossible d'effectuer une insertion d'une entité depuis ma Servlet. par contre, depuis le session bean ca fonctionne toujours correctement.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Peux-tu montrer les Entity beans concernés ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut Entités
    Voici mes entités :

    ELCourse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    @Entity
    @Table(name="Courses")
    @NamedQueries({
        @NamedQuery(
            name="findAllCourse",
            query="SELECT course FROM ELCourse AS course"),
        @NamedQuery(
            name="findCourseByName",
            query="SELECT course FROM ELCourse AS course WHERE course.name=:name"),
        @NamedQuery(
            name="findCourseById",
            query="SELECT course FROM ELCourse AS course WHERE course.id=:courseId")}      
        ) 
    public class ELCourse implements Serializable {
        private static final long serialVersionUID = 1L;
        private Long id;
        private String name;
        private String description;
        private Collection<ELModule> modules = new ArrayList<ELModule>();
        private Date insert_on;  
        private int duration;
        private int lang=0;
        private boolean deleted = false;
     
        @PrePersist
        void prePersist()
        {
            System.out.println("Pre Persist called on ELCourse !");  
        }
     
        public void setId(Long id) {
            this.id = id;
        }
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Long getId() {
            return id;
        }
     
        public ELCourse() {
        }
     
        public String getDescription() {
            return description;
        }
     
        public void setDescription(String description) {
            this.description = description;
        }
     
        public Date getInsert_on() {
            return insert_on;
        }
     
        public void setInsert_on(Date insert_on) {
            this.insert_on = insert_on;
        }
     
        @OneToMany(cascade ={CascadeType.ALL},fetch=FetchType.EAGER)
        public Collection<ELModule> getModules() {
            return modules;
        }
     
        public void setModules(Collection<ELModule> modules) {
            this.modules = modules;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public boolean isDeleted() {
            return deleted;
        }
     
        public void setDeleted(boolean deleted) {
            this.deleted = deleted;
        }
     
        public int getDuration() {
            return duration;
        }
     
        public void setDuration(int duration) {
            this.duration = duration;
        }
     
        public int getLang() {
            return lang;
        }
     
        public void setLang(int lang) {
            this.lang = lang;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (id != null ? id.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof ELCourse)) {
                return false;
            }
            ELCourse other = (ELCourse) object;
            if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() {
            return "fr.iosisgroup.elearning.dd.bo.ELCourse[id=" + id + "]";
        }
     
    }
    ELModule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    @Entity
    @Table(name="Modules")
    public class ELModule implements Serializable, Comparable<ELModule> {
        private static final long serialVersionUID = 1L;
        private Long id;
        private String name;
        private int moduleNumber;
        private String description;
        private Collection<ELStep> steps = new ArrayList<ELStep>();
        private int duration;    
     
        @PrePersist
        void prePersist()
        {
            System.out.println("Pre Persist called on ELModule !");  
        }    
     
     
        public void setId(Long id) {
            this.id = id;
        }
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Long getId() {
            return id;
        }
     
        public ELModule() {
        }
     
        public String getDescription() {
            return description;
        }
     
        public void setDescription(String description) {
            this.description = description;
        }
     
        public int getDuration() {
            return duration;
        }
     
        public void setDuration(int duration) {
            this.duration = duration;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        @OneToMany(cascade ={CascadeType.ALL},fetch=FetchType.EAGER)
        public Collection<ELStep> getSteps() {
            return steps;
        }
     
        public void setSteps(Collection<ELStep> steps) {
            this.steps = steps;
        }
     
        public int getModuleNumber() {
            return moduleNumber;
        }
     
        public void setModuleNumber(int moduleNumber) {
            this.moduleNumber = moduleNumber;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (id != null ? id.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof ELModule)) {
                return false;
            }
            ELModule other = (ELModule) object;
            if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() {
            return "fr.iosisgroup.elearning.dd.bo.ELModule[id=" + id + "]";
        }
     
        public int compareTo(ELModule o) {
            if(this.getModuleNumber()<o.getModuleNumber())
                return -1;
            if(this.getModuleNumber()>o.getModuleNumber())
                return 1;
            return 0;
        }
    }
    ELStep
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    @Entity
    @Table(name="Steps")
    @NamedQueries({
        @NamedQuery(
            name="findStepById",
            query="SELECT step FROM ELStep AS step WHERE step.id=:stepId"),   
        @NamedQuery(
            name="findAllSteps",
            query="SELECT steps FROM ELStep AS steps")}      
        ) 
    public class ELStep implements Serializable, Comparable<ELStep>{
        private static final long serialVersionUID = 1L;
        private Long id;
        private String name;
        private String URIContent;
        private int stepPosition;
        private int duration;
        private String description;
     
        @PrePersist
        void prePersit()
        {
            System.out.println("Pre Persist called on ELStep !");  
        }    
     
        public ELStep() {
        }
     
        public String getURIContent() {
            return URIContent;
        }
     
        public void setURIContent(String URIContent) {
            this.URIContent = URIContent;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }    
     
        public void setId(Long id) {
            this.id = id;
        }
     
        public String getDescription() {
            return description;
        }
     
        public void setDescription(String description) {
            this.description = description;
        }
     
        public int getDuration() {
            return duration;
        }
     
        public void setDuration(int duration) {
            this.duration = duration;
        } 
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Long getId() {
            return id;
        }
     
        public int getStepPosition() {
            return stepPosition;
        }
     
        public void setStepPosition(int stepPosition) {
            this.stepPosition = stepPosition;
        }
     
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (id != null ? id.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof ELStep)) {
                return false;
            }
            ELStep other = (ELStep) object;
            if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() {
            return "fr.iosisgroup.elearning.dd.bo.Step[id=" + id + "]";
        }
     
        public int compareTo(ELStep o) {
            if(this.getStepPosition()<o.getStepPosition())
                return -1;
            if(this.getStepPosition()>o.getStepPosition())
                return 1;
            return 0;
        }
    }
    Je ferai aussi remarquer que la récupération des entités fonctionne très bien depuis l'application web. Uniquement le persist et le merge pose problème lorsque appelé depuis l'application web.

    Les entités anciennement appelées MAISON PIECE et MEUBLE sont nouvellement renommées ELCourse ELModule ELStep.

    Merci de votre aide.

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Comment as-tu configuré le persistence.xml ?

    En général, on laisse le conteneur EJB s'occuper de la persistence via JTA.
    De ce fait, on ne peut pas directement persister de la couche web, à moins de demander un EntityManager par la couche application (mais là, on n'est plus JTA) via une Factory.

    Bref, ce n'est pas forcément surprenant que la couche web ne persiste pas mais j'attends de connaître le paramétrage...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    Ouais,

    Mais la couche web persiste très bien, tant qu'il n'y a pas de cascade a faire... L'insertion d'utilisateur se fait très bien par exemple.

    Persistance.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
      <persistence-unit name="IOSIS_EAR_v3_PU" transaction-type="JTA">
        <provider>oracle.toplink.essentials.PersistenceProvider</provider>
        <jta-data-source>elearningDD_ejb_DS</jta-data-source>
        <properties>
          <property name="toplink.ddl-generation" value="create-tables"/>
        </properties>
      </persistence-unit>
    </persistence>

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    Pour illustrer ce que je dis :

    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
     
    EjbLocator locator = EjbLocator.getLocator();
    GlobalService service = locator.getGlobalService();
     
    //Fonctionne très bien
    ELCourse course = new ELCourse();
    course.setName("Course1");
    service.addNewCourse(course);
     
     
    ELCourse course2 = new ELCourse();
    course2.setName("Course2");
    ELModule module = new ELModule();
    module.setName("ModuleTest");
    course2.getModules().add(module );
    service.addNewCourse(course2);   //MarshallException

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ton erreur est plutôt surprenante, on dirait que tu es en mode attaché.
    Le code montré est dans un EJB ou dans une classe du serveur web ?

    Je pense que le problème vient de TopLink, j'utilise Hibernate, et il n'y aurait aucun problème par rapport au code montré

    Peux-tu également montrer le code de ton service ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    Voici la méthode appelée dans le code.
    Sinon, comment fais-je pour utiliser hibernate à la place de TopLink, dois-je ajouter des librairies ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        public ELCourse addNewCourse(ELCourse course) {
            try
            {
                course.setInsert_on(new Date(new java.util.Date().getTime()));
                em.persist(course);
                return em.find(ELCourse.class, course.getId());
            }catch(PersistenceException e)
            {
                e.printStackTrace();
                return null;
            }
        }
    Le problème, c'est que si le ELCourse à une liste de ELModule, le debugger ne passe même pas dans cette méthode...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    Si je met Hibernate à la place de TopLink j'ai une exception au déploiement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence
    J'ai ajouté le package hibernate-client.jar, mais impossible de trouver HibernatePersistance...

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Là, on voit déjà plus...

    Tu utilises la méthode persist et tu essayes de récupérer l'instance de ELCourse via course.getId(), mais à ce moment, l'id n'est pas renseigné.
    Tu peux essayer avec merge qui renvoie l'instance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    return em.merge(course);
    Pour le fait de passer par hibernate, si tu vas sur leur site, tu pourras récupérer tous les jar
    http://www.hibernate.org/6.html

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    Pour ce qui est de du persist, il génère bien un id. Donc l'appel de la méthod

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return em.find(ELCourse.class, course.getId());
    renvoie bien le cours nouvellement inséré. Ce qui se passe, c'est que je ne passe meme pas dans cette méthode si le cours à une collection non vide.
    Et le merge ne fonctionnera pas si le cours n'a jamais été inséré.

    Merci de me dire si tu as d'autres idées. Et merci aussi de m'aider.

  13. #13
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ben là...

    En résumé, le premier appel service.addNewCourse(...) fonctionne et pas le deuxième, c'est bien ça ?
    Peux-tu essayer d'inverser les 2 tests, pour voir si ça vient comme tu le penses du fait que tu as charger un module à ton cours ou plutôt d'un problème lié à la fermeture du contexte.

    Pourrais-tu montrer la trace d'erreur complète ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    Oui, j'ai essayé dans tous les sens imaginables. Sans y ajouter de modules ca fonctionne, avec un module ca foire.

    Voici ma trace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
     
    "IOP00810257: (MARSHAL) Could not load class fr.iosisgroup.elearning.dd.ejb.entities.ELModule"
    org.omg.CORBA.MARSHAL:   vmcid: SUN  minor code: 257 completed: Maybe
            at com.sun.corba.ee.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:9684)
            at com.sun.corba.ee.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:9699)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1042)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:896)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:890)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:880)
            at com.sun.corba.ee.impl.encoding.CDRInputStream.read_abstract_interface(CDRInputStream.java:511)
            at com.sun.corba.ee.impl.io.IIOPInputStream.readObjectDelegate(IIOPInputStream.java:386)
            at com.sun.corba.ee.impl.io.IIOPInputStream.readObjectOverride(IIOPInputStream.java:547)
            at java.io.ObjectInputStream.readObject(ObjectInputStream.java:345)
            at java.util.ArrayList.readObject(ArrayList.java:593)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at com.sun.corba.ee.impl.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1679)
            at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1202)
            at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:422)
            at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:362)
            at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:328)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:966)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1052)
            at com.sun.corba.ee.impl.encoding.CDRInputStream.read_value(CDRInputStream.java:475)
            at com.sun.corba.ee.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:1974)
            at com.sun.corba.ee.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2199)
            at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1211)
            at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:422)
            at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:362)
            at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:328)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:966)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1052)
            at com.sun.corba.ee.impl.encoding.CDRInputStream.read_value(CDRInputStream.java:475)
            at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:368)
            at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:435)
            at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:152)
            at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
            at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
            at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
            at com.sun.corba.ee.impl.protocol.SharedCDRClientRequestDispatcherImpl.marshalingComplete(SharedCDRClientRequestDispatcherImpl.java:183)
            at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:219)
            at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:192)
            at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
            at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:225)
            at fr.iosisgroup.elearning.dd.ejb.services.__GlobalService_Remote_DynamicStub.addNewCourse(fr/iosisgroup/elearning/dd/ejb/services/__GlobalService_Remote_DynamicStub.java)
            at fr.iosisgroup.elearning.dd.ejb.services._GlobalService_Wrapper.addNewCourse(fr/iosisgroup/elearning/dd/ejb/services/_GlobalService_Wrapper.java)
            at fr.iosisgroup.elearning.dd.actions.EditCourse.execute(EditCourse.java:205)
            at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
            at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
            at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
            at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
            at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
            at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
            at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
            at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
            at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
            at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
    Unhandled Exception thrown: class javax.ejb.EJBException
    StandardWrapperValve[action]: PWC1406: Servlet.service() for servlet action threw exception
    javax.ejb.EJBException: nested exception is: java.rmi.MarshalException: CORBA MARSHAL 1398079745 Maybe; nested exception is: 
            org.omg.CORBA.MARSHAL: ----------BEGIN server-side stack trace----------
    org.omg.CORBA.MARSHAL:   vmcid: SUN  minor code: 257 completed: Maybe
            at com.sun.corba.ee.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:9684)
            at com.sun.corba.ee.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:9699)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1042)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:896)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:890)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:880)
            at com.sun.corba.ee.impl.encoding.CDRInputStream.read_abstract_interface(CDRInputStream.java:511)
            at com.sun.corba.ee.impl.io.IIOPInputStream.readObjectDelegate(IIOPInputStream.java:386)
            at com.sun.corba.ee.impl.io.IIOPInputStream.readObjectOverride(IIOPInputStream.java:547)
            at java.io.ObjectInputStream.readObject(ObjectInputStream.java:345)
            at java.util.ArrayList.readObject(ArrayList.java:593)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at com.sun.corba.ee.impl.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1679)
            at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1202)
            at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:422)
            at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:362)
            at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:328)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:966)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1052)
            at com.sun.corba.ee.impl.encoding.CDRInputStream.read_value(CDRInputStream.java:475)
            at com.sun.corba.ee.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:1974)
            at com.sun.corba.ee.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2199)
            at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1211)
            at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:422)
            at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:362)
            at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:328)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:966)
            at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1052)
            at com.sun.corba.ee.impl.encoding.CDRInputStream.read_value(CDRInputStream.java:475)
            at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:368)
            at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:435)
            at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:152)
            at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
            at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
            at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
            at com.sun.corba.ee.impl.protocol.SharedCDRClientRequestDispatcherImpl.marshalingComplete(SharedCDRClientRequestDispatcherImpl.java:183)
            at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:219)
            at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:192)
            at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
            at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:225)
            at fr.iosisgroup.elearning.dd.ejb.services.__GlobalService_Remote_DynamicStub.addNewCourse(fr/iosisgroup/elearning/dd/ejb/services/__GlobalService_Remote_DynamicStub.java)
            at fr.iosisgroup.elearning.dd.ejb.services._GlobalService_Wrapper.addNewCourse(fr/iosisgroup/elearning/dd/ejb/services/_GlobalService_Wrapper.java)
            at fr.iosisgroup.elearning.dd.actions.EditCourse.execute(EditCourse.java:205)
            at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
            at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
            at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
            at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
            at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
            at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
            at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
            at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
            at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
            at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
    ----------END server-side stack trace----------  vmcid: SUN  minor code: 257 completed: Maybe
    A savoir aussi, j'ai essayé de passer une entité à mon session bean. Dès lors que cet objet contient une référence vers un autre objet, ou une liste d'objets, ca ne marche plus...

    Par contre la méthode qui me renvoie tous les cours, renvoie tous les cours et tous les modules et toutes les étapes asociées (On a du préalablement l'inséré directement dans la base de donnée ou directement depuis le session bean).

    Dès que je passe une entité qui contient une référence à une autre entité, ca plante.

  15. #15
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je ne sais pas quoi te dire, ça à l'air de venir du serveur Glassfish ou Toplink ou un paramétrage que je n'ai pas encore vu... mais ton code devrais fonctionner.
    Si tu pouvais essayer sur un serveur JBoss on pourrait éliminer le problème de code pour ce concentrer sur les autres causes possibles mais je ne sais pas si tu peux faire ça...

    Ton EjbLocator retourne une interface @Remote, c'est bien ça ?

    Peux-tu faire un schéma d'enchainement des différents acteurs dans le cas présent ?

    (pour l'instant, je n'ai pas trop d'idées, désolé)
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    Merci,

    Je vais tester avec JBoss.

    L'EjbLocator fait un lookup du contexte afin de récupérer les interface distantes voulues (en l'occurence GlobalService) qui est chargé de l'insertion de cours, de leur modification, etc.

    Donc, mon action Struts appel ce locator afin de récupérer le service, il appel la méthode getCourses() qui renvoie la liste des cours présents dans la base de données.
    Puis, il appel la méthode addNewCourse(nouveauCours) qui est censé l'inséré. Je pense que c'est un problème d'entitées détachées, mais j'ai beau faire tous les forums java du web, impossible d'y trouver une solution...

    Donc je vais tester avec JBoss, on verra bien.

  17. #17
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je ne pense pas que le problème vienne d'une entité détachée, l'erreur incrimine le mécanisme de transmission d'objet à distance (marshalling ou serialisation), donc, on est à priori bien avant qu'il ne puisse se rendre compte de quoi que ce soit...

    Si tu prends JBoss (4.2.2 tant qu'à faire), tu auras (par défaut) accès au JPA hibernate.

    Bonne chance
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Insertion cascade avec JPA ne marche pas
    Par marwen109 dans le forum JPA
    Réponses: 1
    Dernier message: 25/03/2012, 21h57
  2. Insertion en cascade
    Par Madfrix dans le forum JPA
    Réponses: 5
    Dernier message: 25/03/2012, 00h28
  3. [SQL2K] Insert en cascade, trigger
    Par Faboul dans le forum Développement
    Réponses: 6
    Dernier message: 08/08/2007, 10h48
  4. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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