Access Keys:
Skip to content (Access Key - 0)

Warnung: Diese Seite ist hoffnungslos veraltet und sollte nicht mehr als OpenSAGA-Tutorial verwendet werden. Wir haben sie aus historischem Interesse archiviert. Das neue Turorial find sich hier.

Tutorial: Die Tierklinik

Hier könnt ihr unser Tierklinik-Tutorial downloaden.

Einleitung

Mit der Tierklinik präsentieren wir eine beispielhafte OpenSAGA-Anwendung, welche nach der bekannten Pet Clinic modelliert ist. Die Vorstellung ist: Kunden besuchen mit ihren Tieren die Klinik, um das Tier dort behandeln zu lassen. Ein Kunde bzw. eine Kundin kann mehrere Tiere besitzen.

In der Anwendung gibt es zwei Arbeitsabläufe (Prozesse). Ein Ablauf dient der Kundenverwaltung und Stammdatenpflege, ein zweiter Ablauf steuert den Besuch einer Kundin und die Behandlung des Tieres.

Installation

Zunächst ist Eclipse als Entwicklungsumgebung zu installieren, falls dieses nicht schon geschehen ist.

Die URL für Eclipse lautet http://www.eclipse.org/downloads/

In der Übersicht der Galileo Packages (based on Eclipse 3.5 SR2) dann die 'Eclipse IDE for Java EE Developers' in der Ausgabe für das eigene Betriebssystem herunterladen und installieren.

Weiterhin benötigen wir einen installierten aktuellen Apache Tomcat Servlet Container, wir verwenden die Version 6.0.24.

Eclipse fragt beim Start nach einem Workspace. Dieser kann beispielsweise 'D:\EclipseWorkspaces\opensaga-ws' genannt werden.

Der nächste Schritt: Download der Tierklinik im ZIP-Archiv 'os-tierklinik.zip'.

Import in Eclipse durch:
File->Import->General->Existing Projects into Workspace
Select archive file -> os-tierklinik.zip
Finish

Ein neuer Server ist einzurichten:
Servers->New->New Server->Apache->Tomcat v6.0 Server
Add Resource -> os-tierklinik
Finish

Konfiguration

Nach der Installation sind einige Parameter an die lokalen Gegebenheiten anzupassen.

In Eclipse sind einige Einstellungen des Servers zu modifizieren:
Servers -> Doppelklick auf dem 'Tomcat v6.0 Server at localhost'
Overview->Timeouts->Start (in seconds)->450
Stop (in seconds) ->150
Modules->os-tierklinik->Auto Reload->Disabled

Dem Tomcat Server braucht auch mehr Speicher. Dazu sind in der Launch Configuration unter Arguments in den VM-Arguments folgende Zeilen zu ergänzen:
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
-Xms64m -Xmx512m

Die Änderungen bitte speichern.

Start der Anwendung

Zunächst ist der Server in Eclipse zu starten. Der Start benötigt eine gewisse Zeit. Danach kann man einen Web-Browser öffnen und folgende URL eingeben: http://localhost:8080/os-tierklinik/

Es erscheint eine Anmeldungsmaske. Die Zugangsdaten lauten:
Anmeldung: admin
Kennwort: admin

Aufbau

Eine OpenSAGA-Anwendung ist eine Extension. Eine Extension besteht aus diversen Modellen. Die Tierklinik befindet sich in WebContent/WEB-INF/resources/extensions/tierklinik/models/.

Hier beginnt eine Verzeichnisstruktur bestehend aus domain/ für die fachlichen Domänentypen, i18n/ für die Internationalisierung von Texten, navigation/ für die Benutzerführung und processes/ für die Ablaufsteuerung. Bestandteil der Prozesse sind auch die Views, das sind die einzelnen Bildschirmmasken.

GUIDs und Konventionen

Jedes Modellelement in OpenSAGA wird indentifiziert durch eine eindeutige ID. Diese ID ist global. Um den Umgang mit diesen IDs zu strukturieren, verwenden wir im Beispiel folgende Konvention:

  • IDs sind hierarchisch aufgebaut. Die einzelnen Ebenen werden durch einen Punkt getrennt. In der Regel startet die Hierarchie mit tierklinik.
  • Prozesse bekommen den Präfix p_
  • Start-States bekommen den Präfix ss_
  • View-States bekommen den Präfix vs_
  • Back-States bekommen den Präfix bs_
  • Views bekommen den Präfix v_
  • Transitionen bekommen den Präfix t_
  • Domain-Types bekommen den Präfix d_
  • Relationen bekommen den Präfix r_

Beispiele:
tierklinik.p_kundenverwaltung.vs_kunde_details
tierklinik.p_kundenverwaltung.v_kundenliste.t_kunde_neu
tierklinik.p_kundenverwaltung.v_kunden_liste

Diese IDs sind sehr wichtig, da mit ihrer Hilfe die zahlreichen Modellelemente miteinander verknüpft werden, und sich erst dadurch das Gewebe einer OpenSAGA-Anwendung ergibt.

Domain Types

Die sogenannten Domain Type Models beschreiben die Struktur und Relation der fachlichen Daten. Die Domänen-Typen befinden sich im Unterverzeichnis domain/types/. Die Modelldatei relations.xml beschreibt die Beziehungen zwischen den einzelnen Typen. Dies geschieht durch Auflistung von relation-Elementen, jede Relation bekommt dabei eine eindeutige ID.

Beispiel: Die Relation tierklinik.r_kunde_tier sagt aus, daß ein Kunde mehrere Tiere oder auch gar kein Tier haben kann, während ein Tier immer nur genau einem Kunden gehört.

Die Domain-Types bestehen wesentlich aus der Deklaration von Properties. Properties werden in der Datenbank gespeichert, es gibt aber auch die Möglichkeit Properties zur Laufzeit berechnen zu lassen.

Beispiel: In d_kunde.xml wird der Vorname und der Nachname zur Laufzeit mit einer formula-property zum vollen Namen zusammengebaut.

Eine spezielle Relation ist die Verknüpfung Tier und Tierart. Diese wird nicht als Relation modelliert, sondern als Enumeration. Siehe dazu das enum-property-set in d_tier.xml. Die Tierarten werden so als Aufzählung für Auswahl-Boxen zugänglich gemacht. Ähnlich könnten Status-Codes modelliert werden.

Beispiel: In der View v_tier_edit.xml gibt es ein select-field Element, welches sich auf die oben erwähnten enum-properties bezieht und dem Anwender eine Auswahl-Box zur Wahl der Tierart präsentiert.

Navigation Model

Im Navigation Model beschreiben wir die Menüstruktur der Anwendung. Im Beispiel entsprechen die beiden Hauptmenü-Einträge den beiden Prozessen
'Diagnosenverwaltung' und 'Kundenverwaltung'. Die Verknüpfung zwischen Navigation Model und Process Model geschieht durch die Zuordnung von Items auf Start-States.

Beispiel: siehe n_applications.xml

Process Models

Ein Process Model beschreibt die Ablaufsteuerung und setzt Zustände (states), Transitionen zwischen Zuständen, und Masken (views) miteinander in Beziehung. Einstiegspunkte in den Ablauf werden markiert durch Start-States, die in der Regel direkt eine Transition in einen View-State machen. View-States sind verknüpft mit einer View, die dem Anwender präsentiert wird. Daneben gibt es auch noch Decision-States, mit denen man bedingte Verzweigungen im Ablauf realisieren kann, und Back-States für kontrollierte Rücksprünge in der Folge der präsentierten Views.

Zustände bestehen weiter aus einer Liste von Transitionen. Ausgelöst werden diese Transitionen durch Betätigung von Knöpfen in der View durch den Anwender. Auch andere Ereignisse können eine Transition auslösen. Während einer Transition können Aktionen ausgeführt werden, die vielfältige Aufgaben erledigen.

Beispiel: p_kundenverwaltung.xml

Die Zustände, Transitionen und Views werden über ihre jeweilige globale ID miteinander verknüpft.

View Models

Eine View beschreibt abstrakt eine Bildschirmmaske. In der Regel ist sie verknüpft mit einem Domänentyp, den sie darstellt.

Beispiel: Die View in v_kunde_details.xml hat den Domänentyp domain-type-ref = "tierklinik.d_kunde".

Durch diese Verknüpfung weiß beispielsweise die new-Aktion, welches Objekt sie neu erzeugen soll. Views, welche nur Übersichtslisten darstellen, benötigen keinen Domänentyp.

Wichtige Elemente der Gestaltung und Darstellung sind grid, datagrid und toolbar. Ein Grid bietet ein tabellarisch festes Layout mit Zeilen und Spalten. Eine Toolbar erlaubt die Anordnung von Knöpfen.

Ein Datagrid ist auch eine Tabelle, bezieht ihre Daten aber aus Domänentypen und hat daher eine variable Anzahl von Zeilen. Datagrids bieten Filter zur Einschränkung der Ergebnismenge und seitenweises Blättern.

Beispiel: Das Datagrid in v_kunde_details.xml listet alle Kunden. Durch eine Transition tierklinik.p_kundenverwaltung.v_kundenliste.t_kunde_details ist jede Zeile mit dem Prozess verknüpft. Bei einem Klick in eine Zeile wird die Transition ausgelöstet. Dies überführt den Prozess in den View-State tierklinik.p_kundenverwaltung.vs_kunde_details, welcher dann durch die assoziierte View den Kunden ausführlich darstellt.

Wichtig: Texte werden nicht direkt ausgegeben, sondern werden zunächst in der Internationalisierung übersetzt. Daher empfehlen sich Kürzel. Ein Kürzel bzw. Text ohne Übersetzung erscheint in eckigen Klammern.

Beispiele: Die deutschen Langtexte für die zahlreichen Kürzel finden sich in i18n/definitions/resources.xml


Wir danken unserem Platin-Sponsor

Adaptavist Theme Builder Powered by Atlassian Confluence