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

Wildfly/JBoss Java Discussion :

[EJB3] [JBOSS4] javax.naming.NameNotFoundException


Sujet :

Wildfly/JBoss Java

  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut [EJB3] [JBOSS4] javax.naming.NameNotFoundException
    Bonsoir,

    J'utilise JBoss avec EJB3, et lorsque je fais un Context#lookup(String) j'ai l'exception suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.naming.NameNotFoundException: StoreManagerBean not bound
    Voici les bouts de code utiles à la compréhension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Remote
    @Local
    public interface StoreManager {
        List<Store> getStores();
        void addStore(Store s);
    }
    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
    //@EJB(name="StoreManagerBean", beanInterface=StoreManager.class)
    @Stateless
    //@Local ({StoreManager.class})
    public class StoreManagerBean implements StoreManager, Serializable {
     
        private static final long serialVersionUID = 1L;
     
        @PersistenceContext(unitName="StoreManagerBean")
        private EntityManager em;
     
        @SuppressWarnings("unchecked")
        public List<Store> getStores() {
            return em.createNamedQuery("findAll").getResultList();
        }
     
        public void addStore(Store s) {
            em.persist(s);
        }
     
    }
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class EjbLocator {
     
        private Context ctx;
     
        private EjbLocator() {
            try {
                //le fichier jndi.properties est bien présent dans le répertoire racine
                ctx = new InitialContext(System.getProperties());
            } catch (NamingException e) {
                e.printStackTrace();
                throw new Error(e);
            }
        }
     
        public static EjbLocator getLocator() {
            return instance;
        }
     
        public StoreManager getStoreManager() {
            return getEjb(StoreManager.class, "StoreManagerBean");
        }
     
        @SuppressWarnings("unchecked")
        private <T> T getEjb(Class<T> ejbClass, String name) {
            try {
                return (T) ctx.lookup(name + "/local"); //c'est là que ça plante
            } catch (NamingException e) {
                e.printStackTrace();
                return null;
            }
        }
     
    }
    Merci beaucoup d'avance de votre aide...

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    c.lookup("java:comp/env/" + path + class);

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par *alexandre*
    c.lookup("java:comp/env/" + path + class);
    J'avais déjà essayé, mais ça ne marche pas (même erreur).

    J'ai essayé cela (ma classe est ejb.StoreManagerBean):
    java:comp/env/ejb/StoreManagerBean
    java:comp/env/ejb/StoreManagerBean/local
    java:comp/env/StoreManagerBean
    java:comp/env/StoreManagerBean/local

    ...

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    sous Sun AS j ai ca de définit dans mon web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        <ejb-local-ref>
            <ejb-ref-name>ejb/NewEntityFacade</ejb-ref-name>
            <ejb-ref-type>Session</ejb-ref-type>
            <local>com.test.ejb.entity.NewEntityFacadeLocal</local>
            <ejb-link>tutorial-ejb.jar#NewEntityFacade</ejb-link>
        </ejb-local-ref>
        <ejb-local-ref>
            <ejb-ref-name>newsEntityFacade</ejb-ref-name>
            <ejb-ref-type>Session</ejb-ref-type>
            <local>com.test.ejb.entity.NewEntityFacadeLocal</local>
            <ejb-link>tutorial-ejb.jar#NewEntityFacade</ejb-link>
        </ejb-local-ref>
    ejb représente le package qui contient mon entity et la facade

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            <local>com.test.ejb.entity.NewEntityFacadeLocal</local>

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Et il faut pas oublier de déclarer en @PersistenceContext ton persisten manager ou dao dans ta facade

  6. #6
    Membre émérite Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Par défaut
    Regardes dans la console JMX. Dans le MBean JNDIView, invoques l'action liste. Là tu verras toutes les valeurs dans l'arbre JNDI du serveur.

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par *alexandre*
    Et il faut pas oublier de déclarer en @PersistenceContext ton persisten manager ou dao dans ta facade
    C'est ce que j'ai fait (avec un paramètre en plus).

    Pour le xml, je n'utilise pas de xml car j'utilise les annotations...

    Citation Envoyé par XmasRock
    Regardes dans la console JMX. Dans le MBean JNDIView, invoques l'action liste. Là tu verras toutes les valeurs dans l'arbre JNDI du serveur.
    J'utilise tout ça sous eclipse, comment faire cela?

  8. #8
    Membre émérite Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Par défaut
    Voici ce que j'ai trouvé dans la doc EJB3 de JBoss (http://docs.jboss.org/ejb3/app-serve...tml#references) :



    3.4.2. Referencing from Global JNDI

    Persistence units are not available within global JNDI unless you explicitly configure them to do so. There are two properties you can specify in your persistence.xml file to enable this. jboss.entity.manager.jndi.name gives you a transaction scoped entity manager you can interact with. jboss.entity.manager.factory.jndi.name binds the entity manager factory into global JNDI.

    <persistence>
    <persistence-unit name="manager1">
    <jta-data-source>java:/DefaultDS</jta-data-source>
    <properties>
    <property name="jboss.entity.manager.jndi.name" value="java:/Manager1"/>
    <property name="jboss.entity.manager.factory.jndi.name" value="java:/Manager1Factory"/>
    </properties>
    </persistence-unit>
    </persistence>
    et

    Rules for the @EJB annotation

    * The @EJB annotation also has a mappedName() attribute. The specification leaves this a vendor specific metadata, but JBoss recognizes mappedName() as the global JNDI name of the EJB you are referencing. If you have specified a mappedName(), then all other attributes are ignored and this global JNDI name is used for binding.
    * If you specify @EJB with no attributes defined:

    @EJB ProcessPayment myEjbref;

    Then the following rules apply:
    o The EJB jar of the referencing bean is contained in is search for another EJB with the same interface. If there are more than one EJB that publishes same business interface, throw an exception, if there is one, use that one.
    o Search the EAR for EJBs that publish that interface. If there are duplicates, throw an exception, otherwise return that one.
    o Search globally in JBoss for an EJB of that interface. Again, if duplicates, throw an exception
    * @EJB.beanName() corresponds to <ejb-link>. If the beanName() is defined, then use the same algorithm as @EJB with no attributes defined except use the beanName() as a key in the search. An exception to this rule is if you use the ejb-link '#' syntax. The '#' syntax allows you to put a relative path to a jar in the EAR where the EJB you are referencing lives. See spec for more details

    For XML the same rules apply as annotations exception <mapped-name> is the ejb-jar.xml equivalent to @EJB.mappedName().

  9. #9
    Membre émérite Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Par défaut
    pour voir ces noms, fais pointer un navigateur sur http://localhost:8080/jmx-console (si tu es sur la même machine que le serveur JBoss AS)

    Dans la liste de liens, cherches "JNDIView" et cliques dessus.

    dans la page qui s'affiche, cherches une opération nommée "List" et cliques sur son bouton "Invoke".

    Le tour est joué
    Regardes la doc à : http://docs.jboss.com/jbossas/guides...ingle/#d0e7073

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Ton EJB locator est appellé par qui et comment ?

    essaye d ajouter une annotation

    beanInterface=FooLocal.class)

    https://glassfish.dev.java.net/javae...l#POJOLocalEJB

  11. #11
    Membre émérite Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Par défaut
    J'ai aussi trouvé ça : ou .
    Si tu embarques tes EJBs dans une EAR, tu as peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonEarName/ejbName/local
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonEarName/ejbName/remote
    Le mieux c'est d'aller voir avec JNDIView

  12. #12
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par XmasRock
    pour voir ces noms, fais pointer un navigateur sur http://localhost:8080/jmx-console (si tu es sur la même machine que le serveur JBoss AS)

    Dans la liste de liens, cherches "JNDIView" et cliques dessus.

    dans la page qui s'affiche, cherches une opération nommée "List" et cliques sur son bouton "Invoke".

    Le tour est joué
    Regardes la doc à : http://docs.jboss.com/jbossas/guides...ingle/#d0e7073
    Merci, j'ai essayé, mais il me demande un mot de passe...

    Je n'ai jamais eu à choisir un mot de passe à l'installation de JBoss, comment en choisir un?

  13. #13
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    J'ai maintenant créé mon persistence.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence>
    <persistence-unit name="StoreManagerBean">
    <jta-data-source>java:/DefaultDS</jta-data-source>
    <properties>
    <property name="jboss.entity.manager.jndi.name" value="java:/StoreManagerBean"/>
    <property name="jboss.entity.manager.factory.jndi.name" value="java:/StoreManagerBean"/>
    </properties>
    </persistence-unit>
    </persistence>
    Le StoreBeanManager (qui est un stateless session bean) n'a plus l'air de poser de problème...
    Par contre, StoreBean qui est un entity bean, semble poser problème...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    --- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
    ObjectName: persistence.units:ear=Jee.ear,jar=JeeEjb.jar,unitName=StoreManagerBean
      State: FAILED
      Reason: javax.persistence.PersistenceException: org.hibernate.PropertyNotFoundException: Could not find a setter for property id in class ejb.StoreBean
      I Depend On:
        jboss.jca:service=DataSourceBinding,name=DefaultDS
    J'ai rajouté un setId(int id) dans StoreBean, j'ai toujours le problème

    EDIT: c bon c'étant l'attribut name qui n'allait pas

    Le but des ejb3 n'est-il pas justement de ne pas utiliser de xml?

  14. #14
    Membre émérite Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Par défaut
    Merci, j'ai essayé, mais il me demande un mot de passe...

    Je n'ai jamais eu à choisir un mot de passe à l'installation de JBoss, comment en choisir un?
    Comment as-tu installé JBoss ? avec l'installeur tu as un écran consacré à la sécurisation. Essayes login = admin et mdp = admin.

  15. #15
    Membre émérite Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Par défaut
    J'ai rajouté un setId(int id) dans StoreBean, j'ai toujours le problème
    As-tu utilisé l'annotation ?

  16. #16
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Ca maintenant ça marche, j'avais oublié le setName()...

    Mais maintenant je retrouve le même problème NameNotFoundException...

    persistence.xml est-il vraiment utile pour EJB3?

  17. #17
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par XmasRock
    Comment as-tu installé JBoss ? avec l'installeur tu as un écran consacré à la sécurisation. Essayes login = admin et mdp = admin.
    Effectivement, je me rappelle, en fait soit on met "installation avancée", soit "installation standard", et la config du login/pass n'est que dans l'installation avancée, et j'a ifait installation standard

  18. #18
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par XmasRock
    pour voir ces noms, fais pointer un navigateur sur http://localhost:8080/jmx-console (si tu es sur la même machine que le serveur JBoss AS)

    Dans la liste de liens, cherches "JNDIView" et cliques dessus.

    dans la page qui s'affiche, cherches une opération nommée "List" et cliques sur son bouton "Invoke".

    Le tour est joué
    Regardes la doc à : http://docs.jboss.com/jbossas/guides...ingle/#d0e7073
    Ah voilà le mot de passe et login sont admin/admin...

    Donc voilà ce que j'ai trouvé dans JNDIView:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      +- Jee (class: org.jnp.interfaces.NamingContext)
      |   +- StoreManagerBean (class: org.jnp.interfaces.NamingContext)
      |   |   +- local (proxy: $Proxy73 implements interface ejb.StoreManager,interface org.jboss.ejb3.JBossProxy,interface javax.ejb.EJBLocalObject)
      |   |   +- remote (proxy: $Proxy71 implements interface ejb.StoreManager,interface org.jboss.ejb3.JBossProxy,interface javax.ejb.EJBObject)
    Comment exploiter ces infos pour corriger mon bug ne NameNotFoundException?

  19. #19
    Membre émérite Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Par défaut
    lookup("Jee/StoreManagerBean/local")
    ou
    lookup("Jee/StoreManagerBean/remote")

  20. #20
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par XmasRock
    lookup("Jee/StoreManagerBean/local")
    ou
    lookup("Jee/StoreManagerBean/remote")
    Toujours pas

Discussions similaires

  1. javax.naming.NameNotFoundException: remote not bound
    Par iMacXus dans le forum Wildfly/JBoss
    Réponses: 12
    Dernier message: 06/10/2011, 23h51
  2. Mon Erreur javax.naming.NameNotFoundException:
    Par nafnaf625 dans le forum JOnAS
    Réponses: 3
    Dernier message: 16/08/2010, 11h40
  3. EJB3 remote javax.naming.NameNotFoundException
    Par toomsounet dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 22/12/2007, 15h10
  4. [EJB Stateless] javax.naming.NameNotFoundException: ejb not bound
    Par slymira dans le forum Java EE
    Réponses: 18
    Dernier message: 04/07/2005, 15h30
  5. [EJB] [JBOSS][javax.naming.NameNotFoundException]
    Par hamed dans le forum Java EE
    Réponses: 5
    Dernier message: 18/12/2003, 18h00

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