31.12.2013 Aufrufe

Anwendungsentwicklung 1

Anwendungsentwicklung 1

Anwendungsentwicklung 1

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Jörg Krüger<br />

Christian Uhlig<br />

Geschäftsprozessmodellierung WS13/14<br />

<strong>Anwendungsentwicklung</strong> 1


Agenda<br />

Geschäftsprozesse und IT<br />

Betriebliche Informationssysteme<br />

Masken-Oberflächen<br />

Desktop-Anwendungen<br />

Web-Anwendungen<br />

Implementierung von Web-Anwendungen<br />

Allgemeine Problemstellungen und Ansätze<br />

Webanwendungen in Java<br />

GWT<br />

UiBinder<br />

Editoren<br />

Validatoren<br />

Übung Prozessmodellierung WS13/14<br />

Seite 2


Start Event<br />

Kunde = Gast?<br />

nein<br />

Kunde bekannt?<br />

ja<br />

nein<br />

Kundendaten<br />

wiederverwenden<br />

Kundendaten<br />

erfassen<br />

ja<br />

Daten aktuell?<br />

nein<br />

ja<br />

Gast bekannt?<br />

Kundendaten<br />

aktualisieren<br />

ja<br />

nein<br />

Gästedaten<br />

wiederverwenden<br />

Gästedaten erfassen<br />

ja<br />

Gästedaten aktuell?<br />

nein<br />

ja<br />

Weitere Gäste?<br />

Gästedaten<br />

aktualisieren<br />

Beziehungstyp<br />

nein<br />

Kundennr<br />

Personendaten erfasst<br />

1<br />

Adresse_ID Straße PLZ Ort<br />

Person_ID<br />

Name<br />

Vorname<br />

Firma<br />

Person<br />

Generalisierung<br />

Inhalt<br />

1<br />

n<br />

Kunde Teilnehmer Dozent<br />

1<br />

Beziehungstyp<br />

Beziehungstyp<br />

ist fachlich<br />

verantwortlich für<br />

Teilnehmernr<br />

Adresse<br />

1<br />

n<br />

Hotelbuchung<br />

Hotel<br />

Reservierung<br />

Rezeption<br />

n<br />

m<br />

n<br />

1<br />

m<br />

führt aus<br />

Inhalt_ID<br />

Beziehungstyp<br />

Beziehungstyp<br />

n<br />

n<br />

Rechnung_I<br />

D<br />

Teilnahmeerfolg<br />

Beziehungstyp<br />

Beziehungstyp<br />

Dozentennr<br />

E-Mail<br />

m<br />

n<br />

Beziehungstyp<br />

m<br />

1 n<br />

n<br />

1<br />

Rechnung Beziehungstyp<br />

Rechnungsposition Beziehungstyp<br />

Artikel<br />

Schulungsplan<br />

Bezeichnung<br />

1<br />

Rechnungsnu<br />

mmer<br />

n<br />

n<br />

Beziehungstyp<br />

Beziehungstyp<br />

Rechnungsdatum<br />

Schulungsp<br />

lan_ID<br />

Beziehungstyp<br />

1 n<br />

Beziehungstyp<br />

Beziehungstyp<br />

Zeitraum_I<br />

D<br />

n<br />

Beziehungstyp<br />

Buchung_I<br />

D<br />

b-Attribut (ERM)<br />

Quartal Anzahl Preis<br />

Zeitraum<br />

Anfang<br />

Min<br />

Max<br />

Preis<br />

Ende<br />

1<br />

n<br />

n<br />

n<br />

n<br />

1<br />

Schulungstyp<br />

1<br />

n<br />

Schulung<br />

1<br />

n<br />

Buchung<br />

Buchungszeit<br />

punkt<br />

Schulungst<br />

yp_ID<br />

m<br />

Rechnungs<br />

position_ID<br />

Beziehungstyp<br />

Beziehungstyp<br />

Bezeichnung Dauer Honorar<br />

Beziehungstyp<br />

m 1<br />

Status<br />

Buchungsstat<br />

us<br />

Beziehungstyp<br />

Schulung_I<br />

D<br />

Starttag<br />

Endetag<br />

Status<br />

Gebucht Storniert Durchgeführt Abgerechnet<br />

Positionsnr Preis USt<br />

Anzahl<br />

Schulungsstat<br />

us<br />

Generalisierung<br />

Beziehungstyp<br />

Storniert<br />

Abgeschlosse<br />

n<br />

Läuft<br />

Buchung<br />

Planung<br />

Anzahl<br />

n<br />

Ausstattung<br />

n<br />

m<br />

Raum<br />

Artikel_ID<br />

1<br />

Beziehungstyp<br />

Bezeichnung<br />

Ausstattung<br />

_ID<br />

Bezeichnung<br />

Raum_ID<br />

Bezeichnung<br />

Etage<br />

Platzzahl<br />

Tagesmiete<br />

ist Vorgänger von ist Vorgänger von<br />

ist Vorgänger von ist Vorgänger von ist Vorgänger von<br />

Einchecken<br />

Leistungserstellung Rechnungslegung<br />

Auschecken Abrechnung<br />

ist fachlich<br />

verantwortlich für<br />

führt aus<br />

führt aus<br />

Service<br />

Zimmer<br />

ist fachlich<br />

verantwortlich für<br />

Gültig von<br />

ist fachlich<br />

verantwortlich für<br />

Beziehungstyp<br />

Gültig bis<br />

Rechnungswesen<br />

n<br />

führt aus<br />

Preis_ID<br />

Preis<br />

Betrag<br />

USt-Satz<br />

ist fachlich<br />

verantwortlich für<br />

führt aus<br />

ist fachlich<br />

verantwortlich für<br />

führt aus<br />

Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Geschäftsprozesse und IT (1)<br />

Ein wichtiger Fokus des Geschäftsprozessmanagement ist die Unterstützung<br />

von Prozessen durch Informationssysteme<br />

Unternehmensrealität<br />

Ist-<br />

Prozesse<br />

Soll-<br />

Prozesse<br />

Prozesscontrolling<br />

(z.B. Überwachung von operativen<br />

Kennzahlen wie Durchlaufzeiten)<br />

Prozessmodelle<br />

zur Beschreibung von<br />

Soll- und Ist-Prozessen<br />

(umfassend Ablauflogik,<br />

Daten,<br />

Organisationseinheiten,<br />

Anwendungssysteme,<br />

…)<br />

Prozessdefinition<br />

Prozessanalyse<br />

(z.B. Simulation zur Bestimmung<br />

notwendiger Ressourcen)<br />

…<br />

Standard/Branchensoftware<br />

betriebliche<br />

Individualsoftware<br />

Workflow Management<br />

(ausgehend von Prozess- bzw.<br />

Workflow-Modellen Unterstützung<br />

oder Automatisierung von Abläufen)<br />

Übung Prozessmodellierung WS13/14<br />

Seite 3


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Geschäftsprozesse und IT (2)<br />

Vielgestaltige IT-Unterstützung von Geschäftsprozessen<br />

Standardsoftware (z.B. Office)<br />

Branchensoftware (z.B. Hotelbuchungssoftware)<br />

Individualsoftware<br />

Unterschiedliche Unterstützungstiefe<br />

Unterstützung einzelner Prozessschritte (z.B. Erstellen eines Anschreibens in Word)<br />

Gezielte Unterstützung einer Folge von Prozessschritten durch ein spezialisiertes<br />

Informationssystem (z.B. Anlegen einer Buchung im Hotel), allerdings nach wie vor<br />

menschlicher Sachbearbeiter<br />

Steuerung von Prozessabläufen z.B. durch ein Workflow-Management-System<br />

Automatisierte Ausführung von Teilen eines Prozesses oder von einem gesamten<br />

Prozess (z.B. durch eine entsprechende Individualsoftware oder ein Workflow-<br />

Management-System/ein Prozessmanagement-Werkzeug auf Basis von Web<br />

Services)<br />

Übung Prozessmodellierung WS13/14<br />

Seite 4


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Geschäftsprozesse und IT (3)<br />

Fokus für uns: Individualsoftware zur Unterstützung von Geschäftsprozessen<br />

Nach wie vor Ausrichtung auf menschlichen Sachbearbeiter, allerdings kann<br />

die Software naturgemäß einige Prozessteile eigenständig ausführen<br />

Prozessmodelle liefern Informationen zur Spezifikation und Implementierung<br />

der Software. Darüber hinaus können in einem integrierten System wie ARIS<br />

Modelle aus dem Software-Engineering hinzugefügt und verknüpft werden.<br />

Extremfall: Automatische Ableitung von ausführbarer (oder fast ausführbarer)<br />

Individualsoftware aus Modellen (model driven architecture)<br />

In unserem Fall sehen wir für die Ableitung der Software einen Prozess vor:<br />

Modellierung der Geschäftsprozesse (Fachkonzept 2)<br />

Entwicklung des Datenmodells zum Fachkonzept<br />

Modellierung von Masken und Funktionen, die Prozessschritte unterstützen<br />

Ergebnis: Requirement Definition<br />

Vorgehensmodell zur Ableitung der Implementierung aus der Requirement Definition<br />

Übung Prozessmodellierung WS13/14<br />

Seite 5


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Betriebliche Anwendungssysteme (1)<br />

Typische Anforderungen und Eigenschaften von betrieblichen<br />

Anwendungssystemen<br />

Client/Server-Anwendung für den Mehr-Benutzer-Betrieb<br />

Gemeinsame (d.h. serverbasierte) persistente Datenhaltung mit Archivierung<br />

Orientierung an der Verwaltung von Geschäftsobjekten (d.h. Anlegen, Ändern,<br />

Suchen, usw.) und ihren Beziehungen<br />

Nutzung von Masken zur Pflege von Geschäftsobjekten<br />

Benutzerabhängige Zugriffs- und Funktionsrechte mit Nachverfolgbarkeit<br />

…<br />

Übung Prozessmodellierung WS13/14<br />

Seite 6


Daten<br />

Layout<br />

Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Betriebliche Anwendungssysteme (2)<br />

Typische Elemente von Maskenoberflächen<br />

Ausrichtung einer Maske auf einen bestimmten<br />

Objekttyp (hier Kunde) oder eine bestimmte<br />

Funktion (z.B. "Abrechnungen erstellen")<br />

Darstellung der verfügbaren Objektinstanzen<br />

(hier per Kundenliste), gegebenenfalls mit<br />

Filterung / Suchfunktion<br />

K u n d e n l i s t e<br />

K u n d e n v e r w a l t u n g<br />

V o r n a m e<br />

N a c h n a m e<br />

K u n d e n b e r a t e r (C o m b o b o x)<br />

Darstellung der elementaren Objekteigenschaften<br />

mit entsprechenden UI-Elementen (Textfelder,<br />

Comboboxen, …)<br />

N e u e r<br />

K u n d e<br />

K u n d e<br />

s p e i c h e r n<br />

Darstellung von Unterobjekten (bei Aggregaten,<br />

z.B. Positionen einer Rechnung) und<br />

verknüpften Objekten (hier Aufträge des<br />

Kunden) per Listen<br />

A u f t r ä g e<br />

Funktionen (hier über Buttons) zum Anlegen,<br />

Löschen und Ändern eines Objektes<br />

N e u e r<br />

A u f t r a g<br />

A u f t r a g<br />

b e a r b e i t e n<br />

A u f t r a g<br />

l ö s c h e n<br />

Übung Prozessmodellierung WS13/14<br />

Seite 7


Daten<br />

Layout<br />

Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Betriebliche Anwendungssysteme (3)<br />

Typische Elemente von Maskenoberflächen<br />

Funktionen (hier über Buttons) zum Anlegen,<br />

Löschen und Ändern von verbundenen<br />

Objekten; hier z.B. Wechsel in die Maske<br />

zu einem Auftrag per Klick auf "Auftrag<br />

bearbeiten"<br />

Durchsetzen von Geschäftsregeln<br />

(z.B. Validierung von Feldeingaben,<br />

Einschränkung von Eingabemöglichkeiten<br />

z.B. per Comboboxen usw.)<br />

K u n d e n l i s t e<br />

K u n d e n v e r w a l t u n g<br />

V o r n a m e<br />

N a c h n a m e<br />

K u n d e n b e r a t e r (C o m b o b o x)<br />

N e u e r<br />

K u n d e<br />

K u n d e s p e i c h e r n<br />

A u f t r ä g e<br />

N e u e r<br />

A u f t r a g<br />

A u f t r a g<br />

b e a r b e i t e n<br />

A u f t r a g<br />

l ö s c h e n<br />

Übung Prozessmodellierung WS13/14<br />

Seite 8


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Betriebliche Anwendungssysteme (4)<br />

Umsetzung per klassischer Desktop-Anwendung (1)<br />

Jeweils eine Maske oder eine zusammenhängende Anordnung von Masken wird in<br />

einem Fenster dargestellt, damit auch flexible Navigation (z.B. im Beispiel zum<br />

Anlegen eines Auftrages Öffnen eines weiteren Fensters mit der Auftragsmaske )<br />

Ereignisorientierte Programmierung: Elemente der GUI werden mit Prozeduren<br />

bzw. Methoden verknüpft, die auf bestimmte Ereignisse reagieren; auf Ebene des<br />

Programmcodes besteht damit immer ein unmittelbarer Bezug zu einzelnen<br />

Elementen der Benutzeroberfläche genau einer Benutzersitzung<br />

Direkte Nutzung der Betriebssystem-UI und –Bibliotheken, damit auch leicht<br />

verfügbare komplexe Steuerelemente (z.B. DatePicker, komplexe Tabellen mit<br />

Unter-Steuerelementen usw.)<br />

Kommunikation mit dem Server per Netzwerkstack des Betriebssystems (z.B. RPC-<br />

Aufrufe, eigenes Protokoll, …)<br />

Vergleichsweise leichter Zugang zu spezieller Hardware (z.B. Mikrofon, GPS, usw.)<br />

-> für betriebliche Anwendungen aber nicht sehr typisch<br />

Übung Prozessmodellierung WS13/14<br />

Seite 9


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Betriebliche Anwendungssysteme (5)<br />

Umsetzung per klassischer Desktop-Anwendung (2)<br />

Übung Prozessmodellierung WS13/14<br />

Seite 10


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Betriebliche Anwendungssysteme (6)<br />

Umsetzung per Web-Anwendung<br />

Darstellung der Anwendung im Internet-Browser, d.h. die Masken der Anwendung<br />

werden als HTML-Seiten repräsentiert, die per HTTP von einem Server ausgeliefert<br />

werden<br />

Interaktion mit der Oberfläche wird durch dynamische HTML-Seiten erreicht<br />

Häufig Umsetzung der Netzwerkdienste auf Serverseite, d.h. auf Clientseite findet<br />

dann lediglich Browser-HTTP statt<br />

Motive für Web-Anwendungen<br />

Portabilität: Anwendung prinzipiell auf jedem Endgerät mit Internet-Browser<br />

ausführ- bzw. darstellbar, unabhängig vom Betriebssystem und Gerätetyp<br />

Deployment: Keine Installation erforderlich<br />

Deployment: Updates werden auf Serverseite eingespielt und erfordern keinen<br />

Eingriff auf den Clients<br />

Deployment: Integration in Internet-Auftritte / Portale<br />

Design: Vergleichsweise leichte Anpassung der Optik (CSS)<br />

Übung Prozessmodellierung WS13/14<br />

Seite 11


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Web-Anwendungen (1)<br />

Dynamische Erzeugung von HTML-Seiten (d.h. Masken im HTML-Format)<br />

Daten<br />

Layout<br />

durch den Server<br />

Klassisch: Verwendung von HTML-Formularen, um Auswahl- und<br />

Eingabemöglichkeiten für den Benutzer zu schaffen<br />

Beispielablauf für die Kundenverwaltung<br />

Der Anwender ruft eine Webseite von einer<br />

entsprechenden URL ab, z.B.<br />

http://www.meinewebanwendung.de/kunden<br />

Der Server erzeugt ein HTML-Dokument zur<br />

Kundenmaske; dabei füllt er die textuellen Angaben<br />

und die Formular-Steuerelemente mit Daten aus der<br />

Datenhaltung (hier im ersten Schritt nur die Kundenliste)<br />

Das erzeugte HTML-Dokument wird per HTTP an den<br />

Client ausgeliefert und im Browser dargestellt<br />

K u n d e n l i s t e<br />

K u n d e n v e r w a l t u n g<br />

N e u e r<br />

A u f t r a g<br />

V o r n a m e<br />

N a c h n a m e<br />

K u n d e n b e r a t e r (C o m b o b o x)<br />

N e u e r<br />

K u n d e<br />

A u f t r ä g e<br />

A u f t r a g<br />

b e a r b e i t e n<br />

K u n d e<br />

s p e i c h e r n<br />

A u f t r a g<br />

l ö s c h e n<br />

Übung Prozessmodellierung WS13/14<br />

Seite 12


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen Daten / GWT<br />

Web-Anwendungen (2)<br />

Layout<br />

Beispielablauf für die Kundenverwaltung (Fs.)<br />

Der Anwender wählt ein Element der Kundenliste aus.<br />

Die Auswahl wird per HTTP-GET an den Server<br />

übertragen, d.h. es wird nun z.B. die Seite<br />

http://www.meinewebanwendung.de/kunden?custid=5<br />

abgerufen<br />

Die Anwendung auf dem Server wird erneut aufgerufen<br />

und erhält per CGI den per URL übermittelten Parameter<br />

(custid). Sie erzeugt daraufhin ein neues<br />

HTML-Dokument, in dem nun das Kundenformular mit<br />

den Werten des ausgewählten Kunden ausgefüllt ist.<br />

K u n d e n l i s t e<br />

K u n d e n v e r w a l t u n g<br />

V o r n a m e<br />

N a c h n a m e<br />

K u n d e n b e r a t e r (C o m b o b o x)<br />

N e u e r<br />

K u n d e<br />

K u n d e s p e i c h e r n<br />

A u f t r ä g e<br />

Das erzeugte HTML-Dokument wird per HTTP an den<br />

Client ausgeliefert und im Browser dargestellt<br />

N e u e r<br />

A u f t r a g<br />

A u f t r a g<br />

b e a r b e i t e n<br />

A u f t r a g<br />

l ö s c h e n<br />

Der Anwender ändert Angaben zum Kunden, z.B. den Vornamen. Per Klick auf<br />

"Kunde speichern" wird erneut per HTTP-GET eine Anfrage an den Server der Form<br />

http://www.meinewebanwendung.de/kunden?custid=5&mode=save&name=Hansel&<br />

vorname=Hans<br />

Übung Prozessmodellierung WS13/14<br />

Seite 13


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen Daten / GWT<br />

Web-Anwendungen (3)<br />

Layout<br />

Beispielablauf für die Kundenverwaltung (Fs.)<br />

Die Anwendung erhält die Anfrage per CGI; aus den<br />

Parametern leitet sie ab, dass der Datensatz zum<br />

entsprechenden Kunden zu aktualisieren ist.<br />

Anschließend liefert sie das gleiche HTML-Dokument<br />

erneut aus, nun mit den aktualisierten Angaben und<br />

möglicherweise einen Hinweis auf das erfolgreiche<br />

Speichern<br />

usw.<br />

K u n d e n l i s t e<br />

K u n d e n v e r w a l t u n g<br />

V o r n a m e<br />

N a c h n a m e<br />

K u n d e n b e r a t e r (C o m b o b o x)<br />

N e u e r<br />

K u n d e<br />

K u n d e s p e i c h e r n<br />

A u f t r ä g e<br />

N e u e r<br />

A u f t r a g<br />

A u f t r a g<br />

b e a r b e i t e n<br />

A u f t r a g<br />

l ö s c h e n<br />

Übung Prozessmodellierung WS13/14<br />

Seite 14


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Web-Anwendungen (4)<br />

Benutzer<br />

Eingaben in Formular<br />

Absenden des Formulars<br />

Browser<br />

HTTP-Request<br />

zu URL mit<br />

Formular-<br />

Parametern<br />

HTTP-Response<br />

Datenhaltung<br />

HTTP-Request /<br />

URL und Parameter<br />

Ändern/<br />

Anlegen/<br />

Löschen<br />

von Objekten<br />

Suchen/Lesen<br />

von Objekten<br />

HTTP-Server<br />

Anwendung<br />

HTTP-Response /<br />

HTML-Dokument<br />

Statische<br />

Dateien<br />

(HTML,<br />

Bilder, CSS,<br />

...)<br />

Weitere<br />

Dienste (z.B.<br />

SMS-<br />

Gateway, E-<br />

Mail, usw.)<br />

Übung Prozessmodellierung WS13/14<br />

Seite 15


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Web-Anwendungen (5)<br />

Also…<br />

Interaktionen mit der Benutzeroberfläche werden umgesetzt in ein entsprechendes<br />

HTTP-Request, dass die vom Anwender vorgenommenen Eingaben und die<br />

gewünschte Operation (z.B. Speichern) als Parameter enthält.<br />

Verwendung von HTTP-GET bzw. -POST zur Übermittlung der Parameter<br />

Aufruf einer Anwendungssoftware auf dem Server mit der gewünschten URL des<br />

Requests; die darüber hinaus übermittelten Parameter werden per CGI übergeben<br />

Die Anwendung auf dem Server erzeugt ein HTML-Dokument, das den neuen<br />

Zustand der Benutzeroberfläche nach Ausführung der Operation repräsentiert.<br />

Dieses Dokument wird ausgeliefert und dargestellt.<br />

Übung Prozessmodellierung WS13/14<br />

Seite 16


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Web-Anwendungen (6)<br />

Herausforderungen<br />

Request-Response-Paradigma von HTTP, HTML eher auf Informationsaufbereitung<br />

denn auf Dateneingabe und Interaktion ausgerichtet<br />

Die Oberfläche wird als HTML-Dokument repräsentiert, das als ganzes ausgetauscht<br />

wird; für jede Änderung der Oberfläche, die vom Server durchgeführt wird, muss also<br />

das gesamte Dokument und damit die gesamte Oberfläche ausgetauscht werden<br />

HTTP ist als Protokoll zustandslos, d.h. jedes Request ist unabhängig von den<br />

übrigen. In der Folge können keine Informationen auf eine Benutzersitzung bezogen<br />

werden und der Zustand der Oberfläche muss mit jedem Request explizit oder<br />

implizit mitgeliefert werden.<br />

Ereignisorientierte Programmierung der Anwendung damit nicht ohne Umwege<br />

möglich: Anders als bei der Desktop-Anwendung erhält eine Web-Anwendung keine<br />

Ereignisse von eines einzelnen Benutzers, sondern einzelne Requests vieler Nutzer.<br />

Ereignisse eingeschränkt auf Submits (Übertragung von Forms auf Knopfdruck)<br />

Keine server-side Änderungen der Oberfläche – wenn der Benutzer nichts macht,<br />

ändert sich auch die Oberfläche nicht<br />

Übung Prozessmodellierung WS13/14<br />

Seite 17


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Web-Anwendungen (7)<br />

User Experience schlechter als bei Desktop-Anwendungen, viele bekannte<br />

Konzepte (z.B. Fenster) nicht anwendbar<br />

Form-Submit -> auf Serverantwort warten -> komplette Seite neu rendern<br />

Anwendung fühlt sich daher eher nach Seitenblättern denn nach Interaktion an<br />

Steuerelemente primitiv<br />

Keine Effekte wie z.B. Überblendungen (außer eigenmächtig durch den Browser)<br />

Erweiterungen, um inhärente Probleme zu überwinden<br />

Fehlende Sitzungen -> Session-Management / Cookies<br />

Statisches Look&Feel / Serverzentrierung -> JavaScript<br />

Ziel: Rich Internet Applications (RIA)<br />

Schwammiges Buzzword, bezeichnet die Umsetzung der User Experience von<br />

Desktop-Anwendungen in internetbasierten Anwendungen (zumeist, aber nicht<br />

immer, im Browser)<br />

Übung Prozessmodellierung WS13/14<br />

Seite 18


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Web-Anwendungen (8)<br />

Zentrales Konzept: AJAX (Asynchronous JavaScript and XML)<br />

AJAX: Per HTTP eine Anfrage an einen Serverdienst richten, wobei die Antwort<br />

asynchron eingeht, d.h. parallel zur Bearbeitung auf dem Server bleibt die<br />

Webanwendung reaktionsfähig<br />

Nach dem Eintreffen der Antwort wird diese per JavaScript asynchron<br />

verarbeitet und in die Webseite "eingearbeitet" (z.B. durch Austausch von<br />

DOM-Teilen); die Seite wird also typischerweise nicht neu geladen<br />

Die Payload kann vielgestaltig sein, z.B. HTML-Code oder JSON-Objekte<br />

Weiterhin machen RIAs intensiven Gebrauch von JavaScript-Bibliotheken wie<br />

JQuery, um komplexe Steuerelemente (z.B. Tabs, Dialogboxen usw.),<br />

Bedienkonzepte (z.B. Drap&Drop) und Effekte (z.B. Fading-Animationen)<br />

umzusetzen<br />

Übung Prozessmodellierung WS13/14<br />

Seite 19


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Web-Anwendungen (9)<br />

Quelle:<br />

Wikipedia<br />

Übung Prozessmodellierung WS13/14<br />

Seite 20


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Implementierung von Web-Anwendungen<br />

Ansätze zur Implementierung von Web-Anwendungen<br />

Bereits bekannt: Zur Beantwortung einer Benutzeraktion<br />

wird das HTTP-Request bzw. sein Gegenstand an eine<br />

Anwendung weitergeleitet, die die Antwort<br />

(typischerweise ein HTML-Dokument) erzeugt<br />

HTTP-Request /<br />

URL und Parameter<br />

HTTP-Server<br />

HTTP-Response /<br />

HTML-Dokument<br />

Die Art der Implementierung dieser „Anwendung“ jedoch<br />

bisher eine Black Box…<br />

Anwendung<br />

Grundsätzlich kann eine solche Anwendung in jeder Umgebung realisiert werden,<br />

die eine CGI-Schnittstelle bietet (was lediglich Zugriff auf Umgebungsvariablen und<br />

Standard-Ausgabe/Eingabeströme erfordert).<br />

Damit können z.B. schon mit Shellskripten HTTP-Requests verarbeitet und<br />

dynamische Antworten geliefert werden<br />

Jede Programmiersprache mit CGI-Interface ist prinzipiell geeignet<br />

Häufig Skriptsprachen, insbesondere spezialisierte Sprachen wie z.B. PHP<br />

Java-Konzept: Servlets<br />

Übung Prozessmodellierung WS13/14<br />

Seite 21


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Java Web-Anwendungen (1)<br />

Ausgangspunkt: Java Servlets<br />

Servlets sind Java-Klassen, die zur Verarbeitung eines HTTP-Requests<br />

bestimmte Methoden der folgenden Form implementieren:<br />

protected void doGet(HttpServletRequest req, HttpServletResponse resp)<br />

Beim Aufruf verarbeitet beispielsweise die doGet-Methode das Objekt req, das<br />

alle notwendigen Informationen über die erhaltene HTTP-Anfrage enthält.<br />

Die Antwort wird per Methodenaufrufe an resp konstruiert – standardmäßig<br />

dadurch, dass HTML-Code in Stringform konstruiert und als Antwort-Payload<br />

an resp übergeben wird<br />

Servlet Container: Servlets sind zunächst nur Klassen, im laufenden Betrieb<br />

der Anwendung müssen zu jeder Anfrage Instanzen erzeugt werden – diese<br />

Aufgabe übernimmt ein sogenannter Servlet Container (der typischerweise<br />

identisch mit dem HTTP-Server ist)<br />

Übung Prozessmodellierung WS13/14<br />

Seite 22


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

Java Web-Anwendungen (2)<br />

Servlets eigentlich Teil von J2EE / Java Enterprise Edition, allerdings wird das<br />

Konzept auch von Servern (z.B. Apache Tomcat, Jetty) genutzt, die nicht Teil<br />

von Java EE sind<br />

Eigenschaften des Konzeptes in Rohform<br />

Im Grunde zunächst nur „CGI für Java“, alleine ausgehend von der Servlet-<br />

Schnittstelle Web-Anwendungen zu bauen ist aufwendig<br />

Nützlich: Unterstützung durch Technologien und Bibliotheken der Java-Welt<br />

Weniger nützlich: HTML-Code im Programmcode zusammenbauen; zum einen<br />

vermischt dies verschiedene Schichten der Anwendung, zum anderen ist HTML-<br />

Code inzwischen sehr aufwendig und teilweise browserspezifisch<br />

Daher: Zahlreiche Ansätze und Frameworks, die ausgehend vom Servlet-<br />

Konzept versuchen, dem Programmierer bestimmte weniger wertschöpfende<br />

Tätigkeiten abzunehmen bzw. durch Abstraktionen zu ersetzen (Bereitstellung<br />

einer Sitzungsumgebung, Templates, Daten automatisch in Seiten einfügen…)<br />

Übung Prozessmodellierung WS13/14<br />

Seite 23


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Google Web Toolkit (1)<br />

Unsere Umgebung wird das Google Web Toolkit (GWT, "GWiT") sein<br />

Grundidee: Übergang von der Desktop-Applikation zur Web-Applikation<br />

automatisieren<br />

Entwicklung einer Desktop-Anwendung in Java, wobei nach einer Konvention<br />

zwischen clientseitigen und serverseitigen Klassen unterschieden wird<br />

GWT-Compiler: Erzeugen einer clientseitigen Anwendung auf Basis von JavaScript<br />

Erzeugen einer serverseitigen Anwendung auf Basis von Servlets<br />

Binden als WAR-File und Bereitstellung in einem Servlet Container<br />

Client-Klassen: Implementieren die Business Objects (Kunde, Auftrag, usw.)<br />

und die graphische Benutzeroberfläche<br />

Server-Klassen: Implementieren serverseitiger Dienste wie der Zugriff auf die<br />

Datenhaltung oder geschäftsobjektübergreifende Funktionen<br />

Shared-Klassen: Klassen, die sowohl auf Client- als auch auf Serverseite<br />

genutzt werden (z.B. Validatoren, siehe weiter unten)<br />

Übung Prozessmodellierung WS13/14<br />

Seite 24


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Google Web Toolkit (2)<br />

Der GWT-Compiler generiert für die Clients eine Anwendung auf Basis von<br />

JavaScript und implementiert automatisch die Kommunikation mit den<br />

Serverdiensten<br />

Rich Internet Applications: Die generierte Anwendung nutzt AJAX und<br />

ermöglicht damit das Anpassen der Benutzeroberfläche ohne Neuladen;<br />

weiterhin werden GUI-Elemente wie Tabs angeboten, sowie<br />

Bedienungskonzepte wie Drag&Drop<br />

Der GWT-Compiler generiert die Client-Anwendung dabei für unterschiedliche<br />

Ziel-Browser; die von GWT erzeugte serverseitige Anwendung liefert<br />

entsprecht das Kompilat für den tatsächlich genutzten Browser aus<br />

Da die Client-Klassen später direkt auf dem Client laufen, ist ein<br />

Sitzungskontext ohne weiteres Zutun bereits gegeben<br />

Debug Mode: GWT bringt zum Testen einen integrierten Jetty Servlet<br />

Container mit; außerdem können Änderungen on the fly getestet werden -><br />

iterative Entwicklung<br />

Übung Prozessmodellierung WS13/14<br />

Seite 25


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT - Clientseitige Klassen (1)<br />

Fachkonzeptklassen<br />

(Business Objects): Die<br />

in der Anwendung genutzten<br />

Geschäftsobjekte müssen in<br />

Form von Klassen definiert<br />

werden<br />

package de.mygwtproject.client;<br />

/* ... */<br />

public class Customer implements Serializable {<br />

private int cust_id;<br />

private String name;<br />

public Customer() { }<br />

public Customer(int id, String name) {<br />

this.cust_id = id;<br />

this.setName(name);<br />

}<br />

Diese Klassen gehören zum<br />

Client-Teil der Anwendung,<br />

können und werden jedoch<br />

auch in den Server-Klassen<br />

verwendet<br />

Müssen serializable sein, da<br />

sie im Betrieb zwischen Client<br />

und Server ausgetauscht werden<br />

Typischerweise JavaBeans<br />

}<br />

public Integer getID() {<br />

return cust_id;<br />

}<br />

public String getName() {<br />

return this.name;<br />

}<br />

public Customer setName(String name) {<br />

this.name = name;<br />

return this;<br />

}<br />

public int getAnnualTurnover() {<br />

/* ... */<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 26


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT - Clientseitige Klassen (2)<br />

Als Ausgangsklasse für die GUI<br />

ist ein EntryPoint zu implementieren,<br />

an den der erste Request einer Sitzung<br />

gerichtet wird<br />

Der Code der EntryPoint-Klasse erzeugt<br />

die Ausgangs-Benutzeroberfläche über<br />

die Methode onModuleLoad()<br />

package de.mygwtproject.client;<br />

/* ... */<br />

public class ExampleEP implements EntryPoint {<br />

public void onModuleLoad() {<br />

final Widget foo = new Button();<br />

}<br />

}<br />

RootPanel.get("main").add(foo);<br />

Die UI wird dabei auf Basis einer eigenen Widget-Klassenhierarchie<br />

beschrieben<br />

RootPanel: Ein Panel, das als Wurzel einer GUI fungiert; das Default-RootPanel<br />

(eine HTML-Datei) erhält man mit RootPanel.get(). Alternativ kann man das<br />

RootPanel aus einem Element der HTML-Datei erzeugen<br />

Beispiel: Es wird ein simpler Button erzeugt und in das Element main des<br />

HTML-Templates eingefügt<br />

Übung Prozessmodellierung WS13/14<br />

Seite 27


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT - Clientseitige Klassen (3)<br />

Widget-Hierarchie für die GUI<br />

Wurzel ist die Klasse Widget<br />

Panel: Container für andere Widgets, z.B. für Layoutzwecke (VerticalPanel, …)<br />

Composite: Proxy-Panel für genau ein anderes Widget<br />

TabPanel: Ein Panel aus mehreren Tabs, wobei in jedem Tab ein anderes Widget<br />

dargestellt wird<br />

TextBox, TextArea, Label, CheckBox: Die üblichen verdächtigen Steuerelemente…<br />

HTML: Ein Widget generiert aus HTML-Code<br />

Tree: Darstellung eines Baumes von anderen Widgets<br />

DialogBox: Ein konfigurierbarer Popup-Dialog zur Abfrage einer Benutzereingabe<br />

usw.<br />

Formatierung per CSS kann genutzt werden z.B. setStyleName("gwt-Button")<br />

Übung Prozessmodellierung WS13/14<br />

Seite 28


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT - Clientseitige Klassen (4)<br />

An Widgets können EventHandler<br />

registriert werden (ereignisorientierte<br />

Programmierung<br />

analog zu Desktop-Anwendungen)<br />

Beispiel: Maske zur Verwaltung<br />

eines Kunden, vorerst nur mit<br />

einem einzigen Button<br />

Maske wird als Ableitung von<br />

Composite implementiert<br />

Im EntryPoint wird eine Instanz der<br />

CustomerMask in das RootPanel<br />

eingefügt<br />

Registrierung eines<br />

OnClick-Handlers in der<br />

CustomerMask-Klasse<br />

package de.mygwtproject.client;<br />

/* ... */<br />

public class ExampleEP implements EntryPoint {<br />

public void onModuleLoad() {<br />

final Widget cust_mask = new CustomerMask();<br />

RootPanel.get("main").add(cust_mask);<br />

}<br />

}<br />

package de.mygwtproject.client;<br />

/* ... */<br />

public class CustomerMask extends Composite {<br />

Button button = new Button();<br />

TextBox name = new TextBox();<br />

}<br />

public CustomerMask() {<br />

Panel p = new VerticalPanel();<br />

button.addClickHandler(new ClickHandler() {<br />

public void onClick(ClickEvent event) {<br />

Window.alert("Hallo!");<br />

}<br />

});<br />

p.add(name);<br />

p.add(button);<br />

this.initWidget(p);<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 29


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Serverseitige Klassen (1)<br />

Implementierung der serverseitigen Funktionalität, insbesondere Methoden für<br />

den Zugriff auf die Anwendungslogik und Fachkonzeptobjekte (z.B.<br />

getCustomer(), deleteCustomer() usw.), also auf die Datenhaltungsschicht<br />

Beispiel: Clientseitige Klassen zur Implementierung einer Maske zum Anlegen<br />

einer Hotelbuchung, serverseitige Klassen zum Abrufen von Stammdaten<br />

(Zimmern, Kunden usw.), zum Suchen von freien Zimmern für den<br />

Buchungszeitraum und zum Anlegen der Buchung<br />

1. Schritt: Schnittstelle mit den Methoden des Services definieren (hier<br />

CustomerService für unser Kunden-Beispiel)<br />

package de.mygwtproject.client;<br />

/* ... */<br />

@RemoteServiceRelativePath("customer")<br />

public interface CustomerService extends RemoteService {<br />

public List getCustomers();<br />

public Customer getCustomer(int id);<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 30


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Serverseitige Klassen (2)<br />

2. Schritt: Aus der synchronen Schnittstelle eine asynchrone Schnittstelle<br />

ableiten<br />

package de.mygwtproject.client;<br />

/* ... */<br />

public interface CustomerServiceAsync {<br />

void getCustomers(AsyncCallback callback);<br />

void getCustomer(int id, AsyncCallback callback);<br />

}<br />

Die asynchrone Schnittstelle ist für die Client-Klassen notwendig, um in der<br />

späteren clientseitigen JavaScript-Anwendung AJAX-Anfragen ausführen zu<br />

können (d.h. die Benutzeroberfläche reagiert weiter, während auf die Antwort<br />

eines Services gewartet wird).<br />

D.h. in den Client-Klassen muss konsequent die asynchrone Schnittstelle<br />

genutzt werden!<br />

Übung Prozessmodellierung WS13/14<br />

Seite 31


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Serverseitige Klassen (3)<br />

3. Schritt: In den Client-Klassen auf die Services zugreifen<br />

Dazu wird vom Framework mit der Methode GWT.create() eine Instanz des<br />

asynchronen Dienstes angefordert<br />

Aufrufe an eine Methode des Services erfolgen mit einer anonymen Callback-<br />

Instanz, die auf die spätere AJAX-Antwort reagiert<br />

public class CustomerMask extends Composite {<br />

private final CustomerServiceAsync customerService = GWT.create(CustomerService.class);<br />

/* ... */<br />

TextBox name = new TextBox();<br />

/* ... */<br />

private void selectCustomer(int id) {<br />

customerService.getCustomer(id, new AsyncCallback() {<br />

public void onFailure(Throwable caught) { }<br />

public void onSuccess(List result) {<br />

name.setValue(result.getName());<br />

}<br />

});<br />

}<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 32


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Serverseitige Klassen (4)<br />

4. Schritt: Es wird eine serverseitige Klasse zur Implementierung des<br />

asynchronen Interfaces angelegt<br />

package de.mygwtproject.server;<br />

/* ... */<br />

public class CustomerServiceImpl<br />

extends RemoteServiceServlet<br />

Implements CustomerService {<br />

}<br />

public List getCustomers() {<br />

/* ... */<br />

}<br />

public Customer getCustomer(int id) {<br />

/* ... */<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 33


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – UiBinder (1)<br />

Bisher haben wir die Benutzeroberfläche per Java-Code zusammengesetzt,<br />

d.h. Codesequenzen, die Widget-Klassen instanziieren, konfigurieren und zu<br />

einer Baumstruktur zusammenfügen<br />

Zwar besser als selbst HTML-Code zu schreiben, aber für komplexe<br />

Benutzeroberfläche trotzdem ausgesprochen unhandlich<br />

Alternative UiBinder<br />

Beschreibung einer Widget-Benutzeroberfläche per XML<br />

Verknüpfen einer solchen XML-UI per Framework-Aufruf mit einer Java-Klasse<br />

Einführung von Instanzvariablen zur Repräsentation von UI-Elementen, die im Code<br />

benötigt werden, und automatisches Initialisieren durch UiBinder<br />

Registrieren von Ereignis-Handlern durch UiBinder<br />

Übung Prozessmodellierung WS13/14<br />

Seite 34


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – UiBinder (2)<br />

Beispiel UI-XML für unsere Kundenmaske; es werden in einem vertikalen Panel<br />

ein Textfeld für den Namen und ein Button zum Speichern dargestellt<br />

[...]<br />

<br />

<br />

<br />

<br />

<br />

[...]<br />

Beispielhaft bereits eine DialogBox zu sehen; Dialoge können mit dem Attribut<br />

visible=false in den UI-Dateien angelegt und später bei Bedarf angezeigt werden<br />

Die Namen (ui:field) sind signifikant; über diese werden später die<br />

Verknüpfungen zu Instanzvariablen der Java-Klasse hergestellt<br />

Übung Prozessmodellierung WS13/14<br />

Seite 35


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – UiBinder (3)<br />

In der eigenen Masken-Klasse kann nun ein passendes UiBinder-Interface (hier<br />

UiBinder) definiert warden. Ein Objekt dieses Typs wird<br />

dann durch vom Framework per GWT.create() erzeugt.<br />

public class CustomerMask<br />

extends Composite {<br />

interface CustomerMaskUiBinder extends UiBinder {}<br />

private final CustomerMaskUiBinder uiBinder = GWT.create(CustomerMaskUiBinder.class);<br />

@UiField Button button;<br />

@UiField TextBox name;<br />

public CustomerMask() {<br />

this.initWidget( uiBinder.createAndBindUi(this) );<br />

}<br />

}<br />

@UiHandler("button")<br />

void onButtonClick(ClickEvent event) {<br />

/* ... */<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 36


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – UiBinder (4)<br />

Das uiBinder-Objekt erzeugt zu einem Objekt (hier die CustomerMask-Instanz)<br />

die GUI und gibt das Wurzelobjekt zurück (hier generisch vom Typ Widget)<br />

Beim Erzeugen der Oberfläche sucht der uiBinder nach einer XML-Datei mit<br />

dem Namen .ui.xml; in diesem Fall muss die XML-Beschreibung der UI<br />

also in der Datei CustomerMask.ui.xml vorliegen<br />

public class CustomerMask<br />

extends Composite {<br />

interface CustomerMaskUiBinder extends UiBinder {}<br />

private final CustomerMaskUiBinder uiBinder = GWT.create(CustomerMaskUiBinder.class);<br />

@UiField Button button;<br />

@UiField TextBox name;<br />

public CustomerMask() {<br />

this.initWidget( uiBinder.createAndBindUi(this) );<br />

}<br />

}<br />

@UiHandler("button")<br />

void onButtonClick(ClickEvent event) {<br />

/* ... */<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 37


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – UiBinder (5)<br />

Die Annotation @UiField bewirkt, dass der uiBinder das entsprechende Widget-<br />

Objekt auf die Instanzvariable zuweist; die Auswahl erfolgt anhand des<br />

Variablennamens (der dem Widget-Attribut ui:field entsprechen muss)<br />

public class CustomerMask<br />

extends Composite {<br />

interface CustomerMaskUiBinder extends UiBinder {}<br />

private final CustomerMaskUiBinder uiBinder = GWT.create(CustomerMaskUiBinder.class);<br />

@UiField Button button;<br />

@UiField TextBox name;<br />

public CustomerMask() {<br />

this.initWidget( uiBinder.createAndBindUi(this) );<br />

}<br />

}<br />

@UiHandler("button")<br />

void onButtonClick(ClickEvent event) {<br />

/* ... */<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 38


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – UiBinder (6)<br />

Die Annotation @UiHandler bewirkt, dass der uiBinder einen Event-Handler im<br />

entsprechenden Widget erzeugt, der die annotierte Methode aufruft; die<br />

Auswahl des Events erfolgt anhand des Parametertyps der Funktion<br />

public class CustomerMask<br />

extends Composite {<br />

interface CustomerMaskUiBinder extends UiBinder {}<br />

private final CustomerMaskUiBinder uiBinder = GWT.create(CustomerMaskUiBinder.class);<br />

@UiField Button button;<br />

@UiField TextBox name;<br />

public CustomerMask() {<br />

this.initWidget( uiBinder.createAndBindUi(this) );<br />

}<br />

}<br />

@UiHandler("button")<br />

void onButtonClick(ClickEvent event) {<br />

/* ... */<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 39


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Editoren (1)<br />

Bisher: Wird ein Business Object in eine Maske geladen, müssen die<br />

Attributwerte (z.B. beim Kunden der Name, die Adresse usw.) mit einzelnen<br />

Statements in die entsprechenden UI-Felder geladen werden,<br />

z.B.<br />

name.setValue( cust.getName() );<br />

surname.setValue( cust.getSurName() );<br />

...<br />

Das gleiche ist in umgekehrte Richtung beim Abspeichern nach Änderungen<br />

oder beim Anlegen neuer Objekte erforderlich<br />

z.B.<br />

cust.setName( name.getValue() );<br />

cust.setSurName( surname.getValue() );<br />

...<br />

Sehr langweiliger Quellcode, langweiliges Programmieren, sinnlose<br />

Fehlerquelle<br />

Übung Prozessmodellierung WS13/14<br />

Seite 40


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Editoren (2)<br />

Lösungsansatz: Editoren<br />

Bei Editoren handelt es sich um Objekte, die das Laden von Business Objects<br />

in Widgets und das Zurückschreiben übernehmen<br />

Editoren können durch den GWT-Framework automatisch zu einer Kombination<br />

aus Business Object-Klasse und Masken-Klasse erzeugt werden<br />

Für unser Beispiel wäre ein Editor erforderlich, also<br />

ein Editor, der ein Customer-Objekt in ein Widget vom Typ CustomerMask lädt<br />

bzw. daraus zurückschreibt<br />

Editoren stellen eine Verbindung zwischen bestehenden Oberflächen (Widgets)<br />

und bestehenden Geschäftsobjekten her; sie stellen selbst keine<br />

Benutzeroberfläche dar und dienen auch nicht z.B. der automatischen<br />

Erzeugung einer Benutzeroberfläche<br />

Das Matching von Objekteigenschaften und Widgets findet standardmäßig über<br />

den Feldnamen (ui:field) statt<br />

Übung Prozessmodellierung WS13/14<br />

Seite 41


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Editoren (3)<br />

1. Schritt: Definition eines Interfaces mit dem passenden Editor-Typ<br />

2. Schritt: Konstruktion des Editors auf Basis des Interfaces per GWT.create()<br />

3. Schritt: Verknüpfen mit der Maskeninstanz per initialize()<br />

public class CustomerMask<br />

extends Composite {<br />

interface CustomerEditorDriver extends SimpleBeanEditorDriver {}<br />

private final CustomerEditorDriver editorDriver = GWT.create(CustomerEditorDriver.class);<br />

@UiField TextBox name;<br />

/* ... */<br />

public CustomerMask() {<br />

/* ... */<br />

this.editorDriver.initialize(this);<br />

}<br />

void editCustomer(Customer c) {<br />

editorDriver.edit(c);<br />

}<br />

}<br />

void saveCustomer() {<br />

editorDriver.flush();<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 42


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Editoren (4)<br />

Nun kann ein Customer-Objekt per edit()-Methode in die Maske geladen bzw.<br />

per flush()-Methode mit dem aktuellen Maskenzustand aktualisiert werden<br />

Java Beans als Grundlage, d.h. ui:field="name" => getName()- / setName()-<br />

Methoden in der Customer-Klasse<br />

public class CustomerMask<br />

extends Composite {<br />

interface CustomerEditorDriver extends SimpleBeanEditorDriver {}<br />

private final CustomerEditorDriver editorDriver = GWT.create(CustomerEditorDriver.class);<br />

@UiField TextBox name;<br />

/* ... */<br />

public CustomerMask() {<br />

/* ... */<br />

this.editorDriver.initialize(this);<br />

}<br />

void editCustomer(Customer c) {<br />

editorDriver.edit(c);<br />

}<br />

}<br />

void saveCustomer() {<br />

editorDriver.flush();<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 43


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Validatoren (1)<br />

Problemstellung: Geschäftsregeln, d.h. hier einfache Bedingungen bzgl. des<br />

Zustandes von Geschäftsobjekten definieren und durchsetzen<br />

Praktisch relevant insbesondere für die Überprüfung von Benutzereingaben<br />

Abbilden in Quellcode ist umständlich und fehlerträchtig, außerdem werden die<br />

Regeln dadurch mit der übrigen Anwendungslogik vermischt<br />

Obskure Lösung ohne viel Code: Alles akzeptieren, Bedingungen im DB-<br />

Schema festlegen und auf SQL-Exception warten...<br />

Probleme: Unsinnige Serverbelastung, keine ex ante Reaktion möglich, Fehlerquelle<br />

geht u.U. verloren, damit womöglich keine aussagekräftige Fehlermeldung usw.<br />

Besser: Prüfung bereits auf der Benutzeroberfläche<br />

Aber: Gefahr von Redundanz, da auch bei Prüfung in der GUI trotzdem<br />

Prüfungen in der Geschäftslogik und in der Datenbank notwendig sind<br />

Lösungsansatz: Integration von Java Validators in GWT<br />

Übung Prozessmodellierung WS13/14<br />

Seite 44


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Validatoren (2)<br />

1. Schritt: Java Validator-Annotationen in Geschäftsobjekt-Klasse ergänzen<br />

package de.mygwtproject.client;<br />

/* ... */<br />

public class Customer implements Serializable {<br />

/* ... */<br />

}<br />

@Size(min=7, max=10, message="Name length invalid")<br />

private String name;<br />

/* ... */<br />

Beispiel hier: Länge des Namensattributes auf 7 bis 10 Zeichen einschränken<br />

(ziemlich sinnlose Geschäftsregel…); mit der eigentlichen Restriktion kann<br />

zusätzlich eine passende Fehlermeldung bei Verletzen definiert werden<br />

Übung Prozessmodellierung WS13/14<br />

Seite 45


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Validatoren (3)<br />

1. Schritt: Notwendige Bibliotheken bereitstellen (teilweise etwas anstrengend<br />

von wegen passende Versionen…)<br />

2. Schritt: Validation-Fabrik definieren; die Fabrik hat nur eine Methode zum<br />

Erzeugen von Validatoren; die Erzeugung wird dabei erneut an die<br />

GWT.create()-Methode des Frameworks deligiert<br />

Achtung: Die Fabrik wird gleichberechtigt durch Client und Server genutzt,<br />

daher shared-Package<br />

package de.mygwtproject.shared;<br />

/* ... */<br />

public final class ValidationFactory extends<br />

AbstractGwtValidatorFactory {<br />

@GwtValidation(Customer.class)<br />

public interface GwtValidator extends Validator {<br />

}<br />

}<br />

@Override<br />

public AbstractGwtValidator createValidator() {<br />

return GWT.create(GwtValidator.class);<br />

}<br />

Übung Prozessmodellierung WS13/14<br />

Seite 46


Geschäftsprozesse und IT / Implementierung von Web-Anwendungen / GWT<br />

GWT – Validatoren (4)<br />

3. Schritt: Validation in der Konfigurationsdatei der Anwendung aktivieren (für<br />

automatische Prüfung bei UI-Eingaben)<br />

Nun kann in der Anwendungslogik validiert werden, z.B.:<br />

Customer c;<br />

/* ... */<br />

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();<br />

Set violations = validator.validate(this.c);<br />

String s = "";<br />

for(ConstraintViolation v : violations)<br />

s += v.getMessage();<br />

Window.alert("Mist: " + s);<br />

/* ... */<br />

Regeln können in Validierungsgruppen zusammengefasst werden, um z.B.<br />

bestimmte Regeln nur auf der Clientseite und andere Regeln nur auf der<br />

Serverseite zu prüfen<br />

Es können eigene Regeltypen definiert werden, um z.B. auf der Serverseite<br />

komplexe Geschäftsregeln auf Basis der Datenhaltung zu prüfen<br />

Übung Prozessmodellierung WS13/14<br />

Seite 47


Nächstes Mal…<br />

Persistente Datenhaltung / Bezug zur Datenmodellierung<br />

Unser Vorgehensmodell (Modellerweiterungen, Konventionen, Ablauf)<br />

Demonstration einer kleinen Web-Anwendung mit GWT<br />

Iterative Entwicklung<br />

Deployment<br />

Installationen<br />

GWT<br />

Eclipse-Plugin / Browser-Plugin<br />

MySQL / EclipseLink<br />

Je nach Zeit etwas zu<br />

… Java EE<br />

… Alternativen zu GWT<br />

… Web Services<br />

Übung Prozessmodellierung WS13/14<br />

Seite 48

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!