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

Autres Java Discussion :

[OC4J] lenteur du pool de connection


Sujet :

Autres Java

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut [OC4J] lenteur du pool de connection
    Bonjour

    J utilise une base oracle pour mes données , pour créer une connection, j utilise un pool de connection, le temps de crétaion d'une connection est d environs 200 ms, je trouve cela énorme (des fois cela est monté jusqu a 500ms)

    voici 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
     
    	public static Connection getConnection() throws NamingException, Exception,
    			SQLException {
     
    				try {
     
    			Context ctx = new InitialContext();
    						if (ctx == null)
    				throw new GedFatalExceptionDB("No Context");
     
    			_dataSource = (DataSource) ctx.lookup(locationJNDI);
    			connection = _dataSource.getConnection();
    		} catch (Exception e) {
    			LOGGER.error(e.getMessage(), e);
    		}
    		return connection;
    	}
    Est ce normal? d avoir un temps de 200 ms?? voir 500 ??

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Ben le principe du pool c'est justement que les connections soient crées en avance. Le problème vient certainement de ta configuration. Par exemple quelle est la taille du pool ?
    Si tu as defini 1 et que tu fais 3 accèss parrallèle c'est certain qu'il te fera patienter.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    Je ne savais meme pas que l on pouvait mettre une taille voici ma config, j utilise struts

    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
     
     
    	<data-source
    		class="com.evermind.sql.DriverManagerDataSource"
    		name="xxxx"
    		location="xxxx"
    		xa-location="xa/xxxx"
    		connection-driver="oracle.jdbc.driver.OracleDriver"
    		username="xxxx"
    		password="xxxx"
    		url="jdbc:oracle:thin:@xxxxxxxxxxxxxxxx"
    		inactivity-timeout="120"
     
    	/>
     
     
    </data-sources>

    c est dans le data source que tu spécifie la taille?

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    C'est un data source tomcat ?
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    je suis sous JBoss

    Je viens de me dire que peut etre c est moi qui gere mal mes connetion, car pour chaque "transaction" "requete sql" je créer ma connection

    Ne faudrait t il pas mieux que j initilaise mes connections dans mes actions ??

  6. #6
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Je connais pas JBOSS mais la j'ai pas l'impression que tu defini un pool de connection mais juste une connection.
    Sinon la méthode elle même me semble bonne.
    Mais sous JBOSS tu n'as pas d'interface graphique pour créer le pool ?
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    j utilise un fichier de configuration, oracle-ds.xml

    le code est
    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
     
    <datasources>
      <local-tx-datasource>
        <jndi-name>xxxxx</jndi-name>
        <use-java-context>false</use-java-context>
        <connection-url>jdbc:oracle:thin:@xxx:xx</connection-url>
     
     
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
        <user-name>xxxx</user-name>
     
        <password>xxxx</password>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>50</max-pool-size>
        <idle-timeout-minutes>2</idle-timeout-minutes>
           <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
              <metadata>
             <type-mapping>Oracle9i</type-mapping>
          </metadata>
      </local-tx-datasource>
     
    </datasources>
    mais malgré cette config, ma connection est lente, je veisn de retester et le getConnection me renvoir un temps de 700 ms, je trouve cela énorme

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    mais le problème rencontré n est pas sous JBoss, mais lorsque j utilise une instance OC4j oracle 9i, donc l utilisation du fichier de configuration data-source.xml

    J avoue je ne sais plus trop quoi faire

  9. #9
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Peux tu faire un bête programme de test. Avec tout dans le main. du pure JDBC juste pour voir si le prob ne vient pas de la DB ?
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    Je ne comprend pas trop ce que tu veus dire??

    en faite j ai une requete, j ai mis des logs pour obtenir le temps d éxécution, qui est de l ordre du 0 ms, mais sur le temps de la demande de connectin c est la ou le temps est long

  11. #11
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Je veux dire sans passer par ton fichier. Vraiment un programme bête et méchant jdbc de base pour ouvrir la connection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Class.forName(...driver....);
    String url = "jdbc:.......";
    Connection con = DriverManager.getConnection(url, user, passwd);
    Si cela prend le même temps que par ton mécanisme, cela signifie que tu n'as pas de pool et qu'il instancie la connection à chaque ce qui est très mauvais.

    Pour des outils de gestion de pool, il y en a de très bon chez apache commons-pool
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  12. #12
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    oui et bien je viens de faire ce que tu m as dit, et le temps dé réponse est exactement le meme

    Donc cela veut dire que je n ai pas de pool de connection?

    Ou bien je l utilise mal

    Pourtant en lisant les tutauriaux j avait l impression que ma configuration était bonne

  13. #13
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    comment faire? pour ne pas instancier la connection a chaque fois?

    La synamathique de mon code est celle-ci:

    j appelle la méthode connection
    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
     
    	public static Connection getConnection() throws NamingException, Exception,
    			SQLException {
     
     
    		try {
     
    			Context ctx = new InitialContext();
    			if (ctx == null)
    				throw new GedFatalExceptionDB("No Context");
     
    			_dataSource = (DataSource) ctx.lookup(locationJNDI);
    			long avant = System.currentTimeMillis();
    			connection = _dataSource.getConnection();
    			long apres = System.currentTimeMillis();
    			LOGGER.info("CommonServiceDB getConnection dataSource.getConnection : " +(apres - avant));
    		} catch (Exception e) {
    			LOGGER.error(e.getMessage(), e);
    		}
    		return connection;
    	}
    Cette méthode me rencoi une connection, je l appelle dans des classes ou j execute des requetes, et a la fin de ma requete je fais un CLOSE

    mais cette méthode est appelé a chaque fois

    ce n est pas comme cela qu il fallait l implémenter?

  14. #14
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    La facon dont le pool est déclarer est dépendant de ton environnement sous JBOSS ca doit être faisable par online.
    Sous tomcat voici un exemple: http://christophej.developpez.com/tu...ee/pooltomcat/
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  15. #15
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    j ai peu etre un peu tout mélanger dans mon post, mais le probleme n est pas sous Jboss, en fait j utilise Jboss pour mes développement

    la ou j obtient le probleme de connection est sous Orion / OC4J, d ou la configuration d un fichier data-sources.xml

  16. #16
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    quelle version de java ? si c'est un java 5 pré update 5, mets le a jour.

  17. #17
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    il y a un rapport

    je suis sur la version 5.1.0.6

  18. #18
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    apres une journée de galère

    je viens de trouver

    donc pour orion oc4j, il faut configurer le fichier data-source.xml

    il manquait la balise

    pour lui spécifier ou se situe le pool


    merci encore pour ton aide, c était tres sympa

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

Discussions similaires

  1. Implementation d'un pool de connection
    Par ignatius.b dans le forum JDBC
    Réponses: 2
    Dernier message: 24/04/2006, 10h08
  2. [weblogic] pool de connection
    Par estampille dans le forum Weblogic
    Réponses: 3
    Dernier message: 17/03/2006, 13h37
  3. [ADO.NET][2.0] Comment se gère les pools de connection ?
    Par brousaille dans le forum Accès aux données
    Réponses: 8
    Dernier message: 04/03/2006, 19h11
  4. [ tomcat ] [ mysql ] pool de connection
    Par miagomiago dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 14/01/2006, 07h37
  5. [débutant][tomcat][jdbc] pool de connection DBCP
    Par zozolh2 dans le forum JDBC
    Réponses: 6
    Dernier message: 19/05/2004, 17h41

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