TP11: initial context

Modérateurs : graffion, jmdouin, agoncal, mlebihan

Louis
Messages : 29
Inscription : 26 nov. 2012 4:39

TP11: initial context

Message par Louis » 13 janv. 2013 17:12

Bonjour,

Lors de l'exécution des tests avec JUnit, les tests "...ServiceTest" échouent avec l'erreur ci-dessous.
A priori, c'est un problème d'initialisation du contexte. Avez-vous des suggestions?
java.rmi.RemoteException: Lookup exception; nested exception is:
com.yaps.petstore.common.locator.ServiceLocatorException: 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
at com.yaps.petstore.server.service.CatalogServiceTest.getCatalogService(CatalogServiceTest.java:1085)
at com.yaps.petstore.server.service.CatalogServiceTest.testServiceFindCategoryWithInvalidValues(CatalogServiceTest.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: com.yaps.petstore.common.locator.ServiceLocatorException: 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
at com.yaps.petstore.common.locator.ServiceLocator.getHome(ServiceLocator.java:93)
at com.yaps.petstore.server.service.CatalogServiceTest.getCatalogService(CatalogServiceTest.java:1083)
... 21 more
Caused by: 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
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.yaps.petstore.common.locator.ServiceLocator.getHome(ServiceLocator.java:90)
... 22 more

Louis
Messages : 29
Inscription : 26 nov. 2012 4:39

Re: TP11: initial context

Message par Louis » 13 janv. 2013 17:51

Ci-dessous le script de définition de mon classpath pour commentaires.

Code : Tout sélectionner

rem set JAVA_HOME=D:\...\GLG203\Java\jdk1.6.0_01
set JAVA_HOME=D:\...\GLG203\Java\jdk1.6.0_01
set JRE_HOME=D:\...\GLG203\Java\jdk1.6.0_01\jre
set TOMCAT_HOME=D:\...\GLG203\Java\apache-tomcat-6.0.14
set ANT_HOME=D:\...\GLG203\Java\apache-ant-1.8.4
set JUNIT_HOME=D:\...\GLG203\Java\junit4.4
set MYSQL_HOME=D:\...\GLG203\Java\mysql
set HTTPUNIT_HOME=D:\...\GLG203\Java\httpunit-1.6.2
set DOM4J_HOME=D:\...\GLG203\Java\dom4j-1.6.1
set JBOSS_HOME=D:\...\GLG203\Java\jboss-as-7.1.1.Final
set YAPS_PETSTORE=D:\...\GLG203\TPJava\TP11\Yaps

PATH %JRE_HOME%/bin;%JAVA_HOME%/bin;%TOMCAT_HOME%/bin;%ANT_HOME%/bin;%JBOSS_HOME%/bin;%YAPS_PETSTORE%/src/config;%YAPS_PETSTORE%/src/config/jndi;%PATH%

set CLASSPATH=.;%JUNIT_HOME%/junit-4.4.jar

graffion
Messages : 646
Inscription : 21 juin 2005 14:05

Re: TP11: initial context

Message par graffion » 14 janv. 2013 11:31

En ligne de commande, rien à faire d'autre que ant yaps-test car le classpath est correctement positionné dans le fichier build.xml et contient notamment :

Code : Tout sélectionner

    <path id="yaps-classpath">
        <pathelement location="${yaps.classes.dir}"/>
        <pathelement location="${yaps.test.classes.dir}"/>
    	<pathelement location="${yaps.config.dir}/jndi"/>
    </path>
Le répertoire ${yaps.config.dir}/jndi contient en effet tous les fichiers de ressources nécessaires et suffisants :

Code : Tout sélectionner

$ find Yaps/src/config/jndi
Yaps/src/config/jndi
Yaps/src/config/jndi/jboss-ejb-client.properties
Yaps/src/config/jndi/META-INF
Yaps/src/config/jndi/META-INF/services
Yaps/src/config/jndi/META-INF/services/java.security.Provider
Yaps/src/config/jndi/META-INF/services/javax.security.sasl.SaslClientFactory
Yaps/src/config/jndi/META-INF/services/javax.security.sasl.SaslServerFactory
Yaps/src/config/jndi/META-INF/services/org.jboss.ejb.client.EJBClientContextInitializer
Yaps/src/config/jndi/META-INF/services/org.jboss.marshalling.ProviderDescriptor
Yaps/src/config/jndi/META-INF/services/org.xnio.XnioProvider

Sous Eclipse, il suffit de rajouter ce répertoire Yaps/src/config/jndi dans le build path.

Louis
Messages : 29
Inscription : 26 nov. 2012 4:39

Re: TP11: initial context

Message par Louis » 14 janv. 2013 14:13

Après réflexion, le problème vient peut-être du point ci-dessous évoqué en cours.

Ma prise de note:
class OrderService{
@EJB
CreditCardServiceLocal theCCS;

createOrder(...){
...
theCCS.verifyCreditCard(...);
--> injection de dépendance pour la création de l'objet
Pouvez-vous commenter les points suivants:
- où était localisé le traitement ci-dessus dans le TP précédent?
- Y a t'il des traitements similaires à réaliser dans CustomerService, CatalogService, etc.

Par ailleurs si le problème ne vient pas de là, avez-vous une idée de l'origine du problème NoInitialContext?
De mémoire (je n'ai pas le code sous les yeux), le contexte est initialisé dans le ServiceLocator.
Pourquoi cela semble échouer?

PI: petstore.ear, adminpas.war et barbank.war sont bien déployés. Le serveur web Jboss fonctionne correctement (bien que l'accès à la console par login/mdp ne fonctionne pas, ce malgré l'ajout d'utilisateurs de type manager). Les tests des Services et des Delegates échouent tous avec JUnit (NoInitialContext).

D'avance merci pour vos réponses.
Cordialement.

Louis
Messages : 29
Inscription : 26 nov. 2012 4:39

Re: TP11: initial context

Message par Louis » 14 janv. 2013 14:20

Pour information complémentaire j'ai vérifié les paramètres suivants:
- JNDI_NAME
- JNDI_NAME_FOR_REMOTE_CLIENT

N'ayant pas retouché ces paramètres pour "Customer...Home", le test ne devrait-il pas marcher au moins pour CustomerService?
Cela me laisse penser que le problème relève plutôt du serveur d'application Jboss ou du ServiceLocator.

graffion
Messages : 646
Inscription : 21 juin 2005 14:05

Re: TP11: initial context

Message par graffion » 14 janv. 2013 14:42

Oui le test CustomerServiceTest devrait marcher sous Eclipse .... à condition de rajouter le répertoire Yaps/src/config/jndi dans le build path, comme expliqué précédemment .
Plus précisément : Project -> Properties -> Java Build Path -> Add class folder : myTP11/Yaps/src/config/jndi

Louis
Messages : 29
Inscription : 26 nov. 2012 4:39

Re: TP11: initial context

Message par Louis » 14 janv. 2013 16:47

Entendu. Par confusion, je l'avais placé dans le Classpath et non le build path.
Merci.

Louis
Messages : 29
Inscription : 26 nov. 2012 4:39

Re: TP11: initial context

Message par Louis » 15 janv. 2013 1:45

Confirme, problème résolu.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité