Bonjour !
Dans le cadre d'un projet manipulant des EJB, je rencontre un petit souci au niveau de la récupération de données avec JPA :
J'ai tout d'abord un EJB Entity :
J'ai ensuite un EJB session stateful :
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 @Entity @Table(name = "Utilisateur") public class Utilisateur implements Serializable { private static final long serialVersionUID = 1L; @Id private String login; @Column private String pass; @Column private String nom; @Column private String prenom; @Column private String dateDeNaissance; @OneToMany private List<Utilisateur> amis = new ArrayList<Utilisateur>(); ... }
Je n'ai mis que la fonction findUtilisateurByNameAndFName qui est celle qui pose problème.
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 @Stateful public class UtilisateurEJB implements UtilisateurEJBLocal { @PersistenceContext(name = "AnnuaireEJB-ejbPU") private EntityManager em; ... @Override public List<Utilisateur> findUtilisateurByNameAndFName(String name, String fname) { Query q = em.createQuery("SELECT u.nom, u.prenom FROM Utilisateur u WHERE u.nom = ? and u.prenom = ? ").setParameter(1,fname).setParameter(2, name); return q.getResultList(); } ... }
Voilà tout pour mon conteneur EJB.
Maintenant dans mon conteneur web j'ai :
Lors de l'execution de cette fonction (donc quand je valide le formulaire de recherche), j'ai une erreur que je ne parviens à corriger :
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 @ManagedBean(name="connexionBean") @SessionScoped public class UtilisateurJSFBean implements Serializable{ /** * Creates a new instance of UtilisateurJSFBean */ public UtilisateurJSFBean() { } @EJB private UtilisateurEJBLocal utilisateurEJB; ... public String researchForm() { resultRecherche = "resultat : "; List<Utilisateur> res = new ArrayList<Utilisateur>(); res = utilisateurEJB.findUtilisateurByNameAndFName(recherchePrenom, rechercheNom); for(int i=0;i<res.size();i++) { resultRecherche+=((res.get(i))).getNom(); } resultRecherche+=res.get(0).getNom(); rechercheNom=""; recherchePrenom=""; return "success"; }
Et dans la stacktrace :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4An Error Occurred: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to DAO.Utilisateur
Je ne parviens pas à résoudre le problème.
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 javax.faces.el.EvaluationException: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to DAO.Utilisateur at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542) 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 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) 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:722) Caused by: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to DAO.Utilisateur at Controller.UtilisateurJSFBean.researchForm(UtilisateurJSFBean.java:234) 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 javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:779) at javax.el.BeanELResolver.invoke(BeanELResolver.java:528) at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:257) at com.sun.el.parser.AstValue.invoke(AstValue.java:248) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302) at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39) at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) ... 32 more
Désolé par avance pour la longueur du message, mais c'était pour exposer le contexte le mieux possible.
Merci d'avance pour l'aide que vous voudrez bien m'apporter ...
Cordialement,
Muska17
PS: je tiens à préciser que si je n'accède pas au contenu de resultRecherche avec la boucle, par exemple, mais que je fais un resultRecherche.size() à la place, la valeur est supérieure à 0.
Partager