Upload
tobias-kraft
View
930
Download
1
Embed Size (px)
DESCRIPTION
Vortrag auf dem Java-Forum Stuttgart am 04.07.13
Citation preview
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 Kraft Manuel 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": "[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() } }
20
JEE-Integration
Application Server
DB
Dokumenten- Management-
System
EJB-Aufruf
grails war ejb ear
dms_if.jar dms_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