Semaine 12 Flashcards
Quel est le lien entre “Fault Handling” et “Compensation”?
Fautes, exceptions et pannes : une réalité du logiciel et du matériel
- Une application composite en a sa part
Dans certains cas, on pourrait se remettre d’une exception par exemple en réessayant les mêmes instructions qui ont rencontré une exception
- En se remettant “recovering” d’une exception, nous avons besoin généralement de rebrousser chemin et inverser des actions déjà faites en association à l’exception :
– C’est ce qu’on appelle une “compensation”
– BPEL offre des moyens de spécification et exécution des compensation
Donne des exemples de fautes.
Communication sur un réseau pas fiable
Reliées au processus
- Erreur de logique comme variable d’entrée à valeur inattendue
- BPEL runtime : ex. variable non initialisée
Reliés à la SOA comme les privilèges d’accès à un service, la conformité avec le contrat du WSDL et/ou le schéma XSD
D’exécution d’un service externe
Reliés au domaine d’application et/ou les règles fonctionnelles de l’entreprise
Donne des exemples de fautes standards de BPEL.
correlationViolation : fautes reliées aux messages non conformes aux spécifications
uninitializedPartnerRole : pour référence à un partner link qui n’a pas de rôle initialisé
uninitializedVariable : variable non initialisée
selectionFailure : pour une opération de sélection, comme bpel:getVariableProperty qui rencontre un problème
Que peut-on dire des données associées aux fautes?
Certaines sont sans messages (données) associés comme les fautes standards de BPEL
D’autres avec messages associés :
- Ex. les fautes de runtime => des messages de type RuntimeFaultMessage en triplet de chaînes de caractères (code, summary, detail)
- Une activité “catch” qui gère de telles fautes possède une faultVariable qui sera initialisée par les données de la faute quand ce catch est activé
Un “all-purpose” catchAll s’active si la faut n’est pas interceptée par aucun catch spécifique
- Certaines implémentations permettent de trouver le nom de la faute interceptée par le catchAll
Qu’est-ce que l’élément FaultHandler?
Associé à un scope de l’énoncé BPEL
Comprend une ou plusieurs activités “catch” qui gère des fautes du scope associé à l’élément FaultHandler
Qu’est-ce que le signalement de faute?
faultHandler prend en charge les fautes :
- Fautes générées par le BPEL runtime
- Explicitement générées en utilisant l’activité “throw”
– Une activité “throw” comprend un “faultName”
– Certaines activités “throw” comprennent des données reliés à la faute à travers un attribut optionnel “faultVariable”
<throw xmlns:fltns=”http://packtpub.com/bpel/faults”
faultName=”fltns:faultName” <”!–mandatory attribute–>
faultVariable=”variableName” <”!–optionnal attribute–> />
Qu’est-ce que la structure des faultHandlers?
<”faultHandlers>
<”catch … ><”!– First fault handler –>
<”!– Perform an activity –>
<”/catch>
<”catch … ><”!– Second fault handler –>
<”!– Perform an activity –>
<”/catch>
<”catchAll>
<”!– Perform an activity –>
<”/catchAll>
<”/faultHandlers>
Donne un exemple de catch pour un type de faute “selectionFailure”?
<”faultHandlers>
<”catch faultName=”bpws:selectionFailure”>
<”sequence>
<”empty name=”HandleSelectionFailure_gracefully”/>
<”terminate name=”Terminate_process_isNOTgraceful”/>
<”/sequence>
<”/catch>
<”/faultHandlers>
Que peut-on dire des scopes de faultHandlers?
Le faultHandler global :
- Défini pour l’ensemble du processus BPEL et est élément fils de “processus”
– Pour gérer les fautes qui se produisent dans les processus BPEL pour toutes les séquences, portées et activités
Le faultHandler local (inline) :
- Inclus dans une activité “scope” ou “invoque” pour traiter les fautes générées dans ces dernières
Qu’est-ce que les “catch” et “catchAll” d’un “faultHandler”?
Les activités “catch” et “catchAll” éléments fils de faultHandler qui peut être local ou global :
- Pour un faultHandler, si aucune activité “catch” ne correspond à une faute, alors => “catchAll” gère la faute
La correspondance (matching) entre faultName et faultVariable des “catch” d’une part, et leurs valeurs dans une faute (thrown fault activity) d’autre part :
- La base de sélection de l’activité “catch” qui gérera la faute
Quel est le mécanisme de sélection du “catch”?
Mécanisme de sélection du “catch” :
- Pour une faute qui n’a pas de données associées, pour une activité ayant un faultName :
1- L’élément qui est configuré avec la même valeur d’attribut faultName et qui ne spécifie par l’attribut faultVariable est sélectionné
2- S’il n’y a pas de tel “catch”, la faute est transmise à l’activité “catchAll”
- Sélection d’un “catch” lorsque la faute est associée à des données :
1- Spécifiant une valeur de faultName correspondant et un attribut faultVariable dont le type correspond au type des données de défaut sera sélectionné, si présent
2- Autrement, une activité sans faultName spécifié et avec un attribut de faultVariable correspondant sera sélectionné, si présent
Qu’est-ce que la performance?
Performance :
- Temps de réponse d’un service
- Scalabilité : capacité de l’architecture à monter en charge lors de pics de charge
– En terme de fréquence de messages
– Et/ou volume de données à gérer
Qu’est-ce que l’élasticité?
L’élasticité est la capacité de :
- Augmenter le volume de ressources disponibles d’une façon quasi instantanée lors des pics de charge
- Diminuer ces ressources quand elles ne sont pas utilisées
Objectifs principaux de l’élasticité : la scalabilité et l’optimisation des coûts
Qu’est-ce que la scalabilité?
Scalabilité via :
- Clonage d’un service
- Répartition des données entre plusieurs services
- Répartition des fonctions sur plusieurs services
Quels sont les 3 axes de la scalabilité d’une SOA?
Axe des X : Duplication “horizontale”
Montée en puissance via le clonage d’un service
Axe des Y : Duplication par les données
Montée en puissance via la partition des données (“sharding”)
Axe des Z : Décomposition “verticale”
Montée en puissance via le découplage d’une fonction (typologie des fonctions)