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

GWT et Vaadin Java Discussion :

Intégration de GWT avec Hibernate


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 73
    Par défaut Intégration de GWT avec Hibernate
    Bonjour,
    Quand j'essaye de faire un appelle RCP d'une méthode de service ca passe sans aucun problème, mais si cette méthode de service consulte la base de données j'ai l'erreur suivante:
    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
     
    Grave: [1317416487357000] javax.servlet.ServletContext log: Exception while dispatching incoming RPC call
    com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract int com.mailing.client.GreetingService.ValiderUser(java.lang.String,java.lang.String)' threw an unexpected exception: java.lang.NoClassDefFoundError: org/hibernate/HibernateException
    	at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385)
    	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588)
    	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
    	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
    	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
    	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    	at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    	at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:349)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.Server.handle(Server.java:326)
    	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
    	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
    	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
    Caused by: java.lang.NoClassDefFoundError: org/hibernate/HibernateException
    	at com.mailing.persistance.GetUtilisateur.<init>(GetUtilisateur.java:13)
    	at com.mailing.business.IdentifierUser.<init>(IdentifierUser.java:17)
    	at com.mailing.server.GreetingServiceImpl.ValiderUser(GreetingServiceImpl.java:16)
    	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:601)
    	at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100)
    	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
    	... 30 more
    Caused by: java.lang.ClassNotFoundException: org.hibernate.HibernateException
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    	at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    	... 39 more
    Sachant que j'utilise Hibernate pour le mapping objet/relationnelle et que du coté accèes données, sans appelle RPC ca passe aussi sans aucun problème, donc j'ai pas de problème du coté Hibernate, l'erreur surgit juste quand je combine les deux (RPC et Hibernate)..!!!!

    Mercii d'avance pour votre aide!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    une idée comme ça....
    tes méthodes de service sont susceptibles de lever une exception de type HibernateException, à ce que je peux comprendre.
    Donc côté client, ce type d'exception peut être catcher.

    Et malheureusement, la classe HibernateException n'est pas connu côté client et elle ne sera jamais car aucune traduction possible en javascript est possible pour cette classe là !

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut !

    developpCathy,

    Je sais pas comment est builder ton projet mais à l'exécution, est ce que ta servlet GWT a bien les dépendances sur les libs Hibernate ?
    Si c'est pas le cas, ajoute les.
    Si c'est le cas (ou une fois ajouté), tu dois catcher du côté de ta servlet qui fait l'appel vers tes services en BDD, toute exception susceptible d'être levée.
    Tu attrapes l'exception et tu en renvoies une nouvelle, conforme à la signature de ta méthode. Pour des soucis de transparence de l'erreur, il est pas plus mal que tu valorises ton exception avec deux infos : la classe de l'exception et le message de l'exception.
    Tu peux par exemple créer ta propre exception : ErreurTechniqueGWT avec deux champs de type String : classeException, messageException

    En gros, tu crées des DTO pour t'abstraire des classes d'Hibernate.
    Et pendant qu'on y est, il faudra faire pareil avec tes classes entités Hibernate contenant des classes non compatibles avec gwt.
    T'as pas mal d'infos sur le net dessus.
    Il y aussi GILEAD, une api qui se met entre l'api GWT standard et Hibernate et qui fait ce travail pour toi.

    valkeke, ton analyse est bonne.
    Par contre,
    Donc côté client, ce type d'exception peut être catcher.
    Justement pour les raisons que tu évoques : non.
    Les exceptions et classes plus généralement de l'api Hibernate ne peuvent pas être utilisées, donc catchés par le client GWT si elles ne font pas partis des sources client GWT (-> transformation Javascript).

    Et malheureusement, la classe HibernateException n'est pas connu côté client et elle ne sera jamais car aucune traduction possible en javascript est possible pour cette classe là !
    Aucune traduction n'est possible, oui et non.
    Cela reste possible pour les classes compatibles avec le JRE GWT. Mais c'est souvent une solution compliquée et favorisant un couplage non souhaité.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    on parle bien de cette classe là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.HibernateException
    Par conséquent tu peux développer, cela peut être intéressant quand tu dis
    Aucune traduction n'est possible, oui et non.
    Cela reste possible pour les classes compatibles avec le JRE GWT. Mais c'est souvent une solution compliquée et favorisant un couplage non souhaité.
    c'est surtout le OUI de la réponse.....car pour moi, j'ai du mal à voir comment tu vas pouvoir faire pour pouvoir utiliser cette classe d'exception côté client en GWT.
    Rien n'est impossible je te l'accorde...cela pourrait vouloir dire que GWT n'est pas limité AUJOURD'HUI à certaines classes JAVA, biensûr côté CLIENT.
    tu travailles chez Google.....

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    c'est surtout le OUI de la réponse.....car pour moi, j'ai du mal à voir comment tu vas pouvoir faire pour pouvoir utiliser cette classe d'exception côté client en GWT.
    Rien n'est impossible je te l'accorde...cela pourrait vouloir dire que GWT n'est pas limité AUJOURD'HUI à certaines classes JAVA, biensûr côté CLIENT.
    Si si, GWT est en effet limité à certaines classes côté client, c'est les contraintes de l'Emulation du JRE par GWT :
    http://code.google.com/intl/fr/webto...Emulation.html
    Maintenant, au delà de la classe org.hibernate.HibernateException, toute classe java compatible avec le JRE GWT peut être mise (en non compilée bien-sûr) dans un module client d'une appli GWT et à la compilation GWT disposer de sa contre partie cliente, donc en JS.
    Maintenant pour cela, il faut disposer du code source et pouvoir transformer la classe souhaitée mais également toutes celles dont elle dépend et ce n'est pas une mince affaire.
    Comme dit dans mon post initial, c'est souvent une solution compliquée et favorisant un couplage non souhaité. Mais ça reste possible techniquement lorsque les classes que l'on veut disposer côté client le permettent.
    tu travailles chez Google.....
    J'aurais bien voulu
    a++

  6. #6
    Membre chevronné
    Profil pro
    Lead Tech Agile
    Inscrit en
    Septembre 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Lead Tech Agile

    Informations forums :
    Inscription : Septembre 2004
    Messages : 316
    Par défaut
    Le plus simple reste encore de catcher les exceptions lancées par la couche rpc (en AOP c'est plus propre) afin de transmettre côté client une exception attendu qui pourra contenir un message propre pour l'utilisateur.

Discussions similaires

  1. probleme avec GWT et Hibernate
    Par FunkyBreizh dans le forum GWT et Vaadin
    Réponses: 9
    Dernier message: 06/05/2011, 16h12
  2. [Data] Probléme lors de l'intégration de spring avec hibernate
    Par imyJava dans le forum Spring
    Réponses: 3
    Dernier message: 07/06/2010, 15h22
  3. intégration de jsf avec hibernate
    Par delivrance84 dans le forum JSF
    Réponses: 1
    Dernier message: 20/07/2008, 21h23
  4. GWT <--> Mysql avec Hibernate
    Par tatemilio2 dans le forum GWT et Vaadin
    Réponses: 12
    Dernier message: 23/04/2008, 18h04
  5. [Data] Intégration avec Hibernate
    Par jamalmoundir dans le forum Spring
    Réponses: 4
    Dernier message: 21/06/2007, 10h14

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