Un problème bizarre :
J'ai JBoss comme serveur d'applications.
J'ai 2 EntityBean CMP, Commande et LigneCommande, liés par une relation 1=>n
(1 commande est liée à plusieurs lignes de commandes)
La relation one to many (ligneCommandes) est définie dans le fichier ejb-jar.xml (section relationship)
J'ai une interface distante pour Commande, et une interface locale pour LigneCommande.
Des méthodes Collection getLigneCommandes et setLigneCommandes (Collection) sont définies au niveau de Commande (abstract pour le bean et standard pour l'interface distante).
J'ai enfin un client EJB qui appelle l'EJB distant Commande;
La méthode setLigneCommandes fonctionne bien (à l'intérieur du bean Commande et appelée du client EJB).
La méthode getLigneCommandes() fonctionne bien à l'intérieur du bean Commande.
(par exemple, des LigneCommande peuvent être crées avec l'interface locale, et ajoutée à la collection getLigneCommandes (), à chaque ajout, le lien relationnel est bien mis à jour, montrant que le mapping objet/relationnel 1=>n fonctionne correctement),
Par contre, cela ne fonctionne pas lorsque la méthode getLigneCommandes() est appelée par le client EJB (cela provoque une Exception java.lang.reflect.UndeclaredThrowableException
lorsque l'on essaie de récupérer la collection des LigneCommande)
J'ai pensé un moment à un problème local/distant, mais pourquoi cela marche-t-il, appelé du client EJB, avec le set (Collection) et pas avec le Collection get() !!
Bon, il y a bien une astuce - qui fonctionne - consistant (dans Commande) à copier la collection getLigneCommandes dans un ArrayList, et de retourner cet ArrayList - cela oblige à déclarer une autre méthode (pour Commande) style getCopyListeCommandes, mais c'est très lourd.
Si vous avez une idée, ou mieux si vous pouvez me donner un petit exemple de code - correspondant à mon problème - qui fonctionne, cà serait très très sympa !
Partager