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 :

problème de récupération d'une interface LocalHome depuis un SessionBean


Sujet :

Wildfly/JBoss Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut problème de récupération d'une interface LocalHome depuis un SessionBean
    Bonjour,

    J'ai pour le moment créé 2 beans, un bean entité et un bean session.
    Voici les interfaces et classes de ces deux beans :

    EtudiantLocal
    EtudiantLocalHome
    EtudiantBean

    EtudiantController
    EtudiantControllerHome
    EtudiantControllerBean

    Comme vous pouvez le constater, l'Entity bean 'Etudiant' dispose d'une interface locale (qui sera utilisée par le session bean controlleur), et le Session bean 'EtudiantController' d'une interface remote (qui sera utilisée par le client).

    J'utilise JBOSS 4.0.4 et voici mon descripteur de déploiement (ejb-jar.xml) de mes beans:

    ************************
    <?xml version="1.0"?>
    <!DOCTYPE ejb-jar PUBLIC
    '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN'
    'http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd'>

    <ejb-jar>
    <enterprise-beans>
    <session>
    <ejb-name>EtudiantControllerEJB</ejb-name>
    <home>com.ejb.etudiant.EtudiantControllerHome</home>
    <remote>com.ejb.etudiant.EtudiantController</remote>
    <ejb-class>com.ejb.etudiant.EtudiantControllerBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Container</transaction-type>
    <ejb-local-ref>
    <ejb-ref-name>ejb/Etudiant</ejb-ref-name>
    <ejb-ref-type>Entity</ejb-ref-type>
    <local-home>com.ejb.etudiant.EtudiantHome</local-home>
    <local>com.ejb.etudiant.Etudiant</local>
    <ejb-link>EtudiantEJB</ejb-link>
    </ejb-local-ref>
    <resource-ref>
    <res-ref-name>jdbc/EtudiantDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    </session>

    <entity>
    <ejb-name>EtudiantEJB</ejb-name>
    <local-home>com.ejb.etudiant.EtudiantHome</local-home>
    <local>com.ejb.etudiant.Etudiant</local>
    <ejb-class>com.ejb.etudiant.EtudiantBean</ejb-class>
    <persistence-type>Bean</persistence-type>
    <prim-key-class>java.lang.Integer</prim-key-class>
    <reentrant>False</reentrant>
    <resource-ref>
    <res-ref-name>jdbc/EtudiantDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    </entity>

    </enterprise-beans>
    <assembly-descriptor></assembly-descriptor>
    </ejb-jar>
    **************************************

    Dans le client afin de récupérer une instance de l'interface distante, j'effectue le code suivant (qui fonctionne) :


    ***************************************
    Properties properties = new Properties();
    properties = new Properties();
    properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
    properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
    properties.put("java.naming.provider.url", "jnp://127.0.0.1:1099");
    properties.put("jnp.disableDiscovery", "true");
    InitialContext initial = new InitialContext(properties);
    Object objref = initial.lookup("EtudiantControllerEJB");
    EtudiantControllerHome etudiantControllerHome = (EtudiantControllerHome ) PortableRemoteObject.narrow(objref, EtudiantControllerHome .class);
    EtudiantController etudiantController = etudiantControllerHome.create();
    ********************************


    Mon problème est le suivant: depuis mon session bean, il me faut récupérer une instance vers l'interface locale de mon entity bean (je fais cela dans la methode ejbCreate() du session bean en réalité), j'effectue donc le code suivant :

    **************************
    InitialContext initial = new InitialContext();
    Object objref = initial.lookup("EtudiantEJB");
    EtudiantHome etudiant = (EtudiantHome) PortableRemoteObject.narrow(objref, EtudiantHome.class);
    *************************************


    Or lors de l'éxecution, j'obtiens l'erreur suivant de la part de JBoss :


    *************************************
    05:15:50,147 INFO [EjbModule] Deploying EtudiantEJB
    05:15:50,562 INFO [EjbModule] Deploying EtudiantControllerEJB
    05:15:51,017 INFO [BaseLocalProxyFactory] Bound EJB LocalHome 'EtudiantEJB' to jndi 'local/EtudiantEJB@30122033'
    05:15:51,434 INFO [ProxyFactory] Bound EJB Home 'EtudiantControllerEJB' to jndi 'EtudiantControllerEJB'
    05:15:51,470 INFO [EJBDeployer] Deployed: file:/home/laurent/jboss-4.0.4.GA/server/default/deploy/ejb.jar
    05:16:04,504 ERROR [LogInterceptor] EJBException in method: public abstract com.ejb.etudiant.EtudiantController com.ejb.etudiant.EtudiantControllerHome.create() throws java.rmi.RemoteException,javax.ejb.CreateException, causedBy:
    javax.ejb.EJBException: ejbCreate: EtudiantEJB not bound
    at com.ejb.etudiant.EtudiantControllerBean.ejbCreate(EtudiantControllerBean.java:383)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    ******************************************


    Ca fait des heures et des heures que je cherche une solution à ce problème et je reste vraiment bloqué. Est-ce du au fait que j'essaie de me connecter un bean possédant une interface locale? Que dois-je mettre dans le lookup? Mon ejb-jar.xml est-il configuré correctement? JE VOUS EN SUPPLIE AIDEZ MOI!!

  2. #2
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Salut
    Je suis tout nouveau en J2EE notamment en EJB, mais je pense que pour invoquer les méthodes d'un bean local tu ne dois pas passer par JNDI, car les deux instances résident sur le même JVM

    cdlt

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par med56
    Salut
    Je suis tout nouveau en J2EE notamment en EJB, mais je pense que pour invoquer les méthodes d'un bean local tu ne dois pas passer par JNDI, car les deux instances résident sur le même JVM

    cdlt
    JNDI peut s'utiliser aussi pour les ressources locales. Par exemple, l'espace de nom java: est réservé pour les références locales.


    Pour le problème, essaie:

    InitialContext initial = new InitialContext();
    Object objref = initial.lookup("java:comp/env/ejb/EtudiantEJB");
    EtudiantHome etudiant = (EtudiantHome) PortableRemoteObject.narrow(objref, EtudiantHome.class);

Discussions similaires

  1. [MySQL] problème de récupération d'une valeur
    Par Larffas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/10/2007, 15h15
  2. Problème de récupération d'une application wxGlade
    Par DIP²technique dans le forum Eclipse C & C++
    Réponses: 3
    Dernier message: 19/08/2007, 18h23
  3. Réponses: 5
    Dernier message: 25/05/2007, 10h22
  4. [AJAX] Récupération d'une valeur en retour d'un php
    Par lodan dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/02/2007, 21h18
  5. Problème de récupération dans une map
    Par sacdenoeud dans le forum C++
    Réponses: 7
    Dernier message: 26/03/2006, 08h40

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