- Architecture
développement
production
- Lexique


- Environnement de travail

- Flux directs / Flux indirects

- Jointures Inter bases de données

- Traçabilité

- Echange de Flux entre utilisateurs

expression

définition

basedir

Le répertoire dans lequel sont installés  les programmes cafeterra. Il est vivement conseille d'utiliser le répertoire suivant : /home/app/cafeterra

Contexte

Un contexte est la définition de l'environnement de travail dans cafeterra. Il y a au moins deux environnement de travail, qui correspondent aux différents type d'environnement de travail : Développement (ou Design) et Production.

L' environnement de développement correspond à un contexte implicite, il n'est pas nécessaire de le définir dans la base de donnée cafeterra.

Chaque environnement de travail correspond à un répertoire et une base de donnée Postgres.

par exemple le contexte de développement possède le répertoire de travail /home/app/cafeterra/cgi et une base de données, que l'on conseille d'appeler cafeterra.

Le contexte default installé par défaut correspond répertoire /home/app/cafeterra/cgi et une base de données, appelée cafeterraq.

Pour créer un contexte il faut :
 - d'abord utiliser la commande perl /home/app/cafeterra/install/Pg/install.pm,
- ensuite, il faut enregistrer la définition de ce contexte dans l'environnement de développement et dans sa base de données.

Utilisateur Cafeterra

Il s'agit des utilisateur autorisé à développer des flux (environnement de développement) ou les administrer (environnement de production).

Utilisateur

Identifiant utilisé par Cafeterra pour se connecter sur les systèmes externes

Serveur

Définition d'un serveur (Adresse IP ou non DNS etc ..)

Protocole

Pour être simple, disons qu’il s’agit des mécanisme qui permettent à cafeterra de se connecter à la base de donnée ou à l’application concerné.

Pilote (ou driver)

Le pilote décrit comment traduire les données échangées dans un langage compréhensible par l’application ou la base de données à laquelle Cafeterra est connecté.

Conteneur

Il s'agit de la définition précise de l'emplacement ou les données vont lues ou écrite. Par exemple une le nom Table Oracle, le nom d'un Fichier CSV, etc ...

La définition inclut les éléments suivant :
- Nom interne ( local)
- Nom externe nom de la Table ou  la vue oracle, Nom du fichier CSV, dans le cas d'un fichier EXCEL, ce sera le nom de la feuille de calcul
- Connecteur ( ou base de donnée dans laquelle se trouve ce conteneur)
- Direction de flux privilégié (Entrant, Sortant,  les deux)
- Doit on utiliser les espaces Rollback pour ce conteneur, Voir Espace Rollback
- plus un certain nombre d'information en fonction du protocol et du pilote utilisé

Flux

Définition d'un flux de données entre deux ou plusieurs applications

La définition inclut les éléments suivant :
- Nom interne ( local)
- Type du flux (simple, ou Web Service)
- Sous flux indirect = dans ce cas Cafeterra joue le rôle d'an tampon entre l'application source et l'application destinatrice, le flux, de ce fait, sera historisé. Autrement, les données seront transmises de la sources à la destination en temps réel.
- Dépendance entre les flux entrants (quand il y en a plusieurs)
- plus un certain nombre d'information en fonction du protocole et du pilote utilisé

Outre ceci, on peut définir pour un flux un certain nombre de traitement à effectuer, au début ou à la fin de son execution, ou en cas d'erreur.

On peut aussi, adjoindre au flux d'autres objets (Scripts, Connecteurs, Conteneurs, accessibles aux scripts cafeterra d'une manière simple)

Remarques :

- Le fonctionnement normal de Cafeterra est de délivrer les message entrant dès leur arrivée. Dans le cas où, les applications destinatrices ne sont pas disponibles, et si le flux est flow, Alors cafeterra enregistre les messages non délivrés, et réessayera de les délivrer plus tard.

- Cafeterra peut garder dans son historique 7 jours d'activité au maximum. Si vous avez décidé d'archiver vos message, ce peut être indéfini.

- En général, on utilise des flux entrant dépendant quand on veux faire des jointures entre plusieurs Connecteurs différents, mêmes ceux qui ne supportent pas les jointures. Par exemple, on peut faire une jointure entre une table Oracle, un fichier XML, et un fichier EXCEL !!

Demi-Flux Entrant

Description de l'application ou de la base de données emmetrice d'information. Il s'agit d'une définition dynamique du flux.

 Pour chaque demi flux entrant on associe un conteneur.

La méthode de récupération des donnes, défini s'il s'agit d'un flux de message au fil de l'eau, ou si à chaque une les messages remplacent les messages précédent. Ceci est utile dans le cas des flux historisés.

Un sous flux est associé à un ensemble de traitement dont un seul est obligatoire : C'est la requête SQL qui permettra de récupérer les données sources(getmsg). On peut éventuellement définir une action qui permettra d'envoyer un accusé réception du message.

D'autre scripts seront execute avant après lectire de chaque message etc ...

Le mapping permet de transformer des champs récupéré dans le message. ou initialiser des champs avec des valeurs fixes.

Demi-Flux Sortant

Description de l'application ou de la base de données destinatrice d'information. Il s'agit d'une définition dynamique du flux.

Pour chaque demi flux sortant  on associe un conteneur.

Le message peux déclencher soit l'ajout d'information dans l'application destinatrice, soit la modification de d'information ou la suppression préexistante (getmsg). On peux définir deux action query. Si la première échoue, la seconde requete SQL sera executé.

D'autre scripts seront execute avant après lectire de chaque message etc ...

Le mapping permet dans l'ordre :
1 - Affecter un champs en entrée à un champs en sortie,
2 - Affecter une constante ou le contenue d'une variable au champs en sortie,
3 - Affecter le résultat d'un script au champs en sortie.

Le scripts de transformation global permet d'effectuer d'autres transformation

Requete SQL

SQL a été adopté pour accéder à toute forme de données y compris le CSV, XML, HTML etc ...

Les différents type de requete sont :
1 - Select
2 - Insert
3 - Update
4 - Delete
5 - truncate
6 - Drop
7 - Create

Il est nécessaire bien renseigner le champs utilisé pour (usedfor) pour que cafeterra puisse décider quel requete utiliser quand.

On peut écrire une requête manuellement. Mais il est conseillé d'utiliser l'assistant cafeterra pour la création d'une requête. Une syntaxe particulière doit être utilisé.

ainsi 
- tout identifiant commença par @c_, @i_ ou @o_ est considéré comme un alias du champs en question. Ceci est valable même pour les bases de données qui ne supportent pas l'aliasing dans les requêtes.
- tout identifiant commençant par :c_, :i_, :o_ , :s_ , :f_, :g_  ou :t_ sera remplacé (avant exécution de la requête) par le contenue de la variable Cafeterra de même nom. Il correspondent aux fameux bind variables
- tout identifiant commençant par $c_, $i_, $o_ , $s_ , $f_, $g_  ou $t_ sera remplacé par le contenue de la variable Cafeterra correspondante avant soumission de la requête au pilote adéquat (avant le parsing). Ceci peut être utile quand on ne connaît pas le nom de la table au moment du développement de la requête.

Script Perl

Comme vous l'avez vu, vous pouver définir des traitement tout au long de l'execution d'un Flux. Ces script sont écrit en Perl. Ces script reçoivent un paramètre, par convention on l'appelle $self. Il permet d'accéder au fonction cafeterra et au variables des Flux.

Peu de contrainte sont imposé aux scripts perl :
- Les scripts de transformation de champ doivent renvoyer une valeur qui ser affecté au champ en question.
- Le script de gestion d'erreur reçoit le texte de l'erreur en paramètre supplémentaire et doit renvoyer une des valeur chaîne suivante :
     - "HALTE" - Arrêter le flux global, il ne sera plus exécuté,
                jusqu'à l'intervention de l'administrateur
     - "STOP"   - Arrêter le demi-flux qui a provoqué l'erreur, il ne
                sera plus exécuté, jusqu'à l'intervention de
                l'administrateur. Le flux global continue lui
                à être executé. Ce retour n'est pas autorisé, dans le
                         gestionnaire d'erreur associé au flux global
     - "SKIP"    - Ignorer l'erreur, si un message est en cours de
                    traitement, il sera abandonné, même dans le cas
                    d'un flux historisé.
     - "RETRYLATER" - Ignore l'erreur, Si un message en en
                    cours de traitement,il sera marqué comme non
                    traité, et le sera dès que possible, à condition
                   que le flux global soit historisé (Flux indirect)

Consulter dans le ficher functionlist.txt, la liste des fonction disponible au traver de l'objet .

L'object $self  vous permet d'accéder à vos variable et les champs de vos conteneurs avec la syntaxe suivante :
     - $self->X_nomvar pour lire le contenue de la variable
     - $self->X_nomvar(VALEUR) pour affecter une valeur à
               votre variable, utiliser undef pour effacer la variable

X est un caractère parmi les suivants :
     - c pour champs de conteneur
     - i pour champs de conteneur dans le flux entrant
     - o pour champs de conteneur dans le flux sortant
     - s pour une variable accessible uniquement au demi flux
             en cours d'exécution
     - f pour une variable accessible uniquement au flux global
             et à l'ensemble des  demi-flux du flux en cours
             d'exécution
     - g pour une variable global accessible à tous les flux 
     - t -- voir f

Remarque : les variable s, f et g sans sauvegardé, et sont restauré d'une execution à l'autre. les autres on une duré de vie limité à la duré de vie du programme (pour le t) et la durée de vie du message (por les c, i et o).

Variable Cafeterra

Voir ci-dessus

Il n'est pas nécessaire de déclarer des variables dans Cafeterra, le fait d'y affecter une valeur, provoque sa déclaration et son initialisation.

Néanmoins, ils est possible pré déclarer des variable dans la définition d'un flux GLOBAL.

Variable d'environnement

A l'execution d'un flux, il est possible d'initialiser des variable d'environnement système.

Evenement

Il s'agit d'un mécanisme qui permet de synchroniser l'execution des flux. Ainsi on peut subordonner l'exdecution d'un flux A à l'execution d'un Flux B et d'un Flux B.

Aliasing des connecteurs

Si vous travaillez correctement, vous devez avoir au moins 3 environnement :
- Un environnement de développement
- Un environnement de test
- Un environnement de production

Vos flux, avant d'être mis en production, va être testé dans l'environnement TEST. Ce qui veux dire que votre flux doit s'exécuter correctement dans deux environnements différents ce qui signifie :
- Des serveurs différents,
- Des login différents,
- ou des bases données différentes

Pour vous éviter de créer deux flux identique qui vont s'exécuter dans deux environnement différents, Cafeterra vous donne la possibilité de créer des Alias pour vos connecteur.

Ainsi, quand vous déployer un connecteur dans un environnement particulier, Cafeterra cherchera d'abord, sir pour ce contexte, vous aver défini alias pour ce connecteur, si c'est le cas, c'est ce dernier qui va être déployé.

Traçabilité

L'historisation des messages dans Cafeterra joue deux Rôles :
1 - D'abord elle sert de tampon entre les messages entrants et les messages sortant,
2 - Ensuite elle offre pour les entreprises qui le souhaitent, une traçabilité de leurs flux.

Espace Rollback

La plupart des flux provoquent une le remplacement  d'informations existantes. Dans certains cas ce peut être préjudiciable. Parce que ce type de problème est incontournable, Cafeterra offre la possibilité un mécanisme qui permettra d'annuler les effet d'un flux.

Pour ce faire, Cafeterra récupérera le contenu d'une table dans Cafeterra, avant de délivrer les messages entrant.

Ce mécanisme, renforce la traçabilité offerte par le mécanisme d'historisation des flux, et vous permet de vous prémunir contre les erreurs inévitables dans un environnement informatique  complexe et presque imprévisible.

Archivage

Pour garder une file des messages la plus légère possible pour des raison de performance, Cafeterra supprimes toutes les information qui ont plus de 7 jours. Si vous le souhaitez, il possible d'indiquer à Cafeterra dans quelle base de données, ces informations seront archivées avant d'être supprimées.

Planification

Cafeterra possède son propre planificateur de tache. Il est inspiré du Cron Unix. La granularité des exécution est de l'ordre de la minute.
Un flux pour posséder plusieurs planifications.