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

Spring Java Discussion :

Problème de context pour mes tests


Sujet :

Spring Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Problème de context pour mes tests
    Bonjour,

    Je débute un peu en spring et en Hibernate. J'ai hérité d'une application qui fonctionne avec Tomcat, Spring et Hibernate .

    J'essaye de faire un Junit afin de tester une classe DAO.


    Voici le fichier context.xml défini dans META-INF
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <Context path="/DBportailgestionprojet" docBase="DBportailgestionprojet"
    	debug="5" reloadable="true" crossContext="true">
     
    	<Resource name="jdbc/portail" auth="Container"
    		type="javax.sql.DataSource" maxActive="100" maxIdle="30"
    		maxWait="-1" username="userPortail" password="passPortail"
    		driverClassName="com.mysql.jdbc.Driver"
    		url="jdbc:mysql://localhost/portailgestionprojet?autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8" />
     
    	<Loader delegate="false" />
    </Context>

    Mes beans sont définis dans différents fichiers xml avec par exemple celui qui m'intéresse WEB-INF/config/commons-servlet.xml
    Code xml : 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
    	<bean id="dataSource"
    		class="org.springframework.jndi.JndiObjectFactoryBean">
    		<property name="jndiName" value="java:comp/env/jdbc/portailgestionprojetDB" />
    	</bean>
     
    	<bean id="sessionFactory"
    		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<property name="mappingResources">
    			<list>
    				<value>
    					com/portail/hibernate/Identification.hbm.xml
    				</value>
    				<value>
    					com/portail/hibernate/Affectation.hbm.xml
    				</value>
    				....
     
    					<property name="hibernateProperties">
    			<props>
    				<prop key="hibernate.dialect">
    					org.hibernate.dialect.MySQLDialect
    				</prop>
    				<prop key="hibernate.show_sql">false</prop>
    				<prop key="hibernate.hbm2ddl.auto">update</prop>
    			</props>
    		</property>
    		<property name="dataSource">
    			<ref local="dataSource" />
    		</property>
    	</bean>
     
    	<bean id="transactionManager"
    		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory">
    			<ref local="sessionFactory" />
    		</property>
    	</bean>
     
    	<bean id="hibernateCurrentSession"
    		class="com.portail.common.dao.impl.HibernateThreadImpl">
    		<property name="sessionFactory">
    			<ref local="sessionFactory" />
    		</property>
    	</bean>
     
    	<bean id="projetDao"
    		class="com.portail.common.dao.impl.ProjetDaoImpl">
    		<property name="sessionFactory">
    			<ref local="sessionFactory" />
    		</property>
    		<property name="hibernateUtil">
    			<ref local="hibernateCurrentSession" />
    		</property>
    	</bean>
     
    	<!-- maps url to a controller -->
    	<bean id="urlMapping"
    		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    		<property name="mappings">
    			<props>
    				<prop key="/ConnectionUserController">
    					connectionUserController
    				</prop>
    				<prop key="/PageController">
    					pageController
    				</prop>
    			</props>
    		</property>
    	</bean>
     
    </beans>

    Et voici ma classe de test
    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
     
    package com.portail.common.dao.impl;
     
    import static org.junit.Assert.fail;
     
    import java.util.Iterator;
    import java.util.List;
     
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.FileSystemResource;
     
    import com.portail.common.dao.interf.ProjetDao;
    import com.portail.persistence.Projet;
     
    public class ProjetDaoImplTest {
     
        private static XmlBeanFactory bf;
        private static ProjetDao projetDao;
     
     
        @BeforeClass
        public static void setUpBeforeClass() throws Exception {
            bf = new XmlBeanFactory(new FileSystemResource("E:/work/Portail/src/main/webapp/WEB-INF/config/commons-servlet.xml")); 
            projetDao = (ProjetDao) bf.getBean("projetDao");  
        }
     
    	 @Test
        public void testListeProjetsCP() {
            List<Projet> listeProjets = projetDao.listeProjetsCP(16);
            Iterator<Projet> itProjet = listeProjets.iterator();
            while (itProjet.hasNext()) {
                Projet projetCourant = itProjet.next();
                System.out.println("Test " + projetCourant.getNom());
            }        
        }
     
    }
    Quand je lance mon test j'ai l'erreur suivant
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [E:\work\Portail\src\main\webapp\WEB-INF\config\commons-servlet.xml]: Invocation of init method failed; nested exception is 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
    Merci pour votre aide.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 27
    Points : 31
    Points
    31
    Par défaut
    Bonjour,
    Je ne sais pas si la question est encore d'actualité, mais je vais quand même tenter de répondre.

    En fait ton datasource est défini via un arbre jndi. Sur ton serveur d'appli, tout marche, car ton arbre jndi est bien configuré (enfin j'espère ) .
    Lorsque tu lance tes jUnit, aucun arbre jndi n'est instancié par défaut. C'est donc normal que ca ne marche pas.
    Donc tu as deux solutions :
    • soit tu instancie au chargement de tes tests un arbre jndi spécifique à tes tests. Cette méthode est jolie mais assez difficile a faire. (et surtout il faudrait que je réfléchisse et c'est trop dur).
    • soit tu crée un autre fichier context-xxx.xml que tu mets dans ton repertoire META-INF de tes tests. Dans ce fichier tu surcharge ton datasource par un datasource de ce style :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
       
      <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://localhost/....."/>
      <property name="username" value="username"/>
      <property name="password" value="password"/>
      </bean>


    (Bien sur , il faut veiller à ce que ton fichier context-xxx.xml soit bien chargé au lancement de tes tests.)

    Voila, j'espère que j'ai pu t'aider. Désolé pour le temps de réponse.

Discussions similaires

  1. Problème avec INJECT_EVENTS pour les tests de drag and drop
    Par Atatorus dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 31/05/2012, 16h39
  2. Réponses: 5
    Dernier message: 28/04/2009, 18h51
  3. Problèmes de privilèges pour mes rôles
    Par missbug dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 06/07/2006, 11h31
  4. [JMeter] Problème avec la boucle infinie pour les tests
    Par zegreg dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 05/10/2005, 12h41

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