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

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

JPA Java Discussion :

Problème de LazyInitializationException


Sujet :

JPA Java

  1. #41
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par chatis Voir le message
    J'ai enlevé tous les featch.EAGER de mon projet et tous les List de toutes mes entity... Mais j'ai toujours ce problème de LazyInitializeException... Est-il possible de récupérer seulement les ID quand on ne veut rien de plus ?
    vous ne répondez toujours pas à la simple question : comment gérez-vous les transactions ?

  2. #42
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Tu peux y aller en requête Objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select maClasseA from ClassA maClasseA
    Testes voir les gets sur les resultats retournés par cette requete pour voir si les entités associées sont préchargées. et redis nous

  3. #43
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Citation Envoyé par chatis Voir le message
    Pour ce qui est de mes transactions, elles sont générées automatiquement par JTA. Je n'ai rien fait d'autre que mettre JTA dans mon persistence.xml comme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.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_2_0.xsd">
      <persistence-unit name="SportReserv-PU" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/sportreserv</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments" value="true"/>
        </properties>
      </persistence-unit>
    </persistence>
    Qu'est ce que ca fait cette annotation ? Je n'ai rien trouvé la dessus sur le net...

    A savoir que je n'utilise aucun framework en Java si ce n'est hibernate. la structure de mon projet est : PHP (client) + RESTFul + Manager + DAO + Entité

    Merci encore de votre aide et j'espère arrivé au bout de ce problème qui me tient maintenant depuis 2 semaines !

    Si j'en avais parlé il y a quelques message... Mais je ne fait rien d'autre que mettre JTA dans mon persistence.xml... car toutes est géré automatiquement non ?

  4. #44
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Tu peux y aller en requête Objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select maClasseA from ClassA maClasseA
    Testes voir les gets sur les resultats retournés par cette requete pour voir si les entités associées sont préchargées. et redis nous
    LazyInitializeException... pas de changement..

  5. #45
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Mais les getters sont préchargés... Dans ma méthode RESTFul, je peux afficher les id de mes collections. Mais au moment de l'envoyer à mon client PHP, j'ai cette erreur. Lors de la transformation en JSON je pense....

  6. #46
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par chatis Voir le message
    Mais les getters sont préchargés... Dans ma méthode RESTFul, je peux afficher les id de mes collections. Mais au moment de l'envoyer à mon client PHP, j'ai cette erreur. Lors de la transformation en JSON je pense....
    C'est quoi cette methode REStFul? connais pas. Dis au niveau architecture, c'est des services que tu dois fournir, et REST renseignes des flux xml c ca?

  7. #47
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    voila la méthode @GET de mon service RESTFul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        @GET
        @Path("{id}")
        @Produces({"application/json", "application/xml"})
        public Pays find(@PathParam("id") Integer id) {
            Pays p = pays.find(id);
            System.out.println(p.getLocalites());
            return p;
        }
    et voila la sortie de mon println

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INFO: [ch.plugin.sportreserv.entity.Localite[ iDLocalite=21 ], ch.plugin.sportreserv.entity.Localite[ iDLocalite=24 ]]
    Donc c'est bien au moment de convertir que ca plante.. je pense que ca vient du @XmlRootElement... car ni en JSON ni en XML ca marche..

  8. #48
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    C'est quoi cette methode REStFul? connais pas. Dis au niveau architecture, c'est des services que tu dois fournir, et REST renseignes des flux xml c ca?
    Oui excuse moi pour mon terme... C'est service et non méthode.. Mais oui c'est ca... je fournis des services et REST renseignes des flux XML ou JSON

  9. #49
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Je suis désolé mais je ne peux mieux t'aider que ca, j'avais déjà rencontré un souci pareil en utilisant Dozer, j'avais beau mettre des LAZY, sauf que Dozer quand il avait besoin d'une entité associée, lui meme envoyait hibernate aller me chercher les entités associées. Je te proposerai une derniere solution si jamais tu trouves rien d'autres, c'est vraiment la solution extreme extreme. En fait que tu casses toutes tes relations OneToMany, et mette simplement des id comme attribut privé pour faire la jointure entre 2 classes. L'avantage c'est que ca resoudra ton pb et du coup plus besoin de EAGER ou LAZY, l'inconvenient c'est que pour avoir les entités associées tu devras lancer forcement une requete plutot. donc continues de chercher, tu trouves rien tu implements celle là.

  10. #50
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Merci de ton aide... Mais c'est incroyable qu'il n'y ai pas de moyen de faire ca comme ca... Car ta solution m'est interdite par les contraintes de mon projet qui stipule que je dois travailler entièrement en objet... donc je n'ai pas le droit de travailler avec des id...

    De plus faire comme cela ne donne aucun avantage à utiliser Hibernate qui est également une contrainte de mon projet..... alors je suis FICHU :-(

  11. #51
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Dans la solution que je te propose , tu restes bien sur en objet, y'a rien de relationnel, mais bon je suis d'accord , c'est pas propre.

  12. #52
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par chatis Voir le message
    Si j'en avais parlé il y a quelques message... Mais je ne fait rien d'autre que mettre JTA dans mon persistence.xml... car toutes est géré automatiquement non ?
    définir le manager des transactions, ce n'est pas définir où sont les frontières des transactions, leur propagation, si elles sont read-only ou pas…

    on peut donc en conclure que vous ne gérez pas les transactions ce qui explique vos LazyException…

  13. #53
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Mais comment les gérer si on utilise pas le framework Spring ? je ne trouve que des infos avec spring.. et ca va pouvoir m'aider a récupérer que l'id de ma collection ? a moins que je fasse un get ? merci...

  14. #54
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par chatis Voir le message
    Mais comment les gérer si on utilise pas le framework Spring ? je ne trouve que des infos avec spring.. et ca va pouvoir m'aider a récupérer que l'id de ma collection ? a moins que je fasse un get ? merci...
    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
     
    Session session = getSessionFactory().openSession() ;
    Transaction tx = null ;
    try {
        tx = session.beginTransaction() ;
        … do the job …
        tx.commit() ;
    }
    catch(Exception e) {
        if (tx != null) {
           try {
                tx.rollback() ;
           }
           catch(HibernateExcepiton he) {
              // log …
           }
         }
         throw e ;
    }
    finally {
           try {
                session.close() ;
           }
           catch(HibernateExcepiton he) {
              throw he ;
           }
    }

  15. #55
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Voila mon nouveau code :
    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
        @GET
        @Produces({"application/json", "application/xml"})
        public List<Sport> findAll() throws Exception {
         List <Sport> sp = null;   
     
         Session session = HibernateUtil.getSessionFactory().openSession() ;
         Transaction tx = null ;
          try {
            tx = session.beginTransaction() ;
              sp =  sport.getAllSport();
            tx.commit() ;
        }
        catch(Exception e) {
            if (tx != null) {
               try {
                    tx.rollback() ;
               }
               catch(Exception he) {
                 throw he;
               }
             }
             throw e ;
        }
        finally {
               try {
                    session.close() ;
               }
               catch(Exception he) {
                  throw he ;
               }
        }
    return sp;
     
        }
    Mais l'erreur reste la même... LazyInitialiseException..

    Le problème ne vient pas de la récupération de mes données. mais bien lors de la sérialisation de ceux-ci en xml ou json. Lors de cette étape, l'objet essaye d'aller chercher les objets auxquels il est lié par des collections. Mais je veux juste qu'il me récupère l'ID et qu'il ne va pas plus loins que ca. A moins que j'appelle le getter de la collection avant la sérialisation et dans ce cas il va me rechercher l'objet.

  16. #56
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    si vous sérialisez en dehors du openSession/closeSession rien d'étonnant qu'il y ait une LazyExceptiion…

  17. #57
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Ok alors on avance....

    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
     
        @GET
        @Produces({"application/json", "application/xml"})
        public String findAll() throws Exception {
         String sp = null;   
     
         Session session = HibernateUtil.getSessionFactory().openSession() ;
         Transaction tx = null ;
          try {
            tx = session.beginTransaction() ;
     
              Gson g = new Gson();
              sp = g.toJson(sport.getAllSport());
            tx.commit() ;
        }
        catch(Exception e) {
            if (tx != null) {
               try {
                    tx.rollback() ;
               }
               catch(Exception he) {
                 throw he;
               }
             }
             throw e ;
        }
        finally {
               try {
                    session.close() ;
               }
               catch(Exception he) {
                  throw he ;
               }
        }
    return sp;
     
        }
    j'ai sérialisé à l'intérieur et maintenant j'ai cette erreur :

    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
     
    ATTENTION: StandardWrapperValve[org.netbeans.rest.application.config.ApplicationConfig]: PWC1406: Servlet.service() for servlet org.netbeans.rest.application.config.ApplicationConfig threw exception
    java.lang.IllegalStateException: circular reference error
      Offending field: sport
      Offending object: preserveType: false, type: class ch.plugin.sportreserv.entity.Sport, obj: ch.plugin.sportreserv.entity.Sport[ iDSport=1 ]
    	at com.google.gson.CircularReferenceException.createDetailedException(CircularReferenceException.java:43)
    	at com.google.gson.JsonSerializationVisitor.visitObjectField(JsonSerializationVisitor.java:117)
    	at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:69)
    	at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
    	at com.google.gson.JsonSerializationVisitor.getJsonElementForChild(JsonSerializationVisitor.java:147)
    	at com.google.gson.JsonSerializationVisitor.addAsChildOfObject(JsonSerializationVisitor.java:127)
    	at com.google.gson.JsonSerializationVisitor.visitObjectField(JsonSerializationVisitor.java:114)
    	at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:69)
    	at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
    	at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62)
    	at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53)
    	at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:643)
    	at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:624)
    	at com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerializer(JsonSerializationVisitor.java:184)
    	at com.google.gson.JsonSerializationVisitor.visitFieldUsingCustomHandler(JsonSerializationVisitor.java:204)
    	at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63)
    	at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
    	at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62)
    	at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53)
    	at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:643)
    	at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:624)
    	at com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerializer(JsonSerializationVisitor.java:184)
    	at com.google.gson.JsonSerializationVisitor.visitUsingCustomHandler(JsonSerializationVisitor.java:160)
    	at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:101)
    	at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62)
    	at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53)
    	at com.google.gson.Gson.toJsonTree(Gson.java:220)
    	at com.google.gson.Gson.toJson(Gson.java:260)
    	at com.google.gson.Gson.toJson(Gson.java:240)
    	at service.SportFacadeREST.findAll(SportFacadeREST.java:43)
    	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 org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5367)
    	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    	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.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:862)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:371)
    	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5339)
    	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5327)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    	at $Proxy2714.findAll(Unknown Source)
    	at service.__EJB31_Generated__SportFacadeREST__Intf____Bean__.findAll(Unknown Source)
    	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.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:167)
    	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:70)
    	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:279)
    	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:86)
    	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
    	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:74)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1347)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1279)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1219)
    	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:419)
    	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
    	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    	at java.lang.Thread.run(Thread.java:619)
    Caused by: com.google.gson.CircularReferenceException: circular reference error
    	at com.google.gson.JsonSerializationVisitor.start(JsonSerializationVisitor.java:61)
    	at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:109)
    	at com.google.gson.JsonSerializationVisitor.getJsonElementForChild(JsonSerializationVisitor.java:147)
    	at com.google.gson.JsonSerializationVisitor.addAsChildOfObject(JsonSerializationVisitor.java:127)
    	at com.google.gson.JsonSerializationVisitor.visitObjectField(JsonSerializationVisitor.java:114)
    	... 96 more
    Mais entre (), que je fasse comme ci-dessous ou comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        @GET
        @Produces({"application/json", "application/xml"})
        public String findAll() throws Exception {
              Gson g = new Gson();
              String sp = g.toJson(sport.getAllSport());
     
              return sp;
        }
    L'erreur reste la même... donc je reviens toujours à mon point de départ qui est :

    Comment récupérer seulement les ID lorsque mon entité fait appel à d'autres objets par relations ? et récupérer l'objet en entier si je fait appel à son getter ? et non récupérer tout l'objet lors de la sérialisation désérialisation....

  18. #58
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par chatis Voir le message
    Ok alors on avance....


    L'erreur reste la même... donc je reviens toujours à mon point de départ qui est :

    Comment récupérer seulement les ID lorsque mon entité fait appel à d'autres objets par relations ? et récupérer l'objet en entier si je fait appel à son getter ? et non récupérer tout l'objet lors de la sérialisation désérialisation....
    pour ne pas sérialiser toute la DB, vous devez avoir entre vos objets de la DB et votre UI, une couche de "façade" qui sait ce qui doit être transmis à l'UI et ce sont les objets de façade qui sont sérialisés.
    C'est aussi au niveau de cette couche que vous pourrez plus tard ajouter par exemple du filtrage de sécurité (en lignes et/ou en colonnes).
    Et cette couche de service de "façade", fera les queries (éventuellement natifs) pour ne récupérer que les champs à sérialiser…

  19. #59
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Avez-vous un exemple de comment faire ca ? car c'est exactement ce que j'ai... un service REST, qui redirige l'appel vers un Manager, qui lui appel le DAO pour récupérer ce que j'ai besoin... Mais je ne sais pas comment faire pour lui dire de récupérer seulement ce que j'ai besoin sans qu'il prenne tous les objets des relations... Ca m'aiderait GRANDEMENT !!! Car le problème dur depuis bien longtemps !!! Encore merci...

  20. #60
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par chatis Voir le message
    Avez-vous un exemple de comment faire ca ? car c'est exactement ce que j'ai... un service REST, qui redirige l'appel vers un Manager, qui lui appel le DAO pour récupérer ce que j'ai besoin... Mais je ne sais pas comment faire pour lui dire de récupérer seulement ce que j'ai besoin sans qu'il prenne tous les objets des relations... Ca m'aiderait GRANDEMENT !!! Car le problème dur depuis bien longtemps !!! Encore merci...
    faut croire que non : ce n'est pas ce que avez, sinon vous n'auriez pas de problème…

    votre service REST doit faire appel à un service "Façade" qui sait comment convertir un objet brut de la DB en un objet "façade" ne contenant que ce qui doit être sérialisé (et donc éviter les cycles et les lazy…), ce service "Façade" est soit d'une nouvelle taxonomie (et utilisera Manager comme un "delegate" pour les opérations d'accès au Repository), soit tout simplement il fait partie d'une taxonomie de ce que vous appelez "Manager" et donc il sait par nature comment accéder au "Repository"…
    (et donc au lieu de renvoyer des objets Sport il renverra des objets SportFacade complètement détachés de la gestion ORM…)

Discussions similaires

  1. Problème LazyInitializationException !
    Par tR4x- dans le forum Hibernate
    Réponses: 2
    Dernier message: 02/01/2012, 14h10
  2. Réponses: 0
    Dernier message: 03/11/2010, 17h09
  3. Réponses: 17
    Dernier message: 29/12/2008, 10h29
  4. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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