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 :

Injection en mode debug


Sujet :

Java EE

  1. #1
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut Injection en mode debug
    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.
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

  2. #2
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut
    J'ai résolu en partie mon problème grâce à un autre topic de ce forum sur lequel je suis tombé pour une recherche totalement autre. Le mappedName peut être défini avec un appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Stateless(mappedName="Shop/remote")
    Ca me permet d'avoir en debug et en release le même mappedName.

    Seul problème : l'attribut mappedName n'est pas portable mais dépend de l'implémentation du serveur d'application (selon l'API Java). Pour le moment je vais me contenter de ça sachant qu'il y a peu de chance que j'aie des déploiement sur autre chose que JBoss.
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

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

Discussions similaires

  1. [Débutante] Compréhension programme - mode debug
    Par bolo dans le forum Assembleur
    Réponses: 14
    Dernier message: 07/01/2005, 18h33
  2. Détection mode debug
    Par paradise dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2004, 19h55
  3. Mode debug
    Par sivaller dans le forum Assembleur
    Réponses: 9
    Dernier message: 12/10/2004, 13h33
  4. chargement DLL mode debug/release
    Par bihorece dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/06/2004, 14h05
  5. Recupération lors d'un plantage (en mode debug)
    Par aRCHiMeD dans le forum MFC
    Réponses: 3
    Dernier message: 15/01/2004, 17h09

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