Salut ,

Bonjour , je développe une entreprise application JEE (avec l'EJB) avec netbeans 6.7 ,JSF et Wampserver , representant une interface web aux clients qui leurs permettent de s'inscrire en fournissant certains données au premier temps et de login et modifier leurs comptes ultérieurement .

Je manipule deux table dans ma base de données : table 'client' et table 'interest' .
Ma table client contient 3 colonnes : id , keyword et clientId .

Dans une de mes pages JSP , je veux afficher des lignes de ma table interest
suivant le critére " clientId= x " par exemple . Or j'utilise les EJB .
Il y' 5 methodes prédéfinies dans ma page 'InterestFacadeLocal' , deux parmi ces 5 aident pour la recherche qui sont : find et findAll .
La methode findAll ,je pense qu'elle ne permet pas d'effecture une recherche suivant un critére , elle rend toute les lignes de la table .


Donc , j'ai définit la methode suivante dans la page 'InterestFacade' :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 public List<Interest> findByClientId(String clientId ) {
        return em.createQuery("select o from Interest  as o where o.clientId= :clientId").setParameter("clientId", clientId).getResultList();
    }
J'ai ajouté ca dans la page 'InterestFacadeLocal' .

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 List<Interest> findByClogin(String clogin);
J'ai definit dans mon managedbean 'metier' la methode lists suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
public String lists()
{    clientId =x;
     System.out.println("--------1-------");
    System.out.println("---------------"+clientId );
     intlist =findByClientId (clientId );
    System.out.println("--------2-------");
 
     getIntlist ();
     System.out.println("--------3-------");
    return "lists";
}

ou intlist est une une liste de interest .


Maintenant au moment du run , lorsque j'appelle la methode 'lists' en cliquant sur un bouton 'interests' j'obtient l'erreur suivant :

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
 
type Rapport d'exception
 
Message
 
DescriptionLe serveur a rencontré une erreur interne () qui l'a empêché de remplir cette requête.
 
Exception
 
javax.servlet.ServletException: #{metier.lists}: javax.ejb.EJBException
 
Cause racine
 
javax.faces.FacesException: #{metier.lists}: javax.ejb.EJBException
 
Cause racine
 
javax.faces.el.EvaluationException: javax.ejb.EJBException
 
Cause racine
 
javax.ejb.EJBException
 
Cause racine
 
java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager
 
Cause racine
 
Exception [TOPLINK-8026] (Oracle TopLink Essentials - 2.1 (Build b60e-fcs (12/23/2008))): oracle.toplink.essentials.exceptions.EJBQLException
Exception Description: Syntax error parsing the query [select o from Interest  o where o.clientId= : clientId], line 1, column 44: unexpected char [ ].
 
note Les suivis de pile complets de l'exception et de ses causes principales sont disponibles dans les journaux Sun GlassFish Enterprise Server v2.1.
L'output de glassfish est le suivant :

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
 
 
--------1-------
--------2-------x
EJB5018 : Une exception a été renvoyée lors d'un appel ejb sur [InterestFacade].
javax.ejb.EJBException
        at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:3894)
        at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3794)
        at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3596)
        at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1379)
        at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1316)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:205)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:127)
        at $Proxy1022.findByClogin(Unknown Source)
        at metier.metier.lists(metier.java:716)
        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.el.parser.AstValue.invoke(AstValue.java:187)
Une idée ? Merci