[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)
Citation:
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:
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:
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:
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:
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.