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

Persistance des données Java Discussion :

Pool de connexion ou singleton


Sujet :

Persistance des données Java

  1. #1
    Membre habitué Avatar de questionneuse
    Inscrit en
    Décembre 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 319
    Points : 127
    Points
    127
    Par défaut Pool de connexion ou singleton
    Bonsoir,

    J'ai une petite question à propos de connexion a une base de données.
    J'ai développé un pattern singleton pour me connecter à ma base, c'est pratique puisque du coup je ne ferme jamais ma connexion et plusieurs utlisateurs peuvent du coup l'utiliser, 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    	public static DBConnection getInstance() throws Exception {		 
    		if (DBConnection.dbconnection == null) {			
    			//String path = "blabla";
    			String path = "blabla";
    			props.load(new FileInputStream(path));	
    			//mettre en place le fichier de log	la première fois
    			PropertyConfigurator.configure(props.getProperty("pathLog4j"));
    			setLog4j(Logger.getLogger("DBConnection.class"));
    			if(Logger.getLogger("DBConnection.class") == null)
    				System.out.println("La mise en place du système de log n'a pas fonctionné ");
    			else
    				log4j.log(Level.INFO,"Le système de log est mis en place: "+ getLog4j().getName());
    			log4j.log(Level.INFO, "pathLog4j: "+props.getProperty("pathLog4j"));
    			DBConnection.dbconnection = new DBConnection();
    			log4j.log(Level.INFO, "DBConnection.dbconnection = new DBConnection();");
    		}
    		return DBConnection.dbconnection;
    	}
     
    	public Connection getConnection() throws Exception {
     
    		if (DBConnection.dbconnection == null)
    			throw new Exception("Singleton non initialisé");
    		if (DBConnection.conn != null && !DBConnection.conn.isClosed())			
    		{
    			return DBConnection.conn;
    		}
    		else
    			log4j.log(Level.INFO, "Connection == null");
    		try {
    			 DBConnection.conn = getConnection3();
    		} catch (Exception ex) {
    			log4j.log(Level.FATAL, "Erreur lors du chargement du dataSource");
    			ex.printStackTrace();
    			throw new Exception("Erreur lors du chargement du dataSource");
    		}
    		return conn; 
    	}
     
    	private static Connection getConnection3() throws Exception {
    		if (DBConnection.conn != null && !DBConnection.conn.isClosed())
    		{
    			return DBConnection.conn;
    		}
     
    		user = props.getProperty("user");
    		password = props.getProperty("password");
    		host = props.getProperty("host");
    		port = props.getProperty("port");
    		dbname = props.getProperty("dbname");
     
    		try {
    			String url = "jdbc:mysql://" + host +":"+port+ "/" + dbname;
    			log4j.log(Level.INFO, "url: "+ "jdbc:mysql://" + host +":"+port+ "/" + dbname);
    			Class.forName("com.mysql.jdbc.Driver").newInstance();
    			DBConnection.conn = DriverManager.getConnection(url, user, password);
    			log4j.log(Level.INFO, "Connection DB réussie");
    		} catch (Exception e) {
    			log4j.log(Level.FATAL, "Echec de la connection DB" + e);
    		} 
    		return DBConnection.conn;
    	}
    Et j'ai lu par ci par là que ce n'était pas bien qu'il fallait passer par un pool de connexion, je ne comprend pas pourquoi c'est mieux. Ou est l'avantage? et surtout est ce ma méthode est dangereuse?

    Merci pour votre aide précieuse,
    Faites moi confiance... je suis un membre éclairé

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 511
    Points
    511
    Par défaut
    Bonjour,
    il te faut un pool de connexion si ton application est multi-Threadée: C'est le cas sur un serveur Web, mais aussi si tu as plusieurs Thread dans une application en Swing par exemple.
    Le risque est d'avoir plusieurs Thread qui utilisent la même connexion => il faut syncrhonizer (que tu ai un pool ou non)
    L'avantage de faire un pool c'est que les requetes pourront passer en parallele sinon tes Thread s'attendront les uns les autres et passeront à la queue leu leu.

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu n'auras aucun moyen de gérer des transactions, puisqu'il faut agir sur la connexion pour valider un invalider une transaction. Donc sans synchronisation, tu validerais ou invaliderais la transaction du voisin.
    Donc pour moi, il n'y a même pas de question à se poser, c'est pool de connexions.

Discussions similaires

  1. Pool de connexion ou singleton
    Par questionneuse dans le forum Développement Web en Java
    Réponses: 14
    Dernier message: 10/04/2012, 15h03
  2. [TOMCAT] pool de connexion postgres
    Par kitov dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 04/06/2004, 16h13
  3. [WSAD] [POOL de CONNEXION]
    Par gandia dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/05/2004, 18h22
  4. [EJB]JBoss et Pool de connexion
    Par Kleb dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 20/04/2004, 12h12
  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