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:
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 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" ); } }
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.
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 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
Partager