Bonjour à tous,

Une petite question de déploiement concernant deux modes de déploiements :

1) En release, je construis une archive EAR à l'aide d'ANT. Dedans se trouve une archive EJB-Jar ainsi qu'une archive WAR contenant des servlets et des web services. C'est également ANT qui copie l'archive EAR dans le bon dossier de JBoss. Cette archive est réutilisée plus tard pour les déploiements sur les serveurs d'intégration et de test.
2) En debug, je déploie sur le serveur JBoss depuis Eclipse mes deux projets (avec la fonction "Add deployment" en cliquant sur le serveur démarré en mode debug), le premier pour déployer les EJB et le second pour déployer les servlets et les web services.

Comme les deux projets sont déployés séparément avec la solution 2), je n'ai pas trouvé d'autre solution que d'utiliser ces lignes pour l'injection :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
@EJB(mappedName = "Shop/remote")
private static ShopRemote shop;
En comparaison, j'utilisais ces lignes pour l'injection en mode release :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
@EJB
private static ShopRemote shop;
Visiblement, le déploiement au sein de la même archive EAR enlève le besoin de donner le mappedName, il considère tout le contenu comme faisant partie du même déploiement et le rend accessible immédiatement. Je ne connais pas les détails de la procédure.

En debug et sans donner explicitement le mappedName, j'ai cette erreur qui sort :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Caused by: java.lang.IllegalStateException: Resolution should not happen via injection container
	at org.jboss.web.tomcat.service.TomcatInjectionContainer.getEjbJndiName(TomcatInjectionContainer.java:640)
	at org.jboss.injection.EjbEncInjector.inject(EjbEncInjector.java:80)
	at org.jboss.web.tomcat.service.TomcatInjectionContainer.populateEnc(TomcatInjectionContainer.java:482)
	at org.jboss.web.tomcat.service.deployers.TomcatDeployment$EncListener.lifecycleEvent(TomcatDeployment.java:471)
	... 64 more
C'est relativement génant car je dois faire un changement de code entre le mode debug et le mode release, ce qui entraine évidemment des complications de testing

J'ai pensé à mentionner toujours le mappedName, dans le cas release comme dans le cas debug. Seulement, dans le cas 1), le serveur ajoute un préfixe au nom des EJB pour leur enregistrement JNDI, ce nom étant celui de l'archive EAR (sans l'extension .ear). Par exemple et toujours pour cet EJB Shop, il est enregistré comme "Shop/remote" quand je déploie depuis Eclipse sur le serveur en debug, et "poc/Shop/remote" quand je déploie mon archive poc.EAR. J'arrive donc pas non plus de la sorte à avoir un code unique pour les deux déploiements.

Auriez-vous une solution à mon problème, où devrais-je utiliser une autre méthode de release et / ou de debug pour éviter ce problème ?

Merci d'avance de vos interventions.