TUTORIEL JAVA 
Choisir un driver JDBC
JDBC met quatre types de drivers à la disposition des développeurs. Présentation de chacun d'entre eux avec leurs avantages et leurs inconvénients. (23/11/2004)

Tout langage de programmation d'envergure se doit de proposer à ses développeurs des méthodes de connexions à des SGBDR (Système de Gestion de Bases de Données Relationnelles). Java ne déroge bien entendu par à cette règle, et n'oublie pas d'y imprimer sa marque.

Le problème de la connexion à une base de données n'est pas tant le fait du langage utilisée par leur moteur (SQL est devenu un standard de facto), mais celui du très grand nombre de moteurs disponibles sur le marché, qui sont bien entendu totalement incompatibles entre eux (inutile de chercher à accéder à une base MySQL au moyen des méthodes prôné par Oracle).
Chaque éditeur propose donc son propre pilote (driver) pour accéder à sa base, avec son API évidemment optimisée pour cette base seulement.

L'idée de créer une API générale, pouvant se connecter à un grand nombre de bases sans différence côté développeur, a donc vite germé. Microsoft a créé son "standard" sous le nom d'ODBC (Open Data Base Connector). Cette API fonctionne avec Windows et est écrite en C.

Les concepteurs de Java ont créé leur propre architecture : JDBC (Java Data Base Connector). Celle-ci repose sur trois couches : le noyau (JDBC Manager), les classes et interfaces (JDBC API, contenues dans java.sql) et les pilotes (JDBC Drivers). Ces pilotes sont eux-mêmes répartis en quatre types, que nous allons étudier ici.

Type 1 : le pont JDBC-ODBC
Le premier driver créé fut évidemment celui utilisant l'existant. ODBC étant déjà bien répandu et utilisé, un pont JDBC-ODBC (JDBC-ODBC bridge) fut créé. Comme on peut s'y attendre, ce type de driver a l'immense intérêt de pouvoir utiliser directement les fonctionnalités auparavant accessibles uniquement aux langages pour lesquels ODBC a été conçu. C'est d'ailleurs, jusqu'à aujourd'hui, le driver le plus souvent utilisé lors de développement Windows.

C'est malheureusement également sa limite : impossible de faire appel à ce type de driver en dehors des environnements ODBC. Par ailleurs, nous avons ici affaire à une certaine surcharge : une application Java fait appel à un pilote, faisant appel à une surcouche logicielle, qui fait elle-même appelle à une API spécifique au SGBDR utilisé, qui enfin accède au SGBDR. Cela fait beaucoup de couches à "traverser", et les performances peuvent singulièrement en pâtir.

Type 2 : les drivers natifs
Après JDBC-ODBC, l'évolution naturelle était de répliquer ODBC au sein de l'API Java : cela nous donne les drivers natifs, qui sont donc écrits en Java et permettent d'utiliser directement l'API spécifique du SGBDR. C'est déjà un pas en avant dans l'accessibilité aux bases de données, mais cette technique révèle tout de même certaines limitations : les drivers de type 2 ne peuvent être utilisés que dans les environnements disposant d'une API propriétaire (ce qui, selon les moyens de l'éditeur du SGBDR, peut sérieusement limiter les possibilités), et il est impossible de ce servir de ces drivers à partir d'une Applet Java (à cause de la sécurité renforcée pour ce type d'application, limitant ses droits d'accès).

Type 3 : les drivers Pont Réseau
Ce type de driver répond à une demande précise : centraliser les accès en utilisant un serveur d'application intermédiaire pour faire transiter les requêtes vers la base. Le principal intérêt de l'exercice est de ne pas laisser l'application cliente faire les appels à la base de données : le driver se charge de contacter le serveur, qui traduit la requête et l'envoi au SGBDR directement.
C'est probablement la méthode la plus sûre : les applications deviennent totalement portables, la sécurisation se fait directement sur le serveur, les connexions sont gérées selon la demande et donc optimisées, les modifications et reconfigurations se font directement sur le serveur sans devoir modifier les applications clientes…
Léger souci : tous les fournisseurs de serveur d'application ne fournissent pas forcément ce type de drivers sur leur système, ou ne reconnaissent pas tous les SGBDR.

Type 4 : les drivers Java
Les drivers natifs sont certes écrits en Java, mais ils doivent toujours passer par l'API propriétaire de l'éditeur. Le type 4 correspond à ces pilotes qui sont des portages en Java des API propiétaires (généralement écrites en C), et utilisent l'interface java.net pour accéder à la base.
Cependant, les contraintes réseau et sécurité de Java jouent encore : par exemple, si une applet n'est pas reconnue comme étant de confiance (trusted applet), elle ne pourra se connecter qu'à une base qui se trouve sur son serveur d'origine.
Par ailleurs, le problème de l'ouverture se représente : il faut un pilote pour chaque base…

  Forum

Réagissez dans les forums de JDN Développeurs

Le type de driver que vous utiliserez dépendra de beaucoup de vos besoins : un type spécifique n'est pas forcément à mettre pour toujours de côté du fait de ses limitations. Face au grand nombre de possibilités, Sun propose aux développeurs un site leur permettant de connaître leurs possibilités face à une problématique d'accès à un SGBDR : JDBC Drivers.

 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages