đ§± Oracle APEX â RAD Web pur, Database-centric (Oracle Database)
Positionnement : âWinDev version Web / database-centricâ. APEX excelle quand le cĆur du SI est Oracle DB : tu construis vite des apps internes (CRUD, reporting, back-office, portails) avec une architecture simple Browser â ORDS â Oracle DB, des pages gĂ©nĂ©rĂ©es via mĂ©tadonnĂ©es en base, et une sĂ©curitĂ©/perf solides si SQL & gouvernance sont propres.
APEX â dĂ©finition + promesse
Low-code Oracle pour construire vite des apps web âdata-centricâ. ModĂšle : mĂ©tadonnĂ©es en DB â pages gĂ©nĂ©rĂ©es dynamiquement.
RAD WebDB-centricLow-Code + Pro-CodeArchitecture complĂšte
Browser â ORDS (web server) â Oracle DB (APEX engine + metadata). SĂ©paration mid-tier / DB tier.
ORDSPoolsScaleApp Builder & Page Designer
ModĂšle APEX : pages â regions â items â processes â validations â dynamic actions. Le âcoeurâ de la productivitĂ©.
PagesRegionsDynamic ActionsComposants UI & reporting
Classic Report, Interactive Report, Interactive Grid (editable), Cards, Calendar, Charts, Faceted Search, Smart Filters.
IRIGFacetsInteractive Grid (editable)
Ădition âtype spreadsheetâ : ajout/suppression/Ă©dition de lignes, DML automatique, validations, save cycles, JS API.
EditableAutomatic DMLClient modelFaceted Search & Smart Filters
Recherche/filtrage trĂšs puissant âSQL-drivenâ au plus prĂšs de la donnĂ©e, idĂ©al pour portails data.
SQL-drivenFilter UXInsightsSécurité (deep-dive)
Auth, Authorization, Session Management, Session State Protection (SSP), Browser Security, DB session hardening.
SSPRBACHardeningPerformance & tuning
APEX = SQL/perf DB. Index, pagination, read-models, bind variables, caching, ORDS pools, pages âlightâ.
SQL firstIndexPaginationORDS (web tier + REST)
Installation, config, upgrade, pools, TLS, reverse proxy, REST endpoints, modes de déploiement.
InstallUpgradeRESTModĂšle data & patterns DB
Tables/contraintes/index, vues read-models, packages PL/SQL âservice layerâ, anti-pattern âlogic in UIâ.
ConstraintsViewsPL/SQL servicesUniversal Theme & UX
Responsive, scalable, Theme Roller, templates, design system APEX. Standardiser lâUX Ă grande Ă©chelle.
UTTheme RollerResponsiveALM / CI-CD APEX
Exports/imports, Git, environnements, build manager, pipeline, rollback, discipline release.
ExportGitCI/CDWorkspaces & gouvernance
Workspaces multi-tenant, rĂŽles dev, sĂ©paration DEV/TEST/PROD, secrets, audit, standards dâĂ©quipe.
WorkspaceRolesStandardsDéploiement & HA
On-prem / cloud, ORDS stateless, LB, DB HA, PDB isolation, patching, backups testés.
LBORDS nodesDB HAQuickstart (POC 7 jours)
Plan âP1 â Prod-likeâ : modĂšle data, 6 pages, sĂ©curitĂ©, SSP, ORDS, KPI perf, pipeline minimal.
POCSecurityPerfDépendance Oracle (lock-in)
APEX vit dans Oracle DB. Stratégie anti lock-in : domain layer, REST contracts, séparation UI / services.
OracleContractsExit planUse-cases & anti-usecases
OĂč APEX est imbattable (Oracle shops) + oĂč il faut benchmarker (UX ultra custom / multi-DB strict).
Back-officePortalsReportingCheat-sheet opérationnel
Les rĂšgles âanti-galĂšreâ APEX : sĂ©curitĂ©, perf, architecture, ALM, dĂ©ploiement, standards.
ChecklistRunbookStandardsMental model
Le âtriangleâ qui fait rĂ©ussir APEX
| Pilier | Ce que ça veut dire | Indicateur de maturité |
|---|---|---|
| Data model | contraintes/index + vues âread-modelsâ + services PL/SQL | top SQL stable, peu de full scans |
| Security | roles cohérents + SSP activé + sessions durcies | pas de tampering, audit actions sensibles |
| ALM/Run | DEV/TEST/PROD + exports versionnés + rollback | releases reproductibles, MTTR bas |
Positionnement âWinDev web / DB-centricâ
APEX est souvent âimbattableâ quand :
- Oracle DB est dĂ©jĂ au cĆur du SI
- tu fais des apps data-centric (CRUD, reporting, back-office, portails)
- tu veux sécuriser vite (auth/roles/SSP) et scaler proprement (ORDS)
APEX est moins adapté quand :
- tu veux une stratégie multi-DB / cloud-agnostic stricte
- tu construis un produit public avec UX ultra sur-mesure (possible, mais coĂ»t â)
Le âsweet spotâ = applications internes et portails data dans un environnement Oracle. Les mauvaises surprises viennent surtout de : SQL mal optimisĂ©, SSP oubliĂ©, absence dâALM.
Ce que tu dois absolument cadrer dÚs le début
- Domain boundary : logique mĂ©tier dans packages PL/SQL (pas dispersĂ©e dans lâUI).
- Read vs Write model : vues dĂ©diĂ©es pour reporting (Ă©vite N+1 & requĂȘtes âsalesâ).
- Security : RBAC + SSP + session policies.
- ORDS : sizing pools + TLS + reverse proxy + logs.
- ALM : exports versionnés + pipeline minimal + rollback plan.
DĂ©finition âengineeringâ
Oracle APEX est une plateforme âmetadata-drivenâ : une application est un ensemble de mĂ©tadonnĂ©es (pages/regions/items/processes) stockĂ©es en Oracle Database. Ă lâexĂ©cution, le runtime APEX gĂ©nĂšre les pages dynamiquement.
Glossaire âindispensableâ
| Terme | DĂ©finition | Pourquoi câest important |
|---|---|---|
| Workspace | partition logique multi-tenant | gouvernance, isolation, rĂŽles dev |
| Application | métadonnées + composants | exportable, versionnable |
| Page | écran (regions/items) | performance & UX |
| Region | composant UI (report, form, chart) | unités de rendu / tuning |
| Item | input / champ / état | validation, SSP, session state |
| Process | logique serveur (PL/SQL) à des points précis | write path, DML, transactions |
| Dynamic Action | logique client declarative (JS) | UX riche sans SPA âlourdeâ |
Promesse (bien cadrée)
Promesse APEX :
- Construire vite une app web data-centric
- Garder la performance âau niveau DBâ
- Sécuriser via mécanismes intégrés (auth/roles/SSP)
- Industrialiser (exports, environnements, pipeline)
Mais :
- La vitesse vient surtout si le modĂšle data + SQL sont propres
- Sans ALM, on fabrique vite une âapex-app spaghettiâ
APEX = âdatabase middle tierâ (pratique)
- Ton âbackendâ peut ĂȘtre : tables + vues + packages PL/SQL (service layer).
- Ton âfrontendâ : pages APEX + regions + dynamic actions + Universal Theme.
- Ton âAPI layerâ : ORDS REST (si tu veux dĂ©coupler, exposer, intĂ©grer).
Forces (concrĂštes)
| Force | Pourquoi | Résultat |
|---|---|---|
| Time-to-App | déclaratif + générateurs CRUD/reports | POC en heures/jours |
| DB-centric | SQL au plus prĂšs, pas de âsurcharge ORMâ obligatoire | perfs solides si index/SQL OK |
| Sécurité | auth/authorization/session/SSP/browser security | hardened web apps |
| Scalabilité | ORDS stateless + DB HA | scale horizontal web tier |
| Low-code + Pro-code | tu sors du cadre quand nĂ©cessaire | Ă©vite lâeffet âoutil bloquantâ |
Ce que tu construis âtrĂšs viteâ
- Back-office CRUD (tables / contraintes / forms)
- Portails data (reports + faceted search)
- Dashboards (charts, KPI)
- Workflows simples (statuts, validations, approvals âmaisonâ)
- Admin consoles (référentiels, droits, audit)
Quand ton SI est Oracle, APEX te donne un web RAD âsans frictionâ.
Limites / risques
- Lock-in Oracle : runtime APEX en DB Oracle + ORDS (stack Oracle).
- Spaghetti UI : logique mĂ©tier dissĂ©minĂ©e dans process/pages/items â maintenance dure.
- Perf âsurprisesâ : queries lourdes (reports), absence pagination, index manquants, N+1 via vues mal conçues.
- Ops : sans discipline export/versioning, tu perds la reproductibilité.
- UX ultra custom : faisable, mais le coût augmente (JS/CSS, composants custom).
Anti-pattern #1 (le plus fréquent)
Anti-pattern :
- 200 pages
- logique métier copiée-collée en process PL/SQL
- validations incohérentes
- pas de service layer
- pas dâexports versionnĂ©s
SymptĂŽme :
- chaque changement casse 3 endroits
- personne nâose toucher la prod
RemĂšde
- Domain services : packages PL/SQL (API stable)
- UI : pages simples (thin UI)
- Read models : vues/reporting dédiées
- ALM : exports + Git + pipeline + rollback
DĂ©cision (checklist âgo / no-goâ)
| Question | Si âOuiâ | Sinon |
|---|---|---|
| Oracle DB est-il le socle SI ? | APEX est trĂšs pertinent | benchmark (autre low-code / custom) |
| Apps data-centric (CRUD + reporting) ? | sweet spot APEX | UX produit â coĂ»t â |
| Ăquipe SQL/PLSQL dispo ? | perf & robustesse | courbe dâapprentissage |
| Gouvernance/ALM acceptĂ©e ? | prod stable | risque âapex spaghettiâ |
Architecture âminimum viableâ
[Browser]
|
v
[ORDS] (web server / REST gateway, stateless)
|
v
[Oracle Database]
- APEX engine
- APEX metadata (apps/pages/components)
- Data model (tables/views)
- Service layer (packages PL/SQL)
La séparation mid-tier/DB tier est la clé : ORDS scale horizontal, DB scale HA/perf.
Pourquoi câest puissant
- Latence : le âcoeur dataâ est local (DB-centric).
- SĂ©cu : lâapp est un âcitoyen DBâ (auth/roles/SSP).
- Ops : ORDS peut ĂȘtre dĂ©ployĂ© stateless, patchĂ© facilement.
- Perf : tu tunes SQL/index/cache plutĂŽt quâun gros middleware.
Découpage recommandé (clean)
DB Layer :
- tables, constraints, indexes
- views (read-model)
- packages PL/SQL (domain services)
APEX Layer :
- pages (thin UI)
- validations (UI-level)
- processes (calls packages)
ORDS Layer :
- pools sizing
- TLS / reverse proxy
- REST contracts (optional)
ORDS â responsabilitĂ©s
| Zone | RĂŽle | ConcrĂštement |
|---|---|---|
| Web server | sert APEX | HTTP(S), sessions, proxification |
| Gateway | pont vers DB | pools JDBC, timeouts, retries |
| REST | exposition API | modules/endpoints, auth, versioning |
| Ops | patching | upgrade, config, logs |
Runbook ORDS (indispensable)
Security:
- TLS partout (reverse proxy)
- headers (HSTS, etc.) selon politique
Sizing:
- max pool connections
- idle timeout
- statement timeout (selon env)
- file upload limits
Observability:
- access logs + error logs
- corrId (si reverse proxy)
- alerting: 5xx rate, pool saturation
Scale / HA pattern
[Load Balancer]
|------> [ORDS node #1]
|------> [ORDS node #2]
|------> [ORDS node #N]
|
v
[Oracle DB HA]
- RAC / Data Guard / backups testés
| Point | But | Erreur fréquente |
|---|---|---|
| ORDS stateless | scale horizontal | state local non partagé |
| DB HA | résilience | backup non testé |
| Pooling | stabilitĂ© | pool trop grand â DB saturĂ©e |
| Top SQL | perf | pages/reports âfull scanâ |
Isolation (multi-apps) â pattern PDB
CDB
- PDB_APP_HR (APEX workspace HR, ORDS pool HR)
- PDB_APP_FIN (workspace FIN, ORDS pool FIN)
- PDB_APP_OPS (workspace OPS, ORDS pool OPS)
=> isolation workloads + tuning indépendant
Tu gagnes en isolation âperf & sĂ©curitĂ©â : un portail lourd ne casse pas tout.
Le modĂšle âAPEXâ (ce quâil faut savoir par coeur)
Application
- Shared Components
- Authentication scheme
- Authorization schemes
- Navigation menu/breadcrumb
- Themes, templates
- LOVs (List of Values)
- Application items/processes
- Pages (1..N)
- Regions (report/form/chart/...)
- Items (fields)
- Buttons
- Dynamic Actions (client)
- Validations
- Processes (server: PL/SQL)
- Branches / Computations
ConsĂ©quence : âthin UI, strong DBâ
- Mettre la logique métier durable dans packages PL/SQL (services), pas dans 50 process différents.
- Utiliser des vues dĂ©diĂ©es aux reports plutĂŽt que surcharger les pages dâun SQL Ă©norme.
- Standardiser validations/erreurs via une API (messages + codes), appelée depuis processes.
APEX te donne la vitesse ; ton architecture te donne la maintenabilité.
Anatomie dâune âpage proâ (minimum viable production)
| Bloc | RĂŽle | RĂšgle |
|---|---|---|
| Header | identité + nav | menu cohérent, breadcrumbs |
| Region: Search | filtre/tri | facets/smart filters si data portal |
| Region: Report | liste/insights | pagination + colonnes utiles |
| Region: Details | form | validation + UX claire |
| Processes | write path | appeler package service, pas du code âbrutâ |
| Security | contrĂŽles | authorization scheme + SSP |
Lifecycle dâune requĂȘte (vue âdebuggableâ)
1) Browser GET / page request
2) ORDS -> DB -> APEX runtime
3) APEX resolve metadata -> render regions
4) User POST submit (items + changes)
5) Validations
6) Processes (PL/SQL)
7) Commit/rollback
8) Branch -> next page
Pour diagnostiquer une lenteur : isole ârender vs processâ + top SQL.
Patterns âqui tiennent la routeâ
Pattern 1 â CRUD + audit
Tables:
- T_ENTITY (PK, cols, created_at, created_by, updated_at, updated_by)
- T_AUDIT (entity, entity_id, action, actor, payload, ts)
APEX:
- List page (IR/IG)
- Form page (create/edit)
- Processes call pkg_entity.save(...)
- Authorization by role + row-level policy
Pattern 2 â Portal data (facets)
Views:
- V_PORTAL_SEARCH (denormalized read model)
APEX:
- Faceted Search region
- Report region bound to V_PORTAL_SEARCH
- âDetailsâ modal dialog page
- Export async si volumétrie
Perf:
- indexes sur colonnes filtrées
- pagination keyset si nécessaire
Matrice de choix (pragmatique)
| Besoin | Composant | Pourquoi | Attention |
|---|---|---|---|
| Table simple | Classic Report | simple/rapide | moins de self-service |
| Self-service user | Interactive Report (IR) | filtres, tri, saved reports | requĂȘtes lourdes si mal cadrĂ© |
| Ădition type Excel | Interactive Grid (IG) | editable, DML, model client | valider DML + locks |
| Data portal | Faceted Search | filtrage massif SQL-driven | index & read model |
| UX âcardsâ | Cards | catalogue / portail | pagination + images |
| Dashboards | Charts | KPI | cache + agrégats |
Reports (tuning-ready)
Bonnes pratiques :
- SQL âread modelâ (vues dĂ©diĂ©es)
- colonnes utiles, éviter select *
- pagination / fetch
- filtres indexés
- éviter les fonctions non sargables sur colonnes filtrées
- agrégats pré-calculés si besoin (MV)
Dans APEX, le report = ton SQL. Optimise SQL comme une API critique.
Forms & DML
Pattern âForm Pageâ
- region form (table / view)
- validations (client/server)
- process:
pkg_entity.validate(...)
pkg_entity.save(...)
- messages standardisés
- authorization scheme (role + row-level)
Anti-pattern (dangereux)
- DML direct dans 10 process
- validations différentes par page
- logique métier dans dynamic actions
=> incohérences, maintenance impossible
Search UX (facets / smart filters)
Best practice :
- construire une vue V_SEARCH (read model)
- index sur colonnes filtrées
- faceted search + report list
- page details en modal
- export asynchrone si > 100k rows
Ce que câest (vraiment)
IG = grille interactive avec un modĂšle client : lâutilisateur modifie des lignes/cellules, lâĂ©tat est maintenu cĂŽtĂ© navigateur, puis envoyĂ© au serveur lors du Save/Submit.
IG features (attendues) :
- fixed headers / frozen columns
- scroll pagination
- filters / sorts / aggregates
- computations
- editable cells (spreadsheet feel)
- toolbar actions (save, add row...)
Quand lâutiliser
- Ădition de rĂ©fĂ©rentiels / tables mĂ©tier (petites Ă moyennes volumĂ©tries).
- Back-office âopsâ : MAJ rapides, import/correctifs.
- Cas oĂč lâUX spreadsheet est un vrai besoin (sinon : form classique).
IG editable = puissance + complexitĂ© : pense âverrouillage, validation, concurrencyâ.
Write path (robuste)
Option A â Automatic DML (APEX)
- simple, rapide
- OK si rÚgles métier simples
Option B â Custom DML (recommandĂ© si domain)
- process IG -> appelle pkg_domain.apply_changes(...)
- gĂšre :
- validations domain
- erreurs standardisées
- audit
- concurrency (row version)
Pattern concurrency
T_ENTITY
- id PK
- row_version number
Update:
WHERE id = :id AND row_version = :row_version;
IF SQL%ROWCOUNT=0 THEN conflict;
row_version := row_version + 1;
Pattern audit
pkg_audit.log(
p_entity => 'T_ENTITY',
p_action => 'UPDATE',
p_actor => :APP_USER,
p_payload=> json_object(...)
);
Validation (3 niveaux)
| Niveau | OĂč | But | Exemples |
|---|---|---|---|
| UI | Items/DA | feedback immédiat | required, format, ranges |
| Server | Validations APEX | cohérence request | constraints, cross-field |
| Domain | Package PL/SQL | rÚgles métier | statuts, invariants, droits |
Le domaine (PL/SQL) doit ĂȘtre la source de vĂ©ritĂ© â lâUI ne doit jamais ĂȘtre âla loiâ.
PiĂšges (les vrais)
- Locks : Ă©dition concurrente sur mĂȘmes lignes â pense row_version / conflict.
- VolumĂ©trie : IG nâest pas fait pour afficher 500k lignes en âscroll infiniâ sans stratĂ©gie.
- DML implicite : si tu relies IG Ă une vue complexe, attention Ă updatability.
- Validation : erreurs doivent remonter proprement (messages user + corrId).
- Security : authorization scheme sur page/region + row-level policy en DB si sensible.
Pourquoi câest puissant
Faceted Search = UX âe-commerce / BI lightâ
- lâutilisateur filtre par facettes
- le calcul est SQL-driven (au plus prĂšs DB)
- idéal pour :
catalogues, portails data, référentiels, monitoring
Pattern âPortalâ recommandĂ©
1) Construire V_SEARCH (read model)
2) Index sur colonnes filtrées (status, type, date, owner...)
3) Facets region + Report region
4) Detail page en modal
5) Export async si volumétrie
Checklist performance (facets)
- Facettes = colonnes filtrĂ©es â index (sinon full scans).
- Limiter les champs âfonctionnelsâ dans WHERE (Ă©viter non-sargable).
- Préparer un read-model (vue dénormalisée) pour éviter joins multiples.
- Pagination (toujours) sur le report.
- Si compute counts coûteux : réduire la cardinalité, ou pré-aggréger (selon cas).
Facets = superbe UX⊠mais câest ton design SQL/index qui dĂ©cide si ça tient en prod.
Les âSecurity Attributesâ (application-wide)
RÚgle : la sécurité APEX = réglages app-wide + contrÎles granulaires par composants.
Authentication â stratĂ©gies
| Stratégie | Quand | Notes |
|---|---|---|
| SSO (enterprise) | SI interne | meilleure UX + contrĂŽle central |
| APEX Accounts | POC / petit portail | simple mais gouvernance Ă cadrer |
| Custom | intégration legacy | validation sécu obligatoire |
Golden rule :
- Auth = âqui es-tuâ
- AuthZ = âas-tu le droitâ
Ne pas confondre. Ne pas mettre la logique de droit dans Auth.
Authorization â RBAC + row-level
Authorization schemes (APEX)
Attacher des schemes Ă :
- pages
- regions
- buttons
- processes
- menu entries
Ex: ROLE_ADMIN, ROLE_MANAGER, ROLE_USER
Row-level security (DB)
Données sensibles = contrÎle en DB :
- vues filtrées par :APP_USER
- ou policy (selon approche)
APEX AuthZ ne doit pas ĂȘtre le seul rempart.
âDefense in depthâ : UI checks + DB row-level si nĂ©cessaire.
Session management â durcissement
| Réglage | But | Pratique |
|---|---|---|
| Idle timeout | rĂ©duire sessions ouvertes | adaptĂ© au risque (15â60 min) |
| Rejoin policy | éviter session hijack | désactiver si sensible |
| Cookies | sécurité transport | TLS + flags selon policy |
| Audit | traçabilité | log actions admin + exports |
Session State Protection (SSP) â le âmustâ APEX
Objectif :
- empĂȘcher la manipulation d'items via URL / client tampering
- protéger le session state
Mise en place (standard) :
1) activer SSP (application-level)
2) configurer page & item protection (wizard ou manuel)
3) tester : tampering -> rejet / erreurs attendues
Quelle protection oĂč ?
| Type dâitem | RisquĂ© ? | Action |
|---|---|---|
| PK / IDs | TrÚs | protéger + signer, valider serveur |
| RĂŽle / privilĂšge | Critique | ne jamais accepter du client |
| Filtres UI | Moyen | sanitizer + whitelists |
| ParamĂštres export | ĂlevĂ© | rate-limit + authz + audit |
Test SSP âsimpleâ
- prends une URL page?PXX_ID=123
- modifie en 999999
- résultat attendu :
- refus
- ou page non autorisée
- ou item ignoré selon config
Le test SSP doit faire partie des smoke tests avant PROD.
Browser security â âhardening webâ
Mesures typiques (selon policy entreprise) :
- headers (HSTS, X-Frame-Options, etc.)
- CSP (Content Security Policy) si possible
- protection XSS via réglages APEX + sanitation
- upload hardening (types, taille, scanning)
- rate limiting (reverse proxy)
Ne pas nĂ©gliger lâinfra : TLS, reverse proxy, rate-limit, logs.
Checklist sĂ©curitĂ© âprodâ
- Auth : SSO si possible, sinon comptes & politique mots de passe.
- AuthZ : schemes sur pages/regions/actions + audit admin.
- SSP : activé + items sensibles protégés + tests tampering.
- Session : timeouts + rejoin policy + TLS only.
- DB : least privilege schémas + packages domain, pas de droits inutiles.
- ORDS : TLS, pools, patching, logs, alerting.
- Ops : exports versionnés (traçabilité).
Top 15 perf rules (APEX âproductionâ)
- Index sur colonnes filtrées/triées (reports/facets).
- Pagination partout (pas de âfull tableâ UI).
- Read-models : vues dédiées pour reporting.
- Bind variables (parse stable).
- Limiter les régions lourdes (une page = un objectif).
- Ăviter N+1 : joins corrects, vues, agrĂ©gats.
- Fonctions non sargables : éviter sur colonnes WHERE.
- PrĂ©-agrĂ©ger quand nĂ©cessaire (MV / tables dâagrĂ©gats).
- Exports asynchrones si volumétrie.
- Cache (avec invalidation) sur KPI coûteux.
- ContrĂŽler le tri : trier sur index.
- Limiter colonnes : pas de select *.
- Diagnostics : top SQL + temps de rendu régions.
- ORDS pools : Ă©viter pool trop grand qui âtueâ la DB.
- DB health : IO/CPU/locks â APEX ne compense pas une DB mal tunĂ©e.
SQL patterns utiles
Keyset pagination (scalable)
SELECT *
FROM v_search
WHERE (created_at, id) < (:last_created_at, :last_id)
ORDER BY created_at DESC, id DESC
FETCH FIRST :page_size ROWS ONLY;
Read-model view (report-friendly)
CREATE OR REPLACE VIEW v_search AS
SELECT
e.id,
e.status,
e.type,
e.created_at,
u.display_name owner_name,
(SELECT COUNT(*) FROM t_child c WHERE c.e_id = e.id) child_cnt
FROM t_entity e
JOIN t_user u ON u.id = e.owner_id;
Pages âlightâ : rĂšgle dâor
- 1 page = 1 objectif
- 1 région lourde max
- reports lourds -> pages dédiées
- details -> modal dialog
- lazy loading / partial refresh quand possible
La meilleure optimisation APEX : des pages simples + SQL propre.
ORDS sizing (conceptuel)
Pool trop petit -> files d'attente, latence
Pool trop grand -> DB saturée (CPU/locks), instabilité
Approche :
- partir petit
- mesurer (latence/p95, 5xx, pool wait)
- ajuster selon workload
- séparer pools par app si besoin
KPI run (minimum)
App:
- p95 page render (pages clés)
- p95 report query time
- error rate (validation, 5xx)
DB:
- top SQL by elapsed time
- waits (IO/CPU/locks)
- parse/execute ratio
ORDS:
- pool utilization
- request rate
- 5xx spikes / timeouts
Install/Configure/Upgrade : discipline
Runbook ORDS :
1) installer (Java OK)
2) configurer connexion DB (wallet si cloud)
3) configurer pools & timeouts
4) activer APEX
5) activer REST si besoin
6) tester endpoints + pages
7) documenter config (infra-as-code si possible)
8) upgrade plan (fenĂȘtre + rollback)
Modes de déploiement (génériques)
| Mode | Quand | Notes |
|---|---|---|
| Standalone | simple / POC | rapide mais moins âenterpriseâ |
| Servlet container | enterprise | Tomcat/WebLogic selon standards |
| Reverse proxy | prod | TLS, headers, rate limit, logs |
REST contracts (anti lock-in / intégrations)
Approche recommandée :
- endpoints versionnés (/v1/...)
- DTO stables (JSON)
- erreurs standardisées (code + message + corrId)
- auth (SSO / tokens) selon policy
- rate limit + audit
REST via ORDS = excellent pour découpler UI APEX et services.
Hardening ORDS
- TLS obligatoire, certificats gérés proprement.
- Rate limiting au reverse proxy (protection brute force).
- Logs centralisés + corrId.
- Limiter endpoints exposĂ©s (pas dâAPI âouverteâ involontaire).
- Patching régulier (ORDS & JVM).
Structure DB âproductionâ
Tables:
- PK / FK / NOT NULL
- checks (status, ranges)
- uniques (business keys)
Index:
- colonnes WHERE / ORDER BY (reports/facets)
- FKs (souvent)
Audit:
- created_at/by, updated_at/by
APEX va vite si la DB est âbien conçueâ. Sinon, APEX ne compensera pas.
Service layer PL/SQL (clean)
pkg_domain_entity
- function can_access(p_user, p_id) return boolean;
- procedure validate(p_dto in out nocopy ...);
- procedure create(p_dto..., p_id out ...);
- procedure update(p_dto...);
- procedure delete(p_id...);
APEX pages:
- processes appellent pkg_domain_entity.*
- UI reste thin
Read-models (vues dédiées)
V_SEARCH :
- denormalized, report friendly
- contient champs filtre/tri
- évite joins multi-pages
Avantages :
- SQL plus simple cÎté APEX
- tuning plus facile
- stabilité & perf
Contrat dâerreurs (standardiser)
Error contract (suggestion) :
- code : VALIDATION | AUTH | CONFLICT | TECH
- user_message : message affichable
- tech_message : logs
- corr_id : id corrélation
APEX :
- afficher user_message
- logger tech_message + corr_id
Universal Theme (UT) : ce que tu y gagnes
- Responsive : mobile/desktop sans réinventer un framework.
- Templates propres : pages/regions/navigation cohérents.
- Theme styles + Theme Roller : personnalisation âcontrĂŽlĂ©eâ.
- Scalable : standardiser lâUX pour 50 apps internes.
Le secret : standardiser (templates + patterns) plutĂŽt que custom âpage par pageâ.
Design patterns APEX (pratiques)
Pattern UI:
- List -> Details (Modal)
- Search panel (Facets) -> Results (Report)
- Dashboard (KPI cards) -> Drilldown report
- Admin pages (only admins)
RĂšgles:
- composants réutilisables
- navigation stable
- pages simples
- naming conventions (Pxx_*)
DEV / TEST / PROD (non négociable)
- schémas séparés
- workspaces séparés
- ORDS config séparée
- secrets séparés
- données anonymisées en TEST
Sans sĂ©paration dâenvironnements, APEX devient âĂ©dition directe en prodâ.
Artifacts (ce que tu versions)
Repo Git :
/db
- migrations.sql (ou outils)
- packages/*.sql
- views/*.sql
- seed/*.sql
/apex
- app_export.sql
- static_files/ (images, css, js)
- env_config/ (substitutions)
/ops
- ords-config.md
- runbooks.md
Pipeline minimal (prod-like)
1) Build DB
- apply migrations
- compile packages
- smoke SQL checks
2) Import APEX app
- import app_export.sql
- set substitutions
3) Smoke tests
- login + 3 pages clés
- SSP tampering test
- 1 write path test
4) Deploy/Reload ORDS config (si besoin)
5) Monitor KPI post-release (p95, 5xx)
Rollback (trĂšs concret)
Rollback plan :
- APEX app export N-1
- DB rollback (si possible) ou restore snapshot
- ORDS config rollback
- validation smoke tests
Gouvernance (minimum âenterpriseâ)
- Workspaces par domaine/BU (ou par environnement) selon lâorganisation.
- RĂŽles dev : admin, builder, read-only.
- Standards : naming, templates, security defaults, logging.
- Audit : exports, actions admin, changements majeurs.
- Revue SQL : reports/facets = surface perf & sécu.
Standards âIDEO-Labâ (proposĂ©s)
Conventions : - Pages : Pxx_* (ex: P10_LIST, P20_FORM, P30_ADMIN) - Items : Pxx_FIELDNAME - Packages : pkg__ - Views : v_ _search / v_ _report Security defaults : - SSP ON - Authorization schemes mandatory - Admin pages isolated
Topo de déploiement (standard)
Internet/Intranet
-> WAF / Reverse Proxy (TLS, rate limit)
-> LB
-> ORDS nodes (stateless)
-> Oracle DB (APEX + data + packages)
La stabilitĂ© vient dâun ORDS stateless + une DB HA + un patching disciplinĂ©.
HA : ce quâon oublie souvent
- Tests de failover (DB) planifiés.
- CompatibilitĂ© ORDS/APEX/DB lors dâupgrade.
- Sessions : policies + timeouts (éviter effets de bords lors de failover).
- Capacity planning : pool ORDS vs sessions DB.
Patching cadence
Ordre (générique) :
1) environnements non-prod
2) ORDS upgrade (si requis) + tests
3) APEX upgrade (si requis) + tests
4) DB patches (selon politique)
5) prod avec rollback
Backups : âtestĂ©sâ sinon inutiles
- snapshots DB (selon infra)
- exports APEX versionnés
- exports ORDS config
- restore drills (trimestriels)
Plan 7 jours (dense, réaliste)
| Jour | Objectif | Livrable | CritĂšre |
|---|---|---|---|
| J1 | ModĂšle data | tables+contraintes+index | requĂȘtes de base rapides |
| J2 | Read-model | vues reporting + indexes | report p95 OK |
| J3 | APEX app | 6 pages (list/report/form/admin) | CRUD complet |
| J4 | Sécurité | auth + authZ + SSP | tampering rejeté |
| J5 | ORDS & infra | TLS + reverse proxy + pools | stabilité sous charge légÚre |
| J6 | ALM | exports + Git + import script | rebuild reproductible |
| J7 | Perf/KPI | top SQL + p95 pages + runbook | go/no-go prod |
Smoke tests (minimum)
- login
- ouvrir page list + report
- créer un record, modifier, supprimer
- test SSP : changer ID dans URL -> rejet
- vérifier p95 < cible (ex: < 800ms sur pages clés)
- check ORDS : pas de pool saturation
Ce qui est âvraimentâ liĂ©
- APEX runtime + metadata dans Oracle DB.
- ORDS (web tier) est le gateway standard.
- SQL/PLSQL comme langage de cĆur (avantage & dĂ©pendance).
On ne supprime pas le lock-in : on le rend âportableâ par couches & contrats.
Plan anti lock-in (pragmatique)
1) Domain services en packages PL/SQL (API stable)
2) Read models via vues (contrats)
3) Exposer REST versionné via ORDS (option)
4) UI APEX = couche de présentation (remplaçable)
5) Tests et doc des contrats (DTO + erreurs)
APEX âno-brainerâ
- Back-office CRUD (référentiels, ops, paramétrage).
- Portails data (facets + reports + details).
- Dashboards / KPI (charts + drilldown).
- Modernisation dâoutils legacy âforms/reportsâ.
- Apps internes multi-équipes avec standards UT + gouvernance.
Ă benchmarker
- Produit public avec UX ultra spĂ©cifique (possible, mais budget â).
- Stratégie multi-DB stricte / cloud-agnostic.
- Besoin microservices polyglottes trÚs imposé (APEX peut coexister via ORDS REST).
RĂšgle : si âdata-centric Oracleâ, APEX gagne souvent. Sinon, POC comparatif.
20 rĂšgles âprodâ
- Architecture : Browser â ORDS â DB (sĂ©parer mid-tier/DB tier).
- DB : contraintes + index (reports/facets).
- Read-models : vues dédiées pour reporting.
- Domain logic : packages PL/SQL (API stable).
- UI thin : pages simples, une page = un objectif.
- Pagination partout (no full scans UI).
- Bind variables + SQL propre.
- Exports lourds : async si volumétrie.
- Sécurité : auth + authZ partout (pages/regions/actions).
- SSP ON + items sensibles protégés + tests tampering.
- Session hardening : timeouts, rejoin policy.
- Browser security + TLS + reverse proxy.
- ORDS pools : sizing prudent + monitoring.
- Logs : corrId + centralisation.
- Envs : DEV/TEST/PROD séparés.
- ALM : exports versionnés + Git + pipeline.
- Rollback : N-1 app export + plan DB.
- Gouvernance : workspaces/roles + standards naming.
- Perf run : p95 pages + top SQL + 5xx rate.
- Backups : test restore sinon inutile.
Résumé (à coller dans IDEO-Lab)
Oracle APEX = RAD web pur, database-centric
- apps générées dynamiquement via metadata en DB
- ORDS = web tier stateless + REST
- forces : time-to-app, sécurité, perf (si SQL/index OK)
- limite : dépendance Oracle -> maßtriser via contracts & services
