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

JDBC Java Discussion :

Connexion pool à une base de données Oracle


Sujet :

JDBC Java

  1. #1
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut Connexion pool à une base de données Oracle
    Bonsoir tout le monde,

    Dans une application web, Je dispose d'une connexion poollée pour la base Oracle, le contexte de l'application sous Tomcat (dans le fichier /conf/server.xml) est comme suit :
    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
     
    <Context path="/monapplication" 
    		 reloadable="true" 
    		 docBase="D:\blabla\WebContent"
    		 workDir="D:\blabla\WebContent\work\org\apache\jsp">
     
    	<ResourceParams name="jdbc/Pool">
    		<parameter>
    			<name>username</name>
    			<value>uuuu</value>
    	 	</parameter>
    		<parameter>
    			<name>password</name>
    			<value>pppp</value>
    		</parameter>
    	 	<parameter>
    			<name>driverClassName</name>
    			<value>oracle.jdbc.driver.OracleDriver</value>
    	 	</parameter>
    		<parameter>
    			<name>url</name>
    			<value>jdbc:oracle:thin:@10.42.1.53:1521:moninstance</value>
    		</parameter>
    	</ResourceParams>
    </Context>
    Avec cette config ça marche très bien.
    Mon probléme c'est que j'essaie d'enlever les paramettres du pool du fichier server.xml de Tomcat pour les mettre dans un fichier "web.xml" dans mon application, mais mon code n'arrive pas à localiser la variable "jdbc/Pool".

    Merci d'avance,
    Je signale que ma solution doit tourner sous "jakarta-tomcat-4.1.12-LE-jdk14" et "IPlanet 6.0".
    Plus nombreux sont les problèmes auxquels on réfléchit , plus on risque de n'en comprendre aucun .
    Pas de questions techniques en privé

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    Salut,
    tu peux faire autrement :
    déclarer ton pool avec des tags de type "context param" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <context-param>
    <param-name>token</param-name>
    <param-value>param-value</param-value>
    </context-param>
    ainsi pour récupérer ces paramètres (qui sont au niveau du contexte, donc commune à toutes les servlets qui tournent sur le server) faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    this.getServletContext().getInitParameterNames()
    te renvoie une Enumeration des noms des parametres.
    Pour récuperer ton parametre il faut faire :
    String p = this.getServletContext().getInitParameter("token");
    alors p vaudra param-value
    C'est surement pas la seule façon de faire, mais ça devrait fonctionner, tien moi au courant.
    Sinon, si je peut me permettre, mettre les params de connexion dans un web.xml ne me semble pas très logique, puisque ce fichier habituellment, contient des params et info liés au fonctionnement de l'application sur le server comme la declaration des servlets (mapping, ordre de chargement), la durée de la session ...etc.
    j ai souvent vu les params de connexion mis dans des fichiers propoerties !
    tu peux créer un fichier properties (connexion.propoerties).
    salut.

  3. #3
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Merci MarsOran pour ta résponse.

    Je croix que je me suis pas bien exprimer, ça marche bien si je fais une connexion simple avec des params de connexion dans un fichier de properties (fichier local à mon application), de meme ça marche si j'utilise la connexion pool dans le fichier "server.xml" de tomcat.

    Ce que tu décrit ici c le scénario d'une connexion simple dans laquelle tu lit les paramettres username et password via le code, ce qui n'est pas le cas dans une connexion poollée.
    Voici mon code de la connexion poollée :
    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
     
    	private Connection avoirConnexionPooleeDev()
    		throws javax.servlet.ServletException, java.io.IOException, SQLException,Exception {
    			Connection con=null;
    			try {
    				//récupération de la source de donnée
    				Context initCtx = new InitialContext();
     
    				if(dsDev==null){
    				Context envCtx = (Context) initCtx.lookup("java:comp/env");
    				dsDev = (DataSource) envCtx.lookup("/jdbc/DevPool");
     
    				}
     
    				con=dsDev.getConnection();
    			} catch (SQLException e) {
    				throw e;
    			}
    			catch (Exception e) {
    							throw e;
    						}
    		return con;
    	}
    Pour résumer, ce que je veux c de mettre les paramettre du pool dans un fichier properties (local à mon application), est-ce possible??.
    Plus nombreux sont les problèmes auxquels on réfléchit , plus on risque de n'en comprendre aucun .
    Pas de questions techniques en privé

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Tu crées un fichier dbcp.properties dans lequel tu mets tes paramètres du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    driver=com.mysql.jdbc.Driver
    urlBdd=jdbc:mysql://127.0.0.1:3306/...
    login=root
    password=
    nb_connection=5
    tps_max=50
    à placer au même niveau que le web.xml
    Dans ta servlet tu initialises le pool avec une méthode init (faisant référence à this servlet) appelant un classe de gestion du pool: démarrage et délivrance de connexions.
    A chaque demande de connexion tu appelles cette classe

  5. #5
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Merci Mengué georges pour ta solution,
    J'aimerai si possible avoir un exemple d'utilisation du fichier "dbcp.properties" à partir de ma servlet.
    Est ce que je doit utliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this.getServletContext().getInitParameterNames();
    String p = this.getServletContext().getInitParameter("token");
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dsDev = (DataSource) initCtx.lookup("java:comp/env/jdbc/DevPool");
    con=dsDev.getConnection();
    Plus nombreux sont les problèmes auxquels on réfléchit , plus on risque de n'en comprendre aucun .
    Pas de questions techniques en privé

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Tu fais:

    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
     
    public static boolean poolDeConnexionInitialise = false;
     
    //initialisation du pool de connexions
    	 public void init()
    	 	{if(poolDeConnexionInitialise == false)
    	 		{Properties p = null;
    	 		 try{p = index.taservlet.loadProperties(this,"dbcp.properties");}
    	 		 catch(final IOException e){}
    	 		 //la méthode « initialise fait le Mapping avec org.apache.commons.beanutils.BeanUtils  et sa méthode « populate() »
    	 		 poolDeConnexionInitialise = librairie.Pool_de_connexion.initialise(p);}
    	 	}
     
    //traitement de la servlet
    	 public void doGet(HttpServletRequest request, HttpServletResponse response) 
         throws IOException, ServletException {.......
    Il reste à créer ta classe qui a 2 méthodes
    - initialise(p): le pool et retourne l'état du pool true ou false
    - connexion() :distribue les connexions

Discussions similaires

  1. connexion a une base de données oracle + JSP
    Par aminoa dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 20/07/2016, 13h23
  2. Connexion avec une Base de donnée oracle
    Par zyanya dans le forum VB.NET
    Réponses: 3
    Dernier message: 20/05/2010, 17h45
  3. connexion à une base de données oracle
    Par 3wicha dans le forum Administration
    Réponses: 3
    Dernier message: 11/06/2007, 14h58
  4. Connexion de Delphi avec une base de données Oracle 9i
    Par Price dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/12/2005, 12h38
  5. Réponses: 4
    Dernier message: 25/11/2005, 19h58

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