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

Java EE Discussion :

[Débutant] [CMP] Réalisation d'une jointure


Sujet :

Java EE

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Débutant] [CMP] Réalisation d'une jointure
    Bonjour,
    Je réalise une application simple de messagerie. Les utilisateurs ont une adresse et peuvent envoyer des messages aux autres utilisateurs (chaque message a un seul destinataire).

    J'ai deux entity beans :
    • AdminEB : il est en charge de la création des utilisateurs.
    • MailboxEB : il permet de réaliser les opérations de lecture, d'écriture et de suppression des messages.


    J'ai deux tables : une table user et une table mail. Au niveau du descripteur de déploiement AdminEB est mappé sur la table user et MailboxEB est mappé sur mail.

    J'ai les champs suivant dans la base de données :
    user :
    • uid (clé primaire)
    • nom
    • adresse


    mail :
    • mid (clé primaire)
    • idexp (uid de l'expéditeur)
    • iddest (uid du destinataire)
    • header
    • body
    • ...


    Je voudrais faire une chose relativement simple : au moment où un utilisateur lit un mail, je voudrais faire afficher le nom de l'expéditeur plutôt que son id. Or MailboxEB ne connaît que les id. Comment récupérer les noms en connaissant les id ?

    J'ai songé à ce que MailboxEB fasse appelle à AdminEB, mais ça me semble un peu bizarre car ce n'est pas le rôle d'AdminEB.
    J'ai regardé du côté de EJB QL mais visiblement on manipule les objets, ceal revient un peu au même non ?

    Enfin mon programme tournera sous Jonas et donc sous JDK 1.4. Je suis donc limité aux EJB 2 si j'ai bien suivi.

    Il y a sûrement quelquechose de relativement simple mais je ne vois pas :o(

    Merci d'avance.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'oubliais de préciser qu'il s'agit de deux beans CMP.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'ai fini par tenter le coup avec EJB QL, mais je rencontre un problème.

    J'ai déclaré dans MailboxEBHome deux méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String findAddressByKey (Integer uid) throws RemoteException, FinderException;
    Integer findKeyByAddress (String address) throws RemoteException, FinderException;
    Elles permettent (théoriquement) d'établir la correspondance entre uid et adresse.
    Dans le descripteur de déploiement j'ai mappé ces fonctions sur une requête EJB-QL :

    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
    <query>
      	     <description>Find this address of a user with its ID</description>
      	     <query-method>
      	     	<method-name>findAddressByKey</method-name>
      	     	<method-params>
      	     		<method-param>java.lang.Integer</method-param>
      	     	</method-params>
             </query-method>
             <result-type-mapping>Remote</result-type-mapping>
             <ejb-ql>SELECT m.userAddress FROM AdminEB m WHERE m.userID = ?1</ejb-ql>
          </query> 
          <query>
      	     <description>Find the user ID with its address</description>
      	     <query-method>
      	     	<method-name>findKeyByAddress</method-name>
      	     	<method-params>
      	     		<method-param>java.lang.String</method-param>
      	     	</method-params>
             </query-method>
             <result-type-mapping>Remote</result-type-mapping>
             <ejb-ql>SELECT m.userID FROM AdminEB m WHERE m.userAddress = ?1</ejb-ql>
    Mais à la compilation, j'obtiens l'erreur suivante de la part du parser XML :

    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
    jonasejbjar:
       [ejbjar] building mailServer.jar with 14 files
        [genic] Error during execution of org.objectweb.jonas_ejb.genic.GenIC : No WHERE clause defined for the finder method 'public abstract java.lang.String mailServer.MailboxEBHome.findAddressByKey(java.lang.Integer) throws java.rmi.RemoteException,javax.ejb.FinderException'
        [genic] java.lang.Error: No WHERE clause defined for the finder method 'public abstract java.lang.String mailServer.MailboxEBHome.findAddressByKey(java.lang.Integer) throws java.rmi.RemoteException,javax.ejb.FinderException'
        [genic]     at org.objectweb.jonas_ejb.genic.VcMethod.<init>(VcMethod.java:484)
        [genic]     at org.objectweb.jonas_ejb.genic.VContextFactory.create(VContextFactory.java:303)
        [genic]     at org.objectweb.jonas_ejb.genic.Source.<init>(Source.java:174)
        [genic]     at org.objectweb.jonas_ejb.genic.BeanSources.<init>(BeanSources.java:225)
        [genic]     at org.objectweb.jonas_ejb.genic.GenIC.<init>(GenIC.java:689)
        [genic]     at org.objectweb.jonas_ejb.genic.GenIC.main(GenIC.java:408)
        [genic]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        [genic]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        [genic]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        [genic]     at java.lang.reflect.Method.invoke(Method.java:597)
        [genic]     at org.objectweb.jonas.server.Bootstrap.main(Bootstrap.java:97)
     
    BUILD FAILED
    C'est plutôt louche dans la mesure où d'après moi il y a bien une clause WHERE (ou alors je commence à sucrer les fraises).
    Si je commente la fonction findAddressByKey dans le descripteur de déploiement, j'ai alors la même erreur sur l'autre fonction (ça au moins c'est logique).

    Une recherche sur Google ne donne rien du tout (je tombe sur le code source de Genic). Est-ce que l'un de vous a déjà rencontré un tel problème ? Est-ce que vous voyez une erreur dans ce que j'ai fait ?

    Merci d'avance.

Discussions similaires

  1. Réalisation d'une jointure avec Talend
    Par jellyBean dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 09/01/2010, 18h18
  2. Réalisation d'une jointure avec Talend
    Par ekahrd dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 29/12/2009, 11h07
  3. Réponses: 6
    Dernier message: 26/06/2006, 12h51
  4. Réponses: 2
    Dernier message: 03/03/2006, 10h22
  5. Débutant SQL, problème sur une jointure censée exclure ??
    Par derfatypik dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/06/2005, 15h55

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