Grails - schneller zum Ziel - für Enterprise-Applikationen? · 2019. 10. 21. · Grails...

Post on 05-Oct-2020

1 views 0 download

transcript

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

Tobias Kraft, exensio GmbH

2

Agenda

Grails im Überblick

Anforderungen an Enterprise Applikationen

Enterprise Applikationen mit Grails

Wo ist Grails in der Entwicklung schnell?

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

4

Aufbau von Grails

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

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

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());

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)

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

10

Agenda

Grails im Überblick

Anforderungen an Enterprise Applikationen

Enterprise Applikationen mit Grails

Wo ist Grails in der Entwicklung schnell?

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

12

Agenda

Grails im Überblick

Anforderungen an Enterprise Applikationen

Enterprise Applikationen mit Grails

Wo ist Grails in der Entwicklung schnell?

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

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

15

Integrations-Szenario für JEE

Aufruf im Service

resources.groovy

16

Nutzung von JNDI-Resourcen

● DB Anbindung

● Mail-Service

grails { mail { jndiName = 'TW_DEMO_MAIL_SESSION' disabled = false } mail.default.from = 'noReply@twitter-demo.de' }

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

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

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

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.

20

Agenda

Grails im Überblick

Anforderungen an Enterprise Applikationen

Enterprise Applikationen mit Grails

Wo ist Grails in der Entwicklung schnell?

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

22

Scaffolding

● Generierung von CRUD Funktionalitäten

● Unterscheidung zwischen

● Dynamic

● Static

● Layout kann angepasst werden

● Anwendungsszenarien ● Rapid Prototyping

● Ausgangsbasis

● Produktivbetrieb

grails generate-controller Project

23

Einfaches Scaffolding Beispiel

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

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")

26

Testing mit Spock

27

Backend Integration einfach gemacht

● JSON-Slurper

● File-Import

def jsonText = '''{ "message": { "header": { "from": " info@silicon-saxony.de"}, "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!" …. } }

28

Integration von Drittsystemen über Plugins eine Auswahl

29

Performance Groovy

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

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

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,…)

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

Fragen?

Vielen Dank!

http://blog.exensio.de

@tokraft

Partner: