Bonjour à tous,
J'ai une petite question concernant l'injection dans des composants Web Service. Je développe une petite application de test pour bien me familiariser avec Java EE et je rencontre un comportement un peu spécial.
Mon architecture de projets est simple et classique : un projet pour construire le WAR, un projet pour construire l'EJB-JAR, un projet pour packager le EAR "poc.ear". Je développe avec JBoss 5.1.0, EJB3 et persistence JPA.
Dans mon EJB-JAR, j'ai un Stateless EJB nommé "Shop" qui a une interface @Remote. Cette interface présente une fonction findCds() qui va chercher dans la base de données les différents CD présents.
J'ai un servlet dans mon projet Web, CdManager, qui permet de lister, ajouter et supprimer des CD's. J'utilise cet appel pour accéder à l'EJB :
Cette injection fonctionne parfaitement dans mon servlet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @EJB(mappedName = "poc/Shop/remote") private static ShopRemote manager;
J'ai également une classe CdListService qui devrait permettre de lister les CD's de la base sous forme de Web Service. La configuration JAX-WS fonctionne et je peux accéder à travers SOAP à la fonction getCdList() de l'objet.
Par contre, l'injection EJB que j'ai mise ci-dessus ne fonctionne pas. Quoi que je test (avec ou sans "mappedName"), j'ai toujours un NullPointerException lorsque je fait appel à une fonction de l'EJB.
J'ai pourtant tester que le nom est bien correct, ces lignes fonctionne parfaitement :
Quelqu'un pourrait-il m'expliquer pourquoi l'injection à l'aide de l'annotation ne fonctionne pas dans le Web Service mais fonctionne dans le servlet, sachant que l'obtention de l'EJB par JNDI (sous le même nom) est réalisée correctement...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 context = new InitialContext(); manager = (ShopRemote) context.lookup("poc/Shop/remote");
Merci d'avance !
Partager