Injecté un ejb provenant jar dans une servlet et/ou un POJO d'un autre war
Bonjour,
Je commence ma reconversion dans le mode des systèmes d'information (venant des systèmes industriels).
Pour cela j'ai choisi comme serveur d'application Tomee 7 Plus, me permettant d'avoir un Tomcat JEE7.
A ce stade de mon apprentissage je n'arrive pas à Injecté (@EJB) un ejb dans ma servlet et/ou mon module REST.
Mon ejb packagé dans un Ejb.jar
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
@Local
public interface PersonneFacadeLocal
{ ...}
@Remote
public interface PersonneFacadeRemote
{ ...}
@Stateless(name = "PersonneFacade")
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class PersonneFacade
implements PersonneFacadeRemote, PersonneFacadeLocal
{ ... } |
La Servlet packagé dans servleAPI.war
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
@WebServlet("/question")
public class Question extends HttpServlet{
public static final String VUE = "/WEB-INF/formulaire.jsp";
private static final Logger logger = Logger.getLogger(Question.class);
@EJB
private PersonneFacadeLocal facadeDao;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
...
}
} |
Le Module REST packagé dans RestAPI.war
Code:
1 2 3 4 5 6 7 8 9 10 11
|
@Path("/Personnes")
public class Personne
{
private static final Logger logger = Logger.getLogger(Personne.class);
@EJB
private PersonneFacadeLocal facadeDao;
...
} |
Les trois packets ne sont packagés dans un EAR (Techno que j'étudierai plus tard).
Je les déploie les trois séparémment dans mon serveur Tomee 7 Plus, suivant l'ordre suivant:
1- Déploiement de Ejb.jar
2- Déploiement de ServletAPI.war
3- Déploiement de RestAPI.war
Mon Problème
Seul Ejb.jar est déploié. Les autres ne sont pas déployé car ne trouvant l'interface de l'EJB
Code:
Caused by: java.lang.NoClassDefFoundError: Lcom/hsmr/genealogie/ejb/facade/PersonneFacadeLocal;
En fouillant un peu sur internet, j'ai compris ceci.
Le module Rest n'est pas managé par le Conteneur ce qui implique que c'est de ma responsabilité d'implémenter l'injection de l'EJB soir avec les technos CDI ou JNDI.
CDI => module et EJB dans le même contener.
JNDI => module et EJB ne sont pas dans le même contener.
Question1: Vu que les *.jar et les *.war sont déployés dans Tomee 7, Sont ils donc le même contener? Donc dans la même JVM?
Si oui y a t il un fichier *.xml à configurer?
Le module Servlet est managé par le contener comme l'ejb c'est donc de la responsabilité de Tomee d'injecter mon ejb dans ma Servlet.
Question2: Pourquoi ne le fait-il pas?
J'ai vu aussi sur internet qu'il y avait peut des fichiers xml à configurer dans les *.war.
Dans le web.xml de chaque *.war ajouter les balises <ejb-ref>.
Mais j'avoue que je me suis vite perdu.
Question3: Pouvez-vous me confirmer que la solution passe bien par la configuration du fichier web.xml ?
En vous remerciant