Java et les bases de données
Michel Bonjour
[Link]
CENTRE UNIVERSITAIRE D’INFORMATIQUE
UNIVERSITE DE GENEVE
Java et les bases de données
Plan
• Introduction
• JDBC: API SQL pour Java
- JDBC, Java, ODBC, SQL
- Architecture, interfaces, exemples
• Java et le client-serveur
- Architecture “classique”
- Architecture revisitée: Java côté client, Java côté serveur
• Persistence d’objets Java
- Principes
- Exemple de produit: JRB
©M. Bonjour, CUI-Université de Genève 2
Java et les bases de données
Java et les BD: Quel intérêt ?
• Idem que pour les applications Internet (1)
- Portabilité, distribution, accès au réseau, GUI
• Evolution: statique/dynamique (2)
- Problèmes: transactions, pré-traitements, etc.
• Le client-serveur revisité (3)
- Client “fin”, code mobile
Bases de données
2 3
WWW Java
1 source: J. Guyot
©M. Bonjour, CUI-Université de Genève 3
Java et les bases de données
JDBC: Introduction
• Quoi ?
- API Java pour interagir avec des BD relationnelles
* exécuter des requêtes SQL
* récupèrer les résultats
- Tentative de standardiser l’accès aux BD (futur: ODMG)
- Spécification basée sur X/Open SQL CLI (comme ODBC)
• Pourquoi ?
- Réponse de SUN à la pression des développeurs
- Java est idéal pour les applications BD
- Alternative aux solutions propriétaires
©M. Bonjour, CUI-Université de Genève 4
Java et les bases de données
JDBC et ...
• Java: JDBC c’est du Java !
- Interfaces, classes, multi-threading
- Applets, applications, utilise le Security Manager
• ODBC: JDBC est “au-dessus” de ODBC
- Arguments pour ODBC:
* existe, implanté, fonctionne
* accepté, diffusé
- Arguments contre ODBC
* très lié au langage C (void *, pointeurs)
* compliqué, basé sur des paramètres locaux
©M. Bonjour, CUI-Université de Genève 5
Java et les bases de données
JDBC et SQL
• Support de SQL-2 Entry Level
- SQL dynamique, principaux types SQL
- Transactions, curseurs simples
- Méta-données
• Mécanismes d’extension
- Syntaxe inspirée d’ODBC: { mot-clé ... paramètres ... }
- Fonctions ODBC de conversion, mathématiques, etc.
• Long terme
- Support de SQL-2 complet
©M. Bonjour, CUI-Université de Genève 6
Java et les bases de données
Architecture de JDBC
Application Java
JDBC API
JDBC Manager
JDBC Driver API
JDBC-Net JDBC-ODBC
Driver X
Driver Bridge
Driver ODBC
protocole ouvert protocole X
protocole Y
©JavaSoft Inc.
©M. Bonjour, CUI-Université de Genève 7
Java et les bases de données
Interfaces de JDBC (1)
©JavaSoft Inc.
©M. Bonjour, CUI-Université de Genève 8
Java et les bases de données
Interfaces de JDBC (2)
• DriverManager
- Gère la liste des Drivers chargés
- Crée les connexions TCP (Connection)
- ‘Mappe’ des URLs vers des connexions
• Connection
- Canal de communication TCP vers une BD
- Format d’URL: jdbc:odbc:[Link]/mabd
- Propriétés de la Connection: username, password
- Crée les Statements (requêtes SQL)
- Gère les transactions (au sens de SQL)
©M. Bonjour, CUI-Université de Genève 9
Java et les bases de données
Interfaces de JDBC (3)
• Statement
- Gère les requêtes SQL simples
- Sous-types:
* PreparedStatement: requêtes paramètrées (IN)
* CallableStatement: procédures stockées (OUT)
- Passage de paramètres:
* méthodes set...
* accès par l’index
- Crée les ResultSet
©M. Bonjour, CUI-Université de Genève 10
Java et les bases de données
Interfaces de JDBC (4)
• ResultSet
- Gère l’accès aux tuples d’un résultat (SELECT)
- Accès aux colonnes: par nom, par index
- Conversions de types entre SQL et Java
- Possibilité d’utiliser un stream pour récupérer les
données “brutes” (bytes, ASCII, Unicode)
- Gère des curseurs “simples”
©M. Bonjour, CUI-Université de Genève 11
Java et les bases de données
Exemple de SELECT
[Link] st = [Link]();
ResultSet r=[Link](“SELECT nom, age FROM T1”);
while ([Link]()) {
// imprime les éléments du tuple
String s = [Link](“nom”);
int i = [Link] (“age”); // ou bien [Link] (2)
[Link] (“nom: “ + s + “ age: ” + i);
}
©M. Bonjour, CUI-Université de Genève 12
Java et les bases de données
Exemple de UPDATE
[Link] ps =
[Link](“UPDATE T1 SET cat=? WHERE age=?”);
[Link](1, “Ado”);
for (int i = 14; i < 19; i++) {
[Link] (2, i);
int nbTuples = [Link]();
[Link] (“age: “ + i + “ nb: ” + nbTuples);
}
©M. Bonjour, CUI-Université de Genève 13
Java et les bases de données
Client-serveur: Architecture “classique”
client “épais” serveur
GUI xy Serveur xy
Net xy Net xy
code xy
TCP/IP TCP/IP
xy: Oracle, Sybase, etc.
©M. Bonjour, CUI-Université de Genève 14
Java et les bases de données
Limites du client-serveur “classique”
• Côté client:
- GUI: “moche”, non-standard, runtime
- Net: protocole fermé, mais: sécurité, performances
- “Epaisseur”: installation, configuration “câblée”
- Développement: langage “client”, peu portable
• Côté serveur
- Net: protocole fermé, mais: répartition, homogénéité
- Développement: langage “serveur”, pas portable
©M. Bonjour, CUI-Université de Genève 15
Java et les bases de données
Client-serveur: Architecture “avec Java”
client “fin” serveur
Browser Serveur xy
Java VM Request Broker
code Java
TCP/IP TCP/IP
xy: Oracle, Sybase, etc.
©M. Bonjour, CUI-Université de Genève 16
Java et les bases de données
Avantages du client-serveur “avec Java”
• Côté client:
- Browser: interface uniforme, bookmarks, plug-ins
- Java VM: sécurité
- “Finesse”: TOUT se télécharge, pas de config locale
- Développement: Java, HTML (gare à JavaScript !)
• Côté serveur
- Request Broker: centralise les appels aux services
- Développement: Java
* local: code exécuté par le serveur
* mobile: code stocké dans la BD et envoyé au client
©M. Bonjour, CUI-Université de Genève 17
Java et les bases de données
Persistence d’objets Java: Principes
• Stocker des objets Java dans un SGBD
- Performance, sécurité, concurrence, etc.
• Développement
- Création des classes Java
- Génération +/- automatique:
* Java: méthodes (binding)
* SGBD: tables
• Différence de paradigme: OO vs Relationnel
- Java: classes, types simples1, références, arrays
- Relationnel: tables, types simples2, jointures
©M. Bonjour, CUI-Université de Genève 18
Java et les bases de données
JRB: Java Relational Binding
O2 Technology, Oct. 1996
Stockage d’objets Java dans un SGBD relationnel
• API + outils
• Code Java
- Voit un système persistant
- Fait appel à l’API JRB
• Runtime
- Gère un cache d’objets
• Communication avec le SGBD
- Interface compatible JDBC
©M. Bonjour, CUI-Université de Genève 19
Java et les bases de données
Etapes du développement
• Programmation + configuration
- Ecriture des classes Java, compilation
- Choix des classes/variables à stocker
• Importation des classes
- Génération de méthodes Java (access, update)
- Création de la BD (tables, clés, index)
• Mise à jour du code source
- Inclusion des méthodes générées
- Ecriture des méthodes d’accès ‘profond’
• Compilation, etc.
©M. Bonjour, CUI-Université de Genève 20
Java et les bases de données
Cycle de développement
© O2 Technology
[Link] config
jrb_import
ajouter
[Link] [Link]
write read
JRB runtime javac
cache
update access
Appl... Java [Link]
©M. Bonjour, CUI-Université de Genève 21
Java et les bases de données
Gestion des objets
• Création d’un objet
- Méthode new() habituelle
• Ecriture d’un objet
- Invocation de update() ou de VOTRE deepUdate()
• Lecture d’un objet
- Invocation de access() ou de VOTRE deepAccess()
- A partir de l’extension de la classe (~ curseur SQL)
- A l’aide d’un prédicat de recherche
- En suivant un lien depuis un autre objet stocké
©M. Bonjour, CUI-Université de Genève 22
Java et les bases de données
Exemple de création/écriture
Person john = new Person("John", 36);
Person mary = new Person("Mary", 32);
Person bob = new Person ("Bob", 6);
[Link] = mary; // references
[Link] = john;
[Link][0] = bob; // 1 child
[Link][0] = bob;
Database database = new Database([Link],"java_store", "mb","mb_password");
[Link](); // open a connection to the database server
[Link]("base1"); // open the database ìbase1î
Transaction transaction = new Transaction();
[Link]() ; // start a new transaction
[Link](); // indicates to the system that these objects must be written in
[Link](); // the database at commit time
[Link]();
[Link](); // commit the transaction
[Link](); // close the database
[Link]();
©M. Bonjour, CUI-Université de Genève 23
Java et les bases de données
Exemple d’accès
Database database = new Database([Link], "java_store", "mb", "mb_password");
[Link](); // open a connection to the database server
[Link]("base1");
// find John in the database
Person john = (Person) [Link]("Person").where("name = 'John'").element();
Person mary = (Person) [Link](); // load his spouse in memory
Transaction transaction = new Transaction();
[Link]() ; // start a new transaction
Person bob = (Person) [Link]([Link],0); // load the 1st child in memory
[Link] = 7; // change his age
[Link](); // mark it to be written to the database at commit time
[Link](); // commit the transaction
[Link](); // close the database
[Link]();
©M. Bonjour, CUI-Université de Genève 24
Java et les bases de données
Conclusion
• Avantages
- Optimisation: utilisation des possibilités du SGBD
- Transparence: choix des classes à stocker, appel à l’API
- Notion de transaction
• Inconvénients, limites
- Processus ‘batch’
- Ecriture des méthodes deep...()
- Support limité de l’évolution des classes (ajout variable)
• Avenir
- Stockage dans O2, support de l’évolution
©M. Bonjour, CUI-Université de Genève 25