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

JOnAS Java Discussion :

Mon Erreur javax.naming.NameNotFoundException:


Sujet :

JOnAS Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Mon Erreur javax.naming.NameNotFoundException:
    Bonjour,

    Je reprend l'exemple d'un tutorial concernant la création d'EJB. J'utilise Jonas comme serveur. lorsque je souhaite utiliser mon EJB j'ai le message suivant :
    javax.naming.NameNotFoundException: Tiger
    Je ne vois pas d'ou peut venir cette erreur. je précise le build est passé sans problème.
    Si quelqu'un a une idée sur mon problème merci de me faire des suggestions.

    Je laisse quand même comme indication un résumé de mes fichiers xml:

    zoo.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
       <enterprise-beans>
          <session>
             <ejb-name>Tiger</ejb-name>
             <home>zoo.TigerHome</home>
             <remote>zoo.Tiger</remote>
             <local-home>zoo.TigerLocalHome</local-home>
             <local>zoo.TigerLocal</local>
             <ejb-class>zoo.TigerBean</ejb-class>
             <session-type>Stateless</session-type>
             <transaction-type>Container</transaction-type>
             <env-entry>
    	<env-entry-name>prop1</env-entry-name>
    	<env-entry-type>java.lang.String</env-entry-type>
    	<env-entry-value>prop1 value</env-entry-value>
          </env-entry>
     
          </session>
    <enterprise-beans/>
    jonas-zoo.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     <jonas-session>
        <ejb-name>Tiger</ejb-name>
        <jndi-name>TigerHome</jndi-name>
      </jonas-session>

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Le problème c'était le Context!
    Merci à tous pour vos suggestions !

    J'ai trouvé mon problème qui était en relation avec la création de mon Context.
    Avant dans la classe client de mon projet j'avais :

    TigerClient.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
     Context initialContext = null;
    	    try {
    	      initialContext = new InitialContext();
    	    } catch (Exception e) {
    		      System.err.println("Impossible d'accéder au contexte JNDI : " + e);
    		      System.exit(2);
    	    }
     
        // Récupération d'une référence à l'interface locale
    	    TigerHome home = null;
    	    try {
    	      home = (TigerHome)PortableRemoteObject.narrow(initialContext.lookup("Tiger"), TigerHome.class);
    	    } catch (Exception e) {
    		      System.err.println( "Impossible de trouver TigerHome : " + e);
    		      System.exit(2);
    	    }
    avec ce code j'avais la fameuse erreur :

    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial

    quand j'ai créé mon contexte, j'étais dans un client externe, il fallait que je lui
    passer un objet Properties avec dedans :
    - le nom de la factory pour créer le contexte,
    - l'url du serveur,
    - éventuellement d'autres infos (login, passwd, ...)

    ce qui donne

    TigerClient.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Properties env = new Properties();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    env.put(Context.PROVIDER_URL, "localhost:1099");
        	
        	// Récupération du contexte initial
    	    Context initialContext = null;
    	    try {
    	      initialContext = new InitialContext(env);
    	    } catch (Exception e) {
    		      System.err.println("Impossible d'accéder au contexte JNDI : " + e);
    		      System.exit(2);
    	    }
    
        // Récupération d'une référence à l'interface locale
    	    TigerHome home = null;
    	    try {
    	      home = (TigerHome)PortableRemoteObject.narrow(initialContext.lookup("Tiger"), TigerHome.class);
    	    } catch (Exception e) {
    		      System.err.println( "Impossible de trouver TigerHome : " + e);
    		      System.exit(2);
    	    }
    et du coup ça marche beaucoup mieux.

  3. #3
    Membre VIP Avatar de kalysto
    Profil pro
    Développeur
    Inscrit en
    Mars 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mars 2003
    Messages : 442
    Points : 568
    Points
    568
    Par défaut
    En effet, cela marche beaucoup mieux, mais ca a pour effet de lier ton code à un context particulier (l'URL de ton registry par exemple, le protocole utilisé aussi, ...).

    Le 1er bout de code que tu avais montré est de loin le mieux, il est sensé s'appuyer sur le client container (JOnAS) pour se connecter sur un serveur remote.

    Il fallait juste lancer ton client en passant par le client container de JOnAS :
    java -jar client.jar <client-main-class-name>

    http://jonas.objectweb.org/current/d...html#PG_Client

    J'ajouterais que tu n'utilise pas la bonne InitialContextFactory, vu que org.jnp.* est une classe du package JBoss
    Ca marche car le protocole de base c'est JRMP/RMI mais si tu as de la sécurite et des transactions, ca ne marchera plus du tout.

    Pour info, il aurait fallu mettre ca pour etre vraiment sure que ca marche en JOnAS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Properties env = new Properties();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "org.objectweb.carol.jndi.spi.MultiOrbInitialContextFactory");
    env.put(Context.PROVIDER_URL, "rmi://localhost:1099");

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut solution Jonas JNDI cast exception
    le Pb vien du local, on ne peut pas récupérer à distance un EJB via un JNDI en local, prend le JNDI en remote. bon courage.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/03/2012, 15h41
  2. Réponses: 0
    Dernier message: 07/03/2012, 09h26
  3. Erreur : javax.naming.NameNotFoundException
    Par boobs60 dans le forum JOnAS
    Réponses: 0
    Dernier message: 05/01/2012, 22h14
  4. Réponses: 5
    Dernier message: 13/09/2011, 18h27
  5. Réponses: 2
    Dernier message: 20/07/2011, 19h26

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