Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Grails - schneller zum Ziel - für Enterprise-Ap...

exensio
April 04, 2014

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

Presentation at the JUG Saxony Day 2014 (http://www.jug-saxony-day.org/)

exensio

April 04, 2014
Tweet

More Decks by exensio

Other Decks in Technology

Transcript

  1. 2 Agenda Grails im Überblick Anforderungen an Enterprise Applikationen Enterprise

    Applikationen mit Grails Wo ist Grails in der Entwicklung schnell?
  2. 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
  3. 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
  4. 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
  5. 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());
  6. 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)
  7. 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
  8. 10 Agenda Grails im Überblick Anforderungen an Enterprise Applikationen Enterprise

    Applikationen mit Grails Wo ist Grails in der Entwicklung schnell?
  9. 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
  10. 12 Agenda Grails im Überblick Anforderungen an Enterprise Applikationen Enterprise

    Applikationen mit Grails Wo ist Grails in der Entwicklung schnell?
  11. 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
  12. 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
  13. 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' }
  14. 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
  15. 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
  16. 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.
  17. 20 Agenda Grails im Überblick Anforderungen an Enterprise Applikationen Enterprise

    Applikationen mit Grails Wo ist Grails in der Entwicklung schnell?
  18. 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
  19. 22 Scaffolding • Generierung von CRUD Funktionalitäten • Unterscheidung zwischen

    • Dynamic • Static • Layout kann angepasst werden • Anwendungsszenarien • Rapid Prototyping • Ausgangsbasis • Produktivbetrieb grails generate-controller Project
  20. 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
  21. 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")
  22. 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!" …. } }
  23. 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
  24. 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,…)
  25. 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