# Uniface

Uniface est une application de développement et de déploiement pour les applications d'entreprise. Uniface fonctionne dans une gamme variée de systèmes d’exploitation : mobile, mainframe, web, SOA, Windows, J2EE et NET.

## Description

Les applications Uniface sont indépendantes de la base de données et de la plateforme d’exécution. Uniface fournit un cadre d'intégration qui permet aux applications Uniface de s'intégrer aux principaux SGBD, ainsi qu'à d'autres technologies, comme les produits basés sur mainframe (CICS, IMS), les services Web, serveur SMTP et serveur POP, annuaires LDAP, .NET, C et Java. Uniface fonctionne sous Windows, Windows Mobile, différentes sortes d’Unix et de Linux, IBM iSeries/AS400, z/OS, et VMS.
Les applications Uniface peuvent être utilisées dans des systèmes complexes qui maintiennent les données critiques de l'entreprise, tels que les achats en ligne, les transactions financières, l’administration des salaires, et le contrôle des stocks. Uniface permet de développer des applications client/serveur et web. De la simple saisie de données à l’automatisation des processus métier, ainsi que des portails accessibles localement, via l'intranet et l'internet.
Développé à l'origine aux Pays-Bas par Inside Automation, devenu plus tard, Uniface BV, les produits et la société ont été acquis par Compuware en 1994, cependant, le développement est toujours basé à Amsterdam.
Depuis février 2014, le produit Uniface est développé par la société Uniface BV et n'appartient plus à Compuware.

## Produits

La plateforme Uniface offre une gamme d'outils de développement et de déploiement, dont la plupart est regroupée dans l’Uniface Application Platform Suite (APS). L'APS comprend :
* Uniface : environnement de développement. C’est un ensemble intégré d'outils pour la modélisation, la mise en œuvre, la compilation, le débogage et la distribution d'applications.
* Uniface Flow : environnement pour développer et déployer des processus métier.
* Uniface View : portail d'intégration d'applications qui fournit un bureau organisé de documents Web, des rapports de base de données, des applications d'entreprise, et d'autres ressources de l'entreprise.
Les applications Uniface (y compris l'environnement de développement, Uniface Flow et Uniface View) utilisent une infrastructure d'exécution commune, composée de :
* Uniface Runtime Engine : une machine virtuelle spécifique à la plateforme qui interprète et exécute les composants d'application et les bibliothèques.
* Uniface Router : un processus multi-thread responsable de la communication interprocessus dans les applications Uniface. Il démarre et arrête Uniface Server. Il effectue l'équilibrage des charges (load balancing), et transmet les messages entre les différents processus Uniface.
* Uniface Server : un processus qui permet aux clients d'accéder aux ressources Uniface à distance ou d'exécuter des composants distants. Il agit comme un serveur d'applications, un serveur de données et un serveur de fichiers.
* Référentiel Uniface : une base de données relationnelle utilisée pour stocker les définitions et propriétés des objets de développement, des modèles de processus et de l'organisation, et les définitions du portail.
* Uniface Web serveur : le serveur Apache Tomcat est retenu pour développer et tester des applications Web, en production. N'importe quel serveur web peut être utilisé.
* Servlets Java : servlets utilisées pour la gestion des échanges de communication entre le serveur web et le serveur d’applications Uniface pour les interfaces Web et les Web services.
* Connecteurs de base de données : Pilotes qui gèrent les connexions entre Uniface et une grande variété de bases de données.
* Les outils d'intégration : Pilotes, composants et API qui gèrent la communication entre Uniface et des applications tierces et/ou des technologies différentes : Java, CICS, IMS, LDAP, SMTP/POP, des commandes du système, COM etc.
En outre, Uniface JTi (Java Thin Client Interface) permet d’accéder à des applications client/serveur Uniface depuis le web.
Uniface possède un langage de procédure propriétaire appelé "Proc" qui est utilisé pour coder le comportement des applications. Le noyau d’Uniface et le code par défaut automatisent la plupart des opérations d'entrée/sortie. Si bien que les opérations de base n'ont pas besoin d'être codées.

## Applications

Les applications Uniface sont basées sur des composants logiciels indépendants de l'infrastructure, des bases de données et des systèmes de fichiers. Elles peuvent être des applications composites qui comprennent des éléments non-Uniface créés à l'aide d'autres outils de développement, elles peuvent être déployées dans les environnements client/serveur, web, mobiles, services web, et mainframe. Uniface comprend plusieurs de types de composants qui sont destinés à être utilisés dans les différentes couches d'une architecture d'application multi-tiers.
Les composants pour la couche de présentation sont responsables de l'interface utilisateur, et comprennent :
* Les Form : Écrans ou formulaires interactifs pour l'affichage et la mise à jour des données dans un environnement client/serveur.
* Les Server Page : Pages HTML interactives pour l'affichage et la mise à jour des données dans un environnement web.
* Les Report : Mise en page pour la présentation des données en vue d’une impression.
Les composants pour la couche logique métier traitent des règles commerciales et du comportement spécifiques lié à une tâche et n'ont pas d'interface utilisateur:
* Les Services : Assurent le traitement et la logique métier lorsqu'ils sont appelés par d'autres composants, que ce soit localement ou à distance.
* Les Session Services : Centralisent les règles métier complexes qui touchent plusieurs entités de données, tels que les comportements spécifiques d’une tâche, les transactions et l'intégrité référentielle.
* Les Entity Services : Centralisent les règles liées à une seule entité de données.
Le tiers d’accès aux données contient les structures de base de données physiques définies dans le modèle d'application Uniface. Uniface assure l’accès physique aux données en encapsulant les ordres SQL dans ses connecteurs SGBD. La gestion réseau et les accès aux middlewares sont encapsulés par les pilotes middleware et le routeur Uniface.
Le moteur d'exécution exécute les composants de l'application. Il affiche les composants de présentation en utilisant le connecteur d'interface utilisateur approprié (soit l'interface graphique, ou en mode caractère), et envoie ou reçoit les données via un connecteur SGBD.

## Développement d'applications

Avec Uniface, le développement est guidé par le modèle et se conçoit à partir de composants. La structure de données, les règles métier et le comportement par défaut de l'application sont définis dans le modèle d'application. La définition des modèles peut être réutilisée et héritée par les composants, qui ensuite peuvent remplacer les définitions héritées et fournir un comportement spécifique. La création de « Gabarits » ou « Template » permet d'améliorer la productivité et de garantir la cohérence dans la définition des modèles.

### Modèle d'application

Le modèle d'application définit les entités (tables), les attributs, les clés primaires, les indices et les associations entre les relations pour définir l'intégrité référentielle. Chaque entité et chaque attribut dans le modèle ont des propriétés et un ensemble de déclencheurs. Les règles métier sont ajoutées au modèle de façon déclarative en définissant les propriétés et le traitement associé, en ajoutant du code Proc (langue de procédure d’Uniface) dans les déclencheurs.
Les déclencheurs sont des conteneurs pour le code. Ils représentent des événements activés par l’utilisateur ou le système. Exemples : Occurrence Get Focus, Read ou Leave Field. D'autres portent sur des traitements tels que la validation, ou agissent comme conteneur pour les méthodes associées à l'objet.
L'utilisation de déclencheurs au niveau du modèle permet de recueillir les propriétés et le comportement métier des objets. La séparation entre structures logiques et données physiques permet de définir le comportement par défaut une seule fois et de le réutiliser systématiquement. Ce procédé accélère le développement et facilite la réalisation d’applications n-tiers.

### Composants

Les objets décrits dans le modèle d'application sont réutilisés par les composants. Les développeurs incorporent des objets du modèle sur la grille canevas de constitution de l’écran représentant la mise en page (pour les composants de présentation), ou en les insérant dans une arborescence définissant la structure des composants. Ils peuvent également, au niveau des composants, ajouter des objets qui ne sont pas dans le modèle d'application, tels que des champs de contrôle, des menus, et des variables de composant.
Les propriétés et les déclencheurs définis dans le modèle d'application sont hérités par copie dans le composant. Les définitions peuvent être modifiées au niveau des composants pour fournir des fonctionnalités spécifiques. Cela rompt le lien entre le modèle d'application et le composant (même s’il est possible de restaurer le lien vers le modèle). Si le code ou les propriétés sont modifiés au niveau du modèle, tous les composants utilisant ces spécifications seront mis à jour lors de leur prochaine compilation. Cette propagation facilite la maintenance et assure que les règles associées à l'objet sont disponibles partout où il est utilisé.

### Référentiel d’Uniface

Uniface maintient une base de données de ses propres métadonnées afin de réutiliser les modèles d’application, les définitions de composants, les schémas de composants, du code de procédure, et ainsi de suite. Le référentiel est propriétaire et dédié à l’environnement de développement Uniface, qui en assure l'intégrité. Cependant, la structure du référentiel est documentée, ce qui rend possible (mais non recommandé) d'interagir directement avec lui, pour des rapports par exemple.
Le référentiel peut être partagé par des équipes de développeurs. De plus, Uniface s'intègre à n'importe quel système de contrôle de code source (SCCS) prenant en charge les spécifications du Microsoft Common Source Code Control Interface. Les fonctionnalités disponibles dans SCCS d’Uniface dépendent du SCCS utilisé, les éditeurs de logiciels ont interprété et mis en œuvre les spécifications du Microsoft Common Source Code Control Interface différemment. En conséquence, les fonctionnalités et le comportement pris en charge varient en fonction du fournisseur du CSSC.

## Déploiement d'applications

Les applications Uniface peuvent être déployées sans changement de code sur des plateformes aussi différentes que le « mainframe » et le « mobile ». Les composants (et d'autres objets tels que les scripts de démarrage, les menus, les barres d'outils (panneaux), les glyphes, les variables globales et les « include proc » ) sont compilés et produisent des objets exécutables qui peuvent être empaquetés dans des fichiers zip et déployés sur n'importe quelle plateforme. Les objets exécutables sont activés à l'aide d'une machine virtuelle dédiée à chaque plateforme (Java et d'autres langages ont, plus tard, suivie Uniface à cet égard). Les composants peuvent être compilés dans un environnement et exécutés dans un autre.

## Connexion aux bases de données

Uniface permet l’accès à de nombreuses bases de données et systèmes de fichiers par le biais de connecteurs (ou drivers). Les connecteurs SGBD convertissent les données Uniface au format le plus approprié en fonction de la nature du SGBD. À l'exécution, il est possible de passer des paramètres pour invoquer (ou désactiver) des extensions spécifiques de la base de données. Il est possible de convertir des données provenant de différents systèmes de bases de données. Uniface fournit également une API qui peut être utilisée pour créer des connecteurs de base de données personnalisée ou spécifiques.

## Licence

Les licences sont gérées par le Compuware Distributed License Manager (DLM), un système de serveur de distribution de licences aux postes ou serveurs clients. Ce système centralisé élimine ainsi la nécessité de mise à jour des postes clients.

## Historique

Initialement appelé UNIS, le produit a été créé aux Pays-Bas en 1984 par la société Inside Automation, une entreprise qui était dirigée par Bodo Douque, avec Frits Kress comme directeur technique. En 1986, le produit et l'entreprise se sont appelés Uniface. Uniface a été développé sur les principes de l'American National Standards Institute (ANSI), 3-schema architecture. Proposé en 1975, il s'agit d'une approche standard pour la construction de systèmes de gestion de base de données composée de trois schémas (ou méta modèles):
* Schéma conceptuel : définition de tous les éléments de données et des relations entre eux. Il n'y a qu'un seul schéma conceptuel par base de données. Uniface met en œuvre le schéma conceptuel du modèle d'application (appelé selon les versions d’Uniface : Business Object Model et Application Object Model).
* Schéma externe : différentes vues externes des données (du point de vue de l’utilisateur). Il peut y avoir plusieurs schémas externes pour une base de données.
Uniface met en œuvre les schémas externes en tant que composants. Au cours de l'évolution d’Uniface, les schémas externes sont devenus « formes » puis « formes cachées ». Elles s'exécutent en arrière-plan sans affichage à l'utilisateur. Enfin, celles-ci sont devenus des « services ». Pour affiner les types de composant Service, il a été ajouté par la suite les services « de session » et « d’entité ». Les formulaires qui ont été imprimés plutôt que d'être affichés sont devenus des composants de type rapport. Les pages Web (USP) ont été introduites pour le développement web, et plus tard, les pages Web dynamiques (DSP) ont été créées pour traduire les fonctionnalités Web 2.0.
* Schéma interne : définition de la représentation physique des données stockées. Pour gérer ce schéma, Uniface s’appuie sur les nombreux systèmes de base de données relationnelle auxquels il peut être relié, ce qui lui permet d'être indépendant de la base de données choisie.
Initialement, Uniface a été développé pour l’environnement DEC-VAX, en utilisant le système de fichiers natif VAX RMS. On en trouve encore un vestige dans le produit aujourd'hui : L’utilisation d’une « GOLD KEY » (Les terminaux VT DEC ont effectivement eu une touche de cette nature).
Les premières versions du produit ont été fournies avec le SGBDR Sybase sous le nom de « FastBuild », bien qu’elles ne soient pas limitées à cette seule base de données.
Uniface a sans cesse évolué pour s’adapter aux nouvelles technologies et architectures applicatives. C’est un élément déterminant pour expliquer sa réussite. Les applications créées avec Uniface peuvent être migrées, mises à jour et modernisées sans perdre l'investissement initial de développement.

### Version Uniface 3 (1986)

Uniface 3 a été la première version publique. Cette version supportait les bases de données (RMS, Oracle, C_ISAM, Ingres, et RDB), l'interprétation de la machine virtuelle, l'éditeur de structure de sources Uniface et l’éditeur de commande.

### Version Uniface 4 (1988)

Uniface 4 améliore l'éditeur de sources (éditeur de formulaire maintenant), les possibilités d'impression et le support d'affichage. Le support de MS-DOS est introduit et une interface est ajoutée pour les outils CASE.

### Version Uniface 5 (1990)

Uniface 5 permet le déploiement client/serveur avec l'introduction des accès distants à la base de données via le Polyserver. Une interface utilisateur graphique est introduite via l'Interface Universelle de Présentation (UPI). Le support des bases de données a été étendu à un total de 13 bases de données et systèmes de fichiers et il est maintenant disponible sur DOS, VMS, OS/2, Stratus VOS et UNIX. Le support des caractères japonais a également été introduit.

### Uniface Six (1994)

Uniface Six achève le passage à des environnements de développement entièrement graphiques. Il comprend le « painter » de fenêtres graphiques et l’éditeur de modèle d'application. Le déploiement est amélioré grâce au Dynamic Object Library et les supports pour « Microsoft Object Linking and Embedding (OLE) » et Apple Macintosh sont ajoutés. Autres enrichissements : les contrôles d’autorisations, le contrôle de version intégrée, le Personal Serie - outil de création de rapports (bien que celui-ci ait ensuite été supprimé lorsque le fournisseur a décidé de ne pas améliorer son produit) - et le soutien d’un plus grand nombre de plateformes.

### Uniface Seven (1997)

Uniface Seven, avec l'introduction de l’Uniface Request Broker (URB), est axé sur l'intégration des composants, qu’ils soient Uniface ou externes. L'URB offre les supports de communication bidirectionnelle, synchrone ou asynchrone entre les composants. Ainsi que l'accès aux données à distance, il offre de plus les serveurs d'applications et de messagerie répartis. Uniface Seven est également la première version à proposer le développement et le déploiement d’applications Web avec Uniface Web Application Server, Uniface Request Dispatcher, et les nouveaux composants Uniface Server Page (USP).
Parmi les autres améliorations incluses dans Uniface Seven figurent : des nouveaux composants (Services, Server Pages, rapports), un éditeur de signatures, l'Assembly Workbench, les notions de sous-systèmes, les opérations, les formes non-modales, les instances de composants, l’amélioration de l‘éditeur et de la navigation, un nouveau débogueur, l’amélioration des plug-in, une aide en ligne intégrée, un « Template » de composants, Web Application Server, Name Server Uniface ainsi que le gestionnaire de partitionnement graphique.
Uniface Seven a également vu l'introduction de plusieurs autres outils :
* Un outil pour la modélisation, l'intégration et la gestion des processus métier. Cette fonctionnalité est devenue Optimal Flow sous Uniface 8, puis Uniface Flow sous Uniface 9.
* Un portail d'intégration métier initialement appelé Optimal View, et plus tard Uniface View.
* Uniface – Jti serveur, solution de client léger pour délivrer des applications Web sur Internet ou Intranet, offrant de hautes performances dans les connexions à faible bande passante.

### Uniface 8 (2001)

Uniface 8 apporte des changements majeurs dans le domaine de l'intégration des processus. Avec cette version, l’Uniface Routeur améliore le pilotage des Uniface Servers et gère le « load balancing ». Le Web Request Dispatcher (WRD) remplace l'URD, améliorant les performances des composants. Le support des Web Services, avec SOAP et XML, est introduit. La connectivité et l'interopérabilité sont améliorées et une méthode pour mettre en œuvre une architecture d'application 3-tiers est introduite.
Les connecteurs pour SOAP, COM, CORBA et MQSeries sont ajoutés. Le fenêtrage et la gestion de fichiers sont améliorés. Un nouvel utilitaire de déploiement est introduit, améliorant la distribution de l'application. Des sous-composants pour traduire l'architecture 3-tiers sont ajoutés. Les instances de composants possèdent leur « Handle », et un « Garbage collector » automatique est ajouté.

### Uniface 9 (2006)

La version 9 d’Uniface a pour thèmes l'amélioration graphique et l'ergonomie, le déploiement simplifié, et l'intégration. Ainsi le support pour Windows Mobile a été ajouté, et le déploiement a été simplifié à l'aide des archives zip. Le support d’Unicode améliore les capacités multilingues des applications, des améliorations sont également apportées dans le développement web. Les évolutions du traitement des flux XML confère à Uniface plus de conformité avec les normes et standards de l’industrie. Le placement dynamique des attributs dans un composant de type forme ajoute de la flexibilité à leur construction.
D'autres caractéristiques sont incluses telles que la gestion améliorée des couleurs, les menus dynamiques, une API XML, un éditeur de schéma pour le modèle d'application, la référence croisée des composants : fonctionnalité nécessaire pour la refonte d’une application mais aussi pour le déploiement. Enfin, les fonctionnalités des Web Services sont renforcées.

### Uniface 9.4 (2010)

À défaut d'être une version majeure, Uniface 9.4 introduit de nouvelles fonctionnalités assez importantes qui pourraient la faire passer pour telle. L'objectif principal est le développement et le déploiement d'applications internet riches (RIA). Uniface 9.4 permet de développer des applications Web 2.0 ayant des fonctionnalités, en matière d’ergonomie et de réactivité, identiques aux applications client/serveur. Les langages et le support des spécificités locales est amélioré, tout comme l’interface gérant le courrier électronique qui supporte maintenant le format HTML, mais aussi la sécurité et le cryptage.

### Migration

Les passages d’une version à l’autre se réalisent à l'aide d'un export/import XML du référentiel.