Modules

Qu'est-ce qu'un module ?

Un module est une partie d'un programme regroupant des composants appartenant àla même catégorie technique ou fonctionnelle. Par exemple : Voici les composants pouvant entrer dans la constitution d'un module :

Modules compilés

Un module compilé est composé uniquement de code directement exécutable par le système d'exploitation cible (Windows ou Unix par exemple) ou directement interprétable par la machine virtuelle cible (Java Virtual Machine par exemple).

Modules compilés en technologie Up ! Virtual Technical Machine

Up ! Compiler permet de créer des modules compilés. Pour cela, il utilise le langage cible C / C++. Up ! Compiler produit automatiquement du code natif pour la plate-forme cible en tenant compte de son comportement, de ses spécificités et des ses outils.

Une fois compilé dans un langage cible, il n'y a aucune différence notable entre ce module et un autre module écrit manuellement, si ce n'est l'interfaçage qui a été normalisé. En particulier, il n'y a aucune différence concernant l'optimisation des ressources et la performance du code du module à offre fonctionnelle identique.

Modules compilés natifs

Un module compilé natif est un module écrit manuellement dans le langage cible de Up ! Application System. Tous les modules standards de base de Up ! Application System sont des modules compilés natifs. En particulier, il y a : Vous pouvez vous créer vos propres module compilés natifs. Cela est notamment intéressant dans les deux cas suivants : Les modules compilés natifs doivent respecter une norme pour être utilisés par les autres modules composant un programme en technologie Up ! Virtual Technical Machine. Cette norme définie notamment la structure du module, son interface, la déclaration des types de données, la déclaration des données et l'usage des procédures, des fonctions ou des méthodes publiées.

Implémentation des modules compilés

Selon la plate-forme cible, un module compilé peut avoir différentes implémentations physiques. Le choix de l'implémentation s'effectue lors de la génération. Elle est indépendante du source du module. Voici les différentes implémentations possibles :

Modules interprétés

Un module interprété est composé uniquement de source du module et de ses composants directement interprétable par Up ! Script Engine. Voici l'intérêt des modules interprétés :

Assemblage des modules

Architecture des programmes

Pour un module statique ou dynamique, celui-ci est intégré au programme exécutable lors de l'exécution. De plus, le programme exécutable connaît parfaitement la localisation de ce module : soit il fait partie du programme, soit il est accessible via la variable environnement UPS_PATH.

Pour un module distribué, celui-ci n'est pas intégré au programme lors de l'exécution. De plus, le programme exécutable ne connaît pas la localisation de ce module. Ce module est localisé par un Object Request Broker.

En fait, le programme exécutable ne connaît qu'une interface servant d'adaptateur client appelée proxy du module distribué. Le module réel correspondant au module distribué fait partie d'un serveur de traitements. Le serveur de traitements s'exécute sur le même ordinateur ou sur un autre ordinateur. Il comporte un adaptateur serveur appelé stub qui permet de recevoir les demandes d'un client comme si celles-ci provenaient d'un autre module faisant partie du serveur.

La couche logicielle effectuant le lien entre le module distribué et le module réel peut s'effectuer de la manière suivante :

Dans l'exemple ci-dessus, il y a deux programmes en technologie Up ! Virtual Technical Machine :

Du point de vue de Up ! Application System, l'architecture reste identique que le lien entre les modules soit Up ! Object Request Broker, Component Object Module (COM), Advanced Business Applications Programming (A) de SAp, Common Object Request Broker Architecture (CORBA), Java, Programming Language / Structured Query Language (PL/SQL) ou Single Object Activation Protocol (SOAP). Ce qui change est l'Object Request Broker et le protocole de communication.

Choix du lien entre les modules distribués

Le choix du type de lien dépend de vos besoins et notamment ceux inhérents à l'interfaçage avec des modules déjà existants :

Il vous est possible de mixer les liaisons. Up ! Application System offre ainsi un moyen élégant pour réaliser un pontage bidirectionnel entre Up ! Object Request Broker, Component Object Module (COM), Advanced Business Applications Programming (ABAP) de Sap, Common Object Request Broker Architecture (CORBA), Java, Programing Language / Structured Query Language (PL/SQL) ou Single Object Activation Protocol (SOAP).

Dans l'exemple ci-dessus, il y a trois programmes : un écrit en Up ! 5GL, un écrit en Microsoft Visual Basic et un écrit en C++.

Comment générer les modules distribués ?

Pour les modules classiques, la génération s'effectue directement. Pour les modules distribués, la génération s'effectue différemment pour le programme client et le programme serveur. Le programme client ne nécessite qu'un adaptateur client représentant le module distribué au sein du programme. Le programme serveur nécessite à la fois le module implémenté mais aussi l'adaptateur serveur réceptionnant les demandes des clients transmises par Up ! Object Request Broker - Up ! Network.

Voici un schéma illustrant ce principe :

Advanced Business Applications Programming de Sap

Component Object Module

Common Object Request Broker Architecture

Java

Programing Language / Structured Query Language

Single Object Activation Protocol

Up ! Network

Identifications des bibliothèques

Selon l'architecture retenue, un module peut être composé des bibliothèques suivantes correspondant aux adaptateurs ou aux dictionnaires nécessaires. Leur nom de base est celui du module. Seul change le suffixe qui permettent de les identifiers :

Nature de la bibliothèque.Suffixe de la bibliothèque.
Module compilé ou interprété.Néant.
Adaptateur client Com._ccm
Adaptateur client Corba._ccb
Adaptateur client Java._cjv
Adaptateur client Pl/Sql._cpq
Adaptateur client Rfc de Sap._csp
Adaptateur client Soap._cso
Adaptateur serveur Com._scm
Adaptateur serveur Corba._scb
Adaptateur serveur Java._sjv
Adaptateur serveur Pl/Sql._spq
Adaptateur serveur Rfc de Sap._ssp
Adaptateur serveur Soap._sso
Dictionnaire pour Up ! Kernel._dkn