33
Grails - schneller zum Ziel - für Enterprise-Applikationen? Tobias Kraft, exensio GmbH

Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

Grails - schneller zum Ziel - für Enterprise-Applikationen?

Tobias Kraft, exensio GmbH

Page 2: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

2

Agenda

Grails im Überblick

Anforderungen an Enterprise Applikationen

Enterprise Applikationen mit Grails

Wo ist Grails in der Entwicklung schnell?

Page 3: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

3

Was ist Grails?

A Full-Stack Web (MVC) Framework

● Install & GO!

● Nahtlose Java Integration, wird auf der Java Virtual Machine (JVM) ausgeführt

● Ursprünglich inspiriert von Ruby on Rails

● Open Source

● Grails Historie

● Projekt-Beginn 2005

● Grails 1.0 (02/2008)

● Grails 2.3.7 (03/2014, aktuelles Release)

● Basiert auf Groovy

Page 4: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

4

Aufbau von Grails

Page 5: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

5

Schlüsselkonzepte

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

● Convention over Configuration (CoC)

● Don’t repeat Yourself (DRY)

● Beispiele

● Aufbau Projekt-Struktur

● DB-Mapping

● Klassennamen

● Logging

● Autowiring

Page 6: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

6

Groovy als Basis

● Basiert auf JVM

● Dynamisch typisierte Sprache

● Bietet zusätzliche Features zu Java

def names = ['Berlin Expert Days', 'JUG Saxony Day', 'Berlin Buzz Words'] println names def berlinConfs = names.findAll{ it ==~ /(?i).*Berlin.*/ }.sort() berlinConfs.each { println it } println "number of confs: ${berlinConfs.size()}"

Beispiele

Page 7: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

7

Groovy als Basis

● Basiert auf JVM

● Dynamisch typisierte Sprache

● Bietet zusätzliche Features zu Java

def names = ['Berlin Expert Days', 'JUG Saxony Day', 'Berlin Buzz Words'] println names def berlinConfs = names.findAll{ it ==~ /(?i).*Berlin.*/ }.sort() berlinConfs.each { println it } println "number of confs in Berlin: ${berlinConfs.size()}"

Beispiele List names = Arrays.asList("Berlin Expert Days", "JUG Saxony Day", "Berlin Buzz Words"); System.out.println(names); Predicate<String> p = (n) -> n.toString().matches("(?i).*Berlin.*"); Stream berlinConfs = names.stream().filter(p).sorted(); berlinConfs.forEach(n -> System.out.println(n)); System.out.println("number of confs: "+ names.stream().filter(p).count());

Page 8: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

8

Einfaches Arbeiten mit Grails am Beispiel von GORM

● Hibernate ist der Standard

● Austausch Persistenzschicht ist möglich

● DB-Operationen erfolgen direkt am Domain-Objekt

● Abfragen einfach und intuitiv

Portlet.findAllByPageAndPortal(‘Home’, portalname)

PortletInst.where{ year(published) == 2014 && right != ‘public’ }

Where-Queries

Dynamic Finders

Portlet.delete() Portlet.save(flush:true)

Page 9: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

9

Quo vadis Grails?

● Grails 2.4 (Mai 2014)

● @CompileStatic Integration

● Spring 4.0 Support

● Groovy 2.2 Support

● Grails 3.0 (Ende 2014)

● Gradle als Build System

● Unabhängigkeit vom Servlet Container

● Application Profiles / Micro Services

● Modularisierung / Plugin Platform

http://www.morguefile.com/archive/display/58914

Page 10: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

10

Agenda

Grails im Überblick

Anforderungen an Enterprise Applikationen

Enterprise Applikationen mit Grails

Wo ist Grails in der Entwicklung schnell?

Page 11: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

11

Anforderungen an Enterprise Applikationen

Eine Auswahl relevanter Kriterien

● Wartbarkeit, Erweiterbarkeit

● Strukturierungsmöglichkeit

● Integration / Datenaustausch

● Verteilte Transaktionen

● Security

● Testbarkeit

● Betrieb und Monitoring

● Verfügbarkeit

● Ausfallsicherheit

● Neue Anforderungen schnell umsetzbar

Page 12: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

12

Agenda

Grails im Überblick

Anforderungen an Enterprise Applikationen

Enterprise Applikationen mit Grails

Wo ist Grails in der Entwicklung schnell?

Page 13: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

13

Funktionalitäten der Java-Laufzeitumgebung sind verfügbar

● Direkte Integration von Java-Source-Code

● Vorhandene JEE Infrastruktur und KnowHow kann verwendet werden

● Deployment erfolgt über WAR-Datei

● Logging

● Monitoring

• JMX

• App-Server Tools

• Nagios

● Clustering

• Load-Balancing

• Session Replication

http://www.morguefile.com/archive/display/72852

Page 14: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

14

Integrations-Szenario für JEE

Application Server

DB

Dokumenten- Management-

System

EJB-Aufruf

grails war ejb ear

dms_if.jar dms_if.jar

dms_ejb.jar

Page 15: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

15

Integrations-Szenario für JEE

Aufruf im Service

resources.groovy

Page 16: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

16

Nutzung von JNDI-Resourcen

● DB Anbindung

● Mail-Service

grails { mail { jndiName = 'TW_DEMO_MAIL_SESSION' disabled = false } mail.default.from = '[email protected]' }

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

Page 17: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

17

Security

● Spring-Security für Authentifizierung und Autorisierung

Features

● Authentifizierungsketten

● Windows-Authentifizierung

● Authentifizierungsmechanismen für Twitter, Facebook und diverse andere Provider

● AD- / LDAP-Anbindungen

● Hierarchische Rollen

● Einhängen von kundenspezifischen Mechanismen / Erweiterungen

● Switch-User Mechanismus

Page 18: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

18

Clusterszenario für Produktivbetrieb

Hardware Load-Balancer

Apache Web Server 1

Tomcat 1 (Weblogic, …)

Tomcat 2 (Weblogic, …)

Server 1 Apache Web Server 2

Tomcat 3 (Weblogic, …)

Tomcat 4 (Weblogic, …)

Server 2

Database (Oracle, MySQL, …)

Server 3

Database Server 4

Replication

Page 19: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

19

Verhalten von Grails in „großen“ Projekten

Keine negativen Erfahrungen bei Applikationen mit

● mehr als 100 Domain-Klassen

● mehr als 20 GB großen Datenbanken

● über 500 PT Aufwand

● dem Anbinden mehrerer DB‘s in einer Applikation

● der Verwendung von mehreren eigenen Plugins

Größere Vorhaben nach fachlichen Gesichtspunkten schneiden und Teile über den Plugin-Mechanismus auszulagern.

Page 20: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

20

Agenda

Grails im Überblick

Anforderungen an Enterprise Applikationen

Enterprise Applikationen mit Grails

Wo ist Grails in der Entwicklung schnell?

Page 21: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

21

Plugins

● In sich abgeschlossenes Bundle von Funktionalitäten

● Wiederverwendbarkeit

● Modularisierung / Kapselung

● Kern-Plugins: hibernate, resources, jquery, …

● Plugins können selbst entwickelt werden

● Grails Plugin-Repository mit ca. 1000 Plugins für

● Frontend

● Integration von Drittsystemen

● Fachliche Funktionalitäten

● Persistenzschicht

● Nichtfunktionale Erweiterungen

Page 22: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

22

Scaffolding

● Generierung von CRUD Funktionalitäten

● Unterscheidung zwischen

● Dynamic

● Static

● Layout kann angepasst werden

● Anwendungsszenarien ● Rapid Prototyping

● Ausgangsbasis

● Produktivbetrieb

grails generate-controller Project

Page 23: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

23

Einfaches Scaffolding Beispiel

Page 24: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

24

Testing

● „Out of the box“ Testing

● Test-Klassen werden bei create-* Kommandos miterzeugt

● Unterstützte Testarten

● Unit

● Integration

● Functional

● Viele Plugins für Testframeworks und Testdatengenerierung

● Fixtures, Build-Testdata

● Jasmine, jsUnit, Webtest

● Continuous Integration

Page 25: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

25

Testing mit Spock

● Bestandteil von Grails seit Version 2.3

● Testframework für Groovy und Java

● Ausdrucksstarke DSL für Spezifizierung der Tests

● Ausprobieren mit Spock Web Console

http://meetspock.appspot.com/

● Unterstützung für

● Data Driven Testing

● Interaction Based Testing

(1..3) * tweetService.message("hello")

Page 26: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

26

Testing mit Spock

Page 27: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

27

Backend Integration einfach gemacht

● JSON-Slurper

● File-Import

def jsonText = '''{ "message": { "header": { "from": " [email protected]"}, "body": "Hello JUG Saxony Day." } }''' def mail = new JsonSlurper().parseText(jsonText) assert mail.message.body == "Hello JUG Saxony Day."

new File('/data/').eachFileMatch( ~".*xml" ) { f -> if ( f.lastModified() <= yesterday ) { def rootNode = new XmlSlurper().parse(f) assert rootNode.four.text() == "My text!" …. } }

Page 28: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

28

Integration von Drittsystemen über Plugins eine Auswahl

Page 29: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

29

Performance Groovy

What makes Groovy groovy? — JAX London 2013 by Guillaume Laforge

Page 30: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

30

Was ist cool und schnell an Grails?

http://www.morguefile.com/archive/display/196579

● Herunterladen und loslegen

● Kompletter Java-Stack ist verfügbar

● Groovy macht vieles kürzer und schneller

● Zahlreiche Plugins steigern die Produktivität

● Full-Stack Unterstützung / Continuous Integration ● Testing

● Coverage

● Build

Page 31: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

31

Was sollte beachtet werden?

http://www.morguefile.com/archive/display/28600

● Strukturierung Code ● Schichtentrennung

● Keine schwergewichtige Taglibs

● Logik in Services

● Keine Vernachlässigung der Tests

● Zielplattform

● Version-Upgrades

● Vorsicht bei „0“-er Versionen (2.3.0,…)

Page 32: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

32

Fazit ● Grails bringt Basis zur Umsetzung von

Enterprise Applikationen mit

● Tragfähigkeit für große Applikationen ist in der Praxis erprobt

● Einiges geht schneller und einfacher wie in der klassischen Java-Welt

● Die Java-Welt kann komplett mit verwendet werden

Page 33: Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails Plugin-Repository mit ca. 1000 Plugins für ... Logik in Services Keine Vernachlässigung

Fragen?

Vielen Dank!

http://blog.exensio.de

@tokraft

Partner: