La gestion du temps dans les flux SOA est généralement un besoin métier essentiel :
- Durée de vie d’un produit,
- Délai d’expiration d’un cache,
- Échéances de retour client.
Le temps en XML
Dans la SOA suite Oracle, les données sont traitées via le format XML et manipulées via XPath et XSLT.
XML propose différents formats définissant le temps : date, time et dateTime.
Ce dernier se définit selon le format « YYYY-MM-DDTHH:MM:SS+ZZ:ZZ », soit par exemple « 2018-01-01T00:00:00+01:00 » pour le premier Janvier 2018 à minuit, à Paris (en GMT+1).
Le « T » fait ici office de séparateur entre la date et le temps.
Il est également possible de préciser des types de durée sous la forme « PmmMddDThhHmmMssS ».
Ici, « P » et « T » font office de séparateur.
Les autres caractères majuscules définissent la plage temporelle concernée (« Y » pour l’année, etc…), les caractères minuscules définissent la quantité.
Hormis « P » et « T » qui sont obligatoires (le « T » ne l’étant que lors de l’ajout de petite durées), il n’est pas nécessaire de renseigner toutes les plages mises à disposition.
Ainsi :
- PT30M définira une demi-heure,
- P1M15D précisera 1 mois et 15 jours,
- P1D12H déterminera un jour et 12h.
Les principales fonctions XPath disponibles
Depuis la version XPath 2.0, il est possible de manipuler le temps facilement grâce à une série de fonctions disponibles en standard, habituellement précédées du préfix « xp20 » (naturellement pour « XPath 2.0 »).
Les fonctions permettant d’extraire le temps courant sont les suivantes :
- current-date() retournera un élément date XML à la date du jour de l’exécution,
- current-time() retournera un élément time XML à l’heure de l’exécution,
- current-dateTime() retournera quant à elle un élément dateTime XML à la date et l’heure de l’exécution.
Il existe également des fonctions de manipulation du temps qui permettent d’effectuer différentes opérations sur les éléments XML, par exemple :
- add-dayTimeDuration-to-dateTime(dateTime String, durée String)
- substract-dayTimeDuration-from-dateTime(dateTime String, durée String)
Dans la SOA Suite Oracle
Dans les BPEL de la SOA Suite Oracle, ces fonctions pourront être utilisées via des Assign.
Ici, 30 minutes seront ajoutées à la variable qui gère la durée de vie du cache :
Il est également possible d’utiliser ces fonctions pour conditionner l’exécution d’un Flux SOA.
Dans cet exemple, la durée d’expiration du cache sera initialisée en fonction de l’heure d’exécution du flux :
Pour plus de détails sur les fonction XPath et XSLT disponibles en standard, consulter la page de la W3C.