> Tech > Files d’attente de données : Une liaison rapide entre PC et iSeries

Files d’attente de données : Une liaison rapide entre PC et iSeries

Tech - Par iTPro.fr - Publié le 24 juin 2010
email

par Michael Sansoterra - Mis en ligne le 10/03/2004

Faire communiquer les programmes d'un PC et ceux d'un iSeries

Les files d'attente sont un outil de messagerie important pour les programmeurs iSeries. On peut les utiliser pour assurer la communication entre des jobs différents sur un iSeries, ou même entre des programmes d'un PC et d'un iSeries...Comme les files d'attente de données sollicitent beaucoup moins le système que les tables de base de données, il existe un moyen efficace d'intégrer ou d'échanger des données entre des programmes PC et des applications iSeries héritées. Par ailleurs, comme les files d'attente de données sont propriétaires et ne sont pas accessibles par une foule d'outils d'utilisateurs finaux (contrairement aux tables de base de données), elles posent généralement moins de problèmes de sécurité.
L'exemple ci-après montre comment utiliser des files d'attente pour communiquer entre l'iSeries et une application PC. (Pour une rapide première initiation avant de démarrer, voir l'encadré « Petit rappel sur les files d'attente de données et OLE DB ».) Le code téléchargeable de mon exemple est disponible à  www.itpro.fr Club Abonnés.

Files d’attente de données : Une liaison rapide entre PC et iSeries

Côté serveur de notre exemple, nous
utilisons simplement RPG et des files
d’attente de données. Côté PC, nous
utiliserons

  • •Microsoft Windows
  • un environnement VBA (Visual Basic
    for Applications), comme Visual
    Basic ou Microsoft Access

  • ADO (ActiveX Data Objects)
  • le provider OLE DB Client Access
    Express (IBMDA400)
  • Notre application exemple utilise
    des files d’attente de données pour
    mettre à  niveau la partie autorisation
    de carte de crédit d’un système de détail
    iSeries hérité. Quand un client fait
    un achat, le programme POS (Point of
    Sale) envoie toutes les requêtes pour
    le paiement par carte de crédit, par l’intermédiaire
    d’une file d’attente de
    données, à  un programme batch serveur
    de cartes de crédit. Quand le programme
    serveur reçoit la requête, il appelle
    par modem (si nécessaire) la
    société de traitement des cartes de crédit,
    laquelle communique avec la
    banque émettrice de la carte pour s’assurer
    qu’il y a suffisamment d’argent
    pour effectuer la transaction. Quand
    une réponse est reçue, le programme
    serveur renvoie la réponse de la
    banque au POS via une file d’attente de
    données.
    Malheureusement, le système
    d’appel est lent et vulnérable aux erreurs.
    C’est pourquoi nous avons
    choisi un package PC économique
    pour traiter les cartes de crédit via
    Internet. Ce package est accompagnéd’une API qui facilite à  l’extrême l’intégration
    du logiciel personnalisé.
    Comme toujours, la direction espère
    que l’ancien programme serveur d’autorisation
    dial-up RPG sera facilement
    remplacé par un programme PC remplissant
    les quatre mêmes fonctions :

    1. Attendre une demande d’autorisation
    2. Contacter la société de traitement
      des cartes de crédit

    3. Recevoir la réponse
    4. Transmettre la réponse au programme
      POS

    Par souci de simplicité, nous n’utilisons
    que deux files d’attente de données
    sans clé : une pour faire une requête
    d’autorisation (CARDREQ) et
    une pour recevoir la réponse de la
    banque (CARDRSP). Chaque file a une longueur d’enregistrement maximale
    de 512 octets. Le nouveau programme
    PC va :

    • se mettre à  l’écoute d’une file d’attente
      de données pour détecter les
      requêtes de carte de crédit provenant
      de l’application POS héritée

    • transmettre les données de transaction
      par carte de crédit au package
      PC (c’est-à -dire, « la société de traitement
      des cartes de crédit ») via des
      API

    • recevoir la réponse de la banque via
      des API

    • envoyer la réponse au terminal POS
      iSeries via une file d’attente de données

    Voyons maintenant cela plus en détail.
    La figure 1 montre comment établir
    une connexion du PC à  l’iSeries en Une fois la connexion ouverte,
    l’étape suivante consiste à  ouvrir et à 
    « écouter » la file d’attente de données
    CARDREQ pour voir si elle contient
    une requête provenant du terminal
    POS:


    OPEN DATAQUEUE QGPM.CARDREQ
    (CardNo Char(16),
    ExpDate Numeric(4,0),
    Amount Decimal(9,2),
    MbrName Char(40),
    RequestStamp Char(26),
    FOR RECEIVE

    On voit que la syntaxe permettant
    d’ouvrir une file d’attente de données
    comprend trois parties :

    • la commande open data queue (y
      compris le nom de la bibliothèque et
      de la file d’attente)

    • le format d’enregistrement (définitions
      de champs)

    • la direction du message (send/receive)

    Contrairement aux tables de base
    de données, les entrées des files d’attente
    de données n’ont pas de descriptions
    de champs externes. Le fait de
    fournir l’information de champ permet
    à  IBMDA400 de construire l’objet ADO
    RecordSet familier, complet avec les
    noms et attributs de champs. Plus important,
    comme les files d’attente de
    données contiennent des messages
    définis par l’utilisateur, IBMDA400
    traite les difficultés de conversion numérique
    et la traduction EBCDIC/ASCII.
    Si l’on spécifie un CCSID de 65535,
    les données ne seront pas traduites, ce
    qui est pertinent pour des données binaires.
    La figure 2 présente les types de
    données utilisables avec des files d’attente
    de données. Comme les types
    sont indiqués en termes SQL, assurezvous
    que vous savez faire correspondre
    les types de données SQL avec
    les types de données de votre langage
    évolué. De plus, certains types de données
    bien connus sont absents de la
    liste : Date, TimeStamp et VarChar.
    Vous pouvez quand même utiliser ces
    types en recourant à  des substituts appropriés
    (par exemple, utiliser
    Character pour Date and Time, utiliser
    Small Integer with Character pour
    VarChar) en même temps que les fonctions
    VBA appropriées pour leur réimposer
    leur type correct dans VBA. Ne
    faites cela que si vous savez vraiment
    comment construire le type de données
    avec VBA : faute de quoi, vous risquez
    d’obtenir des résultats imprévisibles.
    La figure 3 montre le code permettant
    d’ouvrir et de lire la file d’attente
    de données CARDREQ. La commande
    open data queue est transmise à  la méthode
    .Execute de l’objet de connexion (un objet Command fonctionnera
    aussi) avec un ADO
    RecordSet recevant toutes les entrées
    dans la file d’attente.
    Quand une file d’attente de données
    est ouverte, toutes les entrées de la file d’attente disponibles sont peuplées
    comme des lignes dans le
    RecordSet. Le RecordSet sera un curseur
    en retransmission seule, lecture
    seule. N’oublions pas qu’avec des ADO
    RecordSet, la première lecture est effectuée automatiquement dès que la
    file d’attente est ouverte.
    En outre, quand une entrée de file
    d’attente de données est lue, elle est
    supprimée de la file d’attente. Dans
    cette illustration, l’entrée comporte
    cinq champs : numéro de carte, date
    d’expiration, montant, nom et timbre
    de requête. (C’est une représentation
    caractère du champ TimeStamp de 26
    octets.) Bien entendu, les définitions de champs indiquées ici devront correspondre
    à  celles du programme POS
    RPG.
    Incidemment, si une file d’attente
    de données est créée avec l’option
    Sender (*Yes) (qui inclut l’information
    job et utilisateur pour chaque entrée
    de la file d’attente de données),
    IBMDA400 ajoutera automatiquement
    quatre champs de plus au RecordSet :
    JobName, UserProfile, JobID (numéro de job) et UserName (utilisateur courant).
    L’ouverture d’une file d’attente est
    une opération relativement longue. S’il
    faut absolument aller vite, laissez la file
    d’attente de données ouverte. Dès que
    la propriété end of file (.EOF) est vraie,
    plutôt que de la fermer et de l’ouvrir,
    invoquez la méthode .Requery pour
    voir si la file d’attente contient de nouvelles
    entrées.

    Téléchargez cette ressource

    Préparer l’entreprise aux technologies interconnectées

    Préparer l’entreprise aux technologies interconnectées

    Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.

    Tech - Par iTPro.fr - Publié le 24 juin 2010