JavaEE 6: javax.de nommage.NameAlreadyBoundException: Utilisation relier à remplacer
J'ai une entreprise d'interface mis en œuvre par deux Ejb.
UserManagementService
@Remote
public interface UserManagementService {
//...
}
UserManagementServiceJpaImpl
@Stateless(name="userManagementServiceJpaImpl")
public class UserManagementServiceJpaImpl implements UserManagementService {
@EJB(beanName="userManagementDaoJpaImpl")
private UserManagementDao userManagementDao;
//...
}
UserManagementServiceMockImpl
@Stateless(name="userManagementServiceMockImpl")
public class UserManagementServiceMockImpl implements UserManagementService {
@EJB(beanName="userManagementDaoMockImpl")
private UserManagementDao userManagementDao;
//...
}
Pour le déploiement de l'application Glassfish 3.1 j'obtiens l'erreur suivante:
java.lang.RuntimeException: Error while binding JNDI name com.transbinary.imdb.service.UserManagementService for EJB : userManagementServiceMockImpl
at com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1550)
at com.sun.ejb.containers.StatelessSessionContainer.initializeHome(StatelessSessionContainer.java:202)
at com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:167)
at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:234)
at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:290)
at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:101)
at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:186)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:249)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:460)
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:360)
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 org.glassfish.deployment.autodeploy.AutoOperation.run(AutoOperation.java:145)
at org.glassfish.deployment.autodeploy.AutoDeployer.deploy(AutoDeployer.java:577)
at org.glassfish.deployment.autodeploy.AutoDeployer.deployAll(AutoDeployer.java:463)
at org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:395)
at org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:380)
at org.glassfish.deployment.autodeploy.AutoDeployService$1.run(AutoDeployService.java:213)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
Caused by: javax.naming.NameAlreadyBoundException: Use rebind to override
at com.sun.enterprise.naming.impl.TransientContext.doBindOrRebind(TransientContext.java:333)
at com.sun.enterprise.naming.impl.TransientContext.bind(TransientContext.java:268)
at com.sun.enterprise.naming.impl.SerialContextProviderImpl.bind(SerialContextProviderImpl.java:98)
at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.bind(LocalSerialContextProviderImpl.java:99)
at com.sun.enterprise.naming.impl.SerialContext.bind(SerialContext.java:672)
at com.sun.enterprise.naming.impl.SerialContext.bind(SerialContext.java:689)
at javax.naming.InitialContext.bind(InitialContext.java:404)
at javax.naming.InitialContext.bind(InitialContext.java:404)
at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.publishObject(GlassfishNamingManagerImpl.java:208)
at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.publishObject(GlassfishNamingManagerImpl.java:189)
at com.sun.ejb.containers.BaseContainer$JndiInfo.publish(BaseContainer.java:5608)
at com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1535)
... 23 more
Quelqu'un pourrait-il m'aider à comprendre pourquoi j'obtiens cette erreur et comment la résoudre?
Essayez de regarder dans le démarrage du serveur de logs où JNDI de la liaison des interfaces sont affichés, vérifiez si sa déjà déployées sur le serveur. Probablement cette erreur se produit ayant la même interface de noms dans différents paquets ou même interface dans plusieurs pots.
OriginalL'auteur skip | 2011-09-16
Vous devez vous connecter pour publier un commentaire.
Par défaut GlassFish Server par défaut, les noms JNDI sont appliquées automatiquement pour des raisons de compatibilité descendante. Donc
com.transbinary.imdb.service.UserManagementService
est la valeur par défaut nom JNDI pour les deux implémentations deUserManagementService
interface. C'est pourquoi j'étais à sortir dujavax.naming.NameAlreadyBoundException
exception.Mais parce que les EJB 3.1 spécification définit portable EJB noms JNDI, il y a moins besoin de GlassFish spécifiques au Serveur de noms JNDI.
Pour désactiver le Serveur GlassFish spécifiques noms JNDI pour un module EJB, définissez la valeur de
disable-nonportable-jndi-names
élément detrue
. La valeur par défaut estfalse
.Il a résolu le problème.
Ressource: http://wikis.oracle.com/display/GlassFish/Developer+Handoff+to+QA+for+EJB-8+%28Option+to+disable+GlassFish-specific+JNDI%29
OriginalL'auteur skip
GlassFish redémarrer. (Il a travaillé pour moi.)
Ma question trop.. drôle de voir comment cela est vrai.. youtube.com/watch?v=nn2FB1P_Mn8
Cela fonctionne dans WL 12 ainsi
OriginalL'auteur palacsint
J'ai eu cette même exception.
Dans mon cas, j'ai changé mon code de
@Stateless(mappedName = "whatever")
plutôt
@Stateless(name = "whatever")
et il a résolu mon problème
OriginalL'auteur Christo Smal
Dans mon cas, j'ai été en utilisant JBoss5.1GA et j'ai eu deux Ejb mettre en oeuvre une politique locale d'Affaires de l'Interface...
J'ai Suivi l'idée suggérée par @Christo Smal, et cela fonctionne pour moi..... Une autre Observation: j'ai été le déploiement d'une oreille, qui contient les deux Ejb à deux styles différents fichiers jar EJB; e.g:
OriginalL'auteur Carlitos Way