Optimiser l'utilisation de la mémoire de votre application ADF

Le but de cet article est de vous expliquer comment optimiser l’utilisation de la mémoire pour votre application ADF pour afficher des données de listes statiques, type liste de pays, de monnaies…

Le framework ADF fournit un objet l’Application Module Shared, en abrégé AM Shared, permettant de facilement partager en mémoire à travers tous les utilisateurs ce type de données.

Première partie : comportement de ces données au sein d’un AM classique

Nous prendrons pour exemple tout au long de cet article la liste des langues. il s’agit bien d’un objet de type statique, commun à tous les utilisateurs, qui évolue peu dans le temps.

Quand vous publiez un ViewObject au sein d’un Application Module traditionnel et lorsqu’un premier utilisateur accède à la liste des langues, ADF crée en mémoire une instance de l’Application Module ainsi que du ViewObject embarquant les valeurs pour la liste.

Si un 2ème utilisateur accède à un écran demandant cette liste de valeurs, ADF devra faire de même car rien ne lui a signifié qu’il pouvait réutiliser ces données.

Au bout du compte, on aura créé en mémoire pour accéder à cette liste pour 2 utilisateurs :

  • 2 instances d’Application Module
  • 2 connections à la base
  • 2 instances du ViewObject de la liste

Si l’on généralise pour n utilisateurs de l’application, on aura :

  • n instances d’Application Module
  • n connections à la base
  • n instances du ViewObject de la liste

Donc, plus le nombre d’utilisateurs augmentera et plus on augmentera le gaspillage de mémoire alors qu’il suffirait de la partager. Voyons comment procéder dans le chapitre suivant.

Deuxième partie : Publier les données de type statique au sein d’un AM shared

  1. Création de l’AM Shared

    La première étape consiste donc à créer l’objet permettant de partager les données entre tous les utilisateurs : un Application Module Shared.

    Menu New > Application Module.

    Donnez-lui un nom explicite évoquant son utilisation, souvent on utilise ApplicationModuleShared. Parcourez le wizard de création en laissant les options par défaut.

    Votre application module est créé.

    Si vous allez dans le menu Configurations, vous pourrez constater qu’ADF a créé 2 profils de configuration permettant de l’utiliser comme un AM local(par défaut) ou un AM shared. Supprimez la ligne correspondant au profil local. Il ne sera pas utilisé et évite ainsi toute confusion d’usage.

    AM-shared1

    Déclarez votre Application Module en tant que shared.

    Menu Project Properties > Business Components > Application Module Instances

    Choisissez le scope de votre AM shared : application , pour tous les objets partageant les données à travers tous les utilisateurs, ou session, pour tous les objets partagés au sein de la session utilisateur uniquement. Dans notre exemple (listes des langues), nous utiliserons le niveau application.

    am-shared2

    Basculez l’ApplicationModuleShared de Available Application Modules vers Application Modules Instances.

  2. Publication d’un ViewObject au sein du AM shared créé

    Sélectionnez l’Application Module Shared, menu Data Model, basculez la vue que vous voulez utiliser de Available View Objects vers Data Model.

    am_shared3

  3. Utilisation de ce ViewObject pour créer une modelDriven List peuplant la liste des langues disponibles

    Il faut d’abord ajouter cette vue comme View Accessor de la vue utilisant cette liste. Au sein du ViewObject devant utiliser cette liste, menu View Accessors. Positionnez-vous sur l’AM shared et basculez le ViewObject voulu de Available ViewObjects vers View Accessors

    am-shared4

    Au niveau de l’attribut devant afficher la liste les langues, section List of values, faire le matching entre l’attribut et la liste de valeurs proposée par l’Application Module Shared.

    am-shared5

 

Conclusion : comparatif performance AM shared / AM local

AM local AM shared
n instances d’Application Module 1 instance
n connections à la base 1 connection
n instances du ViewObject de la liste 1 instance du ViewObject de la liste

Le tableau ci-dessus montre de façon claire le gain substantiel (augmentant avec le nombre d’utilisateurs) de l’usage d’un AM shared afin de partager les données statiques.

 

Bibliographie :

How to improve ADF Business Components LOV performance using shared application modules

Oracle documentation : Sharing Application Module View Instances