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

Tomcat et TomEE Java Discussion :

NullPointerException sur initialisation de driver JDBC


Sujet :

Tomcat et TomEE Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut NullPointerException sur initialisation de driver JDBC
    Bonjour à tous,

    Je suis bloqué depuis un moment sur un bug :

    ValidationClient.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* ... */
            /* Essayer d'écrire le client dans la BDD */
     
            /* Initialisation du DAO */
            ClientDAO clientDao = new ClientDAOService(DAOFactory.getInstance());
     
            /* Exécution des requêtes de création */
            clientDao.creer(client);
    /* ... */
    ClientDAOService.java
    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
    /* ... */
        /* Implémentation de la méthode définie dans l'interface UtilisateurDao */
        @Override
        public void creer( Client client ) throws DAOException 
        {
            Connection connexion = null;
            PreparedStatement preparedStatement = null;
            ResultSet valeursAutoGenerees = null;
     
            try 
            {
                /* Récupération d'une connexion depuis la Factory */
                connexion = (Connection) daoFactory.getConnection();
                preparedStatement = initialisationRequetePreparee( connexion, SQL_INSERT, true, client.getId(), client.getNom(), client.getPrenom(), client.getAdresse(), client.getTelephone(), client.getMail(), client.getImage() );
                int statut = preparedStatement.executeUpdate();
                /* Analyse du statut retourné par la requête d'insertion */
                if ( statut == 0 ) 
                {
                    throw new DAOException( "Échec de la création du client, aucune ligne ajoutée dans la table." );
                }
                /* Récupération de l'id auto-généré par la requête d'insertion */
                valeursAutoGenerees = preparedStatement.getGeneratedKeys();
                if ( valeursAutoGenerees.next() ) 
                {
                    /* Puis initialisation de la propriété id du bean Utilisateur avec sa valeur */
                    client.setId( new Long(valeursAutoGenerees.getLong( 1 )).toString() );
                } 
                else 
                {
                    throw new DAOException( "Échec de la création du client en base, aucun ID auto-généré retourné." );
                }
            } 
            catch ( SQLException e ) 
            {
                throw new DAOException( e );
            } 
            finally 
            {
                DAOUtilitaire.fermeturesSilencieuses( valeursAutoGenerees, preparedStatement, connexion );
            }
        }
    /* ... */
    DAOFactory.java
    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
    /* ... */
    public static DAOFactory getInstance() throws DAOConfigurationException 
        {
            String url;
            String driver;
            String username;
            String password;
            
            try 
            {
                /* Récupération des propriétés depuis le fichier */
                Properties prop = new Properties();
                prop.load(new FileInputStream(FICHIER_PROPERTIES));
                
                url = prop.getProperty("url");
                driver = prop.getProperty("driver");
                username = prop.getProperty("nomutilisateur");
                password = prop.getProperty("motdepasse");
            } 
            catch ( IOException e ) 
            {
                throw new DAOConfigurationException( "Impossible de charger le fichier properties " + FICHIER_PROPERTIES, e );
            }
    
            /* Initialisation du driver */
            try
            {
                Class.forName( driver ); // <- ligne qui pose problème
            } 
            catch ( ClassNotFoundException e ) 
            {
                throw new DAOConfigurationException( "Le driver est introuvable dans le classpath.", e );
            }
    
            DAOFactory instance = new DAOFactory(url, username, password);
            
            return instance;
        }
    /* ... */
    Console de Tomcat
    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
    java.lang.NullPointerException
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:190)
        at com.tp1.bdd.dao.DAOFactory.getInstance(DAOFactory.java:63)
        at com.tp1.business.ValidationClient.creerClient(ValidationClient.java:128)
        at com.tp1.servlets.CreationClient.doPost(CreationClient.java:48)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)
    Oui! Je sais!
    Il faut rajouter le JAR MySQL à la classpath de Tomcat!

    Mais...
    Je l'ai fait, je l'ai inclus dans le WEB-INF/lib du projet, ce qui devrait suffire, mais comme ça n'a pas suffit je l'ai aussi inclus:

    - Dans la classpath du serveur (j'ai essayé en user ET en bootstrap)
    - Dans le dossier lib du TOMCAT_HOME





    Mais je n'ai pas réussi à résoudre l'erreur...

    Quelqu'un saurait-il m'indiquer comment résoudre ce problème ?

    Merci d'avance pour votre aide.
    Images attachées Images attachées   

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Qu'est-ce que tu as dans ton fichier de propriétés ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    url = jdbc:mysql://localhost:3306/tp_sdzee
    driver = com.mysql.jdbc.Driver
    nomutilisateur = user
    motdepasse = passwd

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ça à l'air d'être bon à première vue.

    Si tu traces la variable driver juste avant de faire le Class.forName(), ou si tu exécute en mode debug, pour voir la valeur de cette variable, elle est bien valuée ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Comment n'avais-je pas vu ça...
    Tout est à null. Vraisemblablement il ne veut pas lire le fichier PROPERTIES. Reste à savoir pourquoi...

    Edit: fallait juste pas mettre d'espaces à gauche et à droite du signe "=" dans le fichier properties!?

    En plus c'est du code que j'ai copié-collé sur un tutoriel...

    En tout cas merci pour ton intervention qui m'a éclairé.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Y'a pas de problème normalement s'il y a des espaces...

    Ca marche ça :

    p1 = v1 
    p2 =      v1 
    p3         = v1 
    p4      :      v1
    
    L'affichage du Properties donnant
    {p4=v1 , p3=v1 , p2=v1 , p1=v1 }
    Même avec des espaces insécables, ça fonctionne.

    Peut-être un problème lors du copier-coller... Il aurait fallut que tu fasses un System.out.println(prop); pour voir exactement ce qui avait été lu.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Error driver JDBC sur commit
    Par DevNico dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 06/05/2009, 14h51
  2. Pb Driver JDBC sur Windows XP SP2
    Par asterix76-rouen dans le forum JDBC
    Réponses: 1
    Dernier message: 25/02/2008, 08h35
  3. Driver Jdbc
    Par vijeo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/04/2005, 08h01
  4. [JDBC]recherch driver Jdbc.
    Par vijeo dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/04/2005, 08h00
  5. [websphere][jdbc] Installation d'un driver JDBC
    Par bigoudi dans le forum Websphere
    Réponses: 4
    Dernier message: 26/01/2004, 11h37

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