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 :

JdbcTemplate - la requête ne semble pas s'exécuter


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 22
    Par défaut JdbcTemplate - la requête ne semble pas s'exécuter
    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:

    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;
        }
    }
    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
    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 + "]";
        }
     
    }
    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
    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;
        }
    }
    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
        <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" />
    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.

    J'ai l'erreur suivante dans d'autres logs mais je ne la comprends pas:

    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)
    Verriez-vous les raisons de mon problème?

    Merci beaucoup par avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 251
    Par défaut
    Comme ça difficile à dre, à quoi correspond la ligne 533 de la classe SCMSConnector ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 22
    Par défaut
    Salut NoClassDefFound et merci pour ta réponse. J'ai trouvé l'origine du problème : il manquait le jar "oracle-jdbc.jar" dans le répertoire lib de Tomcat.

    Ma requête est maintenant bien exécutée et aucune erreur de compilation SQL n'est affichée dans les logs. Par contre la liste "docs" reste vide. Est-ce que la ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docs = jdbcTemplateObject.query(sql_request, new ExpiringDocumentMapper());
    est correcte, sachant que je veux récupérer une liste de ExpiringDocument?

    Merci par avance

Discussions similaires

  1. [MySQL] Ma requête ne semble pas vouloir fonctionner?
    Par Serghez dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/02/2013, 23h54
  2. partie de code qui ne semble pas d'exécuter..
    Par ggvert dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 29/06/2011, 17h55
  3. Réponses: 2
    Dernier message: 21/06/2011, 15h19
  4. [Google Maps] Google Distance Matrix API et jQuery : la requête ne semble pas fonctionner
    Par [ZiP] dans le forum APIs Google
    Réponses: 2
    Dernier message: 19/05/2011, 08h50
  5. Réponses: 13
    Dernier message: 30/01/2006, 14h21

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