JAC Java Aspect Components Serveur d’applications Java Open-Source (LGPL) basé sur la Programmation Orientée Aspect IHM de développement orienté Objet et Aspect Modélisation UML et génération de code http://www.jac.aopsys.com http://www.carsique.fr/JAC 14 novembre 2002 Julien CARSIQUE 17 diapositives Sommaire Introduction POA – Programmation Orientée Aspect Le projet Java Aspect Components L’approche Java Aspect Concept Le serveur d’applications JAC L’architecture JAC, les interfaces fournies Framework, classes et méthodes, aspects… Développer en JAC, exemples Conclusion Julien CARSIQUE Sommaire Titre de la page Page 2 sur 17 Programmation Orientée Aspect La POO identifie des problématiques (concern) d’un point de vue Objet implémentés en Classes Caractéristiques: emmêlement et éparpillement du code Conséquences: mauvaise traçabilité, faible productivité, faible réutilisation et pauvre qualité du code, évolution complexe. Concept: modulariser l’implémentation des problématiques entrelacées, en trois étapes: Décomposition par aspects Implémentation des besoins Recomposition en fonction des aspects (tissage) Évolution logique de la POO, la POA pourrait être la prochaine grande étape en matière de méthodologie de développement. Julien CARSIQUE Introduction Titre de la page Page 3 sur 17 POA: les problématiques Deux types de concern : Problématique métier Fonctionnalités techniques Analogie au prisme Gains: Interactions minimisées Évolutivité Planning de dev. aisé Réutilisation du code POO POA Besoins communs spécifiques métier implémentés par modules Modules séparés pour les problématiques métier et les aspects techniques Modules communs implémentés nommés: « Classes » Modules techniques implémentés nommés: « Aspects » Julien CARSIQUE Introduction Titre de la page Page 4 sur 17 POA: les applications Diverses approches dont JAC et AspectJ AspectJ JAC Extension du langage JAVA Framework POA, serveur d’applications Nouvelle grammaire pour les aspects Aspects écrits en Java pur Utilise le code source. Chaque modif. nécessite une nouvelle compilation Un bytecode permet l’ajout, la suppr. et la modification dynamique des aspects Ne gère pas la distribution Distribue automatiquement les aspects sur des serveurs distants Ne permet que le développement d’aspects Permet le développement d’aspects ou leur simple configuration Atelier UML supportant les aspects S’intègre à JBuilder, Forte et Emacs Pas d’aspects pré-développés Bibliothèque d’aspects pré-développés configurables Version 1.0.5 Version 0.8.1 Open Source Mozilla Public License Disponible en licence LGPL Julien CARSIQUE Introduction Titre de la page Page 5 sur 17 Le projet JAC: « Java Aspect Components » Projet coordonné par la compagnie AOPSYS (Renaud Pawlak, Laurent Martelli) Développé par le groupe CAOLAC du laboratoire CEDRIC-CNAM (Pr. Gerard Florin, R. Pawlak) et le projet AProDis du LIP6 (Lionel Seinturier) En collaboration avec le LIFL (Laurence Duchien) Application directe de la thèse du Pr. Pawlak Initié en 2001 Dans la continuité du projet « Tcl Object System » Julien CARSIQUE Introduction Titre de la page Page 6 sur 17 JAC, plus qu’un serveur – 1 JAC intègre : Un environnement de développement UML orienté POA et permettant de modéliser la logique métier des applications, de générer et de compiler le code Java Des aspects prêts à l’emploi et configurables Un conteneur léger et ouvert pour les classes métier et les aspects purement techniques. Ces derniers peuvent être ajoutés dynamiquement pour fournir de nouvelles caractéristiques techniques au conteneur. Un noyau capable de tisser les aspects à la logique métier au runtime. Une interface d’administration permettant de débuguer l’application et de modifier dynamiquement la configuration des aspects. Un tutorial, un guide du développeur et des exemples. Julien CARSIQUE Introduction Titre de la page Page 7 sur 17 JAC, plus qu’un serveur – 2 Trois principales composantes: Interface d'administration Serveur d'applications Java orienté aspect Atelier UML de développement Julien CARSIQUE Introduction Titre de la page Page 8 sur 17 Concept du serveur JAC Contraintes de la POA Exemple d’un serveur d’applications J2EE Le conteneur JAC utilise des classes Java purement métier Au runtime: configuration des aspects pour tisser le technique avec le métier Julien CARSIQUE Serveur Titre d’applications de la page Page 9 sur 17 Un serveur à part Serveur d’applications J2EE Serveur d’applications JAC Conteneur pour EJBs Conteneur pour des classes Java pures et pour des aspects techniques Services techniques hardcodés, ne peuvent être modifiés Aspects techniques pré-développés : peuvent être modifiés Les EJBs doivent être configurés pour appeler les services techniques : entrelacement des préoccupations (concern) Chaque aspect technique est configuré dans un fichier qui lui est propre et est tissé au runtime : bonne modularisation Lourd, intègre toujours tous les services techniques Léger, chaque aspect technique n’est ajouté que si il est utile Demande de nombreuses compétences Facile à apprendre et à utiliser. Nécessité d’appréhender la philosophie orientée aspect Séparation des préoccupations seulement pour les services techniques pré-développés Les préoccupations nouvelles et spécifiques peuvent être modularisées et implémentées par de nouveaux aspects Coûteux à mettre en place Gratuit sous licence LGPL. Peu de formation nécessaire Fiable et éprouvé Doit encore faire ses preuves, première applications pilotes en cours de développement JAC bénéficie des avantages de l’AOP : meilleures traçabilité, productivité, réutilisabilité du code, qualité du code, évolutivité de l’application Serveur Julien CARSIQUE Titre d’applications de la page Page 10 sur 17 Exemples d’architectures JAC Architecture de base: Montée en charge et tolérance aux pannes: Julien CARSIQUE Architecture Titre de la page Page 11 sur 17 Développer en JAC Architecture des applications JAC (Framework) Julien CARSIQUE Architecture Titre de la page Page 12 sur 17 L’objet JAC Trois concepts techniques: Joinpoints: pointe une exécution du programme Pointcuts: Recense les critères d’exécution des joinpoints Méthodes d’encapsulation (Wrapping): code à exécuter quand les joinpoints répondent aux critères spécifiés par les pointcuts Julien CARSIQUE Architecture Titre de la page Page 13 sur 17 Aspects purement techniques pré-développés Persistance (SGBD et Systèmes de Fichiers) Authentification Session Utilisateur Transactions Déploiement Load-balancing Broadcasting Cohérence des données Synchronisation Accès distant Intégrité GUI (SWING et Web) Julien CARSIQUE Architecture Titre de la page JAC API Doc. Page 14 sur 17 Processus d’installation dynamique des aspects JAC R.T.T.I Aspect Aspect configuration Java loader génère metamodel Chargeur JAC (BCEL) tags Classes encapsulables new Pointcuts Object métier creates load dispatches calls orders Wrappers calls reads Application repository Julien CARSIQUE JAC container Traduit Aspect Component creates Application descriptor (.jac) Classes métier AC manager Noyau JAC (objets Titre de la page systèmes) Composition aspect reads JAC.prop Page 15 sur 17 Encapsulation (Wrapping) Chaîne d’encapsulation Julien CARSIQUE Architecture Titre de la page Page 16 sur 17 Conclusion Séparation du technique et du fonctionnel Facilité de déploiement Gain de temps dans les développements Utilisation simple de services techniques Réutilisation facilitée du code Bonne montée en charge, évolutivité Julien CARSIQUE Conclusion Titre de la page Page 17 sur 17