19.01.2014 Aufrufe

Ausgabe Frühjahr 2013 - Gedoplan

Ausgabe Frühjahr 2013 - Gedoplan

Ausgabe Frühjahr 2013 - Gedoplan

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Ausgabe</strong> Frühjahr <strong>2013</strong><br />

www.gedoplan.de<br />

Das Kundenmagazin<br />

In dieser <strong>Ausgabe</strong>:<br />

JBoss7 als Plattform für<br />

hochverfügbare Anwendungen<br />

Vergleich der Netzwerklast -<br />

Vaadin vs. JSF<br />

Systeme für den Anwender -<br />

User Centered Design


EDITORIAL<br />

Liebe Leserin, lieber Leser,<br />

Im ersten Artikel unserer Frühjahrsausgabe beschäftigt<br />

sich Dirk Weil mit der Clusterfähigkeit<br />

des JBoss Applikationsservers. Sowohl unter dem<br />

Aspekt der Ausfallsicherheit als auch unter dem<br />

Aspekt der Lastverteilung betrachtet, bietet die<br />

aktuelle Version fast alle notwendigen Features.<br />

Allerdings mit einigen Einschränkungen, auf die<br />

im Artikel eingegangen wird. Der Autor erwartet<br />

daher gerade in diesem Bereich noch einige<br />

Verbesserungen in der nächsten, der 7.2 Version.<br />

Hendrik Jungnitsch hat Ihnen in der letzten<br />

<strong>Ausgabe</strong> das Java-Webframework vorgestellt:<br />

Vaadin. Ein häufiges Argument gegen serverseitig<br />

gesteuerte Webframeworks ist der erhöhte<br />

Netzwerkverkehr. Aber wie hoch ist der eigentlich<br />

und gibt es Unterscheide zum Konkurrenten<br />

JSF? Auf beide Fragen finden Sie eine Antwort in<br />

dem Artikel Vaadin vs. JSF.<br />

User Centered Design sollten sich Softwareentwicklung<br />

immer verpflichtet fühlen. Was ist aber<br />

unter diesem abstrakten Begriff zu verstehen?<br />

Der Artikel Systeme für Anwender - User Centered<br />

Design von Reinhard Brüggemeyer gibt darauf<br />

eine Antwort, indem er die Frage nach dem<br />

Anwender, seinen Arbeitsbedingungen, seinen<br />

Verhaltensmustern etc. und den Folgen beleuchtet.<br />

Eine spannende und lohnende Lektüre<br />

wünscht Ihnen Ihr<br />

Termine<br />

Expertenkreis Java<br />

Thema: jBPM und Drools -<br />

Prozess- und Regelgestützte Fachanwendungen<br />

Ort: GEDOPLAN GmbH, Stieghorster Str. 60, 33605 Bielefeld<br />

Termin: Donnerstag, 04.07.<strong>2013</strong> | 18:00-20:00 Uhr<br />

Referent: Kai Jemella, S&N AG, Paderborn<br />

Thema: Desktop Usability im Browser -<br />

GWT in Business Anwendungen<br />

Ort: GEDOPLAN GmbH, Stieghorster Str. 60, 33605 Bielefeld<br />

Termin: Donnerstag, 16.05.<strong>2013</strong> | 18:00-20:00 Uhr<br />

Referent: Christian Vögtle, S&N AG, Paderborn<br />

Thema: JBoss 7 als Plattform für hochverfügbare Anwendungen<br />

Ort: GEDOPLAN GmbH, Stieghorster Str. 60, 33605 Bielefeld<br />

Termin: Donnerstag, 14.03.<strong>2013</strong> | 18:00-20:00 Uhr<br />

Referent: Dirk Weil, GEDOPLAN GmbH<br />

Java User Group Berlin Brandenburg<br />

Thema: Optimierung von JPA-Anwendungen<br />

Termin: Mittwoch, 30.01.<strong>2013</strong> | 18:30-20:30 Uhr<br />

Referent: Dirk Weil, GEDOPLAN GmbH<br />

JAX, 23. - 26.04.<strong>2013</strong>, Mainz<br />

Thema: Java EE hochverfügbar<br />

Termin: Freitag, 26.04.<strong>2013</strong> | 09:00 -10:30 Uhr<br />

Thema: Java Persistence in Action –<br />

Features jenseits des EntryLevels<br />

Termin: Dienstag, 23.04.<strong>2013</strong> | 14:45-15:45 Uhr<br />

Referent: Dirk Weil, GEDOPLAN GmbH<br />

HR-User-Group<br />

Thema: Das BEM ExpertenSystem<br />

- Betriebliches Eingliederungsmanagement im Portal<br />

Ort: GEDOPLAN GmbH, Stieghorster Str. 60, 33605 Bielefeld<br />

Termin: Mittwoch, 29.05.<strong>2013</strong> | 14:30-16:30 Uhr<br />

Referent: Frank Schlinkheider, ITSD Consulting GmbH<br />

Ulrich Hake | ulrich.hake@gedoplan.de<br />

Power Workshop Java EE 6<br />

Ort: IPS IT-Schulungen, Berlin<br />

Termin: 03. - 07.06.<strong>2013</strong><br />

2


JBoss 7 als Plattform<br />

für hochverfügbare Anwendungen<br />

Unternehmensanwendungen sollen zügig arbeiten und ausfallsicher sein. Der Parallelbetrieb in einem<br />

Cluster kann das mit Lastverteilung, Replikation und verteilten Caches erreichen, hält aber auch<br />

einige Stolperfallen bereit. JBoss 7 bietet u. a. in seinem Domain Modus die Möglichkeit, mehrere<br />

Serverinstanzen zu einem Cluster zu verbinden. Darin laufende Web-, Remote-(EJB-) und Messaging-Anwendungen<br />

können von Load Balancing und Failover profitieren, DB-Zugriffe können einen<br />

clusterweiten Cache verwenden.<br />

Von Dirk Weil<br />

Der Begriff „Hochverfügbarkeit“ kann im Sinne zweier Ziele interpretiert<br />

werden, die zwar unabhängig voneinander angestrebt werden<br />

können, sich teilweise aber auch gegenseitig beeinflussen: Durch<br />

Lastverteilung werden die Anfragen auf mehrere Cluster-Knoten verteilt,<br />

idealerweise so, dass die einzelnen Systeme optimal ausgelastet<br />

werden und somit der Gesamtdurchsatz im Vergleich zu einem einzelnen<br />

Server vervielfacht wird. Man muss dabei immer das große<br />

Ganze im Blick haben: Eine Einzelanfrage wird durch die Verwaltung<br />

der Lastverteilung bestenfalls nicht spürbar beeinflusst, in der Praxis<br />

aber etwas verlangsamt.<br />

Clusterarchitekturen<br />

Im einfachsten Fall bilden alle betroffenen Server einen Cluster, in<br />

dem jeder Knoten die Anwendungen komplett enthält.<br />

Alternativ ist auch ein mehrschichtiger Cluster denkbar, in dem Anwendungsschichten<br />

wie bspw. Web-Präsentation und Geschäftslogik<br />

auf mehrere Cluster deployt werden. Darüber hinaus ist es auch möglich,<br />

den Cluster so zu segmentieren, dass Teile davon unabhängig<br />

vom Rest bspw. zu Wartungszwecken heruntergefahren oder mit einem<br />

Anwendungsupdate versehen werden können.<br />

Der zweite Aspekt von Hochverfügbarkeit ist die Sicherheit gegen<br />

Ausfälle des Systems. Wird eine Anwendung redundant auf mehreren<br />

Cluster-Knoten betrieben und ihre Sitzungsdaten repliziert, kann<br />

beim Ausall eines Knotens ein zweiter transparent übernehmen. Im<br />

Idealfall bemerkt der Anwender dieses „Fail-over“ nicht. Die Replikation<br />

der Sitzungsdaten belastet die Systeme allerdings teilweise spürbar.<br />

Zudem nutzt man üblicherweise ein sog. Sticky-Session-Verfahren,<br />

bei dem Folgerequests immer dem Knoten zugewiesen werden,<br />

der schon den ersten Request der Session verarbeitet hat, solange<br />

dieser nicht ausfällt. Somit hat der Lastverteiler hier nicht mehr „freie<br />

Hand“, was der optimalen Systemauslastung entgegen wirkt.<br />

JBoss 7 im Clusterbetrieb<br />

Wie schon bei den Vorversionen enthält auch die Version 7 des JBoss<br />

umfangreiche Cluster-Features. Vieles davon ist allerdings noch<br />

„Work in Progress“, was man z. B. an der vielfach lückenhaften und<br />

teilweise auch fehlerhaften Dokumentation erkennen kann.<br />

Ein JBoss-7-Cluster kann zwar auf Basis des Standalone-Modus aufgebaut<br />

werden, der dem Laufzeitmodus der Vorversionen entspricht.<br />

Besser geeignet ist jedoch der mit der Version 7 neu eingeführte<br />

Domänenmodus, da hier eine gemeinsame Administration der Cluster-Server<br />

web- oder kommandozeilenbasiert mittels Administration<br />

Console bzw. Admin CLI möglich ist, was auch das clusterweite<br />

3


Deployment von Anwendungen umfasst. Als Konfigurationsprofil ist<br />

„ha“ oder „full-ha“ zu wählen für clusterfähige Anwendungen im<br />

Web bzw. Full Profile der Java EE 6.<br />

Web-Anwendungen im JBoss-7-Cluster<br />

Für den Zugriff mittels Webbrowser wird ein Load Balancer benötigt,<br />

der die Web-Requests annimmt und an einen der Clusterserver weiterleitet.<br />

JBoss bringt hierfür ein Plugin namens mod_cluster mit, das<br />

in einen Apache-HTTP-Server integriert werden kann. Es bietet eine<br />

dynamische Konfiguration, d. h. über ein Handshaking mit den Clusterservern<br />

konfiguriert es sich automatisch als lastverteilendes Proxy<br />

für die aktuell deployten, clusterfähigen Webanwendungen. Ebenso<br />

erkennt es selbstständig ausgefallene oder hinzugekommene Knoten.<br />

Die Lastverteilung kann zyklisch gleichverteilt geschehen oder auch<br />

gesteuert durch diverse serverseitige Metriken wie bspw. die akuelle<br />

Last der Clusterserver. Alternative Load Balancer sind natürlich auch<br />

einsetzbar, bspw. mod_jk – ebenfalls ein Apache-Plugin – oder separate<br />

Hardware.<br />

Die Sitzungsdaten der Anwendung können im Cluster repliziert werden,<br />

dazu nutzt JBoss 7 Infinispan, eine ebenfalls als JBoss-Projekt<br />

entwickelte Open-Source-Implementierung eines verteilten Caches.<br />

Die Daten können dabei auf alle anderen Server des Clusters repliziert<br />

werden. Obwohl hierfür Multicast eingesetzt werden kann,<br />

skaliert diese Standard-Replikation nicht gut, da der Speicherbedarf<br />

auf jedem Server linear mit der Anzahl der Knoten im Cluster wächst.<br />

Infinispan bietet als Lösung für größere Cluster ein Verteilungsverfahren<br />

an, bei dem nur eine definierbare, kleine Anzahl von Replikaten<br />

erstellt wird. Dieses Verfahren skaliert recht gut, verfügt aber<br />

naturgemäß über nicht ganz so hohe Ausfallsicherheit. In der Version<br />

7.1 des JBoss ist es allerdings noch nicht fehlerfrei implementiert.<br />

Dies sollte aber mit der derzeit im Pre-Release befindlichen Version<br />

7.2 der Fall sein.<br />

Weitere Dienste im JBoss-7-Cluster<br />

Die Sitzungsdaten von Stateful EJBs können analog zur Web Session<br />

repliziert werden. Die Remoting-Komponente von EJBs enthält zudem<br />

einen Load Balancer in Form eines Proxies, der Remote-Aufrufe<br />

der EJBs an die verschiedenen Knoten des Clusters verteilt und sich<br />

ähnlich zu mod_cluster anpasst, wenn Server ausfallen oder hinzukommen.<br />

4


Der Messaging-Dienst des JBoss 7 – HornetQ – ist ebenfalls clusterfähig:<br />

Der Versand von Point-to-Point-Meldungen geschieht lastverteilt<br />

auf die verschiedenen Server. Im Publish/Subscribe-Modus<br />

werden die Meldungen auf alle Server repliziert, wenn dort ein<br />

entsprechender Empfänger vorhanden ist. Der Meldungsempfang<br />

geschieht immer nur von einem Knoten – dem, an dem der Empfänger<br />

sich angemeldet hat. Im Falle eines Serverausfalls organisiert<br />

sich HornetQ automatisch neu, d. h. die Meldungsverteilung bezieht<br />

immer die derzeit laufenden Server ein. Die Meldungen des ausgefallenen<br />

Knotens sind nicht verloren, wenn sie persistent versendet<br />

wurden. Sie können nach dem späteren Start des ggf. reparierten<br />

Servers weiter verarbeitet werden.<br />

Der Java-Persistence-Provider im JBoss 7 – Hibernate – kann als Second<br />

Level Cache Infinispan nutzen. Der Cache ist damit auch clusterfähig,<br />

wobei hier i. d. R. keine Replikation der Daten genutzt wird<br />

– die sind ja ohnehin in der DB. Vielmehr wird nach der Veränderung<br />

eines persistenten Objektes auf einem Knoten Infinispan zur Invalidierung<br />

der entsprechenden Cache-Einträge der restlichen Knoten<br />

genutzt. Die Infinispan-Integration in der Version 7.1 des Servers<br />

enthält allerdings noch einige Bugs, die die Nutzung des Second Level<br />

Caches derzeit verhindern. Hier liegt die Hoffnung also ebenso<br />

wie zuvor auf der angekündigten Version 7.2.<br />

Fazit<br />

JBoss 7 enthält eine umfangreiche Unterstützung für das Clustering<br />

von Java-EE-Anwendungen, die alle wesentlichen Bereiche abdeckt.<br />

Die Cluster-Features sind allerdings erst spät integriert worden und<br />

befinden sich teilweise noch in der (Weiter-) Entwicklung, so dass<br />

in Teilen noch Einschränkungen zu beachten sind. Die kommende<br />

Version 7.2 wird diese Mängel voraussichtlich beheben.<br />

Zum Thema JBoss 7 führen wir in Kooperation mit unseren Seminarpartnern<br />

Seminare durch, die auch das Thema Clustering abdecken.<br />

Sprechen Sie uns gerne dazu an!<br />

Dirk Weil [ dirk.weil@gedoplan.de ]<br />

Geschäftsführer GEDOPLAN GmbH, darüber hinaus ist er Autor in Fachmagazinen, hält<br />

Vorträge und leitet Seminare und Workshops aus einem eigenen Java-Curriculum.<br />

5


Vergleich der Netzwerklast -<br />

Vaadin vs. JSF<br />

Bei Vaadin und JSF handelt es sich um serverseitig gesteuerte Webframeworks, welche einen Großteil<br />

der Steuerungslogik auf dem Server verrichten und den Client (Browser) hauptsächlich für eine reine<br />

Darstellung der GUI verwenden. Diese Architektur könnte daher für einen erhöhten Netzwerkverkehr<br />

gegenüber einer Rich-Client-Anwendung (z. B. GWT) sorgen. Insbesondere im Zusammenhang mit<br />

Vaadin wird dieser Aspekt oft als ein Nachteil des Frameworks aufgeführt. Dementsprechend lag<br />

es nahe, einmal genauer zu untersuchen, wie sich die Webframeworks bezüglich ihrer verursachten<br />

Netzwerklast verhalten.<br />

Von Hendrik Jungnitsch<br />

Testumgebung<br />

Zuerst muss eine geeignete Testanwendung für den Vergleich konzipiert<br />

werden. Diese soll zwar nicht allzu komplex sein, da eine<br />

vergleichbare Implementierung sowohl in Vaadin als auch in JSF<br />

notwendig ist, allerdings ist es natürlich wünschenswert, dass die<br />

Anwendung möglichst viele verschiedene Anwendungsfälle abdeckt.<br />

Somit soll die Testanwendung folgende Elemente beinhalten, um einen<br />

einigermaßen umfassenden Vergleich zu gewährleisten:<br />

• Zwei verschiedene Seiten (Seitenwechsel) (Seiten müssen<br />

„bookmarkable“ sein)<br />

• Anzeigen von Datensätzen (Tabelle) (laden vom Server)<br />

• Auswahl von Datensätzen<br />

• Bearbeiten von Datensätzen (speichern auf Server)<br />

• Validierung der Eingaben<br />

• Felder mit Validierung bei Verlassen des Feldes validieren<br />

• Formatierung von Feldinhalten<br />

• Ein-/Ausblenden eines Bereichs<br />

• Hinzufügen, Entfernen von Elementen<br />

• De-/aktivieren von Feldern<br />

• Anzeigen von Bildern<br />

Testanwendung<br />

Bei der aus diesen Überlegungen entstandenen Mini-Anwendung<br />

handelt es sich um eine Kundenstammdaten-Verwaltung, welche auf<br />

der ersten Seite eine Übersichtstabelle über alle Datensätze bietet.<br />

In der Tabelle kann ein Datensatz ausgewählt und anschließend über<br />

einen Button „Bearbeiten“ auf einer neuen Seite verändert werden.<br />

Alle zu validierenden Felder werden jeweils gleich nach Verlassen<br />

ausgewertet. Um das Formular etwas komplexer zu gestalten, gibt<br />

es einen Bereich für das Verwalten der Kontaktdaten des Kunden,<br />

welcher aus- und eingeklappt werden kann. In der tabellarischen<br />

Ansicht besteht die Möglichkeit, Kontakte zu ändern, zu löschen und<br />

hinzuzufügen.<br />

Die Anwendungen sind gegen ein gemeinsames Backend, welches<br />

die Daten- und Serviceklassen umfasst, programmiert.<br />

Für die Vaadin-Variante kommt das neue View-und-Navigator-Konzept<br />

von Vaadin 7 zum Einsatz, um den Seitenwechsel zu realisieren.<br />

Das Template für die Seiten ist über die entsprechende Implementierung<br />

der UI-Klasse realisiert. Um den Vergleich realistisch zu<br />

gestalten, wird JSF nicht „pur“, sondern mit der Aufsatzbibliothek<br />

Primefaces verwendet. Dies zum einen aus dem Grund, dass in der<br />

Praxis JSF meist mit entsprechenden Komponentenbibliotheken zusammen<br />

genutzt wird und zum anderen, um ein ähnlich komplexes<br />

Theming und vergleichbare Ajax-Funktionalitäten zu erhalten, wie<br />

dies bei Vaadin der Fall ist. Denn es ist wohl davon auszugehen, dass<br />

durch die dafür benötigten CSS- und JavaScript-Dateien ein nicht<br />

unbedeutender Teil der Netzwerklast verursacht wird. Die Navigation<br />

in der JSF-Anwendung erfolgt, wie man es in der Praxis wohl auch<br />

umsetzen würde, mit Hilfe von Outcomes und Navigation-Rules.<br />

8


Testaufbau<br />

Die Testanwendungen laufen auf einem JBoss-Server, die Testzugriffe<br />

erfolgen von einer anderen Maschine aus, um „echten“ Netzwerkverkehr<br />

zu generieren. Um dabei die anfallende Netzwerklast<br />

festzuhalten, kommt das Programm Wireshark zum Einsatz. Zugriffe<br />

von mehreren Clients gleichzeitig werden mit Hilfe von JMeter simuliert.<br />

Alle Daten werden vorerst in nichtkomprimierter Form zwischen<br />

Client und Server ausgetauscht.<br />

Ein Testdurchlauf beinhaltet insgesamt 22 verschiedene Aktionen,<br />

die auf der Web-GUI ausgeführt werden.<br />

Vermutungen vor dem Test<br />

Wahrscheinlich werden sich Vaadin und JSF +Primefaces nicht großartig<br />

unterscheiden, was das verursachte Datenvolumen angeht. Auf<br />

der einen Seite müssen erst einmal die Funktionalität (JavaScript)<br />

und das Theme (CSS, Bilder) geladen werden, zum anderen müssen<br />

in beiden Fällen die zu verarbeitenden Daten in gleichem Umfang an<br />

den Server bzw. zum Client übertragen werden.<br />

Ein Blick auf die IO-Graphen aus Wireshark bestätigt diese Vermutung:<br />

Abbildung1 : IO-Graph Vaadin<br />

Testergebnisse<br />

Bei 100 Durchläufen ergaben sich folgende Werte für das jeweilige<br />

gesamte Datenvolumen:<br />

Vaadin: 140,52 MB<br />

JSF+Primefaces : 178,20 MB<br />

Traffic Vaadin JSF<br />

Gesamtvolumen 140,52 MB 178,20 MB<br />

HTTP-Requests 4500 4100<br />

Pakete 143251 178607<br />

durchschn. Paketgröße 1028 106<br />

Der erste Eindruck nach diesem Ergebnis ist wohl, dass Vaadin zwar<br />

weniger Traffic in diesem Test verursacht hat, allerdings nicht wirklich<br />

so viel weniger, als dass man daraus jetzt sofort eine notwendig<br />

optimalere Netzwerklast gegenüber JSF schlussfolgern könnte. Die<br />

Unterschiede könnten sich zum Beispiel allein aus dem Umfang der<br />

jeweils verwendeten Themes ergeben. Um also eine genauere Aussage<br />

treffen zu können, liegt es nahe, einen Blick auf die Größe der<br />

Dateien zu werfen, welche zu Beginn bei Aufruf der Seite geladen<br />

werden.<br />

Bei Erstaufruf der JSF Seite ergeben sich insgesamt 444 KB, wovon<br />

407 KB für die Primefaces Styles und JavaScript-Dateien anfallen.<br />

Nun würde man vielleicht vermuten, dass diese anfängliche „Ladelast“<br />

bei Vaadin etwas geringer ausfällt, was allerdings nicht der Fall<br />

ist. Bei Vaadin werden zu Beginn 1,3 MB übertragen, wovon gut 1<br />

MB für die JavaScript-Engine und 200 KB für den Style bei draufgehen.<br />

Die am Anfang zu ladenden Daten sind also bei Vaadin deutlich<br />

umfangreicher als dies bei JSF der Fall ist. Was dann natürlich die<br />

Frage aufwirft, wie es dann möglich ist, dass Vaadin unter dem Strich<br />

doch ein geringeres Datenvolumen verursacht.<br />

Die nächstliegende Erklärung ist wohl, dass alle weiteren Aktionen,<br />

die auf der Vaadin-Anwendung aufgerufen werden, einfach entsprechend<br />

weniger Netzwerkverkehr verursachen.<br />

Abbildung2 : IO-Graph JSF<br />

Das dargestellte Szenario hat sich durch Nutzung von 100 JMeter<br />

Threads, die innerhalb einer Ramp-up-Zeit von 120s gestartet wurden,<br />

ergeben. Daran ist deutlich zu sehen, dass Vaadin nach dem<br />

anfänglichen Laden für alle weiteren Aktionen wesentlich weniger<br />

Bandbreite benötigt, als dies bei JSF der Fall ist. Das führt dazu, dass<br />

für die JSF-Anwendung zum einen, auch nach Initialisieren aller Sessions<br />

der Netzwerkverkehr nicht so stark abfällt, zum anderen aber<br />

auch die Höchstwerte deutlich über denen der Vaadin-Applikation<br />

liegen.<br />

Wie aber kommt es zu diesem doch recht deutlichen Unterschied?<br />

Da davon auszugehen ist, dass wohl die meisten Daten bei Seitenwechsel<br />

übertragen werden, schauen wir uns diesen genauer an: Bei<br />

der Vaadin-Anwendung werden bei dem Wechsel von der Übersicht<br />

in die Detailbearbeitung 7,2 KB übertragen, bei JSF sind es dagegen<br />

255 KB. Dies liegt zum einen daran, das hier noch eine Primefaces<br />

JavaScript-Bibliothek nachgeladen wird, die erst auf dieser Seite<br />

zum Einsatz kommt, zum anderen ist aber auch die Seite selber mit<br />

28 KB doch deutlich größer. Die größere Datenmenge für die Seite<br />

selbst kann durch die Art und Weise, wie die Navigation in Vaadin<br />

und JSF realisiert ist, erklärt werden. Bei JSF wird bei Nutzung der<br />

standardmäßigen Navigationsfunktion (mit Redirekt) die komplette<br />

Seite neu geladen, was auch durch die Nutzung eines Templates<br />

nicht geändert wird. Dagegen arbeitet Vaadin 7 in der Art, dass das<br />

Template (UI) erhalten bleibt und nur der Inhaltsbereich gegen die<br />

aktuelle View ausgetauscht wird. Dies gilt wie bereits angemerkt unter<br />

der Voraussetzung, dass jeweils die Standardmechanismen für die<br />

Navigation zum Einsatz kommen.<br />

Allerdings ist der Navigationsaspekt hier nicht der einzige Unterschied<br />

zwischen den beiden Frameworks. Die Datenmenge, die bei<br />

einer Aktion zu übertragen ist, wird auch durch die unterschiedlichen<br />

Datenaustauschmechanismen beeinflusst. Während, im Falle von<br />

JSF, auch bei AJAX-Anfrage immer XHTML-Fragmente zurückgelie-<br />

9


fert werden, um einen Bereich zu aktualisieren, findet der Austausch<br />

bei Vaadin mit Hilfe der Frameworkeigenen UIDL, welche auf JSON<br />

Basis realisiert ist, statt. Mit Hilfe dieser UIDL ist es möglich, die<br />

Informationen in einer deutlich kompakteren Form auszutauschen.<br />

Optimierung Vaadin<br />

Ein extrem großer Teil des Datenverkehrs wird allein von der JavaScript-Engine<br />

und insbesondere dem sogenannten Widgetset,<br />

welches die Clientseitige Implementierung der Oberflächenkomponenten<br />

beinhaltet, verursacht. Um also die Netzwerklast einer Vaadin-Anwendung<br />

zu reduzieren, kann es sinnvoll sein, das Widgetset<br />

noch einmal mit dem GWT-Compiler zu übersetzen. Mit Hilfe einer<br />

eigenen BundleLoaderFactory kann für die einzelnen Komponenten<br />

festgelegt werden, ob diese sofort bei Anwendungsstart oder „lazy“<br />

im Programmverlauf geladen werden sollen. Wenn nur die Widgets,<br />

die auch wirklich in der Anwendung benötigt werden, für das Eager-<br />

Loading gekennzeichnet sind, so reduziert sich die Größe des Widgetsets<br />

deutlich. Bei der hier vorgestellten Testanwendung konnte<br />

eine Reduktion von ca. 1 MB auf gut 600 KB erzielt werden. Insgesamt<br />

belief sich das Datenvolumen bei 100 Durchläufen nun nur<br />

noch auf 101,17 MB gegenüber den vorher gemessenen 140,52 MB.<br />

Optimierung JSF<br />

Hier ist kein so offensichtlicher Optimierungsansatz gegeben. Sicher<br />

würde die Anwendung anfänglich weniger Daten laden müssen, würde<br />

man auf Primefaces verzichten, allerdings stände dann auch bei<br />

weitem nicht der Funktionsumfang, wie er von Vaadin geboten wird,<br />

zur Verfügung. Eine Möglichkeit, die Datenlast etwas zu senken,<br />

bestünde darin, auf das Navigieren mit Redirect zu verzichten und<br />

dafür zu sorgen, dass bei Seitenwechsel auch nur der Inhaltsbereich<br />

per AJAX ausgetauscht wird, was dann allerdings erst einmal den<br />

Verzicht auf Bookmarkable-URLs nach sich ziehen würde.<br />

Optimierung Allgemein<br />

Um für eine deutliche Absenkung der zu übermittelnden Datenmenge<br />

zu sorgen, können die Seiteninhalte auch in gzip-komprimierter<br />

Form an den Client ausgeliefert werden, sofern dieser das unterstützt.<br />

Mit Hilfe der Datenkompression ist es gelungen, das gesamte<br />

übertragene Datenvolumen, das in dem Testszenario angefallen ist,<br />

im Falle von JSF auf 58,25 MB und bei der optimierten Vaadin-Anwendung<br />

auf 36,92 MB zu drücken.<br />

Überblick Datenmenge mit und ohne Optimierung:<br />

Datenvolumen<br />

Vaadin 140,52<br />

JSF 178,20<br />

Vaadin optimiert 101,17<br />

Datenvolumen<br />

durchschn. Paketgröße 58,25<br />

Vaadin optimiert + GZIP 36,92<br />

Fazit<br />

Vaadin hat in diesem Testszenario eine geringere Netzwerklast verursacht<br />

als JSF, was hauptsächlich über den AJAX-gestützten Seitenwechsel<br />

und die UIDL, für den Informationsaustausch zwischen<br />

Server und Client, zu erklären ist. Allerdings kann daraus natürlich<br />

nicht allgemeingültig geschlossen werden, dass Vaadin-Programme<br />

immer einen Vorteil in dieser Hinsicht gegenüber JSF-Anwendungen<br />

haben. Schon allein der Einsatz einer anderen Komponentenbibliothek<br />

für JSF oder das Implementieren einer AJAX-gestützten Navigation<br />

könnten hier für einen großen Unterschied sorgen. Auch über<br />

Nutzung eines anderen Themes könnte die Menge und Größe der zu<br />

übertragenden Dateien beeinflusst werden.<br />

Auffällig war vor allem bei Vaadin, dass der bei weitem größte Teil<br />

der Datenmenge allein von dem anfänglichen Laden der Anwendung<br />

herrührt. Das ist insofern interessant, als im Allgemeinen davon ausgegangen<br />

wird, dass es sich bei der Datenlast, die durch das Verarbeiten<br />

aller Aktionen auf dem Server entsteht, um einen der großen<br />

Nachteile dieses Frameworks handelt. Natürlich ist bei solch einer<br />

AJAX-gestützten Vorgehensweise die Anzahl der Anfragen an den<br />

Server insgesamt größer, die Datenmengen, die dabei entstehen, fallen<br />

allerdings wohl verhältnismäßig gering aus.<br />

Es bleibt also festzuhalten, dass die Serverseitige Steuerung, die Vaadin<br />

und JSF zu Grunde liegt, nicht unbedingt zu einer unverhältnismäßig<br />

hohen Datenmenge führen muss. Daten für den Aufbau von<br />

Seiten/Views und Styles sowie natürlich auch die in der Anwendung<br />

darzustellenden und zu verarbeitenden Daten müssen bei jeder Webanwendung<br />

zwischen Client und Server ausgetauscht werden. Wobei<br />

es natürlich sehr schwer ist, hier allgemeine Aussagen diesbezüglich<br />

zu treffen. Wenn man z. B. bei einer Webanwendung davon ausgeht,<br />

dass diese von den Benutzern nur einmal am Tag geladen wird und<br />

anschließend zehntausende verschiedene Aktionen darauf ausgeführt<br />

werden, dann fällt natürlich auch irgendwann das Übertragen<br />

jeweils kleiner Datenmengen (z. B. Validierung eines einzelnen Wertes)<br />

stärker ins Gewicht.<br />

Zur Optimierung von Webanwendungen empfiehlt es sich auf jeden<br />

Fall, diese auch mit GZIP-Encoding anzubieten, da dies vor allem bei<br />

den großen JavaScript-/CSS-/XML-/JSON-Dateien zu einer erheblichen<br />

Reduktion des Datenvolumens führen kann.<br />

Hendrik Jungnitsch [hendrik.jungnitsch@gedoplan.de ]<br />

Entwickler und Trainer im Bereich Java bei der <strong>Gedoplan</strong> GmbH. Sein Tätigkeitsschwerpunkt<br />

ist das Realisieren von Java-EE-basierten Webanwendungen.<br />

10


Systeme für die Anwender<br />

- User Centered Design<br />

Bei einer neuen Anwendung steht die Funktionalität im Mittelpunkt. Die Anforderungen werden mit<br />

verschiedenen Methoden wie Use Cases, Klassendiagrammen und Prototypen der Masken definiert.<br />

So wird sichergestellt, dass jede Aufgabe des Anwenders irgendwie mit dem System durchgeführt<br />

werden kann. Aber ist das ausreichend für ein erfolgreiches System? Es ist nicht nur wichtig, was<br />

ein System leistet, sondern auch, wie es die Anwender unterstützt. Das System soll die Aufgaben der<br />

Anwender optimal aus ihrer Sicht unterstützen. Der Anwender ist ebenso wichtig wie die Funktionalität.<br />

Nur so wird ein System akzeptiert und damit erfolgreich.<br />

Von Reinhard Brüggemeyer<br />

Vom Modell zum Design<br />

Die Klassenmodelle beschreiben genau die Objekte, die im System<br />

verwaltet werden sollen. Dabei liefert das Modell auch die Beziehungen<br />

zwischen den Objekten. So hat eine Person verschiedene<br />

abhängige Objekte wie Anschriften, Bankverbindungen und Konten.<br />

Der Name, das Geburtsdatum und weitere Angaben zur Person werden<br />

auf dem Hauptschirm verwaltet. Für jedes Unterobjekt der Person<br />

gibt es einen eigenen Reiter. So können Anschriften, Bankverbindungen<br />

und Konten zur Person verwaltet werden. Das User Interface<br />

entspricht exakt dem Klassenmodell. Spezielle Sichten der Anwender<br />

sind allerdings nicht berücksichtigt.<br />

Use Cases beschreiben die Funktionen, die die Anwender benötigen.<br />

Wie können die Use Cases im UI Design abgebildet werden? Es ist<br />

sicherlich zu einfach, alle Use Cases zu einem Objekt zusammenzufassen<br />

und in einem Dialog abzubilden. Ein Antrag muss geprüft, korrigiert,<br />

berechnet und abgeschlossen werden. Evtl. muss der Antrag<br />

storniert werden. Es ist nicht sinnvoll, die gesamte Funktionalität<br />

in einem Dialog abzubilden. Der Dialog würde viel zu komplex. Die<br />

Funktionen werden ja auch nicht alle von denselben Personen ausgeführt.<br />

Es macht also Sinn, Personen in Anwendergruppen aufzuteilen<br />

und dafür Rollen zu bilden. Für die Verwaltung des Antrages gibt es<br />

dann mehrere Sichten, die jeweils die speziellen Anforderungen einer<br />

Rolle berücksichtigen.<br />

Usability, wie wird der Anwender unterstützt<br />

Anwenderfreundliche Systeme sind unbestritten das Ziel der Softwareentwicklung<br />

– doch wie kann dies beurteilt werden? Die ISO<br />

9241 Software Ergonomie liefert folgende Definition: Usability ist<br />

das Ausmaß, in dem ein Produkt durch bestimmte Benutzer in einem<br />

bestimmten Nutzungskontext genutzt werden kann, um bestimmte<br />

Ziele effektiv, effizient und zufriedenstellend zu erreichen. Die Anwendung<br />

soll …<br />

• die Ziele des Anwenders unterstützen<br />

• Selbsterklärend sein<br />

• standardgemäße Oberflächenelemente bieten<br />

• Dem Benutzer die Steuerung überlassen, nicht umgekehrt<br />

• Möglichkeiten zur Individualisierung bieten<br />

Usability Engineering stellt in den Vordergrund, wie ein System gestaltet<br />

wird. User Centered Design stellt die Sicht des Anwenders in<br />

den Mittelpunkt. Aber wer ist überhaupt unser Anwender? Ein Modell<br />

des Anwenders wird durch „Personas“ erstellt.<br />

User Centered Design, der Anwender steht im Mittelpunkt<br />

User Centered Design betrachtet die verschiedenen Nutzungsszenarien<br />

einer Anwendung. Szenarien werden von verschiedenen Anwendergruppen<br />

aufgerufen. Die Navigation und das Design sind für die<br />

gesamte Anwendung einheitlich. Die Interaktion mit dem System ist<br />

durchaus abhängig von der Anwendergruppe. Ein Anwender, der permanent<br />

mit dem System arbeitet, erwartet eine andere Interaktion<br />

als jemand, der sporadisch das System zu Recherchezwecken nutzt.<br />

Die Erwartungen der User an das System sind der entscheidende Input<br />

beim User Centered Design.<br />

Eine Anwendung zeichnet sich durch einfache Navigation, freundliches<br />

Design und intuitive Interaktion aus. Die Navigation ist einfach<br />

zu finden und auf allen Seiten gleich. Alle Seiten sind klar benannt<br />

und der Anwender weiß über den „breadcrumb“ immer, wo er<br />

sich befindet. Das Design von Seiten mit ähnlicher Funktionalität<br />

ist weitgehend identisch. Der Seitenaufbau entspricht einer festen<br />

Struktur. Meldungen und Kontextinformationen erscheinen immer<br />

an derselben Position. Farben, Schriftgrößen und Schriftarten sind<br />

11


für die gesamte Anwendung vorgegeben. Die Benutzerinteraktion<br />

legt den Focus auf die wichtigsten Funktionen. Sie werden zentral,<br />

möglichst oben auf der Maske dargestellt. Der Anwender kann Informationen<br />

von „high level“ nach „low level“ verfolgen. Die natürliche<br />

Bedienungsreihenfolge ist offensichtlich. Die Anzahl der Steuerungselemente<br />

ist minimiert. Es werden Standardelemente mit exakten<br />

Bezeichnungen genutzt.<br />

Moderne Systeme entlasten Anwender von Routineaufgaben. Standardfälle<br />

werden automatisch durch eine Dunkelverarbeitung abgewickelt.<br />

Die Steuerung erfolgt über ein integriertes Workflowsystem.<br />

In Ausnahmefällen, die durch Regeln vom Workflowsystem erkannt<br />

werden, wird eine manuelle Bearbeitung erforderlich. Das System<br />

stellt die Vorgänge in anwenderspezifische Postkörbe. Die jeweilige<br />

Ausnahme wird transparent dargestellt. Der Anwender ruft vom<br />

Postkorb direkt die Funktionalität auf, die er zur manuellen Bearbeitung<br />

benötigt. So ist bei Workflowsystemen eine spezifische Benutzerinteraktion<br />

implementiert, die den Anwender direkt zur benötigten<br />

Funktionalität führt.<br />

„Persona“, wer ist unser Anwender<br />

In welchen Szenarien arbeitet unser Anwender, wie sind seine Arbeitsbedingungen<br />

und welche Funktionen benötigt er überwiegend?<br />

Diese und ähnliche Fragen stellen wir uns, um eine Vorstellung von<br />

den zukünftigen Anwendern des Systems zu bekommen. Wir wollen<br />

ein Modell von unseren Anwendern entwerfen. Bereits 1995 hat<br />

Alan Cooper die Methode „Personas“ beschrieben. „Personas“ sind<br />

erdachte Personen, die auf den Verhaltensmustern und Zielen der<br />

Anwender basieren. Es sind Beschreibungen von fiktiven Anwendern<br />

für ein interaktives System. Sie entstehen aus der Diskussion mit den<br />

Projektbeteiligten und liefern ein grundlegendes Verständnis von den<br />

Anwendergruppen. „Personas“ sind Kommunikationswerkzeuge. Im<br />

Normalfall hat ein Projekt maximal 3 – 5 „Personas“. Eine „Persona“<br />

ist stellvertretend für eine Gruppe von Mitarbeitern. Über eine Matrix<br />

der unterschiedlichen Mitarbeitergruppen und zugeordneten Aufgaben<br />

werden die verschiedenen „Personas“ ersichtlich.<br />

12


Die Unterscheidung der Anwendergruppen erfolgt in erster Linie<br />

durch Gruppierung der notwendigen Funktionalität. Darüber hinaus<br />

ist aber auch der Anwendertyp von Bedeutung. Wie häufig benutzt er<br />

das System? Benötigt er detaillierte oder verdichtete Informationen?<br />

Ist schnelle oder selbsterklärende Navigation gewünscht? Soll das<br />

System, wenn möglich, Werte vorschlagen?<br />

Nach diesen Kriterien definieren wir „Personas“ für die Sachbearbeitergruppen<br />

und Anwendertypen. Eine „Persona“ bekommt einen<br />

Namen und bestimmte Eigenschaften. Anhand dieser Beschreibung<br />

wird überprüft, ob das Anwendungsdesign unsere „Persona“ optimal<br />

unterstützt. So benötigt unser Antragssachbearbeiter in bestimmten<br />

Situationen Zusatzinformationen aus der Stammdatenverwaltung.<br />

Dazu musste aufwendig in die Stammdatenverwaltung navigiert<br />

werden. Das Design wurde so geändert, dass der Sachbearbeiter aus<br />

der Antragsbearbeitung direkt ein Kontextmenu mit den entsprechenden<br />

Informationen aufrufen kann.<br />

System zu gestalten ist. Sie gelten übergreifend für alle Funktionen<br />

und treffen keine Unterscheidung nach Anwendergruppen. In<br />

der Praxis zeigt sich aber, dass ein System von unterschiedlichen<br />

Gruppen genutzt wird. User Centered Design berücksichtigt diesen<br />

Aspekt. „Personas“ liefern ein Konzept, unterschiedliche Anwendergruppen<br />

zu definieren und zu beschreiben. Sie liefern den Input für<br />

das Anwendungsdesign. Nach den Grundsätzen des Usability Engineering<br />

werden das Navigations- , Design- und Interaktionskonzept<br />

entwickelt. Das erstellte Design kann jederzeit gegen die „Personas“<br />

verifiziert werden.<br />

Fazit<br />

Im klassischen Requirements Engineering wird zwischen funktionalen<br />

und nicht funktionalen Anforderungen unterschieden. Die nicht<br />

funktionalen Anforderungen sollen den Input dafür liefern, wie das<br />

Reinhard Brüggemeyer [ reinhard.brueggemeyer@gedoplan.de ]<br />

Seniorberater GEDOPLAN GmbH. Seine Schwerpunkte sind Anforderungsanalyse, Modellierung<br />

von Geschäftsprozessen und Projektmanagement – insbesondere agile Vorgehensweisen.<br />

13


- Anzeige -<br />

Java-Schulungsprogramm <strong>2013</strong><br />

Objektorientierung, Java SE, Java EE, Tools, Testing & mehr.<br />

IPS bietet professionelle Einsteiger- und Umsteigerschulungen für Java und die Java Enterprise Edition (Java EE). Auf Wunsch organisieren<br />

wir für Entwicklerteams auch Projektworkshops.<br />

"Java ist eine zuverlässige Plattform zur objektorientierten Softwareentwicklung, die eine weitreichende Standardisierung mit der<br />

notwendigen Offenheit kombiniert und die durch eine große Community getragen und weiterentwickelt wird. Zum Erfolg von Java<br />

tragen sicher auch die hervorragenden Entwicklungswerkzeuge und die große Menge frei verfügbarer Tools und Bibliotheken bei."<br />

Dirk Weil, IPS-Trainer, Fachautor und Leiter des Enterprise Java Teams.<br />

JJava und Java EE<br />

Java - Programmierung (Java SE) Tage € zzgl. MwSt. Kurscode<br />

Java für Programmierer ohne Vorkenntnisse der Objektorientierung 5 1.940,-- JAV-100-OOJ<br />

Java für Umsteiger einer objektorientierten Programmiersprache 4 1.680,-- JAV-105-OOU<br />

Java Effective 2 1.070,-- JAV-130-EFF<br />

Java Performance Tuning 3 1.290,-- JAV-120-JPT<br />

Refactoring 2 1.080,-- JAV-350-REF<br />

Grundlagen Java SE Security 1 520,-- JAV-500-SEC<br />

Java - Java Edition (Java EE) Tage € zzgl. MwSt. Kurscode<br />

Power Workshop Java EE 6 5 2.125,-- JAV-310-JEE<br />

Java-EE-Überblick: Workshop mit Dirk Weil 1 590,-- JAV-300-JEE<br />

Enterprise JavaBeans (EJB 3) mit JPA 4 1.790,-- JAV-321-EJB<br />

Java-Anwendungsentwicklung mit CDI 2 960,-- JAV-360-CDI<br />

Liferay 2 960,-- JAV-900-LRP<br />

Java Persistence API (JPA) 3 1.390,-- JAV-330-JPA<br />

Java-Webanwendungen mit JavaServer Faces (JSF) 4 1.790,-- JAV-350-JSF<br />

Enterprise Java für Architekten 2 1.070,-- JAV-305-JEE<br />

Java EE Design Patterns 3 1.590,-- JAV-340-DES<br />

Java - Entwicklerwerkzeuge Tage € zzgl. MwSt. Kurscode<br />

Eclipse - Grundlagen 1 520,-- DEV-120-ECL<br />

Eclipse Modeling Framework (EMF) 2 1.100,-- DEV-140-EMF<br />

Apache-Maven-Grundlagen 1 520,-- DEV-300-MVN<br />

Build- und Release-Management mit Apache Maven 2 960,-- DEV-310-MVMB<br />

Hudson / Jenkins- Grundlagen 1 520,-- DEV-400-HUD<br />

IPS IT-Schulungen - Ihr deutschlandweiter Partner für IT-Schulungen<br />

Nutzen Sie die Erfahrung aus mehr als 20 Jahren IT-Schulungen für Einsteiger, Umsteiger und Professionals. Der IPS-Kurskatalog 2012/<strong>2013</strong><br />

umfasst über 300 Kurse zu aktuellen IT-Themen. Das IPS-Team unterstützt Sie persönlich, professionell und lernzielorientiert.<br />

Berlin - Bielefeld - Hamburg - Hannover - Köln - Krefeld - Nürnberg - Wiesbaden - Stuttgart<br />

Sprechen Sie uns an – wir beraten Sie gerne! Tel. (0521) 2088930 Beratung@IPS-IT-Schulungen.de www.IPS-IT-Schulungen.de


- Anzeige -<br />

Individuelle Firmenschulungen<br />

Viele Unternehmen nutzen die Kursbeschreibungen im offenen IPS-Schulungsprogramm als Ausgangspunkt für die Planung individueller Firmenschulungen.<br />

Unter Berücksichtigung von Vorkenntnissen, Unternehmensvorgaben und gewünschten Zielen erarbeiten wir daraus gemeinsam mit<br />

Ihnen maßgeschneiderte Weiterbildungsangebote. Durchführung bei IPS oder bei Ihnen vor Ort.<br />

Java Application Server<br />

JBoss Tage € zzgl. MwSt. Kurscode<br />

Entwicklung und Betrieb von Anwendungen auf JBoss AS 7 3 1.520,-- JBO-AS-ADM7<br />

Hochverfügbarkeit mit dem JBoss AS 7 3 1.390,-- JBO-AS-HOCH7<br />

JBoss - Clustering 2 960,-- JBO-AS-CLUS<br />

JBoss EAP6 – Eintägige Update-Schulung 1 520,-- JBO-AS-UPD6<br />

Java und SAP Tage € zzgl. MwSt. Kurscode<br />

SAP NetWeaver - Entwicklung von Java EE - Anwendungen 5 auf Anfrage SAP-NETW-JEE71<br />

Softwareentwicklung und Datenbanken<br />

Java Frameworks Tage € zzgl. MwSt. Kurscode<br />

Spring Framework Grundlagen 3 1.490,-- JAV-600-SPR<br />

Spring Web-Service 2 990,-- JAV-610-SPR<br />

Java-Webanwendungen mit Vaadin 3 1.490,-- DEV-400-VAA<br />

Google Web Toolkit (GWT) - Grundlagen 3 1.520,-- JAV-150-GWT<br />

Grails 2 1.130,-- JAV-130-GRA<br />

Java Software Testing Tage € zzgl. MwSt. Kurscode<br />

Java Software Testing-Grundlagen 1 520,-- JAV-400-STG<br />

Java Software Testing in der Praxis 4 1.790,-- JAV-410-STP<br />

Java Software Testing für die Enterprise Edition 4 1.790,-- JAV-420-STE<br />

Oracle Tage € zzgl. MwSt. Kurscode<br />

Oracle - Datenbankprogrammierung mit PL/SQL Grundlagen 5 1.890,-- DB-ORA-02<br />

Oracle - Datenbankprogrammierung mit PL/SQL Aufbau 3 1.290,-- DB-ORA-34<br />

Oracle - Real Application Cluster (RAC) und Grid Infrastructure 5 1.990,-- DB-ORA-08<br />

IPS-Kurse im Internet suchen und buchen<br />

Mehr über Inhalte, Termine, Voraussetzungen etc. unter www.ips-it.de/< Kurscode><br />

Suchbeispiel: www.ips-it.de/JAV-100-OOJ<br />

Berlin - Bielefeld - Hamburg - Hannover - Köln - Krefeld - Nürnberg - Wiesbaden - Stuttgart<br />

Sprechen Sie uns an – wir beraten Sie gerne! Tel. (0521) 2088930 Beratung@IPS-IT-Schulungen.de www.IPS-IT-Schulungen.de


GEDOPLAN ist seit über 30 Jahren spezialisiert auf die Entwicklung<br />

von IT-Systemen. Unsere Experten haben langjährige Erfahrung<br />

in der Analyse, Konzeption und Realisierung von Unternehmenssoftware.<br />

Individuallösungen realisieren wir auf Basis objektorientierter<br />

Techniken. Die leistungsfähige und umfangreiche Plattform Java<br />

EE bildet dafür schon seit über 10 Jahren einen unserer Schwerpunkte.<br />

Es ist unser Anspruch, gut strukturierte und wartbare<br />

Anwendungen zu entwickeln. Mit modernen Entwicklungsumgebungen<br />

und entwicklungsbegleitenden, automatisierten Tests<br />

stellen wir eine hohe Softwarequalität sicher.<br />

Im Bereich der Standardsoftware unterstützen wir Sie bei der<br />

Einführung und Anpassung von SAP®-Lösungen, insbesondere in<br />

Fragen der Basis-Administration und des Personalmanagements.<br />

Anpassungen oder Erweiterungen können wir mit ABAP und<br />

Java auf Basis von SAP® NetWeaver durchführen.<br />

Wir entwickeln IT-Systeme als Komplettpakete, unterstützen unsere<br />

Kunden aber auch vor Ort. Unsere Experten geben ihr Wissen<br />

gerne weiter – in Form von projektbegleitenden Coachings<br />

oder Seminaren bei unseren Schulungspartnern.<br />

GEDOPLAN<br />

Unternehmensberatung und<br />

EDV-Organisation GmbH<br />

Stieghorster Straße 60<br />

33605 Bielefeld<br />

Fon: 0521 2 08 89 10<br />

Fax: 0521 2 08 89 45<br />

E-Mail: info@gedoplan.de<br />

Herausgeber: GEDOPLAN Unternehmensberatung und EDV-Organisation GmbH | Stieghorster Straße 60 | 33605 Bielefeld<br />

Verantwortlich: Dipl.-Inform. Dirk Weil | Redaktionsleitung: Ulrich Hake | Fon: 0521 2088910 | E-Mail: info@gedoplan.de<br />

Produktion: networker Medienfabrik GmbH | Nachdruck, auch auszugsweise, nur nach Rücksprache mit der Redaktion.<br />

www.gedoplan.de

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!