Bonjour,
Je débute avec Spring et j'ai un souci avec ma classe utilisant un JdbcTemplate pour exécuter une requête SQL. La voici:
Voici la classe ExpiringDocument :
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
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
76
77
78
79
80
81
82 package com.sigma.meta.util.csv; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import javax.sql.DataSource; import org.eclipse.jetty.util.log.Log; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.sagem.morphocs.util.ExpiringDocument; import com.sagem.morphocs.util.ExpiringDocumentMapper; //@Component public class DailyCSVGenerator { private JdbcTemplate jdbcTemplateObject; private static final Logger LOG = LoggerFactory .getLogger(DailyCSVGenerator.class); private static final Logger CSV_LOG_EXPIRING_DOCUMENTS = LoggerFactory .getLogger("CsvLoggerExpiringDocuments"); //-------------------------------------------------------------------------------------------------------------- public void setDataSource(DataSource dataSource) { this.jdbcTemplateObject = new JdbcTemplate(dataSource); } @Scheduled(cron = "${timerTaskCron}") public void getExpiringDocumentsAndWriteCSV(){ LOG.info("Starting task using thread " + Thread.currentThread().getName()+" :id " + Thread.currentThread().getId()); List<ExpiringDocument> docs = getExpiringDocuments(); LOG.info("docs = " + docs); for (ExpiringDocument doc : docs) { //convert expiryDate (which is a Date) to timestamp with format dd-MM-yy then convert to string java.sql.Timestamp timeStampDate = new Timestamp(doc.getExpiryDate().getTime()); SimpleDateFormat dayFormatter = new SimpleDateFormat("dd-MM-yy"); String str_expiry_date = dayFormatter.format(timeStampDate); CSV_LOG_EXPIRING_DOCUMENTS.info(doc.getLastname() + ";" + doc.getMaternalSurname() + ";" + doc.getFirstname() + ";" + doc.getEmail() + ";" + doc.getDln() + ";" + doc.getProductName() + ";" + str_expiry_date); } } public List<ExpiringDocument> getExpiringDocuments(){ LOG.info("Entering method getExpiringDocuments :"); List<ExpiringDocument> docs = new ArrayList<ExpiringDocument>(); String sql_request = "select part.lastname, part.maternal_surname, part.firstname, eadr.value, cust.cin, prod.name, cust.expirydt " + "from CI_OWNER.ci_customercard cust, CI_OWNER.ci_prod prod, CS_OWNER.bp_partner part, " + "CS_OWNER.bp_eaddress eadr " + "where cust.expirydt = (to_date(sysdate, 'dd/mm/yy')) + 28 " + "and cust.prod_id = prod.prod_id " + "and cust.cardholder_ref = part.partner_ref " + "and part.partner_id = eadr.partner_id"; LOG.info("request is : " + sql_request); docs = jdbcTemplateObject.query(sql_request, new ExpiringDocumentMapper()); LOG.info("request has been executed"); return docs; } }
le mapper ExpiringDocumentMapper :
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
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
76
77
78 package com.sigma.meta.util; import java.util.Date; public class ExpiringDocument { private String lastname; private String maternal_surname; private String firstname; private String value; private String cin; private String name; private Date expirydt; public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public String getMaternalSurname() { return maternal_surname; } public void setMaternalSurname(String maternalSurname) { this.maternal_surname = maternal_surname; } public String getFirstname() { return firstname; } public void setFirstnames (String firstname) { this.firstname = firstname; } public String getEmail() { return value; } public void setEmail(String value) { this.value = value; } public String getDln() { return cin; } public void setDln(String cin) { this.cin = cin; } public String getProductName() { return name; } public void setProductName(String name) { this.name = name; } public Date getExpiryDate() { return expirydt; } public void setExpiryDate(Date expirydt) { this.expirydt = expirydt; } @Override public String toString() { return "ExpiringDocument [lastname=" + lastname + ", maternalSurname=" + maternal_surname + ", firstname=" + firstname + ", email=" + value + ", cin=" + cin + ", product=" + name + ", expiryDate=" + expirydt + "]"; } }
et les beans Spring associés :
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 package com.sigma.meta.util; import java.sql.ResultSet; import java.sql.SQLException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.RowMapper; public class ExpiringDocumentMapper implements RowMapper<ExpiringDocument> { private static final Logger LOGGER = LoggerFactory.getLogger(ExpiringDocumentMapper.class); public ExpiringDocument mapRow(ResultSet rs, int rowNum) throws SQLException { LOGGER.debug("Begin map result"); ExpiringDocument ed = new ExpiringDocument(); ed.setLastname(rs.getString("lastname")); ed.setMaternalSurname(rs.getString("maternal_surname")); ed.setFirstnames(rs.getString("firstname")); ed.setEmail(rs.getString("value")); ed.setDln(rs.getString("cin")); ed.setProductName(rs.getString("name")); ed.setExpiryDate(rs.getDate("expirydt")); LOGGER.debug("#### ExpiringDocument : " + ed); return ed; } }
En consultant les logs produits sur le Tomcat je constate que "request is ..." est bien affiché mais pas "request executed". Visiblement la requête SQL n'est donc pas exécutée. Je précise que je l'ai testée dans SQL Developer et elle fonctionne.
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 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:SCMS"/> <property name="username" value="ci_owner"/> <property name="password" value="ci_owner"/> </bean> <bean id="CSVGenerator" class="com.sagem.morphocs.util.csv.DailyCSVGenerator"> <property name="dataSource" ref="dataSource" /> </bean> <task:scheduled-tasks scheduler="taskScheduler"> <task:scheduled ref="CSVGenerator" method="getExpiringDocumentsAndWriteCSV" cron="${timerTaskCron}"/> </task:scheduled-tasks> <task:scheduler id="taskScheduler" pool-size="1" />
J'ai l'erreur suivante dans d'autres logs mais je ne la comprends pas:
Verriez-vous les raisons de mon problème?02-août-2013 16:06:01.805 ERROR com.sigma.ws.utils.SCMSConnector - logoff : [thread ID-27] MajorCode: 2
MinorCode: 0
Category: 2
UseCaseCode:
ManagedContainer:
Host:
UserId:
AdditionalInfo1: Unknown
AdditionalInfo2: logoff
AdditionalInfo3: java.lang.NullPointerException
AdditionalInfo4:
AdditionalInfo5:
java.lang.NullPointerException
at com.sigma.ws.utils.SCMSConnector.mascotLogoff(SCMSConnector.java:533)
at com.sigma.ws.utils.SCMSConnector.logoff(SCMSConnector.java:258)
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 org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:273)
at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:199)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:487)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:463)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:431)
at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1048)
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1022)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:970)
at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:384)
at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:78)
at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4245)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4886)
at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:936)
at org.apache.catalina.startup.HostConfig.undeployApps(HostConfig.java:1359)
at org.apache.catalina.startup.HostConfig.stop(HostConfig.java:1330)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:326)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1098)
at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1110)
at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:408)
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 org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:338)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:416)
Merci beaucoup par avance.
Partager