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.