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 :

[DataSource Java] - plantage sans génération d'exception


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 143
    Points : 69
    Points
    69
    Par défaut [DataSource Java] - plantage sans génération d'exception
    Salut à tous,

    J'ai mis en place un pooling de connexion.
    J'utilise une méthode de connexion centrale faisant appel à un DataSource défini dans un singleton.

    Quelques élements de code :

    // Le singleton
    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
     
    public class DataSourceJavaSingletonOst {
     
    	/** Donnée de classe contenant l'instance courante */
    	private static DataSource dataSource = null;
     
    	/** Constructeur privé interdisant l'instanciation en dehors de cette classe 
             * @throws SQLException */ 
    	private DataSourceJavaSingletonOst() throws Exception {
     
    		try {
    			ResourceBundle bundle = ResourceBundle.getBundle("ost");
     
    			// Définition du driver JDBC 
    			String driver = bundle.getString("driverClassName");
     
    			// Utilisateur de la base de données
    			String user = bundle.getString("jdbc.user.ost");
     
    			// Son password
    			String pw = bundle.getString("jdbc.password.ost");
     
    			// URL JDBC de connexion
    			String connectURI = bundle.getString("jdbc.connection");
     
    			BasicDataSource bds = new BasicDataSource();
    			bds.setDriverClassName(driver);
    			bds.setUsername(user);
    			bds.setPassword(pw);
    			bds.setUrl(connectURI);
     
    			dataSource = (DataSource)bds;
     
    		} catch (Exception e) {
    			System.out.println("Erreur d'accès au dataSource " + e.getMessage());
    			throw new Exception("Erreur d'accès au dataSource " + e.getMessage());
    		}
    	}
     
    	/** Singleton de la classe courante */
    	public static DataSource getInstance(){
    		if (dataSource==null){
    			try {
    				new DataSourceJavaSingletonOst();
    			} catch (Exception e) {
    				System.out.println(e.getMessage());
    			}
    		}
    		return dataSource;
    	}
    }

    // La méthode de connexion centrale
    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
     
    public static Connection getConnection(String mode, String sName)
    	{
    		Connection connexion = null;
     
    		try {
    			connexion = DataSourceJavaSingletonOst.getInstance().getConnection();
    		}
    		catch (Exception e) {
    			System.out.println("erreur lors de la connection a la base serveur : "+ e);
    		}
     
    		catch (Throwable th) {
    			System.out.println("Erreur connexion " + th.getMessage());
    		}
     
    		return connexion;	
    	}
    Ensuite je précise que dans mon code je ferme bien les connexions, statement etc...

    Je rencontre cependant un problème, au 4ème ou 5ème appel, la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connexion = DataSourceJavaSingletonOst.getInstance().getConnection();
    plante sans me générer d'erreur (en mode debug, ça s'arrête et en execution standard, la servlet mouline), alors que le datasource est bien renvoyé par le singleton. J'ai même été jusqu'à mettre un catch (Throwable), c'est pour dire.

    J'utilise exactement le même code dans une autre application et cela fonctionne sans problème.

    Si quelqu'un a une petite idée, je suis preneur.

    Merci !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 85
    Points : 107
    Points
    107
    Par défaut
    C'est peut être une voix à explorer :
    Il existe pour une base de données un nombre max de connexions clientes à disposition, dépassé ce nombre, la DB en gros n'en alloue plus jusqu'à ce qu'il y en ait une à disposition...

    En gros, est-ce qu'au niveau de ta base de données tu n'aurais pas un max de connexion défini à 5 connexions en parallèle par exemple ?

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 143
    Points : 69
    Points
    69
    Par défaut
    Pour info, j'attaque une base Oracle 8i.

    Mais à mon avis ça ne doit pas poser de problème :

    Admettons que 5/5 connexions sont utilisées dans le pooling et que la base ne peut pas en attribuer plus, je devrais avoir une exception renvoyée par le pooling (maxConnectionAllowed dépassé ou je ne sais quoi) ou récupérer l'erreur Oracle.

    Enfin, ce n'est que mon avis.

    Je suis en train de passer toutes les connexions en revue et vérifier que je n'en laisse pas traîner quelque part...

    Merci pour la piste.

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 143
    Points : 69
    Points
    69
    Par défaut
    En effet, je laissais trainer une connexion non fermée quelque part dans une jsp. Depuis l'application fonctionne.

    Conclusion, bien vérifier la fermeture des connexions.

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

Discussions similaires

  1. [Access 2000] Plantages sans raisons apparentes
    Par 973thom dans le forum Access
    Réponses: 2
    Dernier message: 09/07/2007, 10h04
  2. [Access]Plantage sans perte de données
    Par delcroixf dans le forum Access
    Réponses: 2
    Dernier message: 07/05/2007, 22h41
  3. [XSD] Java et XML: Génération du XSD (Schema XML)
    Par Kroline dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 10/08/2006, 18h03
  4. Plantage sans raison ... (bing fermé d'un coup)
    Par Le_Phasme dans le forum Access
    Réponses: 7
    Dernier message: 11/04/2006, 17h20

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