„La plate-forme EAI “ Initiation à Crossworlds 08/10/2019 „La plate-forme EAI “ Initiation à Crossworlds « La boite à outils » 8
Sommaire Objectif Configurer un connecteur Configurer un Meta object 08/10/2019 Sommaire Objectif Configurer un connecteur Configurer un Meta object Configurer un Business object Configurer une Map Configurer une Collaboration template Configurer une Collaboration object Configurer un trigger Ce document est un support de cours; il n ’est donc pas utilisable seul 08/10/2019
L ’objectif Présenter des exemples de mise en œuvre des différents composants de la plate-forme EAI 08/10/2019
Configurer un connecteur Propriétés générales identiques pour tout type de connecteur Propriétés spécifiques spécifiques de chaque type de connecteur 08/10/2019
Attention ... WBI s ’exécute en Java: les noms sont sensibles à la casse 08/10/2019
Un connecteur, en général En règle générale: configurer 1 connecteur par application Synchrone/Asynchrone: la plupart des types de connecteurs sont synchrones le connecteur HTTP est asynchrone 08/10/2019
Configurer un connecteur, propriétés générales Remarquer: Méthode de mise à jour Tous les attributs existants sont présentés Tous les attributs sont valorisés par défaut, certaines de ces valeurs n'ayant pas besoin d'être modifiées d'ordinaire Tous les attributs ne sont pas toujours nécessaires, suivant les choix faits (Queues, …) Les attributs peuvent être triés, supprimés, ajoutés 08/10/2019
Configurer un connecteur, propriétés générales Attributs déterminants: Delivery transport: IDL (en Dev), MQS (en Prod), JMS (peu d ’indications) Attributs à renseigner: ApplicationName: le nom de l ’instance Locale: la langue Attributs à modifier au besoin: AgentTraceLevel: niveau de trace (1-5) 08/10/2019
Configurer un connecteur, propriétés générales ControlerTraceLevel: niveau de trace (1-5) PollFrequency: 10 sec. par défaut, en milli secondes = key pour déclencher avec p 08/10/2019
Configurer un connecteur, propriétés spécifiques Pour tout type: Deux champs supplémentaires apparaissent: Chiffrer, Description Si une valeur avait été cryptée, la demande de décryptage exigerait la re-saisie de cette valeur pour être affichée en clair Le champ Propriétés peut être trié, en cliquant dessus Dans ce domaine, il est possible d'ajouter ou de supprimer un attribut 08/10/2019
Configurer un connecteur, propriétés spécifiques Connecteur MQSeries Remarquer: Chiffrer 08/10/2019
Configurer un connecteur, propriétés spécifiques, MQ Attributs à renseigner: ApplicationPassword: le pwd de ApplicationUserName ApplicationUserName: le user MQSeries ArchiveQueue: une Queue Channel: communication Connecteur-MQ mgr ConfigurationMetaObject: le nom du MO DataHandlerClassName: nom du DH 08/10/2019
Configurer un connecteur, propriétés spécifiques, MQ DataHandlerConfigMO: nom du MO pour le DH DataHandlerMIMEType: pour choisir un Mime HostName: nom du host portant le Q mgr Port: d ’ordinaire le 1414 d ’autres Queues 08/10/2019
Configurer un connecteur, propriétés spécifiques, MQ Composants complémentaires: un Meta-object, pour le Data Handler des Queues applicatives 08/10/2019
Des exercices Configurer un connecteur MQSeries nommé TSMqsConnector Des questions? 08/10/2019
Configurer un connecteur, propriétés spécifiques Connecteur Jtext Peu de Propriétés spécifiques pour ce type de connecteur 08/10/2019
Configurer un connecteur, propriétés spécifiques Jtext Les attributs sont simples et peu nombreux (à l ’inverse, voir MQS) remarque: en sortie, le connecteur Jtext fait uniquement des Create 08/10/2019
Configurer un connecteur, propriétés spécifiques Jtext Composants complémentaires: un Meta-object, pour le Data Handler des répertoires où recevoir/envoyer les fichiers Pour un fichier MVS ou AS400, deux solutions sont envisageables: le fichier est au préalable transmis vers/de un répertoire Unix ou Windows le site MVS, AS400 est décrit au connecteur Jtext comme un site distant; le connecteur initialisera une connexion et une requête FTP vers le serveur FTP MVS pour charger/envoyer le fichier attendu 08/10/2019
Configurer un connecteur, propriétés spécifiques Connecteur JDBC DB2 Oracle SQL Server Remarquer: le fenêtre de Log qui confirme, par exemple, la sauvegarde du composant 08/10/2019
Configurer un connecteur, propriétés spécifiques JDBC Attributs à renseigner: DatabaseURL: jdbc:db2:nom_de_la_base EventTableName: nom de la table Event JDBCDriverClass: COM.ibm.db2.jdbc.app.DB2Driver RDBMSVendor: DB2 UniqueIDTableName: table de l ’identifiant unique table Archive: au besoin 08/10/2019
Configurer un connecteur, propriétés spécifiques JDBC Composants complémentaires: en entrée: un trigger des tables: Event, Uid, Archive veiller à purger les tables (Archive, …) 08/10/2019
Configurer un connecteur, Objets métier supportés Remarquer: la colonne Support d ’agent 08/10/2019
Configurer un connecteur, Objets métier supportés La case Support d'agent doit être cochée pour un ASBO (provoque l ’envoi de la description du BO du Controler à l ’Agent) Les BO utiles au connecteur doivent avoir été créés au préalable dans le projet pour apparaître dans le menu déroulant Pour certains types de connecteurs, une autre catégorie de BO apparaîtra aussi ici, les Meta objects 08/10/2019
Configurer un connecteur, Mappes associées Remarquer: la colonne Liaison explicite 08/10/2019
Configurer un connecteur, Mappes associées S'il existe une seule Map référençant le BO, elle apparaîtra automatiquement dans le champ Mappes associées en face du BO concerné S'il existe plusieurs Maps dans lesquelles le BO est décrit, pour sélectionner une Map, cocher la case Liaison explicite Sélectionner la Map concernée dans le menu déroulant 08/10/2019
Configurer un connecteur, Mappes associées Une Map pour un GBO? Si le flux passe dans un seul sens dans ce connecteur, le GBO n'a pas besoin de Map Par contre, si le flux "revenait" en sens inverse du premier passage dans ce connecteur, une Map devrait aussi être décrite pour le GBO (pour une opération de Retrieve) 08/10/2019
Configurer un connecteur, Fichiers Trace/Journal Archives tournantes 08/10/2019
Configurer un connecteur, Fichiers Trace/Journal Pour spécifier les caractéristiques des fichiers: Journal: il existe toujours (défaut: à la console) Trace: si Tracing > 0 08/10/2019
Configurer un connecteur, le résultat Le fichier de configuration dans le répertoire Connectors Pas de mise à jour en direct 08/10/2019
Configurer un connecteur Pour la/les Queues API: penser à les purger, sinon blocage 08/10/2019
Configurer un Meta object Pour une instance de connecteur: MQSeries Jtext pas pour Jdbc 08/10/2019
Configurer un MO MQS Chaque attribut représente une combinaison BO_verbe avec un séparateur, l ’ underscore; par exemple: Customer_Update 08/10/2019
Configurer un MO MQS Dans le champ ApplSpecInfo de chaque attribut sont placés les propriétés qui s'appliquent à cet attribut spécifiquement; par exemple: InputFormat=LC_UP;OutputFormat=LC_UP 08/10/2019
Configurer un MO MQS Recommandation: créer un attribut Default qui permette de spécifier des propriétés s'appliquant à tous les cas de figure, s'ajoutant aux propriétés spécifiées dans les autres attributs Il est également possible de créer un MO simple en spécifiant un seul attribut Default et en y spécifiant toutes les propriétés nécessaires; elles s'appliqueront à toutes les combinaisons BO_verbe 08/10/2019
Des exercices Configurer un MO MQSeries nommé MO_TSExo1 Des questions? 08/10/2019
Configurer un MO Jtext Un connecteur Jtext a besoin d'un MO qui soit constitué de: un MO Parent au moins un MO fils Le MO Parent décrit: Le type de DH à utiliser Les répertoires 08/10/2019
Configurer un MO Jtext Le nom d'un MO Parent: champ1_champ2_champ3 avec ces spécifications: Champ1: = MO, pour indiquer qu'il s'agit d'un MO Champ2: = ConnectorName, pour savoir par quel connecteur ce MO est utilisé Champ3: = BOName, pour savoir à quel BO il correspond ce champ peut lui-même être constitué de strings liés par un underscore: facture_customer 08/10/2019
Configurer un MO Jtext Le champ3 peut être laissé à la valeur Default, ce qui aura pour effet de: faire utiliser ce MO générique par le connecteur correspondant pour tous les MO qui ne seraient pas spécifiés dans un MO particulier prendre/envoyer les fichiers dans les mêmes répertoires L'utilisation du seul MO_ connectorName_Default, sans créer d'autres MO, peut suffire à condition que les formats et les répertoires soient identiques 08/10/2019
Configurer un MO Jtext Le MO Fils décrit les informations de configuration pour le DH 08/10/2019
Configurer un MO Jtext En entrée, deux éléments différencient les fichiers: Le répertoire L'extension Ces deux valeurs sont spécifiables dans le MO Naturellement, si des fichiers différents doivent être traités, ils ne doivent pas porter les deux mêmes caractéristiques 08/10/2019
Configurer un MO Jtext En sortie, le nom du fichier être: Spécifié explicitement dans l'attribut OutputFileName Laissé au mécanisme de création du connecteur: OutputFileName=Native 08/10/2019
Configurer un MO MQS Un connecteur Jtext a besoin d'un MO qui: soit une liste de conversion pour chaque type d ’événement en spécifiant un attribut pour chacun: Customer_Create, Item_update, … est unique: un Connecteur supporte un seul MO indique l ’origine/la destination (Queues) 08/10/2019
Et pour les autres? Pour les types de connecteurs qui n ’utilisent pas de MO: les AppSpecInfo 08/10/2019
Configurer un Business object Un BO peut être: Plat: composé de plusieurs attributs, tous de cardinalité simple Hiérarchique: composé de plusieurs attributs dont un/plusieurs est complexe, contenant chacun un BO fils 08/10/2019
Configurer un BO Dans un BO: Des AppSpecInfo Les verbes supportés par l'objet, indiquant les opérations qui sont possibles sur les données transportées Des attributs, eux-mêmes porteurs de propriétés 08/10/2019
Configurer un BO Des AppSpecInfo peuvent être spécifiées à différents niveaux: L'objet: le nom d'une table DB2 Un attribut: le nom d'une colonne dans la table DB2 Un verbe: un ordre Select pour un verbe Retrieve 08/10/2019
Configurer un BO Chaque attribut dans un BO: doit avoir un nom unique peut comporter une valeur par défaut ... 08/10/2019
Configurer un BO Jdbc Le nom de la table spécifié avec le paramètre TN dans AppSpecInfo de l'objet Le nom de la colonne spécifié avec le paramètre CN dans AppSpecInfo de l'attribut 08/10/2019
Configurer un BO Jdbc Un BO avec une Foreign key et un « fils »: Un BO de mainframe montré ici pour les différents AppSpecInfo présents dans les attributs: 08/10/2019
Configurer un BO Jtext XML Un BO Jext XML: reproduit la hiérachie présente dans le message XML correspondant est constitué de: un BO Top level un BO Root des BO « enfants » 08/10/2019
Configurer un BO Jtext XML Le nom du BO Top level: Boprefix + nom de l ’élément XML AppSpecInfo des attributs: nom de chaque élément XML … Utiliser l ’ODA (des limitations) 08/10/2019
La Map, en général La Map est appelée par le Controler Une Map est toujours uni-directionnelle Le Mapping se faite en séquence, ligne après ligne 08/10/2019
Configurer une Map Une Map simple: 2 attributs seulement + le verbe mapping 1 pour 1 des règles Déplacer uniquement Remarquer: les flèches marquant les correspondances 08/10/2019
Configurer une Map Dans une Map, tous les attributs ne sont pas toujours mappés: ObjEventId: jamais Remarquer: la colonne Règles 08/10/2019
Map, le contexte A spécifier en test: Event processing Service call request Service call response Event response 08/10/2019
Les Relationships Au delà d’une Map Entre « Participants »: les applications concernées Pour établir une correspondance entre: des valeurs, pour un attribut: Lookup relationship des clés, pour des BO: Identity relationship 08/10/2019
Une Lookup relationship Pour établir la correspondance entre des valeurs d’attributs équivalentes mais de représentations différentes (aaa->123) Agit sur un attribut Ne référence pas l’attribut concerné (réutilisation) La correspondance peut être 1à1, 1àN, NàN 08/10/2019
Une Identity relationship Pour établir la correspondance entre deux Participants par leurs clés Agit sur un BO La correspondance peut être 1à1 08/10/2019
Les Relationships, … Sont: Créées/modifiées avec le Relationship manager stockées sur le Référentiel = des tables DB2 Remarque: il n ’est pas conseillé d ’en faire la création/maintenance par l ’« extérieur » (Business Objects, …) 08/10/2019
Les Relationships, ... Appelé par la Map Identity ou Lookup: avec la Rule CrossReference Identity ou Lookup: mise en œuvre identique le déterminant: l ’attribut est/n ’est pas une clé 08/10/2019
Des exercices Configurer une Map nommée TS_Exo1_toExo1 pour transformer l ’ ASBO JDBC nommé TS_Exo1 en GBO JDBC nommé Exo1 Des questions? 08/10/2019
Configurer une Collaboration template Cette collaboration: Reçoit: un BO, en haut Réalise: une lecture Fournit: rien 1 scénario 08/10/2019
Configurer une template Cette collaboration: Reçoit: un BO Réalise: une création Fournit: rien Encore plus simple 08/10/2019
Configurer une template Cette collaboration est nommée CollaborationFoundation: Elle est livrée en standard avec Crossworlds Plusieurs scénarios 08/10/2019
Configurer une template Elle est destinée à servir de base pour des développements de fonctions de: Synchronisation: "transporter" un événement d'une application émettrice à une application réceptrice sans demander/attendre de retour Accès à des données: interrogation d'une application avec retour des données recherchées 08/10/2019
Configurer une template Cette collaboration propose: la logique, le contrôle des données, la gestion des erreurs nécessaires 5 diagrammes vides, destinés à être utilisés pour des développements spécifiques elle supporte des verbes Create, Retrieve, Update, Delete 08/10/2019
Configurer une Collaboration object Une Collaboration se connecte à: Un/plusieurs connecteurs Une autre collaboration Sur cette capture d'écran, l'"entrée" est à droite et la "sortie" à gauche: en effet, il n'est pas possible de demander à Crossworlds d'"orienter" ses représentations graphiques des Collaborations Sur cette capture d'écran, l'affichage des Maps a été demandé; remarquer que la "sortie" a 2 Maps 08/10/2019
Configurer une Collab Une Collab simple, « à tout faire » 08/10/2019
Une Collab ... Active? Des paramètres? Retour? Une Collab doit être démarrée Des paramètres? Dans les Propriétés Retour? Il y a toujours un retour (résultat de Retrieve, code de retour, …) ==> il faut une Map de retour 08/10/2019
Une Collab ... Au démarrage une Collab signale à l ’Agent qu ’il peut envoyer des données quand il en aura A défaut, l ’événement ira en Archive et devra être ensuite recyclé 08/10/2019
Configurer un trigger L ’architecture: Le comportement: L'exécution du Trigger fait partie de l'unité d'œuvre de la transaction applicative Le comportement: Une fois "armé", un Trigger reste opérationnel tant que l'ordre inverse ne lui est pas adressé Le connecteur se contente de surveiller la Event table (alimentée par le Trigger) 08/10/2019
Code complet disponible par ailleurs Configurer un trigger Un exemple de code d ’un trigger: connect to CWREPOS CREATE TRIGGER trig1 AFTER INSERT ON tmaquette3 FOR EACH ROW MODE DB2SQL BEGIN ATOMIC DECLARE connector_id_p VARCHAR(40) ; DECLARE object_key_p VARCHAR(80) ; DECLARE object_name_p VARCHAR(40) ; DECLARE object_verb_p VARCHAR(40) ; DECLARE event_priority_p DECIMAL(5) ; DECLARE v_SimilarCounts DECIMAL ; DECLARE tmp_object_verb VARCHAR(30) ; SET connector_id_p = 'null' ; SELECT object_key_p = champ1 FROM INSERTED ; SET object_name_p = 'maquette3_ASBO_IN' ; SET object_verb_p = 'Create' ; SET event-priority_p = '1' ; SET v_SimilarCounts = SELECT count(*) ; SET tmp_object_verb = object_verb_p ; BEGIN INSERT INTO xworlds_events ( connector_id, object_key, object_name, object_verb, event_priority, event_status) VALUES (connector_id_p, object_key_p, object_name_p, tmp_object_verb, event_priority_p, 0); END Code complet disponible par ailleurs 08/10/2019
Des exercices Des questions? 08/10/2019
Fin du module Vos remarques et commentaires peuvent être notés sur la page concernée ou sur cette page avant de les transmettre à votre interlocuteur Ils aideront à améliorer cette initiation 08/10/2019