Création d`un DAD

publicité
PSP
XDB (Oracle XML DB Server)
XDB est un serveur APACHE intégré dans les
bases de données Oracle.
XDB est installé par DBCA comme un composant
de la base de données exemple.
Le framework APEX utilise XDB.
Possède son propre écouteur XDB listener.
Pour administrer un serveur XDB il faut avoir le
privilège XDBA avec option d’administration.
Le compte « ANONYMOUS » doit être
déverrouillé.
2
Création d’un DAD
DAD (Data Access Descriptor): contient les informations pour mapper des requêtes
HTTP à des procédures PL/SQL dans un schéma Oracle.
Création d’un DAD
Lancez SQLPLUS avec un compte ayant le rôle XDBADMIN (sys par exemple).
1.
Créez le DAD HR_DAD
EXEC DBMS_EPG.CREATE_DAD('HR_DAD', '/hrweb/*');
HR_DAD: nom du DAD.
/hrweb/*: chemin virtuel
2.
Définir l’attribut database-username
EXEC DBMS_EPG.SET_DAD_ATTRIBUTE('HR_DAD', 'database-username', 'HR');
HR_DAD possède maintenant les privilèges de l’utilisateur HR et utilise le schéma HR.
3.
Accorder à HR l’utilisation du pachage DBMS_EPG
GRANT EXECUTE ON DBMS_EPG TO HR
4.
Autorisation:
EXEC DBMS_EPG.AUTHORIZE_DAD('HR_DAD', 'HR');
Connectez vous avec le compte HR
EXEC DBMS_EPG.AUTHORIZE_DAD('HR_DAD');
EXEC DBMS_EPG.SET_DAD_ATTRIBUTE('HR_DAD', 'database-username',
'ANONYMOUS');
3
PL/SQL Web Server
4
1.
2.
3.
4.
5.
6.
7.
8.
5
L’écouter XDB listener reçoit une requête HTTP (pour
appeler une page PSP ou une procédure stockée).
XDB listener redirige la requête vers la passerelle
intégrée PL/SQL.
La passerelle utilise les informations de la requête pour
sélectionner le compte à utiliser pour l’authentification
La passerelle PL/SQL prépare les paramètres d’appel et
exécute la procédure stockée.
La procédure stockée génère une page html par appel
de PL/SQL Web Toolkit.
La procédure stockée retourne une page HTML à la
passerelle intégrée.
La passerelle envoie la page à XDB listener.
XDB Listener envoie la réponse HTTP au client web.
Configuration
xdbconfig.xml: fichier de configuration de XDB
stocké dans la base de données.
L’interface de configuration du serveur XDB est
fournie dans le package DBMS_EPG.
6
Exemple 1: une procédure stockée
create or replace
PROCEDURE exemple0 AS
BEGIN
htp.htmlopen; -- <HTML>
htp.headopen; -- <HEAD>
htp.htitle('Exemple 0');
htp.headclose; -- </HEAD>
htp.bodyopen; -- <BODY>
htp.line; -- <HR>
htp.print(‘Exemple0.'); --Exemple0.
htp.line; -- <HR>
htp.bodyclose; -- </BODY>
htp.htmlclose; -- </HTML>
END exemple0;
7
PSP (PL/SQL Server Pages)
<%@ page language="PL/SQL" %>
<h1>Liste des employés</h1>
<%@ page contentType="text/html" %> <table width="40%" border="1">
<tr>
<%@ plsql
procedure="afficher_employes" %>
<th align="left">Nom</th>
<%!
<th align="left">Prénom</th>
CURSOR emp_cursor IS
</tr>
SELECT last_name, first_name
<% FOR emp_record IN emp_cursor
FROM hr.employees
LOOP %>
ORDER BY last_name;
<tr>
%>
<td> <%= emp_record.last_name %>
</td>
<html>
<td> <%= emp_record.first_name %>
<head>
</td>
<meta http-equiv="Content-Type"
</tr>
content="text/html">
<% END LOOP; %>
<Liste des employés</title>
</table>
</head>
</body>
<body TEXT="#000000"
BGCOLOR="#FFFFFF">
</html>
8
API PL/SQL Web Toolkit.
Packages
HTP: génère des éléments HTML.
HTF: Génère des éléments HTML sous forme de chaines de
caractères.
OWA_CACHE: gestion du cache par la passerelle PL/SQL.
OWA_COOKIE: gestion des cookies
OWA_CUSTOM:
OWA_IMAGE:pour obtenir les coordonnées du clic sur une
image.
OWA_PATTERN: expressions régulières.
OWA_Text: manipulation des chaines de caractères.
OWA_UTIL
OWA_SEC: utilisé par la passerelle pour l’authentification
des requetes.
9
paramètres d’une procédure stockée
Les paramètres d’une procédure peuvent être
passées de deux manières différentes:
À partir de l’URL
À partir d’un formulaire.
Trois types de données possibles:
Number
Varchar2
Une collection PL/SQL de type table of (Number ou
Varchar2)
Compiler une page PSP:
loadpsp -user hr exemple.psp
10
<%@ plsql language="PL/SQL" type="PL/SQL type" %>
<%@ plsql procedure="PR3" %>
<%@ plsql parameter="message" type="VARCHAR2" default="''" %>
<%@ plsql parameter="repeter" type="NUMBER" default="0" %>
<head>
<title>PR2</title>
</head>
<body>
<ul>
<% FOR i IN 1..repeter LOOP %>
<%= '<li>Bonjour' || i || '</li>'%>
<% END LOOP; %>
</ul>
</body>
</html>
11
<h1>Liste des employés</h1>
<%@ page language="PL/SQL" %>
<%@ page contentType="text/html" %> <table width="40%" border="1">
<tr>
<%@ plsql
procedure="afficher_employes" %>
<th align="left">Nom</th>
<%!
<th align="left">Prénom</th>
CURSOR emp_cursor IS
</tr>
SELECT last_name, first_name
<% FOR emp_record IN emp_cursor
LOOP %>
FROM hr.employees
ORDER BY last_name;
<tr>
%>
<td> <%= emp_record.last_name %>
</td>
<html>
<td> <%= emp_record.first_name %>
<head>
</td>
<meta http-equiv="Content-Type"
</tr>
content="text/html">
<% END LOOP; %>
<Liste des employés</title>
</table>
</head>
</body>
<body TEXT="#000000"
BGCOLOR="#FFFFFF">
</html>
12
Téléchargement