VT2016 Cuba Plateform

=Présentation=


 * Sujet : Cuba Plateform
 * Auteur : Germain Lecorps
 * Enseignants : Didier DONSEZ, Georges-Pierre BONNEAU



=Mots clés= Java, framework, web, high-level

=Résumé= CUBA platform est un framework Java fullstack permettant le développement d'applications pour des entreprises. Comparé aux autres framework populaires, il permet un niveau d'abstraction de plus haut niveau tout en permettant d'accéder aux API de bas niveau si nécessaire. CUBA Studio est un outil de développement web spécialisé qui prend en charge des projets, les fichiers de construction, les scripts sur les bases de données, du design visuel et bien d'autres choses. Le framework permet aux développeurs de se concentrer uniquement sur la logique de l'application. Il propose en plus un large choix de modules permettant un gain massif de temps sur le développement.

=Abstract= CUBA Platform is a full stack Java framework for enterprise applications development. Compared to other popular frameworks, it provides a higher level of abstraction and yet it still allows direct access to the low level API. CUBA Studio is a specialized web develeopment tool that takes care of many different things such as project, build files, database scripts, screens scaffolding, visual design and other routine tasks. It enables developers to focus on the application logic. The large choice of out of the box components offers massive development time savings.

=Synthèse=

Principe
Le principe du framework CUBA plateform est de proposer une plateforme de développement combinant de nombreuses technologies évitant de "perdre" du temps à coder les choses séparément en se servant de ces technologies de façon distincte. Ce framework est avant tout destiné à la conception d'applications commerciales qui nécessitent régulièrement des structures de données très complexes, des centaines d'écrans ainsi que des systèmes de sécurité avancés. De plus, ces applications doivent être évolutives aisément modifiables puisque le marché peut rapidement évoluer.

Différence avec les autres framework
La principale différence entre CUBA platform et la plupart des autres frameworks Java existants est qu'il propose un haut niveau d'abstraction. Autrement dit, il permet aux développeur de se concentrer sur les tâches commerciales demandées par le client sans avoir à se concentrer sur les technologies utilisées par le framework (comme Spring, Vaadin, OpenJPA, Lucene, jBPM, Gradle ou EclpiseLink...). CUBA propose un large éventail de fonctionnalités et d'outils de développement. Cependant, il n'empêche pas l'accès au code de bas niveau, ce qui permet d'assurer de le framework peut être adapté aux besoins du projet.

Architecture
Les applications développées avec CUBA ont une architecture classique trois-tiers. Les méta-données vont faire le lien entre les différentes couches. Ces méta-données représentent en fait la connaissance du modèle de données de l'application. De plus, ces méta-données rendent les composants visuels "conscients" des données qu'ils affichent. Par exemple, un label va savoir qu'il affiche une date, un tableau va savoir qu'il affiche les attributs d'un certain driver... Ces méta-données communiquent avec la couche de la base de données pour lui indiqué le graphe objet à mettre à jour ou à créer. Ce mécanisme est aussi valable pour le système de sécurité intégré ou le module de génération de rapport. Au final, l'intérêt est de pouvoir changer les technologies utilisées sans que cela ai d'impact sur le code déjà produit.

Interface utilisateur
Pour ce qui est de l'interface utilisateur, il est possible de la créer via un éditeur visuel ou directement en XML. CUBA propose de nombreux éléments graphiques tels que des graphiques dynamiques ou même des cartes Google. Une fois ces éléments créés, il suffit de les initialiser et de créer un contrôleur événementiel en java. Encore une fois, le fait que les composants soient "conscients" des données qu'ils affichent assure que le code et l'interface seront très facile à maintenir et à faire évoluer. Cependant, comme cela a été dit dans la partie "principe", si les composants proposés par CUBA ne sont pas suffisants pour réaliser les besoins de l'application, il est possible d'accéder à l'api à un plus bas niveau, ce qui permet d'intégrer des scripts Javascript ou des éléments disponibles dans d'autres frameworks.

Filtres génériques
Une force de CUBA est la possibilité de créer des filtres génériques. Les utilisateurs peuvent créer leur propres filtres de recherche sans que le développeur ai à les implémenter au préalable. Il est possible de laisser plus ou moins de liberté à l'utilisateur quant à la création et l'utilisation de filtre. Cependant, quelque soit les choix de développement, la plate-forme est faite de sorte qu'il soit très facile et très rapide de mettre en place ces filtres de recherche.

Sécurité
Tout ce que peut faire un utilisateur est géré par le système de sécurité proposé par CUBA. Le modèle est basé sur un système de rôles grâce auquel les accès CRUD sont réduits à des attributs de certaines entités, à certains composants ou même à certains tokens utilisables directement dans le code. Le système utilisé est un système de sécurité au niveau de lignes. Cela permet de restreindre aisément l'accès à certaines donnes pour certains utilisateurs. Typiquement, un utilisateur d'un département donné ne pourra accéder qu'aux données attitrées à ce département. Les paramètres de sécurité sont réglables à la volée. Cela implique qu'un administrateur peut modifier les paramètres de sécurité d'un utilisateur ou de certaines données sans avoir à arrêter le système. CUBA propose aussi un système de logs permettant de savoir qui modifie quels paramètres de sécurité à quel moment.

Autres fonctionnalités
CUBA propose aussi des fonctionnalités moins classiques :
 * Outils d'administration et de gestion des utilisateurs
 * Génération de rapport de management
 * Interface multi-langues
 * API REST génériques

Développement
Pour développer une application avec CUBA Platform, il suffit de Java, XML et JPQL (ce qui permet par ailleurs de rendre le code uniforme et facile à maintenir). Cela permet aussi de ne pas avoir besoin d'une équipe de développeurs Web ni de connaître Java EE. Le développement peut se faire sous n'importe quel IDE Java. CUBA propose en plus de ça CUBA Studio qui permet d'automatiser de nombreuses tâches spécifiques à CUBA :
 * Mettre en place l'infrastructure du projet
 * Permet le design visuel de l'interface utilisateur et du modèle de données
 * Mise en place d'éléments CRUD avec beaucoup d'options d'agencement
 * Maintenir à jour les base de données en générant et en exécutant automatiquement des scripts de mise à jour.
 * Permet de générer automatiquement des ébauches de gestionnaires, services...

Toutes les modifications entre CUBA Sutdio et l'IDE sont synchronisés ce qui permet de laisser la liberté au développeur de décider où les faire. De plus, pour gagner encore plus de temps, CUBA Sutdio déploie automatiquement le code (sauf le modèle de données). Enfin, CUBA dispose d'un outil de portage automatique. Il est ainsi possible de transformer une ancienne base de données en une base de données compatible avec CUBA, et ce automatiquement.

Déploiement
Un des grands avantages du framework CUBA Platform est sa liberté de déploiement. En effet, les applications peuvent aussi bien être déployées depuis un serveur unique qui s'occupe de tout mais aussi via un middleware et des clusters web séparés. La plateforme supporte de nombreux types de base de données. Notamment PostgreSQL, Oracle Database, Microsoft SQL Server, MySQL et HSQL. De plus, selon l'ampleur que prend le projet, il est tout à fait possible de passer d'un service de base de données à un autre de façon transparente pour le développeur. Les applications développées avec CUBA peuvent être sur n'importe quel serveur Java EE comme Tomcat, Glassfish, Jetty... Il est aussi possible d'encapsuler son application avec Docker et/ou de les faire tourner sur des plateformes de cloud computing comme AWS, CloudFoundry, OpenShift ou Jelastic...

License
Tout le code source du framework est open-source. Cependant, une utilisation gratuite de CUBA limite la taille des modèles de données ce qui empêche de travailler sur de très gros projets sans version payante. De plus, la version payante permet l'accès à certaines extension / modules qui ne sont pas accessibles via la version gratuite.

=Bibliographie=
 * https://www.cuba-platform.com
 * https://www.javacodegeeks.com/2015/06/cuba-platform-the-new-java-enterprise-applications-framework.html
 * https://dzone.com/articles/cuba-platform-an-open-source-java-framework-for-ra
 * https://www.road-to-cuba-and-beyond.com