Bonjour,
Je vous explique en quelques mots ce que je souhaite faire.
J'ai un EJB Entity Category dont voici le code
Cet Ejb implémente l'interface suivante :
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 package ejb.bean.entity @Entity @Table(name = "T_CATEGORY") @NamedQuery(name = "categories", query = "select c from Category c") public class Category implements ICategory { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer idCategory; @Column(name = "wording") private String wording; @OneToMany private List<Article> articles; public Category() { super(); } ....
Ensuite j'ai créé un EJB StateLess qui me permet de récupérer toutes les catégories. Donc j'arrive très bien à partir de mon service catégories à récupérer la liste des catégories existantes en faisant comme suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 package interfaces; import javax.ejb.Remote; @Remote(ICategory.class) public interface ICategory { public String getDescription(); }
Sachant que em est l'entity manager. Et que je n'utilise pas directement la classe Category mais son Interface.
Code : Sélectionner tout - Visualiser dans une fenêtre à part List<T> list = (List<T>)em.createNamedQuery(name).getResultList();
Donc une fois la liste récupérée au niveau de mon EJB StateLess si je l'affiche je retrouve bien les traces dans les logs. Par contre quand je fais appel à la méthode de EJB StateLess appartir d'un client tout ce passe bien appart la récupération de la liste de ICategory. Cela lève l'erreur suivante :
J'ai testé en renvoyant au client une ArrayList<String> et cela fonctionne. Pourtant je fais bien attention à utiliser des List que j'ai typé en ICategory. J'ai bien mis les bonnes annotations ( @Remote au niveau de l'interface ) et j'ai fait le lien sous eclipse du fichier source ou je met toutes mes interfaces Remote donc le client connait bien les interfaces. Ai-je oublié quelque chose ??Exception in thread "main" javax.ejb.EJBException: Error while sending a request
Caused by: java.lang.RuntimeException: Error while handling answer on the remote side
Caused by: java.rmi.UnmarshalException: ClassNotFoundException unmarshalling returnjava.lang.ClassNotFoundException: ejb.bean.entity.Category (no security manager: RMI class loader disabled)
Normalement je n'ai pas besoin de rajouter l'implémentation de Serializable, le faite de mettre l'annotation @remote fait tout ??
Ou est-ce du au faite que j'ai fais de la généricité ?? Car j'ai créé un EJB StateLess Dao qui est typable ( je ne sais pas si ca se dit ^^ ). Donc dans mon service categorie j'utilise cette EJB en le typant avec ICategory.
Peut être que je dois faire non pas un stateless mais un statefull ??
La je ne sais plus très bien quoi faire, quelqu'un pourrai me donner une pistesvp
Merci d'avance,
Cordialement,
Matthieu
Partager