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

Servlets/JSP Java Discussion :

[JSP / Servlet] Fuite mémoire


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2015
    Messages : 67
    Par défaut [JSP / Servlet] Fuite mémoire
    Bonjour,

    j'ai deployé mon application web (Jsp -servlet) sur tomcat8.
    Tous ce passe bien, sauf que je doit recharger chaque matin mon webapplication.
    J'ai constaté le ficher d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    WARNING [http-nio-8181-exec-550] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc 
    The web application [comparateur] registered the JDBC driver [com.mysql.jdbc.Driver] 
    but failed to unregister it when the web application was stopped. 
    To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
    Comment je peux le fixer?

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2015
    Messages : 67
    Par défaut
    J'ai utilisé une calss pour registered the JDBC driver manuellement.
    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
     
    package servlets;
     
    import java.sql.Driver;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Enumeration;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
     
    public class MyContextListener implements ServletContextListener{
     
     @Override
     public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("App shutdown ...");
     
        System.out.println("Deregistering SQL-Drivers ...");
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        while (drivers.hasMoreElements()) {
            Driver driver = drivers.nextElement();
            try {
                DriverManager.deregisterDriver(driver);
                System.out.println(driver.getClass().getName());
            } catch (SQLException e) {
                System.err.println("Error deregistering driver " + driver.getClass().getName());
            }
        }
     }
     
     @Override
     public void contextInitialized(ServletContextEvent arg0) {
     }
    }
    J'ai ajouter biensur dans le web.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <listener>
            <listener-class>
                servlets.MyContextListener
            </listener-class>
        </listener>
    voila ma connexion au DB au niveau de java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private String dbName = "NameDB";
    private String user = "root";
    private String pass = "PWD";   
    private String server = "localhost";
    le message est changé mnt mais même probléme je doit recharger mon war :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INFO [http-nio-8181-exec-579] org.apache.catalina.core.ApplicationContext.log HTMLManager: list: Listing contexts for virtual host 'localhost'

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Par défaut
    Bonjour,

    Le message de Tomcat est intéressant.
    Il stipule la chose suivante:
    Ta webapp a provoqué le chargement du Driver JDBC pour une base MySQL dans son propre ClassLoader.
    Ton context listener apporte une réponse en ce sens qu'il provoque l'opération opposée ( deregisterDriver() ).

    Ce point étant fixé, je ne comprends pas très bien ce que tu veux dire
    Tous ce passe bien, sauf que je doit recharger chaque matin mon webapplication.
    Pourquoi devoir recharger ta webapp? Est-ce pour prendre en compte une nouvelle version/livraison?

    Dans l'attente,
    Sébastien

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2015
    Messages : 67
    Par défaut
    Bonjour,

    l'application se run, la page d'index s'affiche et la créeation de session au niveau de manager de tomcat est faite.
    Mais le problème est au niveau de la connexion avec DB.
    Pour que je puisse accéder a mon application, je doit le recharger (pas deployer) chaque le matin.

    j'ai essayé de régler ca avec cette class (MyContextListener) ...comme d'hab cette problème.
    J'ai enlever le jar jdbc au niveau de lib de tomcat ...comme d'hab cette problème.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Par défaut
    Bonjour,

    je suspecte un problème de gestion de connexion.

    Est-ce que c'est ton code qui crée la connexion à la bdd, ou bien c'est Tomcat qui te fournit une DataSource ( mais j'ai un doute vu le 2nd poste ) ?

    Cordialement,
    Sébastien

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2015
    Messages : 67
    Par défaut
    Bonjour,

    Mon code:
    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
     
    public class ConDB
    {
    private static Connection con = null;
    private String dbName = "NameDB";
    private String user = "root";
    private String pass = "PWD";   
    private String server = "localhost";
     
     private ConDB()
        {
            try
            {
     
                Class.forName("com.mysql.jdbc.Driver");
                String encoding = "?useUnicode=true&characterEncoding=UTF-8";
     
                String conString = "jdbc:mysql://" + server + "/" + dbName + encoding;
     
     
                con = (Connection) DriverManager.getConnection(conString,user,pass);
     
            }
            catch(ClassNotFoundException e)
            {
                e.printStackTrace();
            }
            catch(SQLException e1)
            {
                e1.printStackTrace();
            }
        }
        public static Connection getInstance()
        {
            if(con == null)
                new ConDB();
     
            return con;
     
        }
    }

Discussions similaires

  1. fuite mémoire dans le JSP editor
    Par ChristopheH dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 18/04/2008, 17h20
  2. [JSP/Servlet] Outils pour developper?
    Par BenoitM dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2004, 11h03
  3. [JSP][Servlet][Javabean] Modèle Vue Controleur
    Par ay_pepito dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 04/02/2004, 10h05
  4. [JSP][SERVLET] recup donnees form
    Par 74greg dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 04/09/2003, 10h22
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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