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 :

Test JUnit JBoss : javax.naming.NoInitialContextException


Sujet :

Wildfly/JBoss Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 60
    Points : 44
    Points
    44
    Par défaut Test JUnit JBoss : javax.naming.NoInitialContextException
    Bonjour j'ai voulu implémenter l'exemple de Patrice Secheresse et le faire tourner avec un serveur JBOSS . A l'exécution de mon test jUnit j'obtiens l'exception suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    3 janv. 2011 12:54:40 demo.ejb3.calculatrice.CalculatriceFacadeTest testAdditionner
    GRAVE: null
    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
    Voici mes beans (tous simples)

    calculatrice :

    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package demo.ejb3.calculatrice;
     
    import javax.ejb.Local;
     
    @Local
    public interface CalculatriceLocal {
     
        int additionner(int x, int y);
     
    }
    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package demo.ejb3.calculatrice;
     
    import javax.ejb.Stateless;
     
     
    @Stateless
    public class Calculatrice implements CalculatriceLocal {
     
        public int additionner(int x, int y) {
            return x+y;
        }
     
        // Add business logic below. (Right-click in editor and choose
        // "Insert Code > Add Business Method")
     
    }
    Façade Calculatrice:
    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
     
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package demo.ejb3.calculatrice;
     
    import javax.ejb.Remote;
     
     
    @Remote
    public interface CalculatriceFacadeRemote {
     
          int additionner(int x);
     
    }
    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package demo.ejb3.calculatrice;
     
    import javax.ejb.EJB;
    import javax.ejb.Stateful;
     
     
    @Stateful
    public class CalculatriceFacade implements CalculatriceFacadeRemote {
     
        // Add business logic below. (Right-click in editor and choose
        // "Insert Code > Add Business Method")
        @EJB
        private CalculatriceLocal calculatriceBean;
     
        int sousTotal=0;
     
        public int additionner(int x) {
            sousTotal = calculatriceBean.additionner(x, sousTotal);
            return sousTotal;
        }
     
     
     
    }
    Le test jUnit :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package demo.ejb3.calculatrice;
     
     
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.rmi.PortableRemoteObject;
    import org.junit.After;
    import org.junit.AfterClass;
    import org.junit.Before;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import static org.junit.Assert.*;
     
     
    public class CalculatriceFacadeTest {
     
        public CalculatriceFacadeTest() {
        }
     
        @BeforeClass
        public static void setUpClass() throws Exception {
        }
     
        @AfterClass
        public static void tearDownClass() throws Exception {
        }
     
        @Before
        public void setUp() {
        }
     
        @After
        public void tearDown() {
        }
     
        /**
         * Test of additionner method, of class CalculatriceFacade.
         */
        @Test
        public void testAdditionner() {
            try {
                System.out.println("additionner");
     
                int x = 0;
                int expResult = 0;
     
                InitialContext ctx;
                System.out.println("additionner");
                ctx = new InitialContext();
                System.out.println("additionner");
     
                System.out.println("class name : "+CalculatriceFacadeRemote.class.getName());
                Object ref = ctx.lookup(CalculatriceFacadeRemote.class.getName());
                System.out.println("additionner");
                CalculatriceFacadeRemote calc = (CalculatriceFacadeRemote) PortableRemoteObject.narrow(ref,CalculatriceFacadeRemote.class);
                System.out.println("additionner");
     
                int result = calc.additionner(x);
                System.out.println("additionner");
                assertEquals(expResult, result);
     
                x=2;
                expResult = 2;
                result = calc.additionner(x);
     
     
                expResult = 4;
                result = calc.additionner(x);
                assertEquals(expResult, result);
     
                // TODO review the generated test code and remove the default call to fail.
                fail("The test case is a prototype.");
            } catch (NamingException ex) {
                Logger.getLogger(CalculatriceFacadeTest.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
     
    }
    Pouvez-vous m'aider ? merci

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Il manque le paramétrage de ton context, soit de manière programmative, soit via un fichier jndi.properties.
    Il faut au moins, entre autre, l'url du serveur d'application.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    ok j'ai ajouté cela dans ma fonction de test testAdditionner du JUnit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          Hashtable ht=new Hashtable();
    		ht.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
    		ht.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
    		ht.put("java.naming.provider.url", "localhost");
    Par contre toujours la même erreur y a t-il une lib particulière à ajouter dans les test libraries ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 91
    Points : 114
    Points
    114
    Par défaut
    Oui tu dois ajouter le client JBoss dans ton classpath.

    Il se trouve dans $JBOSS_HOME/client/jbossall-client.jar .

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 91
    Points : 114
    Points
    114
    Par défaut
    Pour le provider URL, c'est plutôt une url du genre "jnp://localhost:1099" si l'accès à JNDI via RMI est ouvert sur le port 1099 (le défaut)

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Il faut aussi préciser le port dans l'URL, qui doit être 1099 par défaut, me semble-t-il.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    merci,

    la lib semblait être manquante, mais il y a une nouvelle erreur maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.naming.NameNotFoundException: demo.ejb3.calculatrice.CalculatriceFacadeRemote not bound
    Comme si le nom ne pouvait pas être résolu. Une question mon jboss.xml est vide, mais cela ne doit pas poser de problèmes si j'utilise le jndi par défaut non ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 91
    Points : 114
    Points
    114
    Par défaut
    Pas étonnant...

    Vas dans la console JMX de JBoss (http://localhost:8080/jmx-console), service JNDIView (http://localhost:8080/jmx-console/Ht...ice%3DJNDIView) et invoque la méthode list. Tu auras l'arborescence des composants montés dans JNDI et tu devrais trouver quelque chose du genre "CalculatriceFacadeRemote/remote" peut-être en dessous du nom de ton déployable.

    Ce sont quelques éléments, pour le reste c'est à toi de continuer à creuser!


  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    désolé de vous embêter mais très honnêtement j'y comprends rien voici la trace du jndi :

    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
    
    Global JNDI Namespace
    
      +- UserTransactionSessionFactory (proxy: $Proxy115 implements interface org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory)
      +- UUIDKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.uuid.UUIDKeyGeneratorFactory)
      +- persistence.unit:unitName=Lesson.ear (class: org.jnp.interfaces.NamingContext)
      +- HiLoKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.hilo.HiLoKeyGeneratorFactory)
      +- XAConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- topic (class: org.jnp.interfaces.NamingContext)
      +- CalculatriceFacade (class: org.jnp.interfaces.NamingContext)
      |   +- remote-demo.ejb3.calculatrice.CalculatriceFacadeRemote (class: Proxy for: demo.ejb3.calculatrice.CalculatriceFacadeRemote)
      |   +- remote (class: Proxy for: demo.ejb3.calculatrice.CalculatriceFacadeRemote)
      +- Calculatrice (class: org.jnp.interfaces.NamingContext)
      |   +- local (class: Proxy for: demo.ejb3.calculatrice.CalculatriceLocal)
      |   +- local-demo.ejb3.calculatrice.CalculatriceLocal (class: Proxy for: demo.ejb3.calculatrice.CalculatriceLocal)
      +- ClusteredConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- ProfileService (class: AOPProxy$0)
      +- queue (class: org.jnp.interfaces.NamingContext)
      |   +- DLQ (class: org.jboss.jms.destination.JBossQueue)
      |   +- ExpiryQueue (class: org.jboss.jms.destination.JBossQueue)
      +- ClusteredXAConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- UserTransaction (class: org.jboss.tm.usertx.client.ClientUserTransaction)
      +- ConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- jmx (class: org.jnp.interfaces.NamingContext)
      |   +- invoker (class: org.jnp.interfaces.NamingContext)
      |   |   +- RMIAdaptor (proxy: $Proxy116 implements interface org.jboss.jmx.adaptor.rmi.RMIAdaptor,interface org.jboss.jmx.adaptor.rmi.RMIAdaptorExt)
      |   +- rmi (class: org.jnp.interfaces.NamingContext)
      |   |   +- RMIAdaptor[link -> jmx/invoker/RMIAdaptor] (class: javax.naming.LinkRef)
      +- TomcatAuthenticators (class: java.util.Properties)
      +- console (class: org.jnp.interfaces.NamingContext)
      |   +- PluginManager (proxy: $Proxy117 implements interface org.jboss.console.manager.PluginManagerMBean)
    j'ai essayé tous les chemins possible pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       Object ref = ctx.lookup("CalculatriceFacade/remote");
    et il ne le trouve pas

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    3 janv. 2011 15:58:24 demo.ejb3.calculatrice.CalculatriceFacadeTest testAdditionner
    GRAVE: null
    javax.naming.NameNotFoundException: CalculatriceFacade not bound
            at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)
            at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)
            at org.jnp.server.NamingServer.getObject(NamingServer.java:785)
            at org.jnp.server.NamingServer.lookup(NamingServer.java:396)
            at sun.reflect.GeneratedMethodAccessor269.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
            at sun.rmi.transport.Transport$1.run(Transport.java:159)
            at java.security.AccessController.doPrivileged(Native Method)
            at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
            at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
            at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
            at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
            at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
            at java.lang.Thread.run(Thread.java:619)
            at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
            at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
            at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
            at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:722)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:682)
            at javax.naming.InitialContext.lookup(InitialContext.java:392)
            at demo.ejb3.calculatrice.CalculatriceFacadeTest.testAdditionner(CalculatriceFacadeTest.java:73)
            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:597)
            at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
            at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
            at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
            at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
            at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
            at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
            at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
            at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
            at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
            at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
            at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
            at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
            at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
            at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
            at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39)
            at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:515)
            at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1031)
            at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:888)

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 91
    Points : 114
    Points
    114
    Par défaut
    Tu as essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Object ref = ctx.lookup("java:CalculatriceFacade/remote");
    ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Et bien merci beaucoup bleporini pour ton aide ! Tu m'as évité une belle crise de nerfs !

    Cela marche en rajoutant java:/ devant,

    merci

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 91
    Points : 114
    Points
    114
    Par défaut
    N'oublie pas de passer le topic à Résolu

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

Discussions similaires

  1. [JNDI] javax naming NoInitialContextException
    Par r0nsync dans le forum Java EE
    Réponses: 20
    Dernier message: 20/07/2012, 09h56
  2. Réponses: 9
    Dernier message: 05/06/2010, 22h04
  3. Réponses: 5
    Dernier message: 01/05/2007, 22h07
  4. [JNDI] javax.naming.NoInitialContextException
    Par soumou dans le forum Java EE
    Réponses: 2
    Dernier message: 01/10/2006, 16h08
  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