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

Enterprise 2.0 Portale mit Grails. Geht das?

Enterprise 2.0 Portale mit Grails. Geht das?

Vortrag auf dem Java Forum Stuttgart

exensio

July 04, 2013
Tweet

More Decks by exensio

Other Decks in Programming

Transcript

  1. Enterprise 2.0 Portale mit Grails. Geht das? Java Forum Stuttgart

    04.07.2013 Manuel Breitfeld, Tobias Kraft
  2. 2 Redner • IT-Berater bei exensio GmbH (Karlsruhe) • Mehrere

    Jahre Erfahrung mit der Umsetzung von Enterprise-Portalen. • Neben Java-Technologien kommt mehr das leichtgewichtige Grails- Framework zum Einsatz. • Aktuelle technische Erkenntnisse und Erfahrungsberichte werden regelmäßig auf http://blog.exensio.de/ veröffentlicht. Tobias Kraft Manuel Breitfeld
  3. 5 Was zeichnet Portale heutzutage aus? • Personalisierung • Integration

    von Backend-Systemen • Single Sign On • Content Management • Content Aggregation • Navigation • Theming / Layout • Enterprise Search • Social Networking (Enterprise 2.0) • Collaboration • Mobile Support
  4. 6 Relevante Portal-Spezifikationen • JSR 168: Portlet Specification, JSR 286:

    Portlet Specification 2.0 • Spezifiziert Schnittstellen zwischen Portalen und Portlets. • Portlet Programmier Modell • OASIS-Standard WSRP (1.0, 2.0) • Web Services für Remote Portlets
  5. 8 Probleme von Portalen • Schwergewichtig • Nach Möglichkeit alles

    integrieren • Unterstützung von Standards durch Portalhersteller • Portlet-API veraltet • Teilweise hohe Lizenzkosten • Testing
  6. 10 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.2.2 (04/2013) • Basiert auf Groovy
  7. 11 Groovy • Dynamische typisierte Sprache • Basiert auf JVM

    • Zusätzliche Features zu Java def names = ["Peter", "Manuel", "Tobias"] println names def shortNames = names.findAll { it.size() <= 5 } println shortNames.size() shortNames.each { println it } Beispiel:
  8. 12 Rapid development 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
  9. 15 GORM – für die Persistenz • Hibernate ist der

    Standard • Austausch Persistenzschicht ist möglich • DB-Operationen erfolgen direkt am Domain-Objekt • Queries einfach und intuitiv Portlet.findAllByPageAndPortal(‘Home’, portalname) PortletInst.where{ year(published) == 2013 && right != ‘public’ } Where-Queries Dynamic Finders Portlet.delete() Portlet.save(flush:true)
  10. 16 CoC-Beispiel anhand von Services • SpringBeans als einfache POJOs

    • Einfacher Zugriff über DI • Management von Transaktionen def portalService def calculateMenu() { def page = portalService.getHome() …. } static transactional = false @Transactional(propagation = Propagation.REQUIRES_NEW) def fooMethod() {…}
  11. 17 Controller und Views • Controller • Direkter Zugriff auf

    Services • Standardmethoden wie render() • Groovy Server Pages • Ähnlich JSP’s • Zusätzliche Tagslibs und Variablen • Model-Zugriff • Taglibs • Integration weiterer Oberflächen-Libraries als Plugins (bspw. Vaadin, …)
  12. 18 Full-Stack und Continuous Integration • Test • Testdaten (Fixtures,

    Build Test Data Plugin) • JUnit, Spock • Build • Gant / Ivy • Gradle • Analyse-Werkzeuge • Cobertura • Codenarc • Jenkins / Hudson
  13. 19 Integrationsbeispiele • JSON-Slurper • File-Handling def jsonText = '''{

    "message": { "header": { "from": "[email protected]"}, "body": "Hello Java Forum Stuttgart." } }''' def mail = new JsonSlurper().parseText(jsonText) assert mail.message.body == "Hello Java Forum Stuttgart." new File('/data/').eachFileMatch( ~".*xml" ) { f -> if ( f.lastModified() <= yesterday ) { f.delete() } }
  14. 21 Was ist cool an Grails? http://www.morguefile.com/archive/display/196579 • Runterladen und

    loslegen • Groovy macht vieles kürzer und schneller • Zahlreiche Plugins steigern die Produktivität • Full-Stack Unterstützung / Continous Integration • Testing • Coverage • Build
  15. 22 Was ist bei Grails zu beachten? • Unsauberer Code

    ist schnell produziert • Schichtentrennung • Schwergewichtige Taglibs • Zu viel Logik in Controllern • Vernachlässigung der Tests (Nicht typisiert) • Versions-Upgrades detailliert testen
  16. 23 Warum Grails für ein Portal einsetzen? • Einfache Integration

    von Drittsystemen • Schnelle Umsetzung neuer Anforderungen • Enterprise-Fähigkeit • Einfaches Testing • CI-Unterstützung
  17. 25 Tagging • Kennzeichnung / Kategorisierung verschiedener Themen • Funktionsübergreifendes

    Tagging • Blog Posts, Dokumente, Micro Messages, Wiki,… • Hierarchie • Gültigkeitsbereiche • Blog Post befasst sich mit anderen Themen als das Wiki • Realisiert ohne „direkte Abhängigkeit“ im Datenmodell • Entwicklung auf Basis des Taggable-Plugins
  18. 27 Enterprise Suche • Suche über mehrere fachliche Komponenten •

    Unterschiedliche Darstellung je nach Inhaltstyp • Bild mit Kontaktdaten für Personen • Vorschau für Dokumente • Facettensuche, u.a. mit Hierarchie und Date Range • Highlighting, Autocomplete, Fuzzy Search,… • Tag Cloud zu passenden Suchbegriffen • Realisiert mit Apache Solr und Elasticsearch • Einbindung in Grails über die (angepassten) gleichnamigen Plugins
  19. 29 Content / Document Management System • Verschiedene Inhaltstypen •

    Unstrukturiert (WYSIWYG Editor), Strukturiert und Templates • Navigation innerhalb eines Kapitels („Context Navigation“) • Neben der Portal-Navigation, kann innerhalb von Inhalten eine Navigation aufgebaut werden • Workflow • Freigabe basierend auf dem Vieraugen-Prinzip • Versionierung • Inline-Editing innerhalb des Portals • Realisiert durch eine eigene Lösung (Integration von anderen CMS-Systemen wie Adobe CQ5, o.ä. möglich)
  20. 31 Web 2.0 Funktionalitäten • Blog • Wiki • Micro

    Messages • Activity Stream • Teilen von Dokumenten • Kommentieren von Inhalten • Bewerten von Inhalten (Voting) • Integration von anderen Diensten wie Twitter
  21. 34 Personalisierung und Berechtigungen • Spring Security als Basis •

    Hierarchisches Rollenkonzept • Anbindung von AD, CMS, DB • Personalisierung • Enterprise Suche • Berechtigungen • Page-Ebene • Portlet-Ebene • Navigation • Content
  22. 36 Portalseiten und Portlets • Navigation und Portalseiten können zur

    Laufzeit definiert werden • Templates • Container für die Portlets • Instanzen von Portlets werden zu einer Portalseite hinzugefügt • Positionierung über definierte Container • Angabe von zusätzlichen Parametern (Portlet Preferences)
  23. 38 Umsetzung neuer Anforderungen • Einfach! 1. Funktionalität in Grails

    umsetzen (Controller, View, Service,…) 2. Neues Portlet im Admin-Backend definieren 3. Portlet auf gewünschte Seite „ziehen“
  24. 39 Fazit • Schnelle Entwicklung dank Grails • Grails ist

    Enterprise fähig • Tragfähigkeit in der Praxis erprobt • Reduzierte Komplexität
  25. Vielen Dank! exensio Gesellschaft für Informationstechnologie mbH Am Rüppurrer Schloß

    12 76199 Karlsruhe http://www.exensio.de http://blog.exensio.de http://twitter.com/exensio