Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux



Documents pareils
Cours en ligne Développement Java pour le web

Compte Rendu d intégration d application

VIA Webase PROJET. 2 ème année. N du projet : Date : Rapport intermédiaire : Promo : Rapport final : Titre du projet

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Mise en œuvre des serveurs d application

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

SITE WEB E-COMMERCE ET VENTE A DISTANCE

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

les techniques d'extraction, les formulaires et intégration dans un site WEB

DEMARREZ RAPIDEMENT VOTRE EVALUATION

Hassene BELGACEM. Expériences Professionnelles. JEE architect / Technical leader. Ingénieur Informatique. Cycle Préparatoire

Expert technique J2EE

SIO Page 1 de 5. Applications Web dynamiques. Prof. : Dzenan Ridjanovic Assistant : Vincent Dussault

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Devenez un véritable développeur web en 3 mois!

Formation en Logiciels Libres. Fiche d inscription

Auto-évaluation Aperçu de l architecture Java EE

WebSSO, synchronisation et contrôle des accès via LDAP

7 villa de la citadelle Né le 13 mai Arcueil Nationalité : Française. Développeur Web JEE COMPÉTENCES

Introduction aux «Services Web»

CQP Développeur Nouvelles Technologies (DNT)

Messagerie asynchrone et Services Web

Le moteur de workflow JBPM

Introduction à la plateforme J2EE

Jahia. Guillaume Monnette École Ingénieurs 2000 Marne-La-Vallée IR3

Créer et partager des fichiers

Un serveur d'archivage

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Single Sign-On open source avec CAS (Central Authentication Service)

Augmenter la disponibilité des applications JEE grâce au clustering : Le projet open source JShaft

Youssef LYHYAOUI Ingénieur Java/J2EE, SOA, ESB, Web services 31 ans Statut : Indépendant SITUATION ACTUELLE

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Catalogue des Formations Techniques

Architectures en couches pour applications web Rappel : Architecture en couches

Assurances & Mutuelles, Industrie, Santé, Énergie, Transport, Médias / Multimédias, Télécoms, Services

Hébergement de sites Web

Outil de Demande de Backup Système

Hébergement de site web Damien Nouvel

Application web de gestion de comptes en banques

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

4. SERVICES WEB REST 46

Découvrez notre solution Alternative Citrix / TSE

Conception d'un système d'information WEB avec UML Par Ass SERGE KIKOBYA

T4E.fr présente SSRPM, son offre de reset de mot de passe en self service

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

Gestion du parc informatique matériel et logiciel de l Ensicaen. Rapport de projet. Spécialité Informatique 2 e année. SAKHI Taoufik SIFAOUI Mohammed

Consultant MOE/Référent technique JAVA/J2EE JSF, RICH FACES

1 JBoss Entreprise Middleware

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

LICENCE PROFESSIONNELLE

Ré-architecture et migration d une application standalone vers un serveur applicatif multi-tiers dans un contexte JAVA-SAP

Notre Catalogue des Formations IT / 2015

Mercredi 15 Janvier 2014

Création d une application JEE

Architectures n-tiers Intergiciels à objets et services web

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

A. Architecture du serveur Tomcat 6

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

Environnements de Développement

Développement des Systèmes d Information

Les frameworks au coeur des applications web

Application Web et J2EE

Foire aux questions 2015

Master Informatique et Systèmes. Architecture des Systèmes d Information. 03 Architecture Logicielle et Technique

Visual Paradigm Contraintes inter-associations

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

INFORMATIQUE & WEB. PARCOURS CERTIFICAT PROFESSIONNEL Programmation de sites Web. 1 an 7 MODULES. Code du diplôme : CP09

JOnAS 5. Serveur d application d

1. La plate-forme LAMP

Refonte front-office / back-office - Architecture & Conception -

2008 : Diplômé Master 2 ASR (Architecture Système et Réseaux) Université d Evry (Evry - 91)

Applications orientées données

Introduction MOSS 2007

Programmation Web. Madalina Croitoru IUT Montpellier

Problématiques des développements Java/J2EE

DESCRIPTION DE L'ARCHITECTURE et PRESENTATION DES ESPACES DE TRAVAIL

1 Introduction à l infrastructure Active Directory et réseau

Cedric Dumoulin (C) The Java EE 7 Tutorial

1 Introduction et installation

«clustering» et «load balancing» avec Zope et ZEO

Présentation de SOFI 2.0

CIBLE DE SECURITE CSPN DU PRODUIT PASS. (Product for Advanced SSO)

Plan. Présentation du logiciel Sympa Architecture La gestion des hôtes virtuels Listes avec inclusion des abonnés Les modules d authentification

Introduction aux concepts d ez Publish

Introduction à Sign&go Guide d architecture

Introduction à LDAP et à Active Directory Étude de cas... 37

Extensions, Documentation, Tutoriels, Astuces

Président d Inotekk Gestion de la société, développement du portefeuille clients, gestion et réalisation des projets informatiques

Catalogue des formations

Contenu de la version 3.4 C I V I L N E T A D M I N I S T R A T I O N

Mise en place d'un serveur d'application SIG au Conseil général de Seine-et-Marne

Groupe Eyrolles, 2004 ISBN :

Transcription:

Formation Webase 5 Ses secrets, de l architecture MVC à l application Web Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Sommaire 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Obtenir des informations sur Webase 5 Obtenir des informations sur Webase 5 Il existe différents endroits où l on peut obtenir des informations sur Webase 5 : Le trac de Webase 5. Le wiki de VIA : Le manuel de l utilisateur, Le manuel du développeur, Le rapport du projet. Les todos en cours. Demander à un développeur ou sur #webase@irc.diwi.org.

Composants de Webase 5 Composants de Webase 5 Un langage de programation Java, Un meta framework Spring, Un framework MVC Struts, Un framework pour l ORM 1 Hibernate, Un framework de sécurisation AcegiSecurity, Une implémentation de SOAP 2 pour les web-services Axis, Un système de logs Log4J, Un serveur applicatif Tomcat, Un serveur Web Apache, Une base de données PostgreSQL. 1 Object Relationnal Mapping 2 Simple Object Access Protocol

Composants de Webase 5 Un langage : Java Outline 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Composants de Webase 5 Un langage : Java Un langage de programmation : Java Le langage de programmation utilisé est Java. Pour apprendre le Java, tu peux lire les Slides de la formation de Tama et emprunter le livre Java en concentré disponible aux VIAlabs.

Composants de Webase 5 Différents frameworks Outline 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Composants de Webase 5 Différents frameworks Un meta framework : Spring Spring est un framework un peu particulier dans la mesure où il fournit pleins d outils pour relier tous les services utiles à la création d une application web. Spring introduit notamment deux concepts fondamentaux : Dependency Injection (DI), Aspect Oriented Programming (AOP). qui seront abordés dans la section suivante. Spring vient notamment en secours d Hibernate pour le modèle (en fournissant des méthodes telles que gethibernatetemplate) et simplifie encore l accès à la base de données.

Composants de Webase 5 Différents frameworks Un framework MVC : Struts Webase5 utilise Struts comme Framework MVC. Struts s occupe notamment des parties vue et contrôleur tandis que Spring fait le lien entre les 3 couches et vient en soutien d Hibernate pour les modèles. Struts permet notamment une gestion avancée des templates grâce à Tiles un template est un assemblage de plusieurs JSPs, possibilité d héritage, etc.

Composants de Webase 5 Différents frameworks Un framework gérant la persistance des objets en base de données relationnelle : Hibernate Hibernate implémente une syntaxe SQL particulière : le HQL. Cette couche permet de ne pas être dépendant du type de base de données utilisé (PostgreSQL, MySQL, etc...) et de manipuler directement des objets, ce qui simplifie grandement les requêtes. Par exemple, select carte from CarteVIA carte join carte.emprunts emprunt where lower(emprunt.comptecaution.membre.login) =? On récupère alors un objet de type CarteVIA. Hibernate détermine la requete SQL équivalente grâce aux fichiers de mapping (en.hbm.xml) qui explicitent la correspondance table objet.

Composants de Webase 5 Différents frameworks Un framework de sécurisation : Acegi Acegi s occupe de deux problèmes importants : l authentification, l autorisation. Côté authentification Acegi est configuré pour authentifier sur le LDAP du SdE. Côté autorisation, Acegi permet de restreindre en fonction des rôles de la personne authentifiée : l accès aux différentes pages, la visualisation de certains éléments d une page, l exécution des méthodes.

Composants de Webase 5 Différents frameworks Une implémentation de SOAP pour les web-services : Axis Axis est une implémentation de SOAP qui permet à différentes applications hébergées sur des hôtes différents de partager des informations. On parle de web-service. Exemples : synchronisation de la chambre avec le SdE, communication avec le connectd.

Composants de Webase 5 Différents frameworks Un système de logs : Log4J Pour déboguer, l importance des logs est cruciale. Avec Log4J, on peut : définir le niveau de verbosité des logs des différents composants de Webase 5 (Spring, Hibernate, etc...), ajouter ses propres logs très simplement.

Composants de Webase 5 Un serveur applicatif : Tomcat Outline 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Composants de Webase 5 Un serveur applicatif : Tomcat Un serveur applicatif : Tomcat Tomcat sert d intermédiaire entre le serveur Web et le bytecode Java produit par compilation du code de Webase. Il se charge de traduire la requête du client que le serveur web lui a transmis, d exécuter les méthodes qui vont bien, et de retourner le résultat au serveur web. Tomcat dispose d un serveur http et peut donc s exécuter de manière autonome (sur le port 8080 par défaut) ou bien derrière Apache via l utilisation du mod_jk.

Composants de Webase 5 Un serveur web : Apache Outline 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Composants de Webase 5 Un serveur web : Apache Un serveur web : Apache On pourrait bien sûr faire tourner Tomcat sur le port 80. Maintenant, si l on souhaite également faire tourner un apache sur la même machine, il se pose un problème : les deux serveurs ne peuvent pas tourner sur le port 80. La solution : l utilisation du mod_jk. Les requêtes sont alors transmises à Tomcat par Apache. Un autre intérêt de mod_jk peut être de faire tourner plusieurs instances d un serveur Tomcat derrière le même Apache (si l ou veut découpler l état de fonctionnement pour différents virtualhosts par exemple ou pour faire du load balancing avec des tomcats répartis sur différentes machines).

Composants de Webase 5 Une base de donnée : PostgreSQL Outline 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Composants de Webase 5 Une base de donnée : PostgreSQL Une base de données : PostgreSQL Webase 5 utilise une base de données PostgreSQL. Cependant, grâce à la couche d abstraction fournie par Hibernate, il serait extrêmement facile de changer.

Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Outline 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming L injection de dépendance (DI) Un des objectifs de Spring est de découpler toutes les parties d une application web de sorte qu elles n aient pas besoin de se soucier les unes des autres pour fonctionner. Utilisation massive d interfaces. On importe ces interfaces et c est Spring qui se charge de mettre la bonne implémentation derrière. C est l injection de dépendance.

Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming L Aspect Oriented Programming (AOP) Toujours pour découpler, l AOP est une «best practice»dont le but est de séparer les aspects : transaction, logs, etc. Une fonction doit s occuper uniquement de la tâche dont elle est responsable. Utilisation abondante des annotations et des fichiers de configuration de Spring.

Les concepts importants de Webase 5 Les architectures MVC et 3 tiers Outline 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Les concepts importants de Webase 5 Les architectures MVC et 3 tiers L Architecture MVC Avec l architecture MVC, une application web est divisée en deux entités distinctes : le modèle les données qui seront affichées, la vue la structure logique de la page web. Mais ça n est pas tout, il faut maintenant faire passer les données aux vues Rôle du contrôleur.

Les concepts importants de Webase 5 Les architectures MVC et 3 tiers L architecture 3 tiers Avec l architecture 3 tiers, une application web est divisée en trois couches : la présentation ce que l utilisateur voit, la «business logic» le cœur de l application, le DAO les données et l accès aux données. La règle d or est que chaque couche ne doit communiquer qu avec la couche juste en dessous. Ainsi, la couche présentation ne peut communiquer qu avec la couche business mais ne doit jamais communiquer directement avec la couche DAO.

Webase 5 avec les mains Les principaux packages Webase 5 Outline 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Webase 5 avec les mains Les principaux packages Webase 5 Les principaux packages Webase 5 Le projet Webase 5 est composé de différents packages ayant chacun un rôle bien particulier. Prenons l exemple de la gestion des prêts des membres.

Webase 5 avec les mains Les principaux packages Webase 5 webase5.action.forward webase5.action.forward Les vues «génériques»de Webase 5. Dans le cadre de la gestion des prêts, cette action renvoit un forward qui affichera l ensemble des prêts du membre, le montant sur le compte de caution, etc...

Webase 5 avec les mains Les principaux packages Webase 5 webase5.action webase5.action Les classes de ce package héritent généralement d une classe correspondante dans action.forward. Par exemple, si l on souhaite créditer le compte de caution, on crée une classe MembreCrediterCompteCaution qui hérite de MembrePretsForward, crédite le compte de caution, et qui selon le cas renvoie soit un redirect, soit super.execute. Certaines actions n ont pas d action forward associé (typiquement la recherche de membre) et héritent donc simplement de la classe Action.

Webase 5 avec les mains Les principaux packages Webase 5 webase5.dao webase5.dao Data Access Objects. Ce package contient toutes les méthodes d accès à la base de données. Par exemple l interface AdministrationDao contient tous les prototypes des méthodes définies dans AdministrationImpl qui implémente les méthodes déclarées dans AdministrationDao. Dans AdministrationDaoImpl, on trouvera notamment la méthode findempruntsbymembre (utilisée par MembrePretsForward). webase5.dao.ldap Idem pour l accès au LDAP.

Webase 5 avec les mains Les principaux packages Webase 5 webase5.dao webase5.exception Les exceptions lancées par Webase. On y trouve notamment EmpruntNonRendusException.

Webase 5 avec les mains Les principaux packages Webase 5 webase5.form webase5.form Les formulaires de Webase 5. Ils permettent de récupérer les données rentrées dans le html généré. On doit y définir les variables que l on récupère et les setters et getters associés. Il est également préférable de créer une méthode validate qui s assure de l intégrité des données entrées et éventuellement une méthode reset qui se charge de remplir le formulaire avec des valeurs par défaut lors du chargement de la page ou de la réinitialisation du formulaire.

Webase 5 avec les mains Les principaux packages Webase 5 webase5.model webase5.model C est là que sont définies les classes utilisées dans le reste du code de Webase. On y trouve par exemple la définition de la classe Emprunt et de ses méthodes de base (tostring, les setters, getters, etc...). webase5.model.ldap Idem pour les classes dont les informations se trouvent dans le LDAP et non la base de données webase5. webase5.model.topologie Idem pour la base de topologie.

Webase 5 avec les mains Les principaux packages Webase 5 webase5.service webase5.service C est là que sont définies les méthodes de haut niveau associées aux différents composants logiques de Webase 5 : la permanence, les trésorerie, etc... Par exemple, l interface TresorerieService définit les prototypes des méthodes définies dans TresorerieServiceImpl qui implémente TresorerieService. On peut notamment y trouver la méthode creditercomptecaution utilisée par l action MembreCrediterCompteCaution.

Webase 5 avec les mains Les principaux packages Webase 5 webase5.ws webase5.ws C est là qu on trouve les classes utilisées pour les web-services. Par exemple, pour repiauler un membre, il y a un proxy MembreSeviceProxy qui permet à Illusion d appeler la méthode repiaulermembre de sorte de synchroniser la localisation des machines dans Webase 5 et la piaule des membres sur le campus.

Webase 5 avec les mains Les fichiers de configuration de Webase 5 Outline 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un langage : Java Différents frameworks Un serveur applicatif : Tomcat Un serveur web : Apache Une base de donnée : PostgreSQL 3 Les concepts importants de Webase 5 Dependency injection et Aspect Oriented Programming Les architectures MVC et 3 tiers 4 Webase 5 avec les mains Les principaux packages Webase 5 Les fichiers de configuration de Webase 5

Webase 5 avec les mains Les fichiers de configuration de Webase 5 acegi.xml C est là que sont définis les paramètres relatifs à l authentification et les autorisations. On trouve notamment en bas du fichier les autorisations requises pour charger telle ou telle page en fonction de l uri. Il exite une documentation très bien faite disponible à http://www.acegisecurity.org/docbook/acegi.html.

Webase 5 avec les mains Les fichiers de configuration de Webase 5 hibernate.xml Dans ce fichier, on définit les paramètres de la base de données(son type (PostgreSQL), l utilisateur avec lequel il faut se connecter, le mot de passe, etc...), du LDAP SdE et de l Active Directory afin de pouvoir effectuer les requêtes HQL de façon transparente. Il y a aussi les fichiers de mapping qui sevent à faire la correspondance entre le champ d une table et l attribut d une classe.

Webase 5 avec les mains Les fichiers de configuration de Webase 5 log4j.xml Dans le log4j.xml, on peut définir le format des logs que l on désire ainsi que le degré de verbosité des différents composants de Webase : Spring, Hibernate, etc... La syntaxe est très intuitive.

Webase 5 avec les mains Les fichiers de configuration de Webase 5 webase5-spring.xml Spring sert de glue entre les différents compsosants de Webase 5 et on trouve donc énorméments de paramètres définis dans ce fichier, notamment : l emplacement des fichiers de configuration globaux webase5.properties et mail.properties, les beans de Service, la correspondance uri action, divers beans.

Webase 5 avec les mains Les fichiers de configuration de Webase 5 struts-config.xml Dans le fichier de configuration de struts, on peut trouver : la correspondance nom du formulaire classe associée, l action à invoquer en fonction de l uri (redondance avec Spring) ainsi que le template à charger en fonction du forward appelé (donné par mapping.findforward nomduforward ) dans les actions) un lien vers la config de Tiles pour que Struts puisse faire la correspondance nom du template JSPs.

Webase 5 avec les mains Les fichiers de configuration de Webase 5 webase5-tiles.xml C est là que sont définis les templates. On définit d abord un template défaut avec le menu, le header, le footer, etc... communs à toutes les pages de Webase 5. Ensuite on crée des templates qui héritent de ce template principal en remplaçant le corps et les onglets. La syntaxe est très simple à comprendre.

Webase 5 avec les mains Les fichiers de configuration de Webase 5 C est fini! : ( FIN