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 spring DAO JDBC


Sujet :

Spring Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 54
    Points : 35
    Points
    35
    Par défaut Problème spring DAO JDBC
    Bonjour à tous

    Bon je me décide à me mettre à la page au niveau de spring 2.5 et développe un petit test de springDAO dont voici les sources :

    applicationContext.xml
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <beans xmlns="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:context="http://www.springframework.org/schema/context" 
      xmlns:lang="http://www.springframework.org/schema/lang" 
      xmlns:p="http://www.springframework.org/schema/p"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> 
     
    	<context:annotation-config />
    	<context:component-scan base-package="com.testJAX.*" />
     
    	<bean 	id="dataSource"
    			class="org.apache.commons.dbcp.BasicDataSource"
    			destroy-method="close"
    			p:driverClassName="net.sourceforge.jtds.jdbc.Driver"
    			p:url="jdbc:jtds:sybase://xxxx:xxxx"
    			p:username="xxxx"
    			p:password="xxxx" />
     
    	<bean	id="transactionManager" 
    			class="org.springframework.jdbc.datasource.DataSourceTransactionManager" 
        		p:dataSource-ref="dataSource" />
     
    	<bean	id="jdbcTemplate"
    			class="org.springframework.jdbc.core.JdbcTemplate">
    		<property name="dataSource"><ref bean="dataSource"/></property>
    	</bean>
     
    </beans>
    Mon interface IGenericDAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public interface IGenericDAO<T> {
     
    	public List<T> select();
    	public void insert(T e);
    	public void update(T e);
    	public void delete(T e);
     
    }

    Mon dao qui se nomme AppelDAO :
    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
     
    @Repository
    public class AppelDAO implements IGenericDAO<Appel>{
     
    	protected SimpleJdbcTemplate jdbcTemplate;
     
    	@Autowired
    	public void setDataSource(DataSource dataSource) {
    		jdbcTemplate = new SimpleJdbcTemplate(dataSource);
    	}
     
    	private static ParameterizedRowMapper<Appel> mapper = new ParameterizedRowMapper<Appel>() {
    		public Appel mapRow(ResultSet rs, int rowNum) throws SQLException {
    			Appel appel = new Appel();
    			appel.setAppNum(rs.getInt("APP_NUM"));
    			appel.setAppPB(rs.getString("APP_PB"));
    			return appel;
    		}
    	};
     
    	public List<Appel> select() {
    		List<Appel> list = null;
    		try {
    			System.out.println("mapper " + mapper.getClass());
    			list = jdbcTemplate.query("SELECT APP_NUM, APP_PB FROM HD_APPEL WHERE APP_NUM < 1000", mapper);
    		} catch(Exception e) {
    			e.printStackTrace();
    		}
    		return list;
    	}
     
    	public void delete(Appel a) {
    		jdbcTemplate.update("delete from HD_APPEL WHERE APP_NUM = ?", a.getAppNum());
    	}
     
    	public void insert(Appel a) {
    	}
     
    	public void update(Appel a) {
    		jdbcTemplate.update(
    				"update HD_APPEL set APP_PB = ? WHERE APP_NUM = ?",
    				a.getAppPB(), a.getAppNum());
    	}
    }
    Mon service interrogeant le DAO
    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
     
    @Service
    public class AppelService {
     
    	private AppelDAO appelDAO;
     
    	@Resource
    	public void setDao(@Qualifier("appelDAO") IGenericDAO<Appel> appelDAO) {
    		System.out.println("passage resource");
    		this.appelDAO = (AppelDAO)appelDAO;
    	}
     
    	public List<Appel> useDao() {
    		System.out.println("passage useDAO");
    		System.out.println(appelDAO);
    		return appelDAO.select();
    	}
     
    }
    Le problème est que lorsque je teste cette application par une servlet interrogeant le service je me tape un nullPointerException quand il passe dans la méthode "useDAO()". En effet le syso testant la valeur de l'objet appelDAO retourne null.
    Pourtant tout est ok au niveau de l'initialisation Spring :

    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
     
    7 mars 2008 11:41:27 org.springframework.web.context.ContextLoader initWebApplicationContext
    INFO: Root WebApplicationContext: initialization completed in 1781 ms
    passage servlet
    passage useDAO
    null
    7 mars 2008 11:41:41 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: "Servlet.service()" pour la servlet TestServlet a généré une exception
    java.lang.NullPointerException
    	at com.testJAX.service.AppelService.useDao(AppelService.java:28)
    	at com.testJAX.servlets.TestServlet.doPost(TestServlet.java:24)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    Mes connaissances en spring étant limitées, je fais appel à votre savoir et à votre bon coeur ;-)
    D'avance merci

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Hello et Bienvenu dans le monde magnifique de Spring 2.5
    C'est bien ce que tu as fait, il te manque juste l'essentiel : l'activation du traitement des annotations par Spring.
    Il faut ajouter ceci à ton applicationContext.xml:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <context:annotation-config />
    <tx:annotation-driven />
    <context:component-scan base-package="XXXX" />

    Le XXXX doit être remplacé par le nom du package parent qui contient tous tes beans Spring annotés (si tu mets les DAOs dans org.ethylene.model.dao, tes services dans org.ethylene.model.service XXXX=org.ethylene.model).

    Bonne chance.

Discussions similaires

  1. Problème accès DAO entre Struts 2 et Spring
    Par PaulPersonne820 dans le forum Struts 2
    Réponses: 1
    Dernier message: 12/09/2012, 23h52
  2. [Data] [Spring Dao][JDBC] SimpleJdbcTemplate, RowMapper et collections
    Par Invité dans le forum Spring
    Réponses: 2
    Dernier message: 22/05/2008, 17h07
  3. Réponses: 1
    Dernier message: 15/05/2008, 10h11
  4. [Data] Problème de connection jdbc avec dataSource Spring
    Par laurent.c123 dans le forum Spring
    Réponses: 3
    Dernier message: 04/03/2008, 12h29
  5. [Data] Problème test Dao avec Spring et iBatis
    Par fiatlux dans le forum Spring
    Réponses: 3
    Dernier message: 23/12/2007, 09h55

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