Mardi 9 septembre 2008. www.parisjug.org. www.parisjug.org

Documents pareils
DSL. Domain Specific Language. À l'aide des technologies Eclipse Modeling. Goulwen Le Fur Le 23 novembre 2012

Java pour le Web. Cours Java - F. Michel

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Glassfish dans le milieu médical. Sun Aquarium Paris 26 Juin 2009 Jacky Renno

Environnements de développement (intégrés)

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

4. SERVICES WEB REST 46

Compte Rendu d intégration d application

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Architecture Orientée Service, JSON et API REST

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Java au cœur de la base de données Oracle

Vulgarisation Java EE Java EE, c est quoi?

Projet de développement

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Le moteur de workflow JBPM

JOnAS Day 5.1. Outils de développements

NOVA BPM. «Première solution BPM intégr. Pierre Vignéras Bull R&D

Machines Virtuelles. et bazard autour. Rémi Forax

Java et les bases de données

Plan du cours. Historique du langage Nouveautés de Java 7

Environnements de développement (intégrés)

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

Cours en ligne Développement Java pour le web

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Module BD et sites WEB

INGÉNIEUR LOGICIEL JAVAEE / GROOVY 8 ANS D EXPÉRIENCE

Tutoriel d installation de Hibernate avec Eclipse

Création d une application JEE

PRODUCTS LIST (updated 11th January 2010)

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

La base de données XML exist. A. Belaïd

TP1 : Initiation à Java et Eclipse

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

Construction et déploiement d applications Java avec Maven, Archiva, Groovy et Jenkins

JOnAS 5. Serveur d application d

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Cours 1: Java et les objets

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.

1 JBoss Entreprise Middleware

TP1. Outils Java Eléments de correction

Initiation à JAVA et à la programmation objet.

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

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

Java DataBaseConnectivity

Éléments de programmation et introduction à Java

Celui qui vous parle. Yann Vigara

PRIMAVERA P6 ENTERPRISE PROJECT PORTFOLIO MANAGEMENT WEB SERVICES

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)

Vérifier la qualité de vos applications logicielle de manière continue

Introduction à Java. Philippe Genoud.

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

SOA Open Source Intégration des services et business process dans une architecture SOA Open Source. Bruno Georges JBoss, a Division of Red Hat

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

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

Chapitre I Notions de base et outils de travail

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


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

Mise en œuvre des serveurs d application

APIs de table pour SQL Server

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)

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Mettez les évolutions technologiques au service de vos objectifs métier

Bases Java - Eclipse / Netbeans

Introduction à la plateforme J2EE

OpenPaaS Le réseau social d'entreprise

as Architecture des Systèmes d Information

Alignement avec les métiers par le test fonctionnel et d acceptation en projets agiles

Remote Method Invocation (RMI)

D une part, elles ne peuvent faire table rase de la richesse contenue dans leur système d information.

Petit Déjeuner Pépinière du Logiciel Libre. 25 juin 2008

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

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Java - la plateforme

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

Jean-Philippe VIOLET Solutions Architect

Open Source Job Scheduler. Installation(s)

Générer du code à partir d une description de haut niveau

Les tableaux de bord de pilotage de nouvelle génération. Copyright PRELYTIS

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Gérer ses environnements de développement avec Vagrant RMLL 2012

Programmation Web. Madalina Croitoru IUT Montpellier

Web Tier : déploiement de servlets

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Cursus Sage ERP X3 Outils & Développement. Le parcours pédagogique Sage ERP X3 Outils et Développement

2 Chapitre 1 Introduction

LE MOT DE LA DIRECTION

Eclipse atelier Java

Cedric Dumoulin (C) The Java EE 7 Tutorial

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

Laurent JOLIN. Compétences. Expériences professionnelles. Architecte technique. 15, rue Jean Favier Toulouse

Présentation de SOFI 2.0

INF2015 Développement de logiciels dans un environnement Agile Examen final hiver 2015

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

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Transcription:

Mardi 9 septembre 2008 www.parisjug.org www.parisjug.org Copyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternité Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique

Mardi 9 septembre 2008 Introduction à Groovy Un langage dynamique pour la JVM Guillaume Laforge VP Technology G2One www.parisjug.org Copyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternité Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique

Guillaume Laforge Chef de projet de Groovy Spec Lead du JSR-241 Initiateur du framework Grails Co-auteur de Groovy in Action Fondateur de G2One, Inc.

Objectifs DECOUVRIR : Qu est-ce que Groovy? Domain-Specific Language Le framework web Grails 4

Agenda Qu est-ce que Groovy? Et qu est-ce que Grails? Groovy en détail Sa syntaxe et ses APIs Les nouveautés de Groovy 1.5 Cas d utilisation de Groovy Domain-Specific Languages 5

Qu est-ce que Groovy? 6

Décortiquons Groovy Groovy est un langage dynamique pour la machine virtuelle Java Langage dynamique Inspiration provenant de langages existants Java pour la syntaxe générale facile à apprendre Groovy est un langage Orienté Objet Ruby et Smalltalk pour les closures, les aspects de programmation fonctionnelle Machine virtuelle Java Peut être interprété ou compilé Au final : du bytecode Java est généré 7

Un projet Open Source 8 Open Source : sous licence Apache Hébergé chez Codehaus Mature : plus de 5 ans, version 1.5.6 Une petite vingtaine de committers certains à plein temps, ou dédiés au plugin Eclipse, sur Swing... contributions externes IBM, Oracle, JBoss Un grand succès 32K-37K downloads / mois comparé à ~30K pour JRuby, ~7K pour Jython et ~5K pour Scala Mailing-listes les plus actives milliers d abonnés En cours de standardisation Au sein du Java Community Process JSR-241 Java Specification Request

Intégré partout! Groovy est intégré... Dans d autres projets Open Source Spring, JBoss SEAM, ServiceMix, Oracle OC4J, Mule... Dans des applications métier critiques Mutual of Omaha US Fortune 500 National Cancer Institute Dans des produits commerciaux IBM ProjectZero SAP Composition on Grails Oracle Data Integrator Oracle Fusion ADF Business Components 9

Un projet innovant reconnu 40 propositions, 10 nominés Groovy a gagné le premier prix Le projet le plus créatif et innovant de 2007 Donnation de 10 000 Gagnant en 2006 et 2008 Spring et Grails 10

Book Growth 11

Qu est-ce que Grails? Grails est un framework de développement d applications Web Inspiré par Ruby on Rails, Django, TurboGears Mais s appuyant sur des briques Open Source reconnues et éprouvées Spring, Hibernate, Quartz, SiteMesh... Avantages Facile à prendre en main Conventions over Config. Réutilisation de l existant Schémas de base existants, configurations Spring Déploiement sur les serveurs d application Java Protection de l investissement 12

13 Grails : la Big Picture

Groovy, plus en détail 14

Pour commencer Aller sur http://groovy.codehaus.org/download Télécharger la dernière version Groovy 1.5.6 dernière version officielle Groovy 1.6-beta-1 prochaine version en béta Dézipper l archive dans un répertoire Créer une variable d environnement GROOVY_HOME pointant vers ce répertoire Ajouter $GROOVY_HOME/bin au path Vous êtes prêts! 15

En un coup d oeil Totalement Orienté Objet Closures : bout de code réutilisable Propriétés : pas besoin d attendre Java 7 ou 8 Surcharge d opérateurs : pas le cauchemar de C++ Syntaxe native pour les listes, maps, regex Multi-méthodes GPath : navigation à la XPath dans les graphes Arithmétique en BigDecimal par défaut Parenthèses et points-virgules optionnels APIs : SQL, Ant, XML, templates, Swing, JMX, WS Idéal pour les Domain-Specific Languages 16

Hello World en Java public class HelloWorld { private String name; public void setname(string name) { this.name = name; } public String getname() { return name; } public String greet() { return "Hello "+ name; } 17 } public static void main(string[] args) { HelloWorld helloworld = new HelloWorld(); helloworld.setname("groovy"); System.out.println( helloworld.greet() ); }

Hello World en Groovy public class HelloWorld { private String name; public void setname(string name) { this.name = name; } public String getname() { return name; } public String greet() { return "Hello "+ name; } 18 } public static void main(string[] args) { HelloWorld helloworld = new HelloWorld(); helloworld.setname("groovy"); System.out.println( helloworld.greet() ); }

Démonstration www.parisjug.org Copyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternité Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique

Un peu plus Groovy class HelloWorld { String name String greet() { "Hello $name" } } def helloworld = new HelloWorld(name: "Groovy") println helloworld.greet() 20

Listes, maps, regex, ranges... Listes def list = [ Groovy, Grails ] Maps dictionnaires def states = [CA: California, TX: Texas ] Expressions régulières assert foo ==~ /fo*/ Ranges def range = 1..10 Chaînes multilignes def multiligne = plusieurs lignes GString : println My name is $name 21

Les closures Pas besoin d attendre Java 7/8/9 Les closures block de code assignable et réutilisable combiner, stocker, partager données et logique Exemples new File('x.txt').eachLine{ println it } [0, 1, 2].each { println it } def numbers = 1..100 numbers.findall { it > 90 } def odd = { it % 2 == 1 } numbers.findall( odd ) 22 Thread.start { /* do something */ }

Interopérabilité avec Java Groovy génère des.class bytecode Java Mêmes chaînes de caractères et expressions régulières Mêmes APIs JDK, collections, 3rd party Même modèle de sécurité, même threading Même modèle de programmation Orienté Objet Compilation jointe JInterface GInterface <<implements>> <<implements>> GClass JClass 23 JClass GClass

Nouveautés Groovy 1.5 Groovy 1.0 (jan. 2007) et 1.5 (déc. 2007) performances, fonctionnalités dynamiques, outillage Ajout de fonctionnalités Java 5 annotations, generics enums, import static, varargs Groovy Le seul langage dynamique alternatif pour la JVM qui supporte les spécificités Java 5 EJB 3, JPA, TestNG, Hibernate annotations, Spring annotations Contribution de JBoss pour la mise au point 24

JBoss SEAM Exemple pris de la documentation SEAM @Entity @Name("hotel") class Hotel implements Serializable { @Id @GeneratedValue Long id @Length(max=50) @NotNull String name 25 } @Override String tostring() { "Hotel ${name}" }

Outillé : IntelliJ IDEA IntelliJ IDEA, Eclipse, NetBeans, JDeveloper 26

Outillé : Eclipse IntelliJ IDEA, Eclipse, NetBeans, JDeveloper 27

Manipuler du XML Avec ce bout d XML def xml = """ <languages> <language name="groovy"> <feature coolness="low">sql</feature> <feature coolness="high">template</feature> </language> <language name="perl"/> </languages>""" Naviguer ce graphe XML def root = new XmlParser().parseText(xml) println root.language.feature[1].text() root.language.feature.findall{ it['@coolness'] == "low" }.each{ println it.text() } 28

Produire du XML On peut également en produire facilement new MarkupBuilder().languages { language(name: "Groovy") { feature(coolness: "low", "SQL") feature(coolness: "high", "Template") } language(name: "Perl") } 29

Interfaces Swing import javax.swing.windowconstants as WC import groovy.swing.swingbuilder def themap = [color: "green", object: "pencil"] def swing = new SwingBuilder() def frame = swing.frame( title: 'A Groovy Swing', location: [240,240], defaultcloseoperation:wc.exit_on_close) { panel { for (entry in themap) { label(text: entry.key) textfield(text: entry.value) } button(text: 'About', actionperformed: { def pane = swing.optionpane(message: 'SwingBuilder') def dialog = pane.createdialog(null, 'About') dialog.show() }) button(text:'quit', actionperformed:{ System.exit(0) }) } } frame.pack() frame.show() 30

Démonstration www.parisjug.org Copyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternité Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique

Support JDBC et SQL JDBC facile def sql = Sql.newInstance(url, usr, pwd, driver) sql.execute("insert into table values ($foo, $bar)") sql.execute("insert into table values(?,?)", [a, b]) sql.eachrow("select * from USER") { print it.name } def list = sql.rows("select * from USER") DataSet : Object Relational Mapping léger def set = sql.dataset("user") set.add(name: "Johnny", age: 33) set.each { user -> println user.name } set.findall { it.age > 22 && it.age < 42 } 32

COM / ActiveX automation Des souvenirs de VBScript? def outlook = new ActiveXObject("Outlook.Application") def message = outlook.createitem(0) def emails = glaforge@gmail.com def rec = message.recipients.add(emails) rec.type = 1 message.display(true) 33

Pourquoi intégrer Groovy? Groovy est idéal pour le test unitaire mocks, stubs, GroovyTestCase tests plus concis et plus lisibles Un outil pratique et utile dans son escarcelle Externaliser la logique métier rêgles métier pouvant être écrites par les experts les rêgles peuvent suivre leur propre cycle de vie Proposer des points d extension pour des plugins additionels pour personnaliser une application selon les besoins du client 34

Quelques cas d utilisation Mutual of Omaha 50K LOC, moitié code métier / moitié tests Calcul de risque de polices d assurance Le ministère de la Justice Approche MDA UML, XMI, templating et génération de code EADS Interface de soumission de calcul distribué Institutions financières Personnalisation d outil de traders Gestion de hedge funds traitant des millions de dollars CISCO, Institut américain du cancer... 35

Différents mécanismes javax.script.* / JSR-223 Apache Bean Scripting Framework vieillisant : préférer JSR-223 ou mécanismes Groovy Spring : support de Groovy intégré <lang:groovy id= bean script-source=... /> Mécanismes spécifiques de Groovy Eval, GroovyShell, GroovyClassLoader, GroovyScriptEngine 36

JDK 6 : javax.script.* / JSR-223 API de scripting agnostique pour s intégrer à des langages différents de Java scripting.dev.java.net propose un moteur de script enrobant Groovy Ajouter les jars sur le classpath et c est parti! Exemple : ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine gengine = manager.getenginebyname("groovy"); String result = (String) gengine.eval(" Foo * 2"); 37

Intégration Spring 2.x Depuis Spring 2.0, ajout d un namespace spécial pour les langages alternatifs pour la configuration / définitions de beans on peut injecter un POJO dans un POGO et vice versa mélange complètement transparent de Groovy et Java! Exemple : <lang:groovy id="events" script-source="classpath:dsl/eventschart.groovy" customizer-ref="eventsmetaclass" /> 38

Mécanismes Groovy Groovy peut-être compilé ou interprété Compiler en.class et mettre dans un JAR Mais Groovy offre différents mécanismes pour intégrer du code Groovy à la volée ( interpreté ) Eval pour évaluer des expressions simples GroovyShell similaire à l API javax.script GroovyScriptEngine pour des scripts interdépendants avec rechargement sur modif. GroovyClassLoader pour les utilisations plus avancées, avec manipulation d AST... 39

Les Domain-Specific Languages 40

Qu est-ce qu un DSL? DSL : un Domain-Specific Language parfois appelé little language Wikipedia A DSL is a programming language designed to be useful for a specific set of tasks C est un langage qui modèlise un certain domaine de connaissance ou d expertise, où les concepts du domaine sont rattachés aux éléments du langage 41

Caractéristiques d un DSL Un Domain-Specific Language est un langage qui n est pas nécessairement Turing complet qui couvre un certain domaine de connaissance qui a une forme textuelle ou visuelle qui produit au final un résultat configure des objets, représente des données, une notation qui peut être interne ou externe Embedded DSL se reposant sur un langage hôte ou indépendant avec un lexer / parser maison qui a certaines propriétés qualitatives facilité d écriture, utilisable, testabilité, extensible 42

Exemples de DSLs Technique SELECT * FROM USER WHERE NAME LIKE Guil% ^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$ Notations 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 U R U2 R U R U R 43 Langages plus métier Description des rêgles de calcul de risque sur des polices d assurance Rêgle comptables d une banque Description de facturation, de calcul de gestion de fonds des particularités techniques d un produit...

Pourquoi créer un DSL? Utiliser un langage plus expressif qu un langage de programmation généraliste Partager une métaphore commune entre développeurs et experts métier Mettre à contribution les expers métier pour le développement de la logique métier Eviter de noyer le code métier dans du code technique sans intérêt Séparer proprement la logique métier du code applicatif technique 44

Syntaxes et fonctionnalités offertes par Groovy Parenthèses optionnelles, map, propriété sur les entiers move left compare indicator: Nikei, withfund: Aberdeen account.debit amount: 30.euros, in: 3.days Structures de contrôle personnalisées à base de closures unless ( account.balance < 0 ) { account.debit 10.dollars } execute( withtimeoutof: 50.seconds ) {... } Surcharge d opérateurs a + b équivalent à a.plus(b) taska taskb equivalent à taska.or(taskb) 45

Conclusion 46

Pour finir... Langage dynamique parfaitement intégré avec l environnement Java Simplifie la vie des développeurs Perspectives intéressantes pour étendre une application existante Parfait pour les Domain-Specific Languages Propose un framework de développement Web intégré réutilisant l état de l art OSS Protège son investissement en compétences, en développements existants en matériel, et en logiciel 47

Quelques liens Groovy : http://groovy.codehaus.org Grails : http://grails.org Groovy blogs: http://groovyblogs.org AboutGroovy: http://aboutgroovy.com G2One: http://www.g2one.com 48

Questions / Réponses www.parisjug.org Copyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternité Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique

Sponsors 09/09/2008 Introduction à Groovy www.parisjug.org Copyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternité Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique

Merci de votre attention! www.parisjug.org Copyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternité Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique

Licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ 09/09/2008 Introduction à Groovy www.parisjug.org Copyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternité Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique