Principes de la programmation BD et Web

Transcription

Principes de la programmation BD et Web
INT EVRY
WWW - Intérêts du Web
client universel
facilité d'emploi
standards ouverts
intégration des autres services Internet
extensibilité du système
faibles coûts logiciel et réseau
utilisation au sein d'une entreprise (Intranet)
Web est une BD mais
sans schéma
sans langage de requêtes
sans transactions, concurrence, reprise, …
sans mécanismes d’autorisation sophistiqués
De nombreuses données stockées dans des SGBD
doivent être publiées sur le web
Transformer les BD en ensembles de pages
statiques
Simple
Redondance, problème de cohérence
Désavantages du web
Besoin de générer des pages web
dynamiques à partir du contenu des BD
1
INT EVRY
url
HTTP
server
CGI
query
string
Html result
Browser (client)
SQL
HTML
Simple et portable
Beaucoup de code à écrire (un CGI par
requête!): peut être amélioré par des
solutions génériques
Pas très efficace
DBMS
!
!
Client 1
Client 2
Client 3
Process 1
Process
du serveur
C
G
I
Serveur W3
Process 1
Process 1
Scripts CGI
Client 1
"
Serveur W3
API
Client 2
Client 3
Process
ensemble
du serveur de fonctions
Thread 1
Thread 2
Thread 3
les scripts CGI deviennent des fonctions
d'une librairie dynamique DLL, exécutées
dans des thread du process serveur W3
2
INT EVRY
#
Genre de script CGI persistant (démon)
script décomposé en 3 parties :
initialisation : une fois
corps : à chaque requête
terminaison : une fois
WWW –limitations Web
performances
Internet => augmenter la bande passante
scripts CGI => FastCGI, scripts serveurs
sécurité
HTTP => S-HTTP
TCP/IP => protocole SSL
initialisation doit inclure le code coûteux
(connexion à une BD, …)
bien adapté à un accès BD, mais une fois
lancé est persistant
WWW –Limitations Web (2)
Transactions
Pas possible avec HTTP 1.0
Pas de mode session
Utilisation des "cookies"
Possible avec HTTP 1.1
Permet des connexions persistantes (TCP)
#
$%
(1) décodage de la requête http (passage
var. environnements vers SQL)
(2) exécution de la requête sur le SGBD
(3) formatage HTML du résultat
interface Utilisateur
HTML pas très puissant pour construire des IHM
sophistiquées
Java est plus adapté
3
INT EVRY
&$
'
(
)
*
*+,
$
Solution générique (et automatisable) :
Programme écrit avec une interface BD
solution dépendante du SGBD
solution indépendante du SGBD (ODBC, JDBC
ou DBI pour Perl)
Langages de programmation utilisables
classiques : C, C++, Ada, … si embedded SQL
Perl (avec DBI)
select : tableau HTML
autre requête : chaine de caractères
Solution spécifique : codage spécifique pour
chaque requête
dans la passerelle (une passerelle / requête !)
dans le SGBD (procédure stockée)
Solution intermédiaire :
paramétrisation du résultat (formulaire de mise à
jour, parcours hypertexte d ’une BD ,…)
"
%
-.
url
/
Serveur
HTTP
résultat html
Client browser
CGI
query
string
rés.
HTML
SQL
résultat
Passerelle
SGBD
<html><body>
<form name="f1" action="http://mica/multi2.cgi" method="get">
<input type="hidden" name="uid" value="citcom/citcom@MICA">
<input type="hidden" name="sqlstatement"
value="select * from vins where cru=">
Donner un cru : <input name="vcru" value="">
<p>
<input type="submit" value="lancer">
</form>
</body></html>
4
INT EVRY
"
%
url
/
Serveur
HTTP query Passerelle
string
résultat html
rés.
HTMLSQL
Client browser
résultat
SGBD
"
%
-.
. /
<html><body>
<form name="f1" action="http://mica/multi2.cgi" method="get">
<input type="hidden" name="uid" value="citcom/citcom@MICA">
<input type="hidden" name="sqlstatement"
value="select * from vins where cru=">
Donner un cru : <input name="vcru" value="">
<p>
<input type="button" value="lancer"
onClick="f1.sqlstatement.value+=f1.vcru.value;
f1.submit();">
</form>
</body></html>
) 0
SGBD
protocole
spécifique
(1)
(2)
(3)
cgi
passerelle ou
HTML pur spécifique SGBD SGBD
Client browser
+ programme Java, Tcl, ...
script client client
SGBD passerelle ou
SGBD
protocole spécifique : JDBC, IIOP (CORBA)
hors http
SGBD client
5
INT EVRY
1
0
dépendance / indépendance par rapport au
SGBD (natif ou ODBC)
langage de requêtes supporté (SQL ou un
sous-ensemble, statique vs dynamique)
formattage du résultat (personnalisable ou
non)
performances
+
2
CGI vers NSAPI, ISAPI (mais propriétaire)
diminuer le nombre de processus (si grand
nombre de clients : passerelle multithread
&
transaction = programme BD (séquence de
lire, écrire)
propriétés = ACID
A : Atomicity
C : consistency
I : Isolation
D : Durability
'
commandes on-line (vente par
correspondance, train, avion, ...)
banque
assurance
une bonne partie du e-business!!!!
6
INT EVRY
+
+
Transaction = séquence d’invocations url
(gestion du contexte par le web?)
Transaction = propriétés ACID (assurées par
le SGBD)
HTTP = pas de support de session
gérer le contexte côté client (cookies)
simuler des sessions http (web transactionnel)
supporter un langage avec un run-time côté serveur
(PHP, ASP, JSP, ...)
+
3 -4/
Contexte est géré chez le client (cookies)
avantages :
simplicité de la mise en œuvre
accès en maj de la BD se fait en une fois à la fin (pas de
ressources bloquées)
si pas de terminaison de la transaction par l ’utilisateur,
rien à faire
3
Client browser
cgi
Serveur http
1
1
1’ c1
2 c1
2’ c1, c2
3 fin c1, c2
5’ del(c1, c2)
1’ c1
2 c1
2’ c1, c2
3 fin c1, c2
5’ del(c1, c2)
4’ ok
1 : premier accès
4 sql(c1, c2)
1’ : retour du cookie c1
2 : autre accès avec transport du cookie c1
2’ : retour des cookies c1, c2
3 : fin transaction avec transport c1, c2
4 : construction de la transaction et exécution sur le SGBD
5’ : suppression des cookies
SGBD
+
3 -5/
Inconvénients
pas vraiment transactionnel
fonctionnalité limitée
beaucoup de cgi à écrire (sauf programme de maj
générique qui prenne une séquence d ’instructions
SQL en entrée)
Problèmes des cookies
global à l ’utilisateur (pas de différenciation entre
fenêtres)
global à une url (pas deux transactions en même
temps sur le même site)
7
INT EVRY
Client browser
#
Serveur http cgi
démon
passerelle
SGBD
-6/
1 : demande de création de transaction
(implicite ou explicite)
allocation d ’un idf par le démon, maj de la table des
transactions, lancement d ’une passerelle, renvoi de l ’idl
au client (cookie ou variable)
Contexte géré par un démon côté serveur
besoin d ’un identifiant de transaction stocké
côté client (cookie ou variable selon client) et
côté démon (dans une table)
passerelle ne traite pas une seule requête
mais toute une transaction (plusieurs
requêtes)
#
-4/
3 : terminaison de la transaction
implicite : plantage, timeout
explicite : idem 2 + maj de la table des transactions,
annulation de l ’idf côté client et arrêt de la passerelle
2 : demande d ’opérations sur la BD
routage de la demande par le démon sur la bonne
passerelle en utilisant l ’idf et sa table
8
INT EVRY
'
Avantages
vraiment transactionnel
solution générique
Inconvénients
architecture complexe
blocage des ressources
nécessité de détecter un « abandon » de l ’utilisateur
(timeout)
Offrir un langage de programmation intégré
au Web (possibilité de faire des appels
depuis une page Web, support par le serveur
HTTP)
run-time du langage offre un support de
session (donc de transactions)
PHP, servlet - JSP, ASP, XSP (Cocoon)
9