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 avec JPA


Sujet :

JPA Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 145
    Points : 62
    Points
    62
    Par défaut problème avec JPA
    Bonjour,

    j'essaie de mettre en place un système d'inscription d'un utilisateur (si l'utilisateur n'existe pas dans ma BDD, je l'ajoute, sinon je lui dit qu'il existe déjà). pour cela je met en place un ejb entity "Utilisateur", objet métier "TraiteInscription"et un ejb session "UtilisateurDao", une servlet et quelques jsp. le principe est le suivant: l'objet métier vérifie valide le nom, le mot de passe , l'email, etc (le bon format).. si tout est ok et que l'utilisateur n'existe pas ( vérifie l'existence de son émail)dans la base de donnée il l'ajoute. par contre s'il y'a une erreur il écrit un message dans une map "erreurs". l'utilisateur est averti d'un message de réussite ou d'échec de son inscription selon que la map est vide ou pas.
    Seulement je me rend compte que j'ai toujours un message d'échec de l'inscription, je fais quelques tests et me rend compte que c'est la fonction validationEmail qui génère une exception. volia son code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void validationEmail( String email ) throws Exception {
            if ( email != null ) {
                if ( !email.matches( "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)" ) ) {
                    throw new Exception( "Merci de saisir une adresse mail valide." );
                } else if ( utilisateurDao.trouver( email ) != null ) {
                    throw new Exception( "Cette adresse email est déjà utilisée,merci d'en choisir une autre." );
                }
            } else {
                throw new Exception( "Ce champ est obligatoire" );
            }
        }
    Seulement je n'ai aucun des messages liés aux différentes exceptions, je me dis donc que le problème vient de la fonction trouver() de la classe UtilisateurDao()(ejb session) donc voici le 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
     
    public Utilisateur trouver( String email ) throws DAOException {
            Utilisateur utilisateur = null;
            Query requete = em.createQuery( JPQL_SELECT_PAR_EMAIL );
            requete.setParameter( PARAM_EMAIL, email );
            try {
                utilisateur = (Utilisateur) requete.getSingleResult();
            } catch ( NoResultException e ) {
                return null;
            } catch ( Exception e ) {
                throw new DAOException( e + "c'est ici" );
            }
            return utilisateur;
        }
    je me rends compte que dans tous les cas, la fonction retourne "null", je ne sais donc pas si ce retour est du à l'initialisation du bean utilisateur à null ou au fait qu'elle capture une "NotResultException". ceci dit logiquement si c'est du à l'initialisation du bean utilisateur à null, tout devrait bien se passer et ma map "erreurs" devrait être empty.

    Je fais donc un dernier test pour savoir si ce problème n'est pas lié à la connexion à la BD, j'essaie l'inscription d'un utilisateur sans l'appel à la fonction trouver(), à ce moment la j'ai une "EJBException". Est ce que quelqu'un pourrait m'apporter plus de lumière par rapport à tout cela.

    Dsl d'avoir été aussi long, mais j'essaie d’être le plus clair possible, et encore je ne sais pas si ça a suffit.

    pour terminer je vous fourni le contenu de la console:
    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
     
    Avertissement: A system exception occurred during an invocation on EJB UtilisateurDao method public solartPredict.entities.Utilisateur SolarPredict_jpa.DAO.UtilisateurDao.trouver(java.lang.String) throws SolarPredict_jpa.DAO.DAOException
    javax.ejb.EJBException
    	at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5070)
    	at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:4968)
    	at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4756)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1955)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1906)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:198)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:84)
    	at com.sun.proxy.$Proxy107.trouver(Unknown Source)
    	at SolarPredict_jpa.DAO.__EJB31_Generated__UtilisateurDao__Intf____Bean__.trouver(Unknown Source)
    	at solartPredict.entities.TraiteInscription.validationEmail(TraiteInscription.java:86)
    	at solartPredict.entities.TraiteInscription.inscrireUtilisateur(TraiteInscription.java:153)
    	at SolarPredict_jpa.Servlet.SolarPredict1.doPost(SolarPredict1.java:41)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
    	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    	at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.VerifyError: Expecting a stackmap frame at branch target 18
    Exception Details:
      Location:
        solartPredict/entities/Utilisateur._persistence_isAttributeFetched(Ljava/lang/String;)Z @4: ifnull
      Reason:
        Expected stackmap frame at this location.
      Bytecode:
        0000000: 2ab4 0076 c600 0e2a b400 762b b600 dc99
        0000010: 0007 04a7 0004 03ac                    
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Class.java:278)
    	at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getClassForName(PrivilegedAccessHelper.java:88)
    	at org.eclipse.persistence.descriptors.ClassDescriptor.convertClassNamesToClasses(ClassDescriptor.java:1211)
    	at org.eclipse.persistence.sessions.Project.convertClassNamesToClasses(Project.java:356)
    	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:321)
    	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
    	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
    	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:202)
    	at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:197)
    	at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createQuery(EntityManagerWrapper.java:424)
    	at SolarPredict_jpa.DAO.UtilisateurDao.trouver(UtilisateurDao.java:35)
    	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:606)
    	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:5243)
    	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:615)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:139)
    	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:606)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
    	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:367)
    	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5215)
    	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5203)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:190)
    	... 32 more

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    vu l'erreur, je dirais que tu as utilisé java 8, des lambdas probablement quelque part, et que tu utilise une versin dez glassfish qui n'est pas prévue pour cette version de java, qui pète les plombs en lisant le bytecode pour détecter les annotations car java 8 a changé la structure des .class.

    Assure toi soit d'utiliser la dernière version de glassfishn, soit d'utiliser une version de java qui corresponde à ton glassfish.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 145
    Points : 62
    Points
    62
    Par défaut
    ma version de java: java version "1.7.0_91"
    j'ai glassfish v3
    sont-ils compatible?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    La 3.1.2.2 est supposé compatible java 7.

    Tu peux ajouter -noverify aux paramètres de la jvm démarrant glassfish pour voir si on trouve un autre problème?

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 145
    Points : 62
    Points
    62
    Par défaut
    comment rajoute on -noverify aux paramètres de la jvm? -noverify c'est un flag, c'est bien ça?

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 145
    Points : 62
    Points
    62
    Par défaut
    Par contre mon dossier dossier de Glassfish sur éclipse ressemble à ça, est ce que ça ne pourrait pas justifier son éventuelle incompatibilité ?
    Nom : screen.png
Affichages : 228
Taille : 11,5 Ko

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    non, ça c'est pas ton dossier glassfish, c'est la liste des connecteurs serveur disponibles dans eclipse. Pour le paramètre, faut regarde la doc eclipse, je ne la connais pas par coeur, il y a aussi surement une option de configuration de la jvm directement dans eclipse si tu lance ton serveur depuis eclipse.

    Dans tes librairies embarquée avec ton application, tu n'aurais pas asm ou un autre outil qui génère du bytecode?

    Aussi, tu pourrais passer à glassfish 4 si c'est un nouveau projet, inutile de se trainer un vieux conteneur.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 145
    Points : 62
    Points
    62
    Par défaut
    j'ai finalement exécuté ce code sous tomcat avec les jar qui vont bien. j'ai une erreur similaire, ce qui est déja bien est que je n'ai plus les ejbExeption, ce qui veut dire que le conteneur les gère bien, mais j'ai cette fois une IllegalSatementException.
    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
     
    GRAVE: An error occured while initializing MyFaces: WebAppBuilder not found in SystemInstance. Ensure the following entry exists in the Tomcat server.xml file: <Listener className="org.apache.tomee.catalina.ServerListener"/>
    java.lang.IllegalStateException: WebAppBuilder not found in SystemInstance. Ensure the following entry exists in the Tomcat server.xml file: <Listener className="org.apache.tomee.catalina.ServerListener"/>
    	at org.apache.tomee.myfaces.TomEEAnnotationProvider.getAnnotatedClasses(TomEEAnnotationProvider.java:43)
    	at org.apache.myfaces.config.annotation.AnnotationConfigurator.createFacesConfig(AnnotationConfigurator.java:90)
    	at org.apache.myfaces.config.DefaultFacesConfigurationProvider.getAnnotationsFacesConfig(DefaultFacesConfigurationProvider.java:152)
    	at org.apache.myfaces.config.DefaultFacesConfigurationMerger.getFacesConfigData(DefaultFacesConfigurationMerger.java:91)
    	at org.apache.myfaces.config.FacesConfigurator.configure(FacesConfigurator.java:416)
    	at org.apache.myfaces.webapp.AbstractFacesInitializer.buildConfiguration(AbstractFacesInitializer.java:370)
    	at org.apache.myfaces.webapp.Jsp21FacesInitializer.initContainerIntegration(Jsp21FacesInitializer.java:73)
    	at org.apache.myfaces.webapp.AbstractFacesInitializer.initFaces(AbstractFacesInitializer.java:143)
    	at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:119)
    	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4736)
    	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)
    	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    	at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3755)
    	at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:292)
    	at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5542)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349)
    	at java.lang.Thread.run(Thread.java:745)
    pour la déclaration de la connexion Mysql via JDBC, j'ai juste rajouter le fichier xml dans le dossier bin de tomcat, j’espère que c'est la bonne manière de faire.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 250
    Points : 403
    Points
    403
    Par défaut
    Là ça n'a pas l'air de venir de JPA mais de la configuration de JSF (MyFaces en l'occurence), y-a-t-il un fichier faces-config dans ton appli ?

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 145
    Points : 62
    Points
    62
    Par défaut
    non je n'ai pas un tel fichier, et je n'utilise pas JSF, j'utilise les JSP pour la vue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2016, 17h44
  2. Problème avec JPA
    Par info20111 dans le forum JPA
    Réponses: 0
    Dernier message: 01/05/2013, 22h34
  3. Problème avec JPA Tools sous Eclipse
    Par dark_geek dans le forum JPA
    Réponses: 0
    Dernier message: 08/01/2012, 22h09
  4. Problème avec JPA
    Par execrable dans le forum Autres
    Réponses: 0
    Dernier message: 26/04/2011, 11h29
  5. Problème avec JPA Entity et l'annotation Column
    Par riadhhwajdii dans le forum JPA
    Réponses: 5
    Dernier message: 07/01/2011, 10h23

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