Grails im Überblick und in der Praxis

T
Tobias KraftIT Consultant
Grails im Überblick und
      in der Praxis
     JUG Karlsruhe - 10.04.2013

   Darius Henkelmann - Tobias Kraft
Wer sind wir ?

 • Tobias Kraft
   •   Senior Consultant bei der exensio GmbH
   •   Java Enterprise Technologien und Grails-Ökosystem
   •   Grails seit 2010


 • Darius Henkelmann
   •   Senior Application Engineer bei der Unic GmbH
   •   Java Enterprise, Softwarearchitektur, Ecommerce, Hybris
       und Webtechnologien
   •   Grails 2007 – Schulungszentrum und Portierung Frontend
       Ecommerce-System auf Basis von Hybris
Ziele des Vortrags

 • Was ist Grails und was sind die Ziele?
 • Auf welchen Technologien baut Grails auf?
 • Welches Programmiermodell bietet Grails?
 • Wie sind unsere Erfahrungen mit Grails in Projekten?
 Auf was werden wir nicht eingehen
 • Groovy
 • Jedes Detail
 • Fehler und Probleme aus anderen Projekten
 Wir laden zur weiteren Diskussion am Stammtisch ein!
Agenda



           Einführung in Grails

         Wichtige Grails-Prinzipien

            Integration mit Java

            Grails in der Praxis
Zielgruppe / Einsatzgebiete von Grails

 • Java-Entwickler
 • Webentwickler ohne Java-Vorkenntnisse
 • Newbies und Seniors
 • Geeignet von Kleinprojekten bis zu größeren Enterprise-
     Projekten
 •   Erstellung Prototypen
Grails Rückblick
 • Juli 2005 - Projektbeginn mit Guillaume LaForge, Steven
     Devijver und Graeme Rocher
 •   G2One, November 2008 SpringSource, VMWare
 •   Grails 0.5 (05.2007) - URL Mappings, Command objects
 •   Grails 1.0 (02.2008) - ORM DSL, JNDI Data Sources
 •   Grails 1.3 (05.2010) - Groovy 1.7
 •   Grails 1.4 (05.2011) - Spring 3.1, Groovy 1.8, Servlet 3.0
 •   Grails 2.0 (12.2011) - Interactive Mode, Reloading Agent
 •   Grails 2.1 (05.2012) - Maven Optimierung, Grails Wrapper
 •   Grails 2.2 (12.2012) - Groovy 2.0
Was ist Grails?

 A Full-Stack Web (MVC) Framework [2]
 • Install & GO!
 • Nahtlose Java Integration, wird auf der Java Virtual
   Machine (JVM) ausgeführt
 • Rapid development
   • Use a Java-like dynamic language (Groovy)
   • Convention over Configuration
   • Don’t repeat Yourself (DRY)
   • Inspired by Ruby on Rails and others
Grails Aufbau [3]
Installation

 • Voraussetzung: Java (JDK) 1.6 oder höher
 • Download Grails (http://grails.org/download)
 • Umgebungsvariablen JAVA_HOME und PATH setzen
 • Terminal öffnen



 • Alternative: Installation mit   GVM (http://gvmtool.net)
Kommandos

grails <Befehl>              Muster
grails help <Befehl>         Zeigt die Hilfe für Grails oder für ein Befehl
                             an
create-app                   Erzeugt ein neues Grails Projekt.
create-controller <Name>     Erzeugt einen Controller
create-domain-class <Name>   Erzeugt eine Domain-Klasse (Model)
generate-controller <Name>   Generiert einen Controller für ein Model
generate-views <Name>        Generiert die CRUD-Views für ein Model
create-service <Name>        Erzeugt eine Service-Klasse
create-unit-test <Name>      Erzeugt eine Unit-Test-Klasse
run-app                      Startet die Anwendung
Demo-Time
IDE Unterstützung

 • Eclipse, STS
 • NetBeans
 • TextMate
   •   grails integrate-with --textmate
 • IntelliJ IDEA
   •   Ultimate Edition – Voller Support für Grails
       • File -> Import Project-> Create project from existing sources
   •   Community Edition
       • Unterstützung von Grails jedoch nicht mit alle Features (GSP-
         Editor, Classpath-Management, Quick-Acces)
   •   grails integrate-with --intellij
Aufbau eines Grails-Projektes
 Verzeichnis       Inhalt
 grails-app        grails-spezifischer Teil der Anwendung
 lib               zusätzliche Java-Archive, JDBC-Treiber
 scripts           Gant Skripte
 src               Groovy / Java Klassen
 target            Build-Verzeichnis
 test              Unit- und Integrationstests
 web-app           web-app – Root-Verzeichnis für die Anwendung

 web-app/WEB-INF   J2EE Metainformationen web.xml/classes
 web-app/css       CSS-Dateien für die Anwendung
 web-app/images    Bildateien für die Anwendung
 web-app/js        JavaScript Dateien für die Anwendung
Aufbau grails-app Verzeichnis
 grails-app
 conf             Konfiguration und Startprogramme
 conf/hibernate   Eigene Hibernate-Mappings
 conf/spring      Spring Konfiguration und Mapping-Dateien
 controllers      Die Controller der Anwendung
 domain           Die Models (Domain-Klassen) der Anwendung
 I18n             Property-Dateien mit Übersetzungen
 services         Klassen für Business-Logik
 taglib           Eigene tag-Libraries für Grails
 utils            Grails spezifische Einstellungen - Codec-Klassen
 views            Die Views der Anwendung
 views/layout     Die Sitemesh-Layouts (z.B. main.gsp)
Agenda



           Einführung in Grails

         Wichtige Grails-Prinzipien

            Integration mit Java

            Grails in der Praxis
DRY und CoC

Der Standard-Weg ist konfiguriert, aber Änderungen sind
möglich

Beispiele:
• Aufbau Projekt-Struktur
• DB-Mapping
• Klassennamen
• Logging
• Autowiring
GORM – DB-Mapping

• Hibernate ist der Standard
• Austausch Persistenzschicht ist möglich
• DB-Operationen erfolgen direkt am Domain-Objekt
      Tweet.delete()
      Tweet.save(flush:true)

• Constraints und Mapping in static-Blöcken
      static constraints = {
         login size: 5..15, blank: false, unique: true
         email (email: true, blank: false, nullable: true)
      }
GORM – Mehrere Möglichkeiten zum
Erstellen von Queries

Dynamic Finders    Tweet.findAllByAuthorAndLocation(owner, ‘Karlsruhe’)



Where-Queries      Tweet.where{ year(published) == 2013 && message!= null}


Criteria-Queries   Tweet.createCriteria().list(max:20) {
                     author { eq('account', 'grails') }
                     order('created', 'desc')
                   }

HQL- und
                   User.findAll('from User as u where t.account = ? ', ['grails'])
Native-Queries
Services

 • SpringBeans als einfache POJOs
 • Einfacher Zugriff über DI
       def tweetService

 • Management von Transaktionen
       static transactional = false
       @Transactional(propagation = Propagation.REQUIRES_NEW)
       def someMethod() {…}

 • Möglichkeit des Scopings
   •   singleton (default), request, session, flash, flow, prototype,
       conversation
Controller und Views

 • Controller
   •   Direkter Zugriff auf Services
   •   Standardmethoden wie render
 • Views über Groovy Server Pages (GSP)
   •   Ähnlich JSP’s
   •   Zusätzliche Tagslibs und Variablen
   •   Model-Zugriff
 • SiteMesh für Layouting
Controller-Überblick


                                   Flash Scope


                                    Binding

                                   Validierung Constraints




           Standard-Controller-Methoden
Controller-Überblick


                                   Flash Scope


                                    Binding

                                   Validierung Constraints




           Standard-Controller-Methoden
Taglibs

 • Einfache Klasse mit Namensendung „TagLib“
 • Kann auf Templates zum Rendern verweisen
    class ClaretPortletTagLib {
        static namespace = "claret"

        def portlet = { attrs, body ->
          def title = attrs.remove('title')
          out << render(template: '/claret/portlet', model:[title:title,body:body()])
        }
    }
Konfiguration

 • Konfiguration von
   •   DB
   •   Spring
   •   Build / Dependencies
   •   URL’s
   •   Filter
   •   …
 • umgebungsabhängig
   •   dev, prod, test, …
Demo-Time
Lifecycle / Build

 • Turnaround-Zeiten minimiert
 • Automatisches Reloading für:
   • Controller, Views, TagLibs, Domain-Klassen
   • Services auch mit typisierter Referenzen
   • Klassen: src/groovy, src/Java
 • Interactive Mode und Integrationstest
 • Restart und clean selten notwendig
 • WAR-File Generierung und Ausführung
Plugins - Einführung

 Ein Grails Plugin ist ein in sich abgeschlossenes Bundle
 von Funktionalitäten.
 • Kern-Plugins: hibernate, resources, jquery
 • Zusätzliche Plugins http://grails.org/plugins




 • Plugins können selbst entwickelt werden
 • Binary Plugins – Kommerzielle Plugins
Wichtige Plugins

 • Resources                       • Database Migration
   •   Optimiert für JavaScript    • Database Reverse
   •   Optimiert CSS-Dateien           Engineering
   •   Zipping und Caching         •   MongoDB GORM
   •   Minimization und Bundling   •   Quartz
 • Spring Security Core            •   Spock
 • Searchable                      •   Geb
 • ElasticSearch                   •   Code Coverage
 • Cache
Testing

 • Tests werden bei jedem create-* Kommandos erzeugt
 • grails create-controller Simple
   •   SimpleController.groovy
   •   SimpleControllerTests.groovy
Testing ab Grails 2.0
 • Keine Basis-Testklassen: GrailsUnitTestCase
 • Keine doppelte Vererbung: Einsatz von Spock nicht
     möglich: spock.lang.Specification
 •   Unit Test Mixin: grails.test.mixin.TestFor , Mock



 • Mock und Stubs für manuelles Mocking
Testing Controller
Testing mit Spock

 • Testframework für Groovy und Java
 • Ausdrucksstarke DSL für Spezifizierung der Tests
 • Unterstützung von
   •   Data Driven Testing
   •   Interactions Based Testing
         (1..3) * tweetService.message("hello")


 • Ausprobieren mit Spock Web Console:
  http://meetspock.appspot.com/
Testing mit Spock
Demo-Time
Agenda



           Einführung in Grails

         Wichtige Grails-Prinzipien

            Integration mit Java

            Grails in der Praxis
Integration mit Java

 • Java Klassen
   •   Klassen in src/java ablegen
   •   JAR erzeugen und im Lib-Verzeichnis ablegen
   •   Lokales Maven Repository und Abhängigkeit mit Ivy
 • Spring Beans
   •   grails-app/conf/spring/resources.groovy
   •   Konfiguration mit Spring DSL (Closure in Property)
   •   Konfiguration mit XML - resources.xml
 • EJB-Integration
 • Legacy DB
 • JNDI
Spring Bean DSL
Spring Bean XML
Integration Enterprise Java Beans

                      Application Server

        grails war                           ejb ear

         dms_if.jar                          dms_if.jar
                           EJB-Aufruf
                                            dms_ejb.jar




                                           Dokumenten-
        Datenbank                          Management-
                                             System
Integration Enterprise Java Beans
resources.groovy




    Aufruf im
    Service
Legacy DB einbinden mit Mapping über
Hibernate XML




 Mapping Domain-Klassen:
 grails-app/conf/hibernate/hibernate.cfg.xml
Legacy DB einbinden mit Mapping über
Hibernate Annotations




 • Klasse in der SessionFactory registrieren:
     grails-app/conf/hibernate/hibernate.cfg.xml
 •   Alle dynamischen Methoden von Gorm verwendbar
 •   Constraints src/java/com/books/BookConstraints.groovy
Nutzung von JNDI-Resourcen

 • DB-Anbindung   dataSource {
                    jndiName = ' TW_DEMO_DS '
                    dialect = 'org.hibernate.dialect.Oracle10gDialect'
                    driverClassName = 'oracle.jdbc.OracleDriver'
                    dbCreate = "create-drop"
                  }


 • Mail-Service   grails {
                     mail {
                         jndiName = "TW_DEMO_MAIL_SESSION"
                         disabled = false
                     }
                     mail.default.from="noReply@twitter-demo.de"
                  }
Integration mit Hybris
Fazit

 • Java Know-How und Code Basis kann vollständig weiter
     verwendet werden
 •   Alle API‘s konnten integriert werden
 •   Installation mit anderen Spring Anwendungen mit Tomcat
     ohne Probleme möglich.
 •   Probleme mit älteren Server Oracle OC4J wegen
     unterschiedlichen API Version
Agenda



           Einführung in Grails

         Wichtige Grails-Prinzipien

            Integration mit Java

            Grails in der Praxis
In der Praxis hat sich gezeigt

 • Know-How Bedarf bei Administration, Monitoring,
     Deployment und Infrastruktur bleibt gleich
 •   Interactive Mode rocks !
 •   Standard Vorgehen bei Grails-Entwicklung
     •   Domain-Driven-Design
     •   Prüfen, ob es ein Plugin gibt
     •   DB-Modus create und Daten über Fixtures laden
Fallstricke in Grails

 • Produzieren von unsauberem Code
     •   Schichtentrennung
     •   Schwergewichtige Taglibs
 • Zu viel Logik in Controllern
 • Vernachlässigung der Tests (Nicht typisiert)
 • Dokumentation
 • Viele Plugins existieren, aber nicht alle sind gepflegt und
     fehlerfrei
 •   DB-Änderungen
Was ist cool an Grails

 • Runterladen und loslegen
 • Scaffolding
 • Plugins wie Resources und Security steigern die
     Produktivität
 •   Full-Stack Unterstützung Continous Integration
     •   Testing
     •   Coverage
     •   Build
Wer setzt Grails ein?

 • http://grails.org/websites
 • http://grails.org/Success+Stories


                       Vodafone Music




  Grails wird bei großen Firmen und auch in großen
 Projekten eingesetzt
Grails und andere Frameworks [6]
Warum haben wir uns für Grails
entschieden?
  • Sinnvoll strukturierte und vorkonfigurierte
        Anwendungsstruktur
    •   Open Source, bindet moderne und bewährte Technologien
        ein
    •   Steigert die Produktivität
    •   Einfach einzusetzen, fokussiert auf die Entwicklung von
        Features, keine Ablenkung durch Konfiguration
    •   Gute IDE-Unterstützung
    •   Gute Community
    •   Viele nützliche Plugins
    •   Ausdruckstarke Syntax von Groovy
Buchempfehlungen


 • The Definitive Guide to Grails 2
 • Grails in Action, Second Edition
 • Programming Grails
???
Auch wir suchen neue Kollegen …




           mehr Informationen unter
   http:www.unic.com       http:www.exensio.de
Referenzen

 [1] http://grails.org
 [2] http://grails.org/start#modal-pres1
 [3] http://www.youtube.com/watch?v=PXHxo43hn34 Getting Started
 with Grails - Part 1 (Peter Ledbrook)
 [4] http://grails.org/start#modal-pres1 - Play presentation
 [5] GR8Conf US 2012, Static Type Checking and Compilation – Cédric
 Champeau
 [6] http://www.google.com/trends
1 de 56

Recomendados

Kann ich mit Grails Enterprise Applikationen umsetzen? por
Kann ich mit Grails Enterprise Applikationen umsetzen?Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?Tobias Kraft
2.1K vistas32 diapositivas
Enterprise 2.0 Portale mit Grails. Geht das? por
Enterprise 2.0 Portale mit Grails. Geht das?Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Tobias Kraft
1.9K vistas40 diapositivas
Informatik Seminar Groovy Und Grails por
Informatik Seminar Groovy Und GrailsInformatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und Grailsschmichri
790 vistas20 diapositivas
GWT – Google Web Toolkit in der Praxis por
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisCenarion Information Systems GmbH
4.5K vistas41 diapositivas
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript por
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptOPEN KNOWLEDGE GmbH
1.9K vistas69 diapositivas
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS por
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSWebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSOliver Hader
2.8K vistas23 diapositivas

Más contenido relacionado

La actualidad más candente

Ü̈ber Ant und Maven zu SBT und Gradle por
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradleadesso AG
1.8K vistas32 diapositivas
Verteilte Anwendungen bei Azure mit Docker und Kubernetes por
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
1.4K vistas245 diapositivas
MVP mit dem Google Web Toolkit por
MVP mit dem Google Web ToolkitMVP mit dem Google Web Toolkit
MVP mit dem Google Web ToolkitCenarion Information Systems GmbH
1.5K vistas43 diapositivas
JavaServer Faces 2.2 (Herbstcampus 2013) por
JavaServer Faces 2.2 (Herbstcampus 2013)JavaServer Faces 2.2 (Herbstcampus 2013)
JavaServer Faces 2.2 (Herbstcampus 2013)Michael Kurz
3.7K vistas43 diapositivas
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P... por
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Oliver Hader
1.8K vistas10 diapositivas
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core por
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreGregor Biswanger
1.2K vistas35 diapositivas

La actualidad más candente(20)

Ü̈ber Ant und Maven zu SBT und Gradle por adesso AG
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradle
adesso AG1.8K vistas
Verteilte Anwendungen bei Azure mit Docker und Kubernetes por Gregor Biswanger
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Gregor Biswanger1.4K vistas
JavaServer Faces 2.2 (Herbstcampus 2013) por Michael Kurz
JavaServer Faces 2.2 (Herbstcampus 2013)JavaServer Faces 2.2 (Herbstcampus 2013)
JavaServer Faces 2.2 (Herbstcampus 2013)
Michael Kurz3.7K vistas
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P... por Oliver Hader
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Oliver Hader1.8K vistas
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core por Gregor Biswanger
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Gregor Biswanger1.2K vistas
Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011) por Michael Kurz
Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)
Go Fullstack: Webanwendungen mit Java EE 6 bauen (W-JAX 2011)
Michael Kurz1.9K vistas
JAX 2015 - Continuous Integration mit Java & Javascript por dzuvic
JAX 2015 - Continuous Integration mit Java & JavascriptJAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & Javascript
dzuvic756 vistas
Java-Webanwendungen mit Vaadin 8 por gedoplan
Java-Webanwendungen mit Vaadin 8Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8
gedoplan152 vistas
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017 por Torsten Kleiber
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Torsten Kleiber1.7K vistas
MEAN SCS in der Cloud por Torsten Fink
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der Cloud
Torsten Fink496 vistas
Metadatenbasierte Validierung por os890
Metadatenbasierte ValidierungMetadatenbasierte Validierung
Metadatenbasierte Validierung
os8901.8K vistas
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012) por Christian Janz
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
Christian Janz2.5K vistas
Progressive Web Apps mit Angular por Jens Binfet
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit Angular
Jens Binfet522 vistas
Agile Oracle database modeling and development - APEX Connect 2020 por Torsten Kleiber
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020
Torsten Kleiber239 vistas
Web-GUIs mit Vaadin por gedoplan
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadin
gedoplan1.5K vistas

Destacado

ORDENACIONES SACERDOTALES por
ORDENACIONES SACERDOTALESORDENACIONES SACERDOTALES
ORDENACIONES SACERDOTALESIgnacio Fernandez Gonzalez
252 vistas43 diapositivas
Norma por
NormaNorma
NormaClara Janeth Hernandez Calles
201 vistas17 diapositivas
Prisma consultoria ex20 v2 presentación auditoría interna iso 19011 por
Prisma consultoria ex20 v2 presentación auditoría interna iso 19011Prisma consultoria ex20 v2 presentación auditoría interna iso 19011
Prisma consultoria ex20 v2 presentación auditoría interna iso 19011Prisma Consultoria
663 vistas72 diapositivas
Sarahi por
SarahiSarahi
SarahiClara Janeth Hernandez Calles
307 vistas40 diapositivas
Verbkonjugation por
VerbkonjugationVerbkonjugation
Verbkonjugationguest5a54f676
486 vistas12 diapositivas
Ein Laecheln por
Ein LaechelnEin Laecheln
Ein LaechelnSylvi O.
608 vistas14 diapositivas

Destacado(20)

Prisma consultoria ex20 v2 presentación auditoría interna iso 19011 por Prisma Consultoria
Prisma consultoria ex20 v2 presentación auditoría interna iso 19011Prisma consultoria ex20 v2 presentación auditoría interna iso 19011
Prisma consultoria ex20 v2 presentación auditoría interna iso 19011
Prisma Consultoria663 vistas
Ein Laecheln por Sylvi O.
Ein LaechelnEin Laecheln
Ein Laecheln
Sylvi O.608 vistas
Zeit Zum Denken por Sylvi O.
Zeit Zum DenkenZeit Zum Denken
Zeit Zum Denken
Sylvi O.420 vistas
Koalas in Not por Sylvi O.
Koalas in NotKoalas in Not
Koalas in Not
Sylvi O.625 vistas
¿Cómo se relaciona la tecnología con el desarrollo económico-social? por marife16
¿Cómo se relaciona la tecnología con el desarrollo económico-social?¿Cómo se relaciona la tecnología con el desarrollo económico-social?
¿Cómo se relaciona la tecnología con el desarrollo económico-social?
marife16602 vistas
Presentación3 por batoshma
Presentación3Presentación3
Presentación3
batoshma200 vistas
Uso de tec2.integradora.unidad3 por UDGVIRTUAL
Uso de tec2.integradora.unidad3Uso de tec2.integradora.unidad3
Uso de tec2.integradora.unidad3
UDGVIRTUAL232 vistas
Ecologia nformatica por Camila Ayala
Ecologia  nformaticaEcologia  nformatica
Ecologia nformatica
Camila Ayala158 vistas
Pp alta gerencia por Recaaa
Pp alta gerenciaPp alta gerencia
Pp alta gerencia
Recaaa254 vistas

Similar a Grails im Überblick und in der Praxis

Ruby on Rails in a metro session por
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro sessionVirttoo org
432 vistas42 diapositivas
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI por
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDIadesso AG
2.1K vistas23 diapositivas
JavaScript für Java-Entwickler W-JAX 2013 por
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
1.6K vistas57 diapositivas
ColdFusion im Enterprise Umfeld - Deep Dive por
ColdFusion im Enterprise Umfeld - Deep DiveColdFusion im Enterprise Umfeld - Deep Dive
ColdFusion im Enterprise Umfeld - Deep DiveBokowsky + Laymann GmbH
1.2K vistas47 diapositivas
AngularJs por
AngularJsAngularJs
AngularJsNETUserGroupBern
11 vistas19 diapositivas
Server Revolutions- Der Spring Source DM Server por
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerSandro Sonntag
600 vistas44 diapositivas

Similar a Grails im Überblick und in der Praxis(20)

Ruby on Rails in a metro session por Virttoo org
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro session
Virttoo org432 vistas
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI por adesso AG
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
adesso AG2.1K vistas
JavaScript für Java-Entwickler W-JAX 2013 por Oliver Zeigermann
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
Oliver Zeigermann1.6K vistas
Server Revolutions- Der Spring Source DM Server por Sandro Sonntag
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM Server
Sandro Sonntag600 vistas
Icinga 2009 at Nagios Workshop por Icinga
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios Workshop
Icinga872 vistas
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded! por adesso AG
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
adesso AG4.4K vistas
Gradle - Beginner's Workshop (german) por Joachim Baumann
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
Joachim Baumann6.1K vistas
Collaboration Days 2011 - Damit die Tester schneller ran können. por David Schneider
Collaboration Days 2011 - Damit die Tester schneller ran können.Collaboration Days 2011 - Damit die Tester schneller ran können.
Collaboration Days 2011 - Damit die Tester schneller ran können.
David Schneider495 vistas
Boost your APEX Deployment and Provisioning with Docker por Steven Grzbielok
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
Steven Grzbielok1.3K vistas
Creasoft-Akademie - Mobile Multiplattform Apps por Creasoft AG
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft AG1.4K vistas
Performanter, hochskalierbarer Web 2.0-Dienst in Ruby por vesparun
Performanter, hochskalierbarer Web 2.0-Dienst in RubyPerformanter, hochskalierbarer Web 2.0-Dienst in Ruby
Performanter, hochskalierbarer Web 2.0-Dienst in Ruby
vesparun580 vistas
Scala.js at code.talks 2014, Hamburg por Lutz Hühnken
Scala.js at code.talks 2014, HamburgScala.js at code.talks 2014, Hamburg
Scala.js at code.talks 2014, Hamburg
Lutz Hühnken1K vistas
Was kommt nach den SPAs por QAware GmbH
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAs
QAware GmbH6 vistas
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa... por Community ITmitte.de
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Community ITmitte.de1.3K vistas
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird por AOE
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
AOE 1.5K vistas
Drupal Austria Roadshow in Klagenfurt por dasjo
Drupal Austria Roadshow in KlagenfurtDrupal Austria Roadshow in Klagenfurt
Drupal Austria Roadshow in Klagenfurt
dasjo1.4K vistas

Grails im Überblick und in der Praxis

  • 1. Grails im Überblick und in der Praxis JUG Karlsruhe - 10.04.2013 Darius Henkelmann - Tobias Kraft
  • 2. Wer sind wir ? • Tobias Kraft • Senior Consultant bei der exensio GmbH • Java Enterprise Technologien und Grails-Ökosystem • Grails seit 2010 • Darius Henkelmann • Senior Application Engineer bei der Unic GmbH • Java Enterprise, Softwarearchitektur, Ecommerce, Hybris und Webtechnologien • Grails 2007 – Schulungszentrum und Portierung Frontend Ecommerce-System auf Basis von Hybris
  • 3. Ziele des Vortrags • Was ist Grails und was sind die Ziele? • Auf welchen Technologien baut Grails auf? • Welches Programmiermodell bietet Grails? • Wie sind unsere Erfahrungen mit Grails in Projekten? Auf was werden wir nicht eingehen • Groovy • Jedes Detail • Fehler und Probleme aus anderen Projekten Wir laden zur weiteren Diskussion am Stammtisch ein!
  • 4. Agenda Einführung in Grails Wichtige Grails-Prinzipien Integration mit Java Grails in der Praxis
  • 5. Zielgruppe / Einsatzgebiete von Grails • Java-Entwickler • Webentwickler ohne Java-Vorkenntnisse • Newbies und Seniors • Geeignet von Kleinprojekten bis zu größeren Enterprise- Projekten • Erstellung Prototypen
  • 6. Grails Rückblick • Juli 2005 - Projektbeginn mit Guillaume LaForge, Steven Devijver und Graeme Rocher • G2One, November 2008 SpringSource, VMWare • Grails 0.5 (05.2007) - URL Mappings, Command objects • Grails 1.0 (02.2008) - ORM DSL, JNDI Data Sources • Grails 1.3 (05.2010) - Groovy 1.7 • Grails 1.4 (05.2011) - Spring 3.1, Groovy 1.8, Servlet 3.0 • Grails 2.0 (12.2011) - Interactive Mode, Reloading Agent • Grails 2.1 (05.2012) - Maven Optimierung, Grails Wrapper • Grails 2.2 (12.2012) - Groovy 2.0
  • 7. Was ist Grails? A Full-Stack Web (MVC) Framework [2] • Install & GO! • Nahtlose Java Integration, wird auf der Java Virtual Machine (JVM) ausgeführt • Rapid development • Use a Java-like dynamic language (Groovy) • Convention over Configuration • Don’t repeat Yourself (DRY) • Inspired by Ruby on Rails and others
  • 9. Installation • Voraussetzung: Java (JDK) 1.6 oder höher • Download Grails (http://grails.org/download) • Umgebungsvariablen JAVA_HOME und PATH setzen • Terminal öffnen • Alternative: Installation mit GVM (http://gvmtool.net)
  • 10. Kommandos grails <Befehl> Muster grails help <Befehl> Zeigt die Hilfe für Grails oder für ein Befehl an create-app Erzeugt ein neues Grails Projekt. create-controller <Name> Erzeugt einen Controller create-domain-class <Name> Erzeugt eine Domain-Klasse (Model) generate-controller <Name> Generiert einen Controller für ein Model generate-views <Name> Generiert die CRUD-Views für ein Model create-service <Name> Erzeugt eine Service-Klasse create-unit-test <Name> Erzeugt eine Unit-Test-Klasse run-app Startet die Anwendung
  • 12. IDE Unterstützung • Eclipse, STS • NetBeans • TextMate • grails integrate-with --textmate • IntelliJ IDEA • Ultimate Edition – Voller Support für Grails • File -> Import Project-> Create project from existing sources • Community Edition • Unterstützung von Grails jedoch nicht mit alle Features (GSP- Editor, Classpath-Management, Quick-Acces) • grails integrate-with --intellij
  • 13. Aufbau eines Grails-Projektes Verzeichnis Inhalt grails-app grails-spezifischer Teil der Anwendung lib zusätzliche Java-Archive, JDBC-Treiber scripts Gant Skripte src Groovy / Java Klassen target Build-Verzeichnis test Unit- und Integrationstests web-app web-app – Root-Verzeichnis für die Anwendung web-app/WEB-INF J2EE Metainformationen web.xml/classes web-app/css CSS-Dateien für die Anwendung web-app/images Bildateien für die Anwendung web-app/js JavaScript Dateien für die Anwendung
  • 14. Aufbau grails-app Verzeichnis grails-app conf Konfiguration und Startprogramme conf/hibernate Eigene Hibernate-Mappings conf/spring Spring Konfiguration und Mapping-Dateien controllers Die Controller der Anwendung domain Die Models (Domain-Klassen) der Anwendung I18n Property-Dateien mit Übersetzungen services Klassen für Business-Logik taglib Eigene tag-Libraries für Grails utils Grails spezifische Einstellungen - Codec-Klassen views Die Views der Anwendung views/layout Die Sitemesh-Layouts (z.B. main.gsp)
  • 15. Agenda Einführung in Grails Wichtige Grails-Prinzipien Integration mit Java Grails in der Praxis
  • 16. DRY und CoC Der Standard-Weg ist konfiguriert, aber Änderungen sind möglich Beispiele: • Aufbau Projekt-Struktur • DB-Mapping • Klassennamen • Logging • Autowiring
  • 17. GORM – DB-Mapping • Hibernate ist der Standard • Austausch Persistenzschicht ist möglich • DB-Operationen erfolgen direkt am Domain-Objekt Tweet.delete() Tweet.save(flush:true) • Constraints und Mapping in static-Blöcken static constraints = { login size: 5..15, blank: false, unique: true email (email: true, blank: false, nullable: true) }
  • 18. GORM – Mehrere Möglichkeiten zum Erstellen von Queries Dynamic Finders Tweet.findAllByAuthorAndLocation(owner, ‘Karlsruhe’) Where-Queries Tweet.where{ year(published) == 2013 && message!= null} Criteria-Queries Tweet.createCriteria().list(max:20) { author { eq('account', 'grails') } order('created', 'desc') } HQL- und User.findAll('from User as u where t.account = ? ', ['grails']) Native-Queries
  • 19. Services • SpringBeans als einfache POJOs • Einfacher Zugriff über DI def tweetService • Management von Transaktionen static transactional = false @Transactional(propagation = Propagation.REQUIRES_NEW) def someMethod() {…} • Möglichkeit des Scopings • singleton (default), request, session, flash, flow, prototype, conversation
  • 20. Controller und Views • Controller • Direkter Zugriff auf Services • Standardmethoden wie render • Views über Groovy Server Pages (GSP) • Ähnlich JSP’s • Zusätzliche Tagslibs und Variablen • Model-Zugriff • SiteMesh für Layouting
  • 21. Controller-Überblick Flash Scope Binding Validierung Constraints Standard-Controller-Methoden
  • 22. Controller-Überblick Flash Scope Binding Validierung Constraints Standard-Controller-Methoden
  • 23. Taglibs • Einfache Klasse mit Namensendung „TagLib“ • Kann auf Templates zum Rendern verweisen class ClaretPortletTagLib { static namespace = "claret" def portlet = { attrs, body -> def title = attrs.remove('title') out << render(template: '/claret/portlet', model:[title:title,body:body()]) } }
  • 24. Konfiguration • Konfiguration von • DB • Spring • Build / Dependencies • URL’s • Filter • … • umgebungsabhängig • dev, prod, test, …
  • 26. Lifecycle / Build • Turnaround-Zeiten minimiert • Automatisches Reloading für: • Controller, Views, TagLibs, Domain-Klassen • Services auch mit typisierter Referenzen • Klassen: src/groovy, src/Java • Interactive Mode und Integrationstest • Restart und clean selten notwendig • WAR-File Generierung und Ausführung
  • 27. Plugins - Einführung Ein Grails Plugin ist ein in sich abgeschlossenes Bundle von Funktionalitäten. • Kern-Plugins: hibernate, resources, jquery • Zusätzliche Plugins http://grails.org/plugins • Plugins können selbst entwickelt werden • Binary Plugins – Kommerzielle Plugins
  • 28. Wichtige Plugins • Resources • Database Migration • Optimiert für JavaScript • Database Reverse • Optimiert CSS-Dateien Engineering • Zipping und Caching • MongoDB GORM • Minimization und Bundling • Quartz • Spring Security Core • Spock • Searchable • Geb • ElasticSearch • Code Coverage • Cache
  • 29. Testing • Tests werden bei jedem create-* Kommandos erzeugt • grails create-controller Simple • SimpleController.groovy • SimpleControllerTests.groovy
  • 30. Testing ab Grails 2.0 • Keine Basis-Testklassen: GrailsUnitTestCase • Keine doppelte Vererbung: Einsatz von Spock nicht möglich: spock.lang.Specification • Unit Test Mixin: grails.test.mixin.TestFor , Mock • Mock und Stubs für manuelles Mocking
  • 32. Testing mit Spock • Testframework für Groovy und Java • Ausdrucksstarke DSL für Spezifizierung der Tests • Unterstützung von • Data Driven Testing • Interactions Based Testing (1..3) * tweetService.message("hello") • Ausprobieren mit Spock Web Console: http://meetspock.appspot.com/
  • 35. Agenda Einführung in Grails Wichtige Grails-Prinzipien Integration mit Java Grails in der Praxis
  • 36. Integration mit Java • Java Klassen • Klassen in src/java ablegen • JAR erzeugen und im Lib-Verzeichnis ablegen • Lokales Maven Repository und Abhängigkeit mit Ivy • Spring Beans • grails-app/conf/spring/resources.groovy • Konfiguration mit Spring DSL (Closure in Property) • Konfiguration mit XML - resources.xml • EJB-Integration • Legacy DB • JNDI
  • 39. Integration Enterprise Java Beans Application Server grails war ejb ear dms_if.jar dms_if.jar EJB-Aufruf dms_ejb.jar Dokumenten- Datenbank Management- System
  • 40. Integration Enterprise Java Beans resources.groovy Aufruf im Service
  • 41. Legacy DB einbinden mit Mapping über Hibernate XML Mapping Domain-Klassen: grails-app/conf/hibernate/hibernate.cfg.xml
  • 42. Legacy DB einbinden mit Mapping über Hibernate Annotations • Klasse in der SessionFactory registrieren: grails-app/conf/hibernate/hibernate.cfg.xml • Alle dynamischen Methoden von Gorm verwendbar • Constraints src/java/com/books/BookConstraints.groovy
  • 43. Nutzung von JNDI-Resourcen • DB-Anbindung dataSource { jndiName = ' TW_DEMO_DS ' dialect = 'org.hibernate.dialect.Oracle10gDialect' driverClassName = 'oracle.jdbc.OracleDriver' dbCreate = "create-drop" } • Mail-Service grails { mail { jndiName = "TW_DEMO_MAIL_SESSION" disabled = false } mail.default.from="noReply@twitter-demo.de" }
  • 45. Fazit • Java Know-How und Code Basis kann vollständig weiter verwendet werden • Alle API‘s konnten integriert werden • Installation mit anderen Spring Anwendungen mit Tomcat ohne Probleme möglich. • Probleme mit älteren Server Oracle OC4J wegen unterschiedlichen API Version
  • 46. Agenda Einführung in Grails Wichtige Grails-Prinzipien Integration mit Java Grails in der Praxis
  • 47. In der Praxis hat sich gezeigt • Know-How Bedarf bei Administration, Monitoring, Deployment und Infrastruktur bleibt gleich • Interactive Mode rocks ! • Standard Vorgehen bei Grails-Entwicklung • Domain-Driven-Design • Prüfen, ob es ein Plugin gibt • DB-Modus create und Daten über Fixtures laden
  • 48. Fallstricke in Grails • Produzieren von unsauberem Code • Schichtentrennung • Schwergewichtige Taglibs • Zu viel Logik in Controllern • Vernachlässigung der Tests (Nicht typisiert) • Dokumentation • Viele Plugins existieren, aber nicht alle sind gepflegt und fehlerfrei • DB-Änderungen
  • 49. Was ist cool an Grails • Runterladen und loslegen • Scaffolding • Plugins wie Resources und Security steigern die Produktivität • Full-Stack Unterstützung Continous Integration • Testing • Coverage • Build
  • 50. Wer setzt Grails ein? • http://grails.org/websites • http://grails.org/Success+Stories Vodafone Music  Grails wird bei großen Firmen und auch in großen Projekten eingesetzt
  • 51. Grails und andere Frameworks [6]
  • 52. Warum haben wir uns für Grails entschieden? • Sinnvoll strukturierte und vorkonfigurierte Anwendungsstruktur • Open Source, bindet moderne und bewährte Technologien ein • Steigert die Produktivität • Einfach einzusetzen, fokussiert auf die Entwicklung von Features, keine Ablenkung durch Konfiguration • Gute IDE-Unterstützung • Gute Community • Viele nützliche Plugins • Ausdruckstarke Syntax von Groovy
  • 53. Buchempfehlungen • The Definitive Guide to Grails 2 • Grails in Action, Second Edition • Programming Grails
  • 54. ???
  • 55. Auch wir suchen neue Kollegen … mehr Informationen unter http:www.unic.com http:www.exensio.de
  • 56. Referenzen [1] http://grails.org [2] http://grails.org/start#modal-pres1 [3] http://www.youtube.com/watch?v=PXHxo43hn34 Getting Started with Grails - Part 1 (Peter Ledbrook) [4] http://grails.org/start#modal-pres1 - Play presentation [5] GR8Conf US 2012, Static Type Checking and Compilation – Cédric Champeau [6] http://www.google.com/trends