Umsetzung von Enterprise Applikationen mit Grails (Teil 3)

von Tobias Kraft

Nachdem die ersten beiden Teile Grails bzw. Enterprise Applikationen separat betrachtet haben, geht der letzte Teil auf beide Seiten im Zusammenhang ein. Aus diesem Grund werden nachfolgend einige Bereiche, die im Enterprise-Umfeld relevant sind im Zusammenhang mit Grails näher beleuchtet.

Produktivbetrieb

Für die Entwicklung wird, wie bereits im 1. Beitrag erwähnt, Tomcat benutzt. In größeren Unternehmen ist in der Regel der Laufzeit-Container jedoch vorgegeben und es kommen vor allem kommerzielle Server wie bspw. Websphere oder Weblogic zum Einsatz. Da für den Wirkbetrieb ein WAR-Archiv erzeugt wird, kann Grails auf sämtlichen Servlet-Engines und Applikations-Servern betrieben werden. Clustering zur Erhöhung der Ausfallsicherheit ist dank der Verteilung als WAR-Archiv mit Grails problemlos möglich. Abhängig von den Anforderungen mag Load-Balancing mit und ohne Session-Replication eingesetzt werden [1]. 
Im Produktivbetrieb sind Monitoring-Aktivitäten unumgänglich. Zusätzlich zu den Standardmonitoring-Möglichkeiten von WAR-Archiven können von der Applikation über MBeans Informationen exportiert werden und diese mittels JMX abgefragt werden.

Konfigurationsmöglichkeiten

Existieren mehrere Umgebungen, wie Test-, Integrations-, Produktionsumgebung, so ist das Auslagern von Konfigurationsparametern sinnvoll. Außerdem sind damit Anpassungen ohne ein neues Deployment möglich. 
Hierfür unterstützt Grails JNDI. Hiermit können bspw. die Werte für den Datenbankzugriff oder auch des Mail-Servers aus dem Laufzeit-Container gelesen und ebenso dort angepasst werden. Für das Mail-Plugin ist diese Konfiguration, wie im untenstehenden Codeausschnitt dargestellt, denkbar einfach.

grails {
     mail {
          jndiName = 'TW_DEMO_MAIL_SESSION'
          disabled = false
     }
     mail.default.from = 'noReply@twitter-demo.de'
}

Eine weitere Alternative sind Konfigurationsdateien, die über den Klassenpfad oder ein relatives Verzeichnis eingelesen werden.

Security

In Unternehmen erfolgt die Benutzer- und Rollen-Verwaltung in vielen Fällen über LDAP-Server. Zum Zwecke der zentralen und einmaligen Pflege ist es sinnvoll, dass Software-Applikationen diese Services nutzen. Das Spring-Security-Plugin deckt für Grails-Anwendungen den kompletten Bereich der Authentifizierung und der Autorisierung ab. 
Neben Datenbanken können genauso LDAP-Server angebunden werden. Wird ein Microsoft IIS der Grails-Applikation vorgeschaltet, ist eine Anbindung der passwortfreien integrierten Windows-Authentifizierung (ehemals NTLM) problemlos umsetzbar. Mit den diversen verfügbaren Aufsätzen für das Spring Security Plugin sind auch Authentifizierungsmechanismen für Twitter, Facebook und weitere andere Provider möglich. Durch die Erweiterbarkeit können gleichfalls eigene Authentifizierungs- und Autorisierungs-Mechanismen umgesetzt werden.

Integration mit Java und Drittsystemen

Mit der JVM als Basisplattform kann in Grails sämtlicher Java-Code ausgeführt und auch entsprechende JAR-Archive integriert werden. Sehr interessant ist die Integration von EJBs, um mit bestehenden Java-Systemen zu kommunizieren. Im nachfolgenden ist ein Szenario für den Zugriff auf ein Dokumenten-Management-System über EJB’s dargestellt.

Hierbei wird in Grails via Spring-Beans der JNDI-Zugriff in weniger als 5 Zeilen konfiguriert. Das JAR-Archiv mit den Java-Interfaces ist in beiden Applikationen vorhanden. Über die Spring-Bean können anschließend die in den Schnittstellen definierten Service-Methoden genutzt werden. 
Häufig findet man in der Industrie Messaging-Systeme zur Interkommunikation und asynchronen Abarbeitung vor. Eine unkomplizierte Integrationsmöglichkeit für Drittsysteme bieten ebenfalls JSON und XML. Mit Hilfe von Groovy ist die Verarbeitung dieser Formate absolut einfach.

Robustheit des Systems

Die aus Java bekannten Exception-Mechanismen werden auch bei Grails eingesetzt und es können zentrale Fehlerseiten abhängig vom Fehler-Typ angezeigt werden. In den Services ist ein besonders feingranulares Transaktionshandling denkbar, um bedingt vom Anwendungsfall entsprechende Rollbacks zu initiieren. Es ist zu beachten, dass nur Unchecked Exceptions einen Rollback auslösen. Sind 2 Phase-Commits notwendig - falls z.B. mit Messaging und der DB innerhalb einer Transaktion gearbeitet wird, gibt es - wie in Grails üblich - wiederum ein Plugin, das eingebunden werden kann [2].

Tool- und Fullstack-Unterstützung

Unumgänglich ist im Enterprise-Umfeld eine ausreichende Tool-Unterstützung. Im Bereich der Entwicklungsumgebung ist die kommerzielle Version von IntelliJ ungemein fortschrittlich und unterstützt immer die aktuellsten Grails-Versionen. Mit den weit verbreiteten Open-Source Produkten Jenkins und Hudson stehen für Continuous Integration sehr ausgereifte Werkzeuge zur Verfügung. Für die in professionellen Projekten unumgänglichen automatisierten Tests bieten Spock und Geb die ideale Basis für Grails. Über die Continuous Integration Server wird auch mit den entsprechenden Grails-Plugins die Testabdeckung [3] oder die Codequalität [4] analysiert.

Große Code-Basis

Wie verhält sich Grails bei einer großen bzw. immer weiter wachsenden Code-Basis? Die bis heute von uns umgesetzten Projekte zeigten keine negativen Performance-Einbußen. Bei steigender Code-Basis verlängert sich natürlich die Zeit für Neu-Kompilierungen. Im Zusammenspiel mit Datenbanken und Datenmengen konnten bei den bisher in Produktion befindlichen Applikationen Erfahrungen mit bis zu 20 GB gesammelt werden und auch hier gab es keinerlei Anzeichen von Problemen. 
Aus Architektur-Sicht ist es bei umfangreicheren Vorhaben sinnvoll, nicht alles in einem einzigen Grails-Projekt umzusetzen, sondern vielmehr nach fachlichen Gesichtspunkten die Anwendung zu schneiden und Teile über den Plugin-Mechanismus auszulagern.

Fazit

Da die Anforderungs-Szenarien an Enterprise-Anwendungen breitgefächert und umfangreich sind, kann dieser Beitrag nur einige wesentliche Bereiche beleuchten. Es ist jedoch deutlich geworden, dass Grails auf Grund der engen Beziehung zu Java Ansprüche von Enterprise-Applikationen in vielen Fällen erfüllen kann. 
Durch die zahlreichen Plugins können weitere Funktionalitäten abgedeckt werden oder bei Bedarf selbst mit einem eigenen Plugin implementiert werden.

Links

[1] Grails in Produktion – mit Apache, Tomcat und MySQL
[2] Atomikos
[3] Test Code Coverage Plugin
[4] Codenarc

Kategorien: GrailsGroovy

Zurück