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 :

[Struts 1 / Oracle 11g / Tomcat] Pool de connexion


Sujet :

Tomcat et TomEE Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Par défaut [Struts 1 / Oracle 11g / Tomcat] Pool de connexion
    Bonjour

    Je travaille avec struts 1 , une base de donnée oracle 11g et tomcat 6; j'aimerai utiliser les pools de connexion ci dessous les paramètres de mon contexte du serveur tomcat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Resource auth="Container" connectionCachingEnabled="true" driverClassName="oracle.jdbc.OracleDriver" 
    		factory="oracle.jdbc.pool.OracleDataSourceFactory" maxActive="100" maxIdle="10" 
    		maxWait="15000" name="jdbc/nomdatasource" password="le pwd" removeAbandoned="true" 
    		removeAbandonedTimeout="120" testWhileIdle="true" timeBetweenEvictionRunsMillis="120000" 
    		type="oracle.jdbc.pool.OracleDataSource" url="jdbc:oracle:thin:@localhost:1521:core" 
    		user="le user" validationInterval="30000" validationQuery="select 1
    Ici ma méthode de connexion
    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
      public  Connection openConnection() {
     
     
      Connection conn = null;
      try {
     
          // lecture du contexte JDNI de notre servlet
         Context initContext =  new InitialContext() ;
          // initialisation de ce contexte
         Context envContext  = (Context)initContext.lookup("java:/comp/env") ;
     
          // lecture de la datasource définie par requête JNDI
         DataSource ds = (DataSource)envContext.lookup("jdbc/nomdatasource") ;
          // demande d'une connexion à cette datasource 
         oraConnection = ds.getConnection();
     
            bIsOpen = true;
         //ici je définis le nombre de connexion ouvert (actif)
               nbOpenConn++;
    //ici je définis le nombre de connexion total ouvert et fermés 
               nbOpenAllConn++;
     
      }  catch (NamingException e) {
          // gestion de l'exception
      }  catch (SQLException e) {
     
      }
      return conn;
     }
    Sous oracle voici les paramètres de l'instance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER SYSTEM SET SHARED_SERVERS = 0 scope=spfile;
    ALTER SYSTEM SET PARALLEL_MAX_SERVERS=500 scope=spfile;
    alter system set processes=250 scope=spfile;
    ALTER SYSTEM SET sessions=500 scope=spfile;
    Lorsque nous nous connectons dessus 5 personnes pendant environ 10 à 15 mn le système nous déconnecte disant que nous avons atteint le nombre maximum de connexion oracle. Nous avons constaté que le nombre de connexion augmente même si on se déconnecte il ne diminue pas sous oracle.

    Si vous avez des notions ou explications à ce problème j'attends vos interventions avec impatience

    Merci

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    C'est très certainement dû au fait que vous ne fermez pas la connexion après usage.
    L'usage veut qu'on :
    - demande une connexion
    - utilise la connexion (via PreparedStatement ou autre)
    - ferme la connexion

    Le principe d'un pool est simple, il a un nombre de connexion disponibles pré-défini (ce nombre peut dépendre du paramétrage du pool mais également du nombre de connexions possibles suivant le SGBDR).
    A chaque fois que tu fais un ds.getConnection(), il va prendre une connexion disponible du pool et la marque "utilisée".
    Si tu ne libère pas la connexion, ds.getConnection() en prendra chaque fois une autre, jusqu'à ce qu'il n'y en ait plus de disponibles.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Par défaut
    Bonjour merci de la réponse,

    ce qui me pose problème est que si je n'utilise pas les pools la nombre maximum qui a été paramétré dans oracle n'est jamais atteint, et pourtant nous appelons de la même manière la méthode openConnection.
    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
     protected void openConnectionBis()
          throws DBException {
     
     
        try {
          if (oraConnection == null || oraConnection.isClosed()) {
            try {
              // chargement de la classe en mémoire pour que le driver soit disponible
              Class.forName("oracle.jdbc.driver.OracleDriver");
     
            }
            catch (ClassNotFoundException e) {
              CoreLog.throwing("corebanking.donnees.DBOracle", "openConnection_1", e);
              throw new DBException("openConnection_1", e, "oracle.jdbc.driver.OracleDriver");
            }
     
            try {
              oraConnection = DriverManager.getConnection(CoreProperties.getDbUrl(),
                                                          CoreProperties.getDbUser(),
                                                          CoreProperties.getDbPwd());
              //#BS 20060608
              // teste de la performance
    //          oraConnection.setAutoCommit(false);
              bIsOpen = true;
              nbOpenConn++;
              nbOpenAllConn++;
            } catch (SQLException ex) {
              CoreLog.throwing("corebanking.donnees.DBOracle", "openConnection_2"+"/nbOpenAllConn/"+nbOpenAllConn, ex);
              throw new DBException("openConnection_2", ex, CoreProperties.getDbUrl());
     
            }
          }
        }
        catch (Exception ex1) {
        }
      }
    Existe t'il un paramètre du contexte du serveur tomcat qui libère les connexions?

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Oui, il y a un paramètre qui permet de fermer une connexion active mais inutilisée (removeAbandonedTimeout)

    Dans tous les cas, il faut revoir le code et fermer la connexion après son usage.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Par défaut
    Ok merci

    Je vais passer à revue le code pour fermer si ce n'était pas fait, j'espère vous revenir avec un résolu

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Bonne chance, j'espère que ce n'est pas une énorme application
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/04/2011, 12h02
  2. [ Tomcat ] Pool de connexion - pb autoReconnect
    Par spk4ever dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 06/01/2006, 16h39
  3. [Tomcat] Pool de connexion
    Par pataluc dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 05/04/2005, 16h14
  4. [TOMCAT] pool de connexion postgres
    Par kitov dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 04/06/2004, 16h13
  5. [tomcat 4.1] [oracle] Pool de connexion
    Par Franco dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 23/09/2003, 00h42

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