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 :

[Maven] il existe 2 fichiers EJB dans l’application avec l’interface machin


Sujet :

Java EE

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 13
    Points
    13
    Par défaut [Maven] il existe 2 fichiers EJB dans l’application avec l’interface machin
    Bonjour à tous,

    Je suis en train de maveniser une application web que nous avions commencé à faire en groupe pour un projet académique. Après plusieurs bugs surmontés je suis confronté à celui-ci :
    "il existe 2 fichiers EJB dans l’application avec l’interface machin"
    (il me semble avoir eu ce message pour plusieurs interfaces différentes)

    J'ai cherché sur le net et il semblerait que ce soit un problème d'architecture. Vu ce que j'ai appris en cours, la structure de mon projet EJB me parait correcte. D'ailleurs si je lance mes projets EJB et WEB séparément, je parviens à lancer l'appli correctement au vu des premiers résultats (création de la DB, persistance OK, le plus gros est passé !). C'est uniquement l'EAR que je ne parviens pas à lancer. Mais avant toute chose voici la stack de Glassfish (dans Netbeans) lorsque je tente de run mon projet EAR (le build fonctionne parfaitement)

    GRAVE: Exception lors du déploiement de l’application [com.geekoes_YouFood-ear_ear_1.0-SNAPSHOT]
    GRAVE: Impossible de résoudre la référence Local ejb-ref name=com.geekoes.youfood.service.UserAdminService/userAdminDao,Local 3.x interface =com.geekoes.youfood.dao.UserAdminDao,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session car il existe 2 fichiers EJB dans l’application avec l’interface com.geekoes.youfood.dao.UserAdminDao.
    Causes probables*:
    1. La classe bean EJB a été empaquetée dans une bibliothèque EAR/lib/ (ou par le biais de tout autre mécanisme mettant la bibliothèque à disposition de tous les modules de composant). Cela permet d’inclure indirectement la classe bean dans tous les modules de composant.
    2. La classe bean EJB a été empaquetée dans un module de composant faisant référence au fichier EJB, directement ou indirectement par le biais du fichier manifest sous WEB-INF/lib.
    La classe bean EJB doit uniquement être empaquetée dans le module EJB de déclaration, et non pas dans les modules de référencement. Les modules de référencement doivent contenir uniquement des interfaces EJB.
    java.lang.IllegalArgumentException: Impossible de résoudre la référence Local ejb-ref name=com.geekoes.youfood.service.UserAdminService/userAdminDao,Local 3.x interface =com.geekoes.youfood.dao.UserAdminDao,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session car il existe 2 fichiers EJB dans l’application avec l’interface com.geekoes.youfood.dao.UserAdminDao.
    Causes probables*:
    1. La classe bean EJB a été empaquetée dans une bibliothèque EAR/lib/ (ou par le biais de tout autre mécanisme mettant la bibliothèque à disposition de tous les modules de composant). Cela permet d’inclure indirectement la classe bean dans tous les modules de composant.
    2. La classe bean EJB a été empaquetée dans un module de composant faisant référence au fichier EJB, directement ou indirectement par le biais du fichier manifest sous WEB-INF/lib.
    La classe bean EJB doit uniquement être empaquetée dans le module EJB de déclaration, et non pas dans les modules de référencement. Les modules de référencement doivent contenir uniquement des interfaces EJB.
    at com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:568)
    at com.sun.enterprise.deployment.EjbDescriptor.visit(EjbDescriptor.java:2589)
    at com.sun.enterprise.deployment.EjbBundleDescriptor.visit(EjbBundleDescriptor.java:734)
    at com.sun.enterprise.deployment.Application.visit(Application.java:1768)
    at com.sun.enterprise.deployment.archivist.ApplicationArchivist.validate(ApplicationArchivist.java:799)
    at com.sun.enterprise.deployment.archivist.ApplicationArchivist.openWith(ApplicationArchivist.java:277)
    at com.sun.enterprise.deployment.archivist.ApplicationFactory.openWith(ApplicationFactory.java:240)
    at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:170)
    at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:93)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:826)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:768)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:368)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:465)
    at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:222)
    at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168)
    at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:679)

    GRAVE: Exception lors du déploiement de l’application [com.geekoes_YouFood-ear_ear_1.0-SNAPSHOT] : Impossible de résoudre la référence Local ejb-ref name=com.geekoes.youfood.service.UserAdminService/userAdminDao,Local 3.x interface =com.geekoes.youfood.dao.UserAdminDao,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session car il existe 2 fichiers EJB dans l’application avec l’interface com.geekoes.youfood.dao.UserAdminDao.
    Causes probables*:
    1. La classe bean EJB a été empaquetée dans une bibliothèque EAR/lib/ (ou par le biais de tout autre mécanisme mettant la bibliothèque à disposition de tous les modules de composant). Cela permet d’inclure indirectement la classe bean dans tous les modules de composant.
    2. La classe bean EJB a été empaquetée dans un module de composant faisant référence au fichier EJB, directement ou indirectement par le biais du fichier manifest sous WEB-INF/lib.
    La classe bean EJB doit uniquement être empaquetée dans le module EJB de déclaration, et non pas dans les modules de référencement. Les modules de référencement doivent contenir uniquement des interfaces EJB.
    INFO: WEB0169: Created HTTP listener [http-listener-2] on host/port [0.0.0.0:8181]
    INFO: Grizzly Framework 1.9.31 started in: 1ms - bound to [0.0.0.0:8181]

    Mes classes sont organisées telles quel :

    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
    23
    24
    25
    package com.geekoes.youfood.jpa;
     
    import com.geekoes.youfood.dao.UserAdminDao;
    import com.geekoes.youfood.entity.Useradmin;
    import java.util.ArrayList;
    import java.util.List;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.criteria.CriteriaBuilder;
    import javax.persistence.criteria.CriteriaQuery;
    import javax.persistence.criteria.Predicate;
    import javax.persistence.criteria.Root;
     
    /**
     *
     * @author Nik
     */
    @Stateless
    public class JpaUserAdminDao implements UserAdminDao{
     
        @PersistenceContext(unitName="YouFood-PU")
        private EntityManager em;
        //...
    }

    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
    package com.geekoes.youfood.dao;
     
    import com.geekoes.youfood.entity.Useradmin;
    import javax.ejb.Local;
     
    /**
     *
     * @author Nik
     */
    @Local
    public interface UserAdminDao {
     
        Useradmin addUserAdmin (Useradmin useradmin);
     
        Useradmin removeUserAdmin (Useradmin useradmin);
     
        Useradmin getLoginInformation(String Login, String Password);
    }

    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 com.geekoes.youfood.service;
     
    import com.geekoes.youfood.dao.UserAdminDao;
    import com.geekoes.youfood.entity.Useradmin;
    import javax.ejb.EJB;
    import javax.ejb.Stateless;
     
    /**
     *
     * @author Nik
     */
    @Stateless
    public class UserAdminService {
     
        @EJB
        private UserAdminDao userAdminDao;
     
        public Useradmin getLoginInformation(String Login, String Password){  // Appel de la fonction getLonginInformation par EJB UserAdminDao
           Useradmin useradmin = userAdminDao.getLoginInformation(Login, Password);
           return useradmin;
        }
    }

    Et voici le pom.xml de l'EAR :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <artifactId>YouFood</artifactId>
        <groupId>com.geekoes</groupId>
        <version>1.0-SNAPSHOT</version>
      </parent>
     
      <groupId>com.geekoes</groupId>
      <artifactId>YouFood-ear</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>ear</packaging>
     
      <name>YouFood-ear</name>
     
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <netbeans.hint.deploy.server>gfv3ee6</netbeans.hint.deploy.server>
      </properties>
     
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
              <source>1.6</source>
              <target>1.6</target>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
            </configuration>
          </plugin>
        </plugins>
      </build>
        <dependencies>
            <dependency>
                <groupId>com.geekoes</groupId>
                <artifactId>YouFood-ejb</artifactId>
                <version>1.0-SNAPSHOT</version>
                <type>ejb</type>
            </dependency>
            <dependency>
                <groupId>com.geekoes</groupId>
                <artifactId>YouFood-web</artifactId>
                <version>1.0-SNAPSHOT</version>
                <type>war</type>
            </dependency>
        </dependencies>
    </project>

    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Ton UserAdminService n'a pas d'interface ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Aucun service n'en avait. Je les ai rajoutées et j'ai modifié le code pour qu'il appelle les interfaces. Toujours le même problème. Ce qui m'interpelle c'est cette ligne (avec une autre classe en fait ) :
    Erreur lors du déploiement*: Exception lors du déploiement de l’application [com.geekoes_YouFood-ear_ear_1.0-SNAPSHOT] : Impossible de résoudre la référence Local ejb-ref name=com.geekoes.youfood.service.ProduitService/produitDao,Local 3.x interface =com.geekoes.youfood.dao.ProduitDao,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session car il existe 2 fichiers EJB dans l’application avec l’interface com.geekoes.youfood.dao.ProduitDao.
    Or si je lance une recherche avec com.geekoes.youfood.dao.ProduitDao, je m'aperçois qu'une seule classe implémente ProduitDao, alors qu'une autre ne fait que l'utiliser :


    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    package com.geekoes.youfood.jpa;
    
    import com.geekoes.youfood.dao.ProduitDao;
    import com.geekoes.youfood.entity.Produit;
    //import com.geekoes.youfood.entity.Produit_;
    import java.util.List;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.TypedQuery;
    
    /**
     *
     * @author alternativ
     */
    @Stateless
    public class JpaProduitDao implements ProduitDao{
        
        @PersistenceContext
        private EntityManager em;
        
        @Override
        public List<Produit> getAll(){
            TypedQuery<Produit> query =
            em.createNamedQuery("Produit.findAll", Produit.class);//
            List<Produit> results =  query.getResultList();
    
            return results;
        }
    //...
    }

    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
    23
    24
    package com.geekoes.youfood.service;
    
    import com.geekoes.youfood.dao.ProduitDao;
    import com.geekoes.youfood.entity.Produit;
    import java.util.List;
    import javax.ejb.EJB;
    import javax.ejb.Stateless;
    
    /**
     *
     * @author Nik
     */
    @Stateless
    public class ProduitService implements IProduitService {
        
        @EJB
        private ProduitDao produitDao;
        
        @Override
        public List<Produit> getAll(){
            return produitDao.getAll();
        }
    //...
    }
    Là je ne vois vraiment pas

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Ça peut venir du fait que tu aurais dans ton EAR un module EJB et un module WEB contenant dans WEB-INF/lib le même module EJB (Pour avoir les interfaces par exemple).

    Vérifie que tu n'as qu'une seule fois ta classe EJB dans le classpath de l'EAR.

    Explication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MonAppli.ear
       +- MonAppliService.jar    (1fois)
       +- MonAppliWeb.war
              +- WEB-INF
                      +- lib
                            +- MonAppliService.jar     (2fois)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Oui c'est bien ça ! J'ai trouvé pourquoi ça me faisait ça, c'est mon ajout de la dépendance du projet EJB dans le projet WEB qui était mal faite :

    WEB
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
        <artifactId>YouFood</artifactId>
        <groupId>com.geekoes</groupId>
        <version>1.0-SNAPSHOT</version>
      </parent>
     
        <groupId>com.geekoes</groupId>
        <artifactId>YouFood-web</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
     
        <name>YouFood-web</name>
     
        <properties>
            <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <netbeans.hint.deploy.server>gfv3ee6</netbeans.hint.deploy.server>
        </properties>
     
        <dependencies>
     
          <!--  FAUX :      <dependency>
                <groupId>com.geekoes</groupId>
                <artifactId>YouFood-ejb</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>-->
    <!-- BON -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>YouFood-ejb</artifactId>
                <version>${project.version}</version>
            </dependency>
     
    </dependencies>
     
     
    </project>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.0] import fichier csv dans mysql avec phpadmin
    Par lylya dans le forum Langage
    Réponses: 5
    Dernier message: 17/05/2010, 10h21
  2. Fichier MHT dans TWebBrowser avec un stream
    Par zymoplexil dans le forum Web & réseau
    Réponses: 0
    Dernier message: 14/07/2008, 18h11
  3. [phpMyAdmin] Importer une fichier Excel dans MySQL
    Par fraisa1985 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 11/07/2008, 14h56
  4. ouvrir fichier .txt dans excel avec des champs texte
    Par rom05 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/05/2008, 18h27
  5. Réponses: 1
    Dernier message: 29/04/2008, 12h54

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