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

Développement Web en Java Discussion :

Paramétre propre à chaque application Web


Sujet :

Développement Web en Java

  1. #1
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut Paramétre propre à chaque application Web
    Bonjour,
    voilà, j'ai un ensemble d'applications Web déployées au sein d'un même serveur Tomcat. J'aimerais un moyen de paramétrer différemment chacune des applications (en l'occurence il s'agit de paramétrer la taille du pool de connexion à la base de données). J'ai une classe Configurer dans un projet commun ; cette classe dispose d'une méthode getPoolSize(), j'aimerais donc que ce getPoolSize() soit "dépendant" de la web app dans laquelle la classe est incluse. J'ai pensé à un mécanisme du genre :
    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
    	public interface PoolSizeConfigurer {
    		public int getPoolSize();
    	}
     
    	@SuppressWarnings("unchecked")
    	public <T extends PoolSizeConfigurer> int getPoolSize() {
    		int poolSize = 8;
    		try {
    			Class<T> clazz = (Class<T>) Class
    					.forName("xx.yy.zz.PoolSizeConfigurerImpl");
    			poolSize = clazz.newInstance().getPoolSize();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (InstantiationException e) {
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		}
    		return poolSize;
    	}
    Quelqu'un voit-il une autre approche ?

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Le paramétrage peut être fait avec un fichier context.xml dans le répertoire META-INF de chaque application.
    Utilise un nom distinct de source de données et ça devrait suffire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <Context path="/DBTest" docBase="DBTest"
            debug="5" reloadable="true" crossContext="true">
     
      <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
                   maxActive="100" maxIdle="30" maxWait="10000"
                   username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
                   url="jdbc:mysql://localhost:3306/javatest"/>
     
    </Context>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Merci pour ta réponse mais j'ai deux problèmes avec ta solution :
    1. mon data source est défini dans un unique fichier applicationContext :
      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
      	<bean id="dataSource"
      		class="org.apache.commons.dbcp.BasicDataSource"
      		destroy-method="close">
       
      		<property name="driverClassName">
      			<value>${oracleJdbcDriver}</value>
      		</property>
       
      		<property name="url">
      			<value>${oracleJdbcUrl}</value>
      		</property>
       
      		<property name="username">
      			<value>${oracleUsername}</value>
      		</property>
       
      		<property name="password">
      			<value>${oraclePassword}</value>
      		</property>
       
      		<property name="maxActive">
      			<value>${maxActive}</value>
      		</property>
       
      		<property name="maxIdle">
      			<value>${maxActive}</value>
      		</property>
    2. la propriété maxActive est définie dynamiquement à partir d'un fichier properties (en se basant sur un autre paramètre) en réimplémentant la méthode ServletContextPropertyPlaceholderConfigurer.resolvePlaceholder

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Si je comprends bien, tu as un pool de connexions unique et tu veux limiter le nombre de connexions par application, c'est ça ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    J'ai un pool de connexions par application, défini par l'unique fichier applicationContext inclus dans chaque web.xml, mais je voudrais que le nombre de connexions soit propre à chaque application.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Tu pourrais passer par un listener sur le conteneur et modifier via l'objet BasicDataSource le nombre de connexions (et/ou autres paramètres)...

    Il suffirait d'ajouter dans le web.xml la référence à la classe implémentant
    ServletContextListener
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    <listener>
       <listener-class>le.package.MaClasse</listener-class>
    </listener>
    ...
    le classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package le.package;
    
    class MaClasse implements ServletContextListener
    {
        public void contextInitialized(ServletContextEvent e) 
       {
            //   
       }
    
        public void contextDestroyed(ServletContextEvent e) 
       {
       }
    }
    Un truc dans le genre...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Mon application web ouvre un nouvel onglet chaque fois que je clique
    Par le miky dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 16/09/2014, 17h49
  2. Réponses: 1
    Dernier message: 30/12/2011, 11h51
  3. partager des paramètres entre applications web
    Par ettenips dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 21/03/2007, 21h47
  4. Debuggage d'une application WEB-TOMCAT
    Par oziller dans le forum JBuilder
    Réponses: 3
    Dernier message: 07/02/2003, 23h10
  5. Réponses: 4
    Dernier message: 04/07/2002, 12h31

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