Rails, une alternative à J2EE



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

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

Pratique et administration des systèmes

TP réseau Android. Bidouilles Tomcat. a) Installer tomcat : il suffit de dézipper l'archive apache-tomcat windowsx64.zip.

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

Architecture de la plateforme SBC

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

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

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.

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

1 / Introduction. 2 / Gestion des comptes cpanel. Guide débuter avec WHM. 2.1Créer un package. 2.2Créer un compte cpanel

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

GUIDE D INSTALLATION DE L APPLICATION GECOL SUR

Etude de cas : PGE JEE V2

Tutoriel compte-rendu Mission 1

SITE WEB E-COMMERCE ET VENTE A DISTANCE

Application web de gestion de comptes en banques

Documentation de conception

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

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

Compte Rendu d intégration d application

Programmation Web. Madalina Croitoru IUT Montpellier

Installation et prise en main

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Point sur les solutions de développement d apps pour les périphériques mobiles

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

PHP 5.4 Développez un site web dynamique et interactif

PHP 5. La base de données MySql. A. Belaïd 1

CREATION WEB DYNAMIQUE

Symantec Backup Exec Guide d'installation rapide

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

PROCEDURE D'INSTALLATION OPENREPORTS

Olivier Mondet

Présentation du Framework BootstrapTwitter

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

Créer un rapport pour Reporting Services

Nouveautés joomla 3 1/14

I. MySQL : Serveur et SGBD

Déploiement d'une application Visual Studio Lightswitch dans Windows Azure.

Oracle Learning Library Tutoriel Database 12c Installer le logiciel Oracle Database et créer une Database

contact@nqicorp.com - Web :

Expert technique J2EE

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

Comment créer vos propres pages web?

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Installation de Concrete 5

INSTALLATION ET CONFIGURATION D'UN SERVEUR WEB SUR MAC OS X

Symantec Backup Exec Guide d'installation rapide

Service Informatique et Télématique (SITEL), Emile-Argand 11, 2009 Neuchâtel, Tél ,

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

Introduction MOSS 2007

Documentation Projet ASR : Construction d un système réparti multi-échelle

La double authentification dans SharePoint 2007

Catalogue des Formations Techniques

INGÉNIEUR - DÉVELOPPEUR EXPÉRIMENT É JAVA - J2EE. 27 ans - 5 ans d'expérience

Formation en Logiciels Libres. Fiche d inscription

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

THÉMATIQUES. Comprendre les frameworks productifs. Découvrir leurs usages. Synthèse

Les frameworks au coeur des applications web

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)

Applications distribuées: le retour du client "riche"

OpenPaaS Le réseau social d'entreprise

Installer un serveur web de développement avec VirtualBox

CALENDRIERS DES FORMATIONS LILLE

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)

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

1. Installation d'un serveur d'application JBoss:

Le centre sera fermé du 20 au 31 juillet 2015

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Quick Start Installation de MDweb version 2.3

Tutoriel d installation de Hibernate avec Eclipse

Oracle WebLogic Server (WLS) 11gR1 ( et ) Installation sur Oracle Linux 5 et 6 Hypothèses Installation Oracle Linux 5 (OL5)

JOnAS Day 5.1. Outils de développements

Comparatif CMS. Laurent BAUREN S Bérenger VIDAL Julie NOVI Tautu IENFA

Assistance à distance sous Windows

Programmation Objet - Cours II

ANWAR EL BARAKA 14 ANS D EXPERIENCE - CERTIFIE PRINCE2 & ITIL

10. Base de données et Web. OlivierCuré

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

Symantec Backup Exec 12.5 for Windows Servers. Guide d'installation rapide

Sage CRM. 7.2 Guide de Portail Client

Un serveur d'archivage

TUTORIEL D INSTALLATION D ORACLE ET DE SQL DEVELOPPER TUTORIEL D INSTALLATION D ORACLE...1 ET DE SQL DEVELOPPER...1

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

Architecture Orientée Service, JSON et API REST

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

Présentation, mise en place, et administration d'ocs Inventory et de GLPI

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Mise en œuvre des serveurs d application

Projet Java EE Approfondi

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

COURS 5 Mettre son site en ligne! Exporter son site avec WordPress Duplicator Installer un logiciel FTP Faire le suivi des visites de son site avec

Installation d'une galerie photos Piwigo sous Microsoft Windows.

Modélisation et Gestion des bases de données avec mysql workbench

Installation et configuration de Vulture Lundi 2 février 2009

Transcription:

Rails, une alternative à J2EE http://www.rubyonrails.org/ Présentation Ruby on Rails, ou RoR ou Rails, est un framework web basé sur le design pattern MVC et utilisant le langage Ruby. Ruby est un langage de programmation interprété orienté objet. Toute donnée est un objet, y compris les types primitifs. Rails a été conçu avec l'idée de respecter les deux principes «Ne pas se répéter» et «Convention plutôt que Configuration». Le premier prône la réutilisation du code déjà existant. Le deuxième force les développeurs à respecter des conventions de nommage. C'est à première vue une contrainte, mais cela va permettre à Rails de prre en charge la configuration de l'application au lieu de laisser cette tâche aux développeurs. Le framework MVC Rails est complet et propose des outils pour chacune des couches de l'application. le modèle est géré par le composant ActiveRecord, le contrôleur et la vue par Action Pack, les web services par le composant Action Web Service. Ajax est intégré avec le composant Prototype. Installation Télécharger sur le site RubyInstaller l'installation tout-en-un de Ruby. Installer Ruby en suivant les recommandations de l'installeur. Pour tester que Ruby est bien installé, dans une invite de commandes, taper la commande irb; irb est un interpreteur de commandes ruby, comme on a pour le langage Caml ou des langages fonctionnels comme Scheme ou Lisp. Passons à l'installation de Rails. Rails est un framework MVC pour Ruby. La procédure d'installation est la même que pour les autres packages de Ruby. Dans une invite de commandes, tapez la commande: gem install rails remote gem téléchargera et installera lui même le package rails ainsi que tous les packages dont dép Rails. Tout est prêt pour mettre en place notre prémiere application Rails. Configuration de l'application L'application est un annuaire gérant la liste des collaborateurs de l'entreprise. Pour le stockage des données, nous créeons une base de données Mysql annuaire. Dans cette base de données, nous créeons une table collaborateurs. (le pluriel est important pour le nom de la base, Rails imposant certaines régles de nommage) Rails impose d'avoir un champ id comme primary key auto-incrémentée. Ensuite, dans une console, placez-vous dans le répertoire de votre choix où l'application sera placée et tapez la commande :

rails annuaire Rails va créer pour nous le squelette de notre application. Allez dans le répertoire annuaire nouvellement créé. Dans le répertoire app se trouveront nos fichiers ruby. Rails va nous aider pour les créer, notamment il va génerer pour nous les fichiers de mapping avec la base. Dans le fichier config/database.yml se trouvent les informations pour se connecter à la base. Par défaut, rails configure l'accès à 3 bases, une pour le développement, une pour la production et une pour les tests. Seule celle pour le développement nous intéresse pour le moment. Au besoin, remaniez les informations comme username, password, host et database. Dans notre cas, database est modifié. Le nom de la base est annuaire et non annuaire_development. Pour créer ensuite un CRUD permettant de manipuler les données de notre base avec les opérations de base (Create, Read, Update, Delete), dans une console, allez dans le répertoire annuaire et tapez la commande : ruby script\generate scaffold Collaborateur le script ruby generate va generer pour nous le modele, le controlleur et les vues de notre CRUD. Il ne reste alors plus qu'à le tester. Lançons pour ça le serveur d'applications Rails; tapez dans une console : ruby script\server Dans votre navigateur web, allez à l'url : http://localhost:3000/collaborateurs Vous avez déjà un CRUD basique qui marche sur le serveur d'applications WebRick, idéal pour le

développement. Lorsque vous souhaiterez passer en production, il sera possible de passer sur un serveur Apache. Validation de formulaire Pour rester cohérent avec la base de données, nous devons exiger que les champs du formulaire Nom et Prénom de la page edit ou new soient non nuls. Modifions le fichier app/models/controlleur.rb: class Collaborateur < ActiveRecord::Base validates_presence_of :nom, :prenom Maintenant, si le formulaire est validé avec un des champs nom ou prenom vide, nou aurons le message d'erreur suivant : Nous souhaiterions un contrôle sur le champ mail pour qu'il respecte le format des adresses mails. Modifions le fichier app/models/controlleur.rb: class Collaborateur < ActiveRecord::Base validates_presence_of :nom, :prenom validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/ on aura alors ce message d'erreur si jamais le format du mail est invalide :

Modification des vues On peut vouloir modifier l'affichage d'une des pages, par exemple celle listant les collaborateurs. Rails nous a généré les fichiers.rhml qui sont des pages html agrémentées de code ruby. Modifions donc le fichier app/views/collaborateur/list.rhtml pour que la liste n'affiche que le nom et le prenom du collaborateur et que ce nom+prenom soit un lien vers la fiche complete du collaborateur: <h1>listing collaborateurs</h1> <table> <% for collaborateur in @collaborateurs %> <tr> <td><%= link_to collaborateur.nom + ' ' + collaborateur.prenom, :action => 'show', :id => collaborateur %></td> <td><%= link_to 'Edit', :action => 'edit', :id => collaborateur %></td> <td><%= link_to 'Destroy', { :action => 'destroy', :id => collaborateur }, :confirm => 'Are you sure?', :post => true %></td> </tr> <% %> </table> <%= link_to 'Previous page', { :page => @collaborateur_pages.current.previous } if @collaborateur_pages.current.previous %> <%= link_to 'Next page', { :page => @collaborateur_pages.current.next } if @collaborateur_pages.current.next %> <br />

<%= link_to 'New collaborateur', :action => 'new' %> Pour que le champ date de notre formulaire soit plus «francophone», il faut modifier le fichier app/views/collaborateur/_form.rhtml et mettre + d'options sur le date_select : <%= date_select 'collaborateur', 'datenaissance', :order => [:day, :month, :year], :use_month_numbers => true, :start_year => 1900, :_year => Date.today.year, :include_blank => true%> le date_select va alors chercher l'information datenaissance dans la table collaborateur. L'ordre des select sera (jour, mois, année), les noms des mois seront remplacés par leur numero, la fourchette des années sera [1900;année en cours] et l'utilisateur a la possibilité de ne pas renseigner l'un des select. Pour que le format d'affichage des dates soit par defaut jj/mm/yyyy et que les noms des jours et mois soient en français, il faut ajouter à la fin du fichier config/environment.rb cette ligne : require 'overrides' et ajouter le fichier lib/overrides.rb : Date::MONTHS = { 'Janvier' => 1, 'Fevrier' => 2, 'Mars' => 3, 'Avril' => 4, 'Mai' => 5, 'Juin' => 6, 'Juillet' => 7, 'Aout' => 8, 'Septembre'=> 9, 'Octobre' =>10, 'Novembre' =>11, 'Decembre' =>12 } Date::DAYS = { 'Lundi' => 0, 'Mardi' => 1, 'Mercredi' => 2, 'Jeudi'=> 3, 'Vredi' => 4, 'Samedi' => 5, 'Dimanche' => 6 } Date::ABBR_MONTHS = { 'jan' => 1, 'fev' => 2, 'mar' => 3, 'avr' => 4, 'mai' => 5, 'juin' => 6, 'juil' => 7, 'aou' => 8, 'sep' => 9, 'oct' =>10, 'nov' =>11, 'dec' =>12 } Date::ABBR_DAYS = { 'lun' => 0, 'mar' => 1, 'mer' => 2, 'jeu' => 3, 'ven' => 4, 'sam' => 5, 'dim' => 6 } Date::MONTHNAMES = [nil] + %w(janvier Fevrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Decembre ) Date::DAYNAMES = %w(lundi Mardi Mercredi Jeudi Vredi Samedi Dimanche ) Date::ABBR_MONTHNAMES = [nil] + %w(jan fev mar avr mai juin juil aou sep oct nov dec) Date::ABBR_DAYNAMES = %w(lun mar mer jeu ven sam dim) class Time alias :strftime_nolocale :strftime def strftime(format) format = format.dup format.gsub!(/%a/, Date::ABBR_DAYNAMES[self.wday]) format.gsub!(/%a/, Date::DAYNAMES[self.wday]) format.gsub!(/%b/, Date::ABBR_MONTHNAMES[self.mon]) format.gsub!(/%b/, Date::MONTHNAMES[self.mon]) self.strftime_nolocale(format) Mapping des relations 1-n Nous allons ajouter une table fonctions à notre base de données pour illustrer les relations 1-n. Un collaborateur exerce une fonction et une fonction peut être exercée par plusieurs collaborateurs.

Comme pour collaborateurs, nous devons avoir une colonne id comme clé primaire et auto-incrémentée. De plus, il faut rajouter une colonne fonction_id à la table collaborateurs en tant que int(6). Dans une console, nous lançons la commande : ruby script\generate scaffold fonction Un CRUD est alors disponible pour les fonctions à l'url : http://localhost:3000/fonctions vous pouvez l'utiliser pour y entrer des fonctions qui seront ensuite affectées aux collaborateurs. Pour faire la jointure entre les deux classes, il faut ajouter une ligne dans chacune d'entre elles : Dans le fichier app/models/collaborateur.rb : class Collaborateur < ActiveRecord::Base belongs_to :fonction validates_presence_of :nom, :prenom validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/ et dans le fichier app/models/fonction.rb : class Fonction < ActiveRecord::Base has_many :collaborateurs Il faut maintenant modifier le contrôleur de collaborateur pour qu'il prenne en compte les fonctions. On modifie donc le fichier app/controllers/collaborateurs_controller.rb et en particulier sa méthode edit : def edit @collaborateur = Collaborateur.find(params[:id]) @fonctions = Fonction.find_all La vue utilisera cet attribut @fonctions pour remplir le select du formulaire. Logiquement, il faut donc faire de même dans la méthode new : def new @collaborateur = Collaborateur.new @fonctions = Fonction.find_all Il faut finalement ajouter un select au fichier app/views/collaborateurs/_form.rhtml : <p> </p> <b>fonction:</b><br> <select name="collaborateur[fonction_id]"> <% @fonctions.each do fonction %> <% %> </select> <option value="<%= fonction.id %>" <%= ' selected' if fonction.id == @collaborateur.fonction_id %>> <%= fonction.titre %> </option> et afficher cette nouvelle information dans la fiche d'un collaborateur dans le fichier app/views/collaborateurs/show.rhtml : <p><b>fonction: </b><%= @collaborateur.fonction.titre %></p>

Conclusion Ce qui saute aux yeux est le temps gagné en utilisant Rails. Cette application Annuaire a été développé dans un premier temps avec les technologies J2EE. Je connaissais bien Java, j'avais une premiere experience dans le developpement d'applications J2EE avec servlets et jsp mais ne connaissais ni Hibernate, ni Struts, ni Spring. J'ai mis au moins deux semaines pour apprre à me servir de ces frameworks et les mettre en pratique pour réaliser l'application Annuaire et écrire le document expliquant mon travail. Dans un second temps, pour tester Rails, l'application a été redeveloppé entièrement avec Rails. Je ne connaissais pas Ruby, je ne connaissais pas le fonctionnement de Rails. J'ai réalisé le même travail que j'avais fait avec J2EE, mais cette fois ci en 2 jours. Le gain de temps est donc clairement évident. Ce comparatif est fait sur le développement d'une petite application, mais on a des retours de développeurs travaillant sur de grosses applications (comme James Duncan, auteur de Tomcat, Ant et de l'api servlet) affirmant que Rails est un framework très bien pensé qui peut être utilisé sur de gros projets, et facilite le développement et aboutit à un code bien formé et facilement maintenable.