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

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs Discussion :

Récupérer le contexte d'exécution et ses ressources


Sujet :

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Par défaut Récupérer le contexte d'exécution et ses ressources
    Bonjour,

    j'utilise dans mes servlets l'annotation @WebServlet.

    Celle-ci remplace désormais l'utilisation du Web.xml et déclare les servlets comme ressources dans JNDI si j'ai tout bien compris.

    J'essaie depuis une servlet de construire la liste des servlets déclarées et connues par mon serveur Tomcat. Je devrais pouvoir récupérer cette info depuis le JNDI.

    Pour y accéder, j'essaie d'utiliser ce code trouvé sur le site d'Apache :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    A partir de là, j'ai l'espoir de construire une collection de servlets.

    Sauf que j'obtiens une erreur :

    org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: "Servlet.service()" pour la servlet servlets.CentralStation a généré une exception
    java.lang.ClassCastException: javax.naming.InitialContext cannot be cast to javax.naming.Name

    Avez-vous une idée du pourquoi de cette erreur (au-delà du fait que je ne peux pas caster le context) alors que c'est la méthde indiquée par Apache eux-mêmes ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il n'y a pas de Name dans ces deux lignes, donc j'en conclue que l'erreur n'est pas là mais dans du code que tu ne nous montre pas...

  3. #3
    Membre actif Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Par défaut
    Bonsoir,

    merci pour ton aide.

    Je ne montre pas la suite du code parce qu'elle n'existe pas encore

    Je voudrais pouvoir m'appuyer sur ce début de code de la fondation Apache (on retrouve ce même début un peu partout dans les forums) afin d'étudier comment je pourrais constituer une liste/collection d'objets vu comme des ressources par le Context de Tomcat.

    Je ne maîtrise pas du tout ces aspects Context, JNDI...

    Rien que ces 2 lignes provoquent l'erreur que j'ai citée, le debugger d'Eclipse pointant la seconde.

    Je ne sais vraiment pas quoi faire pour aller plus loin. Je suis perdu en fait.

    Voilà ce que j'ai essayé de construire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Obtain our environment naming context
    		try {
    			Context initCtx = new InitialContext();
    			Context envCtx = (Context) initCtx.lookup("java:comp/env");
    			Enumeration<NameClassPair> enumObjets = envCtx.list((Name) initCtx);
    			System.out.println("PASSE ICI");
    			while(enumObjets.hasMoreElements()) {
    				System.out.println(enumObjets.getClass().getName());
    			}
    		} catch (NamingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    C'est bien ce que je disais, c'est la 3ème ligne que tu ne nous as pas montré qui est en cause:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Enumeration<NameClassPair> enumObjets = envCtx.list((Name) initCtx);
    Si tu veux lister le contenu de envCtx, utilise envCtx.list("");
    Je ne vois pas où tu t'imagine qu'un context jndi et un Name c'est la même chose. Le context contient des object, le Name contient le nom d'un objet.

  5. #5
    Membre actif Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Par défaut
    Merci à toi.

    J'ai effectivement un peu de mal à m'y retrouver.

    Ce que je veux récupérer, c'est la liste des servlets que j'ai déclarées avec l'annotation @WebServlet

    Dans quelle direction dois-je creuser ? Je pensais que les servlets étaient vues par Tomcat comme des ressources dont il pouvait ensuite me donner les noms. C'est pourquoi je pensais trouver cela dans le JNDI.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu peux récupérer la liste des servlets depuis une autre servlet avec ServletContext.getServletRegistrations().


    Le conteneur ne fait pas la distinction entre annotation et web.xml, toutes els servlets sont sur le même pied.

    Bien que tu puisse retrouver aussi les servlets dans le JNDI, je ne pense pas que la spec J2EE Oblige une nomenclature particulière.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/02/2007, 18h00
  2. Réponses: 1
    Dernier message: 18/01/2007, 11h09
  3. [EJB] Récupérer le contexte
    Par thecaptain dans le forum Services Web
    Réponses: 1
    Dernier message: 07/11/2006, 15h39
  4. FileInfo - Récupérer «Comments» d'un exécutable
    Par DarkVader dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/10/2006, 18h41
  5. Récupérer le nom de partage d'une ressource locale
    Par bib34690 dans le forum Langage
    Réponses: 4
    Dernier message: 12/10/2005, 16h10

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