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 :

[DAO] Créer une DataSource de test


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 31
    Par défaut [DAO] Créer une DataSource de test
    Bonjour, j'ai une couche DAO que j'aimerai tester. Tous les elements de cette couche etendent une classe generale DAO. Dans cette classe, je voudrais modifier le datasource qui est utilisé pour un getConnection. Cette classe possede une methode setDatasource qui set le singleton static datasource. Le probleme c'est que je n'arrive pas a creer un datasource. Dans le vrai code, le datasource est recupere par JNDI. Ce datasource est defini dans tomcat et il n'y a pas de probleme. Par contre pour les tests, je voudrais creer un datasource qui renvoie vers ma BDD de test.
    Mais il n'y a pas de constructeurs de datasource et je ne vois pas comment faire.
    Merci
    A+
    Vincent

  2. #2
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Je ne pense pas que tu puisses utiliser une DataSource en dehors d'un conteneur tels que tomcat.

    La datasource est normalement crée par le container Tomcat et mis à dispo via JNDI.

    Ce que tu pourrais faire c'est une classe qui implemente l'interface datasource.
    Tu implementes la methode getConnection() avec un acces via JDBC direct.

    Et tu n'as plus qu'a bouchonner la ou il faut avec cette classe Mock!


    J'espere que cela t'aidera, si tu as des questions n'hesite pas!

  3. #3
    Membre chevronné
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Par défaut
    Citation Envoyé par fabszn
    Je ne pense pas que tu puisses utiliser une DataSource en dehors d'un conteneur tels que tomcat.
    Faux. DataSource est une interface. Le conteneur en fournit une implémentation.

    Rien n'empeche l'utilisation d'une autre implémentation, je pense notamment à Commons DBCP qui est utilisé dans Tomcat.

  4. #4
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Oui tu as raison... mais l'interet d'utiliser une datasource... c'est via une container! comme tomcat par exemple!

    d'ailleur dans la suite de mon message je parle d'implementer sa propre datasource!! non?


  5. #5
    Membre chevronné
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Par défaut
    Non, l'interet c'est de pouvoir obtenir une connexion sans rien connaitre de la source de données et donc de ne pas changer le code entre tes environnements (local ou dans un conteneur).
    C'est vrai que tu en parles dans la suite de ton message, mais le début m'a fait bondir et j'avais pas lu la suite.

  6. #6
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Citation Envoyé par dlemoing
    Non, l'interet c'est de pouvoir obtenir une connexion sans rien connaitre de la source de données et donc de ne pas changer le code entre tes environnements (local ou dans un conteneur).
    Je suis d'accord avec toi, j'ai été un peut limitaitif en ne parlant que de conteneur. L'objectif etant de faire un abstraction de la source de donnée.

    mea culpa!

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 31
    Par défaut
    Merci pour vos reponses.
    J'ai fait les deux methodes et je verrais laquelle j'utiliserai.
    Merci encore
    Vincent

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 5
    Par défaut
    En étant un peu sioux, il y a toujours moyen de faire ça rapidement pour un besoin ponctuel.
    Par exemple, en imaginant qu'on utilise hsqldb :
    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
     
    DataSource dataSource = new DataSource() {
    	public void setLoginTimeout(int arg0) throws SQLException {
    	}
    	public void setLogWriter(PrintWriter arg0) throws SQLException {
    	}
    	public int getLoginTimeout() throws SQLException {
    		return 0;
    	}
    	public PrintWriter getLogWriter() throws SQLException {
    		return null;
    	}
    	public Connection getConnection(String user, String password) throws SQLException {
    		Connection connection = null;
    		try {
    			DriverManager.registerDriver((Driver) Class.forName("org.hsqldb.jdbcDriver").newInstance());
    			connection = DriverManager.getConnection("jdbc:hsqldb:/vers/mon/fichier", user, password);
    		} catch (Exception e) {
    			throw new SQLException(e.getMessage());
    		}
    		return connection;
    	}
    	public Connection getConnection() throws SQLException {
    		return this.getConnection("user", "password");
    	}		
    };
    J'ai plus tendance à utiliser commons-dbcp configuré via spring mais j'utilisait le bout de code précédant quand je savait pas comment faire autrement.
    Tu peux l'adapter à n'importe quel driver jdbc.

  9. #9
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Par défaut
    Quelle est l'interet de l'utilisation de DataSource dans une DAO??

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/08/2012, 15h20
  2. Comment créer une DataSource
    Par boubountou dans le forum JDBC
    Réponses: 1
    Dernier message: 08/11/2011, 10h27
  3. [JUnit] Soucis pour créer une suite de tests
    Par polymorphisme dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 02/06/2011, 12h03
  4. Créer une datasource sous iReport depuis des JavaBeans
    Par empire.dev dans le forum iReport
    Réponses: 7
    Dernier message: 29/01/2011, 10h26
  5. [Oracle 8i] Créer une population test
    Par Titouf dans le forum Oracle
    Réponses: 3
    Dernier message: 14/12/2006, 22h37

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