Pour le moment nous créons une connexion à la base de données via le DriverManager. Mais depuis la version 2.0 de l’API JDBC nous pouvons utiliser l’interface DataSource
A factory for connections to the physical data source that this DataSource object represents. An alternative to the DriverManager facility, a DataSource object is the preferred means of getting a connection. An object that implements the DataSource interface will typically be registered with a naming service based on the Java™ Naming and Directory (JNDI) API.
DataSource n’est qu’une interface, nous devons donc utiliser une classe. Et par chance, les fournisseurs de drivers JDBC sont dans l’obligation d’en fournir une.
- par exemple, le driver MySQL ConnectorJ fournit la classe
MySQLDataSource
MySQLDataSource dataSource = new MySQLDataSource();
dataSource.setUrl("url");
dataSource.setUser("username");
dataSource.setPassword("password");
Connection connection = dataSource.getConnection();Avantage DataSource
Nous ne sommes pas obligés de donner l’url de connexion exacte qui est propre à chaque driver :
jdbc:mysql://jdbc:postgres://
Nous allons simplement donner le serveur, le port ou encore la table
dataSource.setServerName("localhost");
dataSource.setPort(3306);
dataSource.setDatabaseName("client");
...Schéma
Il est presque identique à celui présenté dans la page précédente. Ici javax.sql.DataSource délègue l’acquisition de la connexion au DriverManager

-
La couche de données de l’application demande à la
DataSourceune connexion à la base de données -
La
DataSourceutilise le pilote sous-jacent pour ouvrir une connexion physique -
Une connexion physique est créée et un socket TCP est ouvert
-
La
DataSourcen’ajoute aucune abstraction au-dessus de la connexion JDBC. Elle se contente de transmettre à l’application la connexion physique brute créée par le pilote JDBC. -
L’application exécute des instructions à l’aide de la connexion à la base de données acquise
-
Lorsque la connexion n’est plus nécessaire, l’application ferme la connexion physique ainsi que le socket TCP sous-jacent.