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 :

Appel d'objets d'un projet externe


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut Appel d'objets d'un projet externe
    Quelqu'un as-t-il une idée sur comment faire pour référencer un objet d'un projet externe ?

    Contexte :
    Soit un Projet web A et un Projet B (qui peut être un projet EJB ou un Projet JPA peu importe). J'intègre le projet B dans le Build Path du projet A.

    1) Chaque fois que je fais référence à un objet du projet B (une classe par exemple ou un EJB), à partir du projet A (notamment à partir d'une Servlet) il me produit un message d'erreur

    2) L'injection de dépendance @EJB ne marche pas aussi pour un EJB se trouvant dans le projet B

    Les import... , l'instanciation des classes, l'appel des méthodes se fait sans problème, et passent au compilateur qui voit tout normalement, mais à l'exécution, j'ai un message d'erreur.
    Lorsque tous les objets sont dans le même projet, tout marche parfaitement

    Quelqu'un l'a-t-il déjà essayé ? Est ce possible que ça marche ou alors c'est pas faisable ?

    Merci

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    C'est faisable mais en fonction du serveur, ça peut être +/- différent.
    Dans l'absolu, il serait judicieux de créer un jar client qui contiendra tout ce qui est nécessaire en dehors de conteneur d'EJB (par exemple).
    On y trouvera en vrac, les entity, les interfaces Remote, les DTO.
    Maintenant, si tout est sur le même serveur, on n'en a pas besoin, mais l'ordre de déploiement peut devenir important.
    Pour le conteneur de servlet, normalement, l'injection de dépendance via l'annotation @EJB devrait être prise en compte, mais, avec JBoss (pour le citer), ça ne fonctionne pas (alors qu'avec Glassfish oui).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Mon Projet JPA et le projet Web sont dans le même conteneur notamment Glassfish 3.1, mais je ne comprend pas pourquoi ça ne marche toujours pas.
    Impossible de faire référence à une classe du projet JPA à partir de la Servlet, ni même appeler par exemple un service d'un EJB du projet JPA, du genre creerEmployer(emp) qui lui, doit se charger de persister l'objet constitué des données entrées dans mon formulaire JSP, et il doit le faire selon la logique implémentée dans l'EJB qui le contient.

    Je ne suis pas expérimenté, c'est mon premier projet J2EE, mais je me demande comment les gens font pour créer un projet J2EE complet, quel est l'architecture généralement utilisée, quelle est la logique ?

    Je pensais qu'on crée un Projet Web qui gère tout ce qui est Web (MVC), ensuite un Projet EJB qui gère tout ce qui Logique enfin un Projet JPA ou Hibernate qui gère tout ce qui est Persistance. Si tel est le cas, je pensais que l'accès entre les objets des différents projets (puisqu'ils doivent communiquer) se faisait sans problème et que c'était portable dans n'importe quel environnement. Mais là... sincèrement depuis environ 2 semaines que je piétine sur ce cas, je me rends compte du contraire et je peine un peu à décoller. Je pensais aussi que pour les EJB c'étais compréhensible et là le contexte JNDI pouvais peut-être résoudre le problème. Mais qu'en est-il d'une simple classe ? Et pour les EJB s'il faut encore revenir au JNDI, que devient la portabilité entre le Serveurs d'application ? Et à quoi servir le standard des annotations ?


    Merci

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Avec Glassfish, tu as un projet EJB et un projet Web.
    Dans le projet web, tu peux utiliser l'annotation @EJB au niveau d'une servlet pour injecter ce qu'il faut.
    Un projet JPA n'est pas un projet EJB ton problème vient peut-être de là...

    Dans la mesure où un projet EJB peut également faire la partie entity (JPA), autant en profiter, non ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Par défaut
    Citation Envoyé par mesken Voir le message
    Quelqu'un as-t-il une idée sur comment faire pour référencer un objet d'un projet externe ?

    Contexte :
    Soit un Projet web A et un Projet B (qui peut être un projet EJB ou un Projet JPA peu importe). J'intègre le projet B dans le Build Path du projet A.

    1) Chaque fois que je fais référence à un objet du projet B (une classe par exemple ou un EJB), à partir du projet A (notamment à partir d'une Servlet) il me produit un message d'erreur

    2) L'injection de dépendance @EJB ne marche pas aussi pour un EJB se trouvant dans le projet B

    Les import... , l'instanciation des classes, l'appel des méthodes se fait sans problème, et passent au compilateur qui voit tout normalement, mais à l'exécution, j'ai un message d'erreur.
    Lorsque tous les objets sont dans le même projet, tout marche parfaitement

    Quelqu'un l'a-t-il déjà essayé ? Est ce possible que ça marche ou alors c'est pas faisable ?

    Merci
    Bon, décidément tu as un problème de packaging de ton application.

    Avec JavaEE6, tu peux tout déployer dans un WAR (servlets, ejbs, entities...). Le plus simple serait donc d'avoir toutes les classes ejb, servlet et entities dans WEB-INF/classes et le fichier persistence.xml dans WEB-INF/classes/META-INF.

    Mais bien sûr, tu peux aussi séparer tes classes dans différents jars, et dans ce cas, une arborescence possible serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       - MonProjet.war         
            - WEB-INF/lib
                   + ProjetEJB.jar
                   + ProjetJPA.jar
    Je suppose évidemment que ton fichier persistence.xml se trouve dans un META-INF sous l'un des jar EJB ou JPA.


    Avant l'arrivée de Java EE6 et la possibilité de déployer des EJB dans un simple .war, en général, quand on avait différents types de projets (web, ejb, classes utilitaires...) et qu'on voulait les assembler en une seule unité de déploiement, la seule possibilité était de créer un projet EAR pour contenir ces différents jars et être déployé sur le serveur d'applications.
    Tu aurais une arborescence du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     - MonProjet.ear
          + ProjetWeb.war
          + ProjetEJB.jar
          - lib/
               utilitaires.jar
               ProjetJPA.jar
    En tous les cas, tu as plusieurs possibilités à présent, et tu peux commencer petit tel que l'ai expliqué dans un autre post; et ensuite faire grandir ton application en créant plein de sous-projets et autres librairies.

    J'espère que ceci va te permettre d'avancer dans ton apprentissage de Java EE.
    Bon courage.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Merci beaucoup de votre temps et vos explications.
    Effectivement en fait c'est un problème de Packaging. Et comme tu as dit c'est vrai, mon fichier persistence.xml se trouve dans le META-INF sous JPA puisque c'est là que je fais la persistance.

    Juste pour préciser en passant que, chaque fois que j'essayais de gérer la persistance dans le Projet Web et que je créais le répertoire classes sous le quel je créais le répertoire META-INF et j'y mettais le fichier persistence.xml pour avoir la hiérarchie WEB-INF/classes/META-INF/persistence.xml, le Serveur me disais "Cannot Deploy ProjeWeb", quand je supprimais tout pour laisser la hiérarchie initiale, le déploiement se passait normalement.

    J'ai donc décidé de gérer ça dans le Projet JPA et là ça passe sans problème.

    Je veux aussi avouer que, sincèrement je ne sais pas encore comment y arriver tout seul avec Eclipse Helios pour avoir cette hiérarchie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         - MonProjet.war         
              - WEB-INF/lib
                         + ProjetEJB.jar
                         + ProjetJPA.jar
    ou bien celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
         - MonProjet.ear
                 + ProjetWeb.war
                 + ProjetEJB.jar
                 - lib/
                       utilitaires.jar
                       ProjetJPA.jar
    Mais je travail et je cherche, si j'ai un problème, je n'hésiterai pas à revenir vers vous

    Merci encore

Discussions similaires

  1. Appeler une classe qui se trouve dans un projet externe
    Par abj8077 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 17/01/2012, 13h01
  2. Appel aux fonctions d'une DLL externe ??
    Par Fbartolo dans le forum Access
    Réponses: 7
    Dernier message: 21/11/2005, 17h54
  3. Réponses: 4
    Dernier message: 15/11/2005, 10h49
  4. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46
  5. [C#] Problème pour l'appel d'objet...
    Par AntiSAL dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/06/2004, 09h59

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