20140404_grails_enterprise (1,9 MiB)

Werbung
Grails - schneller zum Ziel für Enterprise-Applikationen?
Tobias Kraft, exensio GmbH
Agenda
Grails im Überblick
Anforderungen an Enterprise Applikationen
Enterprise Applikationen mit Grails
Wo ist Grails in der Entwicklung schnell?
2
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
3
Aufbau von Grails
4
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
5
Groovy als Basis
● Basiert auf JVM
● Dynamisch typisierte Sprache
● Bietet zusätzliche Features zu Java
Beispiele
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()}"
6
Groovy als Basis
● Basiert auf JVM
● Dynamisch typisierte Sprache
● Bietet zusätzliche Features zu Java
ListBeispiele
names = Arrays.asList("Berlin Expert Days", "JUG Saxony Day", "Berlin
Buzz Words");
def names = ['Berlin Expert Days', 'JUG Saxony Day', 'Berlin Buzz Words']
System.out.println(names);
println names
Predicate<String> p = (n) -> n.toString().matches("(?i).*Berlin.*");
def berlinConfs = names.findAll{ it ==~ /(?i).*Berlin.*/ }.sort()
Stream berlinConfs = names.stream().filter(p).sorted();
berlinConfs.each { println it }
berlinConfs.forEach(n -> System.out.println(n));
println "number of confs in Berlin: ${berlinConfs.size()}"
System.out.println("number of confs: "+ names.stream().filter(p).count());
7
Einfaches Arbeiten mit Grails am Beispiel von GORM
● Hibernate ist der Standard
● Austausch Persistenzschicht ist möglich
● DB-Operationen erfolgen direkt am Domain-Objekt
Portlet.delete()
Portlet.save(flush:true)
● Abfragen einfach und intuitiv
Dynamic Finders
Portlet.findAllByPageAndPortal(‘Home’, portalname)
Where-Queries
PortletInst.where{
year(published) == 2014 && right != ‘public’
}
8
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
9
Agenda
Grails im Überblick
Anforderungen an Enterprise Applikationen
Enterprise Applikationen mit Grails
Wo ist Grails in der Entwicklung schnell?
10
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
11
Agenda
Grails im Überblick
Anforderungen an Enterprise Applikationen
Enterprise Applikationen mit Grails
Wo ist Grails in der Entwicklung schnell?
12
Funktionalitäten der Java-Laufzeitumgebung
sind verfügbar
● Direkte Integration von Java-SourceCode
● 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
13
Integrations-Szenario für JEE
Application Server
grails war
ejb ear
dms_if.jar
dms_if.jar
EJB-Aufruf
dms_ejb.jar
DB
DokumentenManagementSystem
14
Integrations-Szenario für JEE
resources.groovy
Aufruf im
Service
15
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 = '[email protected]'
}
16
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
17
Clusterszenario für Produktivbetrieb
Hardware
Load-Balancer
Apache
Web Server 1
Tomcat 1
(Weblogic, …)
Server 1
Apache
Web Server 2
Tomcat 2
(Weblogic, …)
Tomcat 3
(Weblogic, …)
Database
Server 2
Tomcat 4
(Weblogic, …)
Server 3
(Oracle, MySQL, …)
Replication
Server 4
Database
18
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.
19
Agenda
Grails im Überblick
Anforderungen an Enterprise Applikationen
Enterprise Applikationen mit Grails
Wo ist Grails in der Entwicklung schnell?
20
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
21
Scaffolding
● Generierung von CRUD Funktionalitäten
● Unterscheidung zwischen
● Dynamic
● Static
grails generate-controller Project
● Layout kann angepasst werden
● Anwendungsszenarien
● Rapid Prototyping
● Ausgangsbasis
● Produktivbetrieb
22
Einfaches Scaffolding Beispiel
23
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
24
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")
25
Testing mit Spock
26
Backend Integration einfach gemacht
● JSON-Slurper
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."
● File-Import
new File('/data/').eachFileMatch( ~".*xml" ) { f ->
if ( f.lastModified() <= yesterday ) {
def rootNode = new XmlSlurper().parse(f)
assert rootNode.four.text() == "My text!"
….
}
}
27
Integration von Drittsystemen über Plugins
eine Auswahl
28
Performance Groovy
What makes Groovy groovy? — JAX London 2013 by Guillaume Laforge
29
Was ist cool und schnell an Grails?
●
●
●
●
●
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
30
http://www.morguefile.com/archive/display/196579
Was sollte beachtet werden?
● 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,…)
31
http://www.morguefile.com/archive/display/28600
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
32
Fragen?
Vielen Dank!
http://blog.exensio.de
@tokraft
Partner:
Herunterladen