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
Mon interface IGenericDAO :
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>
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 :
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
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()); } }
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.
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(); } }
Pourtant tout est ok au niveau de l'initialisation Spring :
Mes connaissances en spring étant limitées, je fais appel à votre savoir et à votre bon coeur ;-)
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)
D'avance merci
Partager