Enterprise 2.0 Portale mit Grails. Geht das?
Java Forum Stuttgart
04.07.2013
Manuel Breitfeld, Tobias Kraft
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 KraftManuel Breitfeld
3
Agenda
Überblick Portale
Grails als Basistechnologie
Umsetzung von Portal-Modulen
Portal Anpassungen
4
Was sind Portale?
Portlets
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
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
7
photo credit: tim.md via photopin
8
Probleme von Portalen
● Schwergewichtig
● Nach Möglichkeit alles integrieren
● Unterstützung von Standards durch Portalhersteller
● Portlet-API veraltet
● Teilweise hohe Lizenzkosten
● Testing
9
Agenda
Überblick Portale
Grails als Basistechnologie
Umsetzung von Portal-Modulen
Portal Anpassungen
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
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:
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
13
Aufbau eines Grails-Projektes
● Vordefinierte Projektstruktur
14
Grails Aufbau
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)
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() {…}
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, …)
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
19
Integrationsbeispiele
● JSON-Slurper
● File-Handling
def jsonText = '''{
"message": {
"header": { "from": "bud@spencer.com"},
"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()
}
}
20
JEE-Integration
Application Server
DB
Dokumenten-
Management-
System
EJB-Aufruf
grails war ejb ear
dms_if.jardms_if.jar
dms_ejb.jar
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
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
23
Warum Grails für ein Portal einsetzen?
● Einfache Integration von Drittsystemen
● Schnelle Umsetzung neuer Anforderungen
● Enterprise-Fähigkeit
● Einfaches Testing
● CI-Unterstützung
24
Agenda
Überblick Portale
Grails als Basistechnologie
Umsetzung von Portal-Modulen
Portal Anpassungen
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
26
Tagging
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
28
Enterprise Suche
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)
30
Content / Document Management System
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
32
Web 2.0 Funktionalitäten
33
Web 2.0 Funktionalitäten
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
35
Agenda
Überblick Portale
Grails als Basistechnologie
Umsetzung von Portal-Modulen
Portal Anpassungen
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)
37
Portalseiten und Portlets
Template
Positionen im Template
Portlet-Instanzen
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“
39
Fazit
● Schnelle Entwicklung dank Grails
● Grails ist Enterprise fähig
● Tragfähigkeit in der Praxis erprobt
● Reduzierte Komplexität
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

Enterprise 2.0 Portale mit Grails. Geht das?

  • 1.
    Enterprise 2.0 Portalemit Grails. Geht das? Java Forum Stuttgart 04.07.2013 Manuel Breitfeld, Tobias Kraft
  • 2.
    2 Redner ● IT-Berater beiexensio 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 KraftManuel Breitfeld
  • 3.
    3 Agenda Überblick Portale Grails alsBasistechnologie Umsetzung von Portal-Modulen Portal Anpassungen
  • 4.
  • 5.
    5 Was zeichnet Portaleheutzutage 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
  • 6.
    6 Relevante Portal-Spezifikationen ● JSR168: 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
  • 7.
  • 8.
    8 Probleme von Portalen ●Schwergewichtig ● Nach Möglichkeit alles integrieren ● Unterstützung von Standards durch Portalhersteller ● Portlet-API veraltet ● Teilweise hohe Lizenzkosten ● Testing
  • 9.
    9 Agenda Überblick Portale Grails alsBasistechnologie Umsetzung von Portal-Modulen Portal Anpassungen
  • 10.
    10 Was ist Grails? AFull-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
  • 11.
    11 Groovy ● Dynamische typisierteSprache ● 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:
  • 12.
    12 Rapid development Der Standard-Wegist konfiguriert, aber Änderungen sind möglich ● Convention over Configuration (CoC) ● Don’t repeat Yourself (DRY) Beispiele: ● Aufbau Projekt-Struktur ● DB-Mapping ● Klassennamen ● Logging ● Autowiring
  • 13.
    13 Aufbau eines Grails-Projektes ●Vordefinierte Projektstruktur
  • 14.
  • 15.
    15 GORM – fürdie 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)
  • 16.
    16 CoC-Beispiel anhand vonServices ● 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() {…}
  • 17.
    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, …)
  • 18.
    18 Full-Stack und ContinuousIntegration ● Test ● Testdaten (Fixtures, Build Test Data Plugin) ● JUnit, Spock ● Build ● Gant / Ivy ● Gradle ● Analyse-Werkzeuge ● Cobertura ● Codenarc ● Jenkins / Hudson
  • 19.
    19 Integrationsbeispiele ● JSON-Slurper ● File-Handling defjsonText = '''{ "message": { "header": { "from": "bud@spencer.com"}, "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() } }
  • 20.
  • 21.
    21 Was ist coolan 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
  • 22.
    22 Was ist beiGrails 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
  • 23.
    23 Warum Grails fürein Portal einsetzen? ● Einfache Integration von Drittsystemen ● Schnelle Umsetzung neuer Anforderungen ● Enterprise-Fähigkeit ● Einfaches Testing ● CI-Unterstützung
  • 24.
    24 Agenda Überblick Portale Grails alsBasistechnologie Umsetzung von Portal-Modulen Portal Anpassungen
  • 25.
    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
  • 26.
  • 27.
    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
  • 28.
  • 29.
    29 Content / DocumentManagement 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)
  • 30.
    30 Content / DocumentManagement System
  • 31.
    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
  • 32.
  • 33.
  • 34.
    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
  • 35.
    35 Agenda Überblick Portale Grails alsBasistechnologie Umsetzung von Portal-Modulen Portal Anpassungen
  • 36.
    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)
  • 37.
  • 38.
    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“
  • 39.
    39 Fazit ● Schnelle Entwicklungdank Grails ● Grails ist Enterprise fähig ● Tragfähigkeit in der Praxis erprobt ● Reduzierte Komplexität
  • 40.
    Vielen Dank! exensio Gesellschaftfür Informationstechnologie mbH Am Rüppurrer Schloß 12 76199 Karlsruhe http://www.exensio.de http://blog.exensio.de http://twitter.com/exensio