Diplomarbeit. Analyse, Entwurf und Implementierung eines Portals zur Darstellung von Unternehmensprozessen der Dresdner Bank Luxembourg.

Größe: px
Ab Seite anzeigen:

Download "Diplomarbeit. Analyse, Entwurf und Implementierung eines Portals zur Darstellung von Unternehmensprozessen der Dresdner Bank Luxembourg."

Transkript

1 Diplomarbeit Analyse, Entwurf und Implementierung eines Portals zur Darstellung von Unternehmensprozessen der Dresdner Bank Luxembourg Erik Dressler Betreuung: Prof. Dr. Andreas Künkler

2

3 Kurzfassung Seite i Kurzfassung Zu den Modewörtern der letzten Jahre zählt das Wort Portal. Ein Portal im Sinne der Informatik ist eine Applikation, die basierend auf Webtechnologien einen zentralen Zugang auf personalisierte Inhalte und Prozesse eines Unternehmens bereitstellt. Im Konzern der Dresdner Bank existiert eine Vielzahl von Geschäftsprozessen. Die unterschiedlichen Anwendungen definieren die Prozesse auf eigene Art und Weise und teilen die Geschäftsprozesse in einzelne, unabhängige Komponenten auf. Hieraus resultiert eine erschwerte Nachvollziehbarkeit und Übersicht auf den Gesamtzusammenhang. Das Ergebnis dieser Diplomarbeit soll eine Darstellung der anwendungsübergreifenden Gesamtprozesse in einem Monitor sein. Das Ziel des Prozess-Portals ist die Ablösung der vielen verschiedenen Statusmonitore durch einen Monitor, der alle Gesamtprozesse und deren Unterprozesse in einer Anwendung bündelt. Aufgrund der Komplexität des Sachverhaltes stellt das Resultat dieser Diplomarbeit lediglich eine Basis dar, die die Grundelemente eines Internetportals enthält und auf der spätere Arbeiten aufbauen können. Die Möglichkeit der Prozess-Suche stellt den Hauptzweck dieses Portals dar. -I-

4 Kurzfassung Seite ii Vorwort Ich danke der Dresdner Bank Luxembourg für die Möglichkeit, meine Diplomarbeit in einem professionellen Umfeld erstellen zu können. Besonderer Dank gilt dabei Herrn Diplom-Betriebswirt (FH) Markus Müller und Herrn Diplom-Betriebswirt (FH) Harald Ferber für die sehr gute Betreuung und Unterstützung sowie der ganzen Abteilung Produkt- und Projektservice RW und Integration unter der Leitung von Herrn Jean Thurmes. Ebenfalls danke ich Herrn Prof. Dr. Andreas Künkler an der Fachhochschule Trier für die kompetente Hilfe bei der Erstellung dieser Arbeit. Nicht zuletzt danke ich meiner Mutter Doris Dressler, meinen Grosseltern Johann und Margarete Hansen und meiner Verlobten Maria Zenner, ohne die ein Studium in dieser Form nicht möglich gewesen wäre. Trier, im Juni II -

5 Erklärung Seite iii Erklärung Ich erkläre hiermit, dass ich: 1. die vorliegende Arbeit mit dem Titel Analyse, Entwurf und Implementierung eines Portals zur Darstellung von Unternehmensprozessen der Dresdner Bank Luxembourg selbständig und, abgesehen von den angegebenen Personen, ohne fremde Hilfe angefertigt habe. 2. wörtliche Zitate entsprechend gekennzeichnet und im Literaturverzeichnis angegeben habe. 3. diese Arbeit bei keiner weiteren Prüfung vorgelegt habe. Ich bin mir bewusst, dass Falschangaben in dieser Erklärung rechtliche Konsequenzen haben können. Ort, Datum Unterschrift Autor: Erik Dressler Matrikelnummer: Angewandte Informatik, FH Trier Betreuung: Herr Prof. Dr. Andreas Künkler, FH Trier Herr Dipl.-Betriebswirt Markus Müller Beginn: Tag der Abgabe: III -

6 Inhaltsverzeichnis Seite iv Inhaltsverzeichnis KURZFASSUNG...I VORWORT...II ERKLÄRUNG...III INHALTSVERZEICHNIS...IV 1. EINLEITUNG MOTIVATION 1 2 DRESDNER BANK LUXEMBOURG S.A Der Konzern Die Software AUFGABENBESCHREIBUNG ANFORDERUNGSSPEZIFIKATION GRUNDLAGEN UND TECHNOLOGIEN DATENBANK Datenbank allgemein Datenbankmanagementsystem Relationale Datenbank Das Entity-Relationship-Modell Das Relationenmodell Oracle THE APACHE SOFTWARE FOUNDATION Apache Maven Project Apache Jakarta Project Apache DB Project JAVA Java Reflection API Java Internationalization (I18N) SVG SCALABLE VECTOR GRAPHICS Definition Merkmale ANALYSE WAS IST EIN PROZESS? DER GESCHÄFTSPROZESS ALLGEMEIN Definition Struktur eines Geschäftsprozesses Merkmale von Geschäftsprozessen Geschäftsprozesstypen Geschäftsprozesse der Dresdner Bank Luxembourg DAS PORTAL Definition Historische Entwicklung Das Unternehmensportal Anforderungen an das Prozess-Portal der Dresdner Bank Luxembourg S.A ENTWURF DATENBANKDESIGN Das Entity-Relationship-Modell IMPLEMENTIERUNG DIE DATENBANK IV -

7 Inhaltsverzeichnis Seite v 1.1 Das Relationenmodell Projektbezogene Dateien DIE ANWENDUNG Ablaufdiagramm Anwendungsübergreifende Klassen und Dateien Layout und Navigation Sicherheits- und Benutzerkonzept Dynamische Tabellen-Administration Prozess-Suche ZUSAMMENFASSUNG UND AUSBLICK RESÜMEE 2 AUSBLICK GLOSSAR ANHANG ANHANG A ANHANG B ANHANG C ANHANG D ANHANG E ANHANG F MAVEN BESCHREIBUNG DER ENTWICKLUNG MIT DER ENTWICKLUNGSUMGEBUNG ECLIPSE KONFIGURATION VON TORQUE ERSTELLEN EINES BEISPIEL-PROJEKTES MIT EINER IDE (ECLIPSE) JAVA REFLECTION API SVG ABBILDUNGSVERZEICHNIS VERZEICHNIS DER CODE-BEISPIELE LITERATURVERZEICHNIS V-

8

9 Seite 1 1.Einleitung 1Motivation Portal zählt zu den Modewörtern der letzten Jahre im EDV-Bereich. Jedoch ist vielen Menschen der Begriff Portal im Zusammenhang mit dem EDV-Bereich nicht ganz klar. Ein Portal ist, wenn man von der lateinischen Sprache (lat. porta, die Pforte ) ausgeht, ein großes Tor, welches einen repräsentativ gestalteten Eingang darstellt. [FRA01] Übertragen auf das Internet bezeichnet ein Portal einen zentralen Zugang, über den man auf individuell zugeschnittene, unternehmensinterne und externe Informationen zugreifen kann. Kennzeichnend für ein Internet-Portal ist, dass es sich um eine browser-basierte Applikation handelt, welche auf Webtechnologien basierend einen zentralen Zugriff auf personalisierte Inhalte sowie auf Unternehmensprozesse bietet. Personalisiert bedeutet, dass eine einmalige Anmeldung am Portal notwendig ist, um auf alle Anwendungen des Portals zugreifen zu können. Es existiert nur eine Portalplattform, über die der Datenaustausch zwischen den Anwendungen geschieht. [WEB05] Bei einem Portal steht nicht die technische Implementierung im Vordergrund, sondern das Bereitstellen von applikationsübergreifenden Leistungen. Empfehlenswert beim Aufbau eines Portals ist die Verwendung von Enterprise Application Integration (EAI, wird in dieser Arbeit später beschrieben). Eine weitere Möglichkeit besteht darin, eine Portalstandard-Software zu verwenden, die sich der EAI bedient. [WEB05] Die Ersten, die das Wort Portal in Verbindung mit dem Internet brachten, waren Suchmaschinen-Betreiber und Online-Dienste. Diese Web-Seiten dienten als Einstiegspunkt in das Internet, sozusagen ein Tor, welches man als Benutzer durchschreiten musste, um das World Wide Web zu betreten. In ein solches Portal steckten die Anbieter nach und nach immer mehr Informationen, wie z.b.: Neuigkeiten aller Art, -Funktionen usw. Der Informationsumfang dieser Portale wurde immer größer. Die Hoffnung der Suchmaschinen-Betreiber und Online-Dienste war es, den Nutzer dieser Seiten solange wie möglich festzuhalten. Doch genau das Gegenteil im Falle der Suchmaschinen-Betreiber trat ein, wie man am immensen Aufstieg und Erfolg von Google [WEB15] sehen kann, dessen Betreiber exakt eine andere Strategie verfolgen. Dieser Erfolg lässt sich besonders auf die puristische Darstellung der Google-Web-Seite zurückführen. -1-

10 Seite 2 Aufgrund dessen, dass die Portal-Anbieter merkten, dass verschiedene Benutzer verschiedene Interessen haben, entstanden die ersten Lösungen, in denen die Benutzer ihr eigenes Portal zusammen stellen können. Grundvoraussetzung hierfür ist, dass es eine Benutzeridentifizierung (Benutzername) und Authentifizierung (Passwort) gibt. [FRA01] Schließlich ist der Begriff Portal auch in die Unternehmen vorgedrungen. Die Aufgabe eines Unternehmensportals ist es, Arbeitsabläufe für jeden Mitarbeiter, jederzeit und überall effizienter und transparenter zu machen. Damit Mitarbeiter der Personalverwaltung nicht auf Anwendungen der Warenwirtschaft zugreifen können und umgekehrt, ist es besonders wichtig, Rechte zu vergeben, die mit der Anmeldung abgeprüft werden (Customisierung). In verschiedenen Anwendungen suchen zu können, ist eine weitere wichtige Funktion bei Unternehmensportalen, welche bei manchen Portalen sogar im Vordergrund steht. Schließlich soll ein Portal nicht nur den Nutzen steigern, sondern auch die Effizienz im Unternehmen. Aufwendiges Suchen nach benötigten Informationen und Funktionen soll dem Benutzer erspart bleiben. Je schneller eine Suche zum Ziel führt, desto schneller kann der Benutzer einer anderen Tätigkeit nachgehen und das Unternehmen spart Lohnkosten. [FRA01] All diese Funktionen und Anforderungen an ein Unternehmensportal führen zu dem Wunsch, ein Portal von Beginn an zu entwerfen und zu implementieren. Der Zeitrahmen der Diplomarbeit lässt eine vollständige Entwicklung eines InternetPortals nicht zu. Das Ergebnis dieser Diplomarbeit soll lediglich die Grundfunktionen eines Portals abdecken und als Basis für darauf aufbauende Arbeiten dienen. -2-

11 Seite 3 2Dresdner Bank Luxembourg S.A. 2.1Der Konzern Der Dresdner-Bank-Konzern ist mit rund 970 Geschäftsstellen und ungefähr Vollzeitstellen in circa 60 Ländern der Welt tätig. Nach Bilanzsumme und Zahl der Kunden zählt die Dresdner Bank zu den führenden europäischen Bankengruppen. Gemeinsam mit ihren Tochterunternehmen bietet die Dresdner Bank rund 5,3 Millionen Privat- und Firmenkunden im In- und Ausland ein breit gefächertes Angebot von Bankprodukten und Finanzdienstleistungen. Abbildung 1-1: Mitarbeiter und Standorte 2004 [WEB26] Der Dresdner-Bank-Konzern mit Hauptsitz in Frankfurt/Main verfügt allein in Deutschland über zehn Niederlassungen und wird im Ausland durch 20 weitere Niederlassungen vertreten. Seit der Übernahme durch die Allianz AG im Jahre 2001 ist die Dresdner Bank eine hundertprozentige Tochtergesellschaft der Allianz AG, München. Das Grundkapital der Dresdner Bank beträgt rund Mio. Euro, welches in 578,1 Millionen nennwertlose Stückaktien aufgeteilt ist. Die Anteile an der Dresdner Bank AG werden mittelbar von der Allianz AG gehalten. Die Zentrale in Frankfurt gliedert sich in mehrere Geschäftsbereiche und Konzernstäbe, zu denen auch die Informationstechnologie (IT) gehört. ITAbteilungen befinden sich in Luxembourg, London, New York, San Francisco, Tokyo und Singapur. -3-

12 Seite 4 Die Dresdner Bank gründete 1967 als erstes deutsches Finanzinstitut nach dem Zweiten Weltkrieg eine Niederlassung in Luxembourg als 'Compagnie Luxembourgeoise de Banque S.A.' In der Verbindung von Allianz und Dresdner Bank besteht das Potenzial für die Schaffung erheblichen Mehrwerts durch ein größeres Angebot von Finanzprodukten, breitere Vertriebskanäle sowie mehr Beratungskapazität und Beratungskompetenz. Nicht zuletzt können durch die Kombination von Versicherungsprodukten der Allianz und von Vermögensanlageprodukten der Dresdner Bank die nachgefragten Produkte im Bereich der betrieblichen und privaten Altersvorsorge noch effektiver angeboten werden. [WEB12] Die Dresdner Bank unterteilt ihre Geschäftsaktivitäten in vier strategische Unternehmensbereiche: Personal Banking Bietet an über 900 Standorten im Inland für 4,9 Millionen Privatkunden ein ausgewogenes Angebot von Beratungs- und Finanzleistungen sowohl im Wertpapier-, Einlagen- und Kreditgeschäft als auch im Versicherungsbereich. Private & Business Banking Steht für individuelle Beratung sowie ganzheitliche Finanzlösungen für rund Privat- und Geschäftskunden. Corporate Banking In diesem Unternehmensbereich werden rund Kunden betreut. Zu diesen Kunden zählen 80 multinationale Unternehmen, rund 800 Konzernkunden und rund Großkunden. Das Corporate Banking arbeitet eng mit dem Unternehmensbereich Dresdner Kleinwort Wasserstein zusammen. Dresdner Kleinwort Wasserstein Umfasst das Handels- und Kapitalmarktgeschäft der Bank. Er operiert auf Basis eines integrierten Geschäftsmodells mit einem breiten Produktangebot, das dem einer eigenständigen Investmentbank entspricht. -4-

13 Seite 5 2.2Die Software Die Dresdner Bank beschäftigt sich hauptsächlich mit der Abwicklung von Wertpapiergeschäften. Dazu zählen: Ausgabe An- und Verkauf Verwahrung Verwaltung Die Abwicklung eines Wertpapiergeschäftes erfolgt bei der Dresdner Bank über drei Applikationen. Die Schnittstelle zwischen den verschiedenen Applikationen bildet die Enterprise Application Integration (EAI). Abbildung 1-2: Systemarchitektur der Dresdner Bank -5-

14 Seite Triple A (Ordererfassung) Die Software Triple A der Firma Odyssey Asset Management Systems wird von Kundenberatern der Dresdner Bank in den Geschäftsstellen genutzt. Sie dient unter anderem zum Anzeigen und Verarbeiten von: Kundengeldgeschäften Kundendevisengeschäften Kundenwertpapiergeschäften Derivativgeschäften (Kunden-Options-Geschäft) Privatkundenkreditgeschäften Es werden nicht nur abgeschlossene Order erfasst, sondern auch solche, die sich noch im Angebotsstatus befinden und vom Kundenberater verfolgt und beobachtet werden. Je nach Anforderung werden Kauf- und / oder Verkaufsorder für sämtliche an Börsen gehandelten Effekten (z. B.: Aktion, Optionen usw.) angenommen. Alle eingegebenen Order werden, nachdem sie auf Ausführbarkeit geprüft worden sind, vom Handel (Deponent) an die jeweiligen Börsen weitergeleitet oder es wird nach geeigneten Marktpartnern gesucht, die eine zuverlässige Gegenseite (Kontrahent) darstellen. [WEB14] 2.2.2BSP Trade (Geschäftseingabe) Nachdem die Order in der Anwendung Triple A erfasst worden ist, wird sie in das BSP-Order-Routingsysten eingegeben. Nach der Ausführung der Order muss die Übereinstimmung zwischen Auftragsorder und der Weiterleitung zur Wertpapierabwicklung geprüft werden. Die Wertpapierabwicklung stellt die geld- und wertpapiermäßige Verbuchung sicher, d.h. die Wertpapierabwicklung entspricht dem ordnungsgemäßen Abschluss eines rechtsgültig im Börsenumfeld vereinbarten Wertpapiergeschäftes. Die Wertpapierabwicklung erhält vom Front-Office-System (Triple A) die ausgeführte Kundenorder, überprüft ihren momentanen Zustand und koordiniert sämtliche Arbeitsgänge bis zum Verkauf oder Ende der Existenz des zugrunde liegenden Wertpapiers. BSP Trade ist ein Back-Office-System mit umfangreicher Middle- und Front-OfficeFunktionalität. Es handelt sich um ein sowohl national als auch international leistungsstarkes Produkt für Wertpapierhandel und Wertpapierabwicklung. BSP Trade eignet sich für den Einsatz in allen Bereichen der Wertpapierabwicklung und bietet ein Optimum an Auswahlmöglichkeiten, Flexibilität und Skalierbarkeit und ist deshalb auf einer breiten Palette von UNIX-Plattformen verfügbar. [WEB13] -6-

15 Seite Sebios (Buchhaltung) Jedes Wertpapiergeschäft hat immer zwei Komponenten (Wertpapierseite und Geldseite). Die Buchhaltung muss sicherstellen, dass die entsprechenden Buchungen beim Kauf und Verkauf sowohl auf der Kundenseite (Deponentenseite) als auch auf der Kontrahentenseite erfolgen. Der Kunde erhält nach der Transaktion eine Abrechnung, nach der Verbuchung einen Kontoauszug (Geldseite) und in regelmäßigen Abständen einen Depotauszug (Wertpapierseite). Sebios ist eine auf Cobol basierende Eigenentwicklung der Dresdner Bank Luxembourg S.A. und wurde lange Zeit zur gesamten Wertpapierabwicklung eingesetzt. Da sich die Dresdner Bank Luxembourg S.A. jedoch seit einigen Jahren von der Eigenentwicklung bankinterner Software entfernt hat und auf Produkte externer Hersteller baut, ist ein Großteil der Wertpapierabwicklung durch die Migration von BSP Trade abgelöst worden. Sebios übernimmt zurzeit lediglich den Bereich der Buchhaltung. Sollte die vollständige Migration von BSP Trade abgeschlossen sein, wird auch der Bereich der Buchhaltung von BSP Trade übernommen Enterprise Application Integration (EAI) Enterprise Application Integration (EAI) dient dazu, Geschäftsfunktionen, die über verschiedene Applikationen auf unterschiedlichen Plattformen verteilt sind, im Sinne der Geschäftsprozessintegration verbinden zu können. Begriffsdefinition: EAI umfasst die Planung, die Methoden und die Software, um heterogene, autonome Anwendungssysteme - ggf. unter Einbeziehung von externen Anwendungssystemen - prozessorientiert zu integrieren. EAI ist somit die prozessorientierte Integration von Anwendungssystemen in heterogenen IT-Anwendungsarchitekturen. [WEB05] EAI kombiniert Technologien und Prozesse, die den unterschiedlichen Anwendungen eines oder verschiedener Unternehmen ermöglichen, Geschäftsvorfallinformationen in Daten oder Kontexten austauschen können. [WEB05] -7-

16 Seite 8 3Aufgabenbeschreibung Im Rahmen dieser Diplomarbeit soll im Umfeld der Dresdner Bank Luxembourg S.A. ein Unternehmensportal entstehen. Obwohl ein Portal einen beliebig großen Umfang annehmen kann, soll sich das zu entwickelnde Unternehmensportal der Dresdner Bank Luxembourg S.A. zunächst auf wenige Funktionen beschränken. Eine vollständige Entwicklung eines Internet-Portals mit allen erforderlichen und gewünschten Funktionen und Anwendungen ist durch die zeitliche Beschränkung einer Diplomarbeit nicht möglich. Für weitere Entwicklungen soll das Ergebnis dieser Diplomarbeit als Grundstock und Basis dienen. Hauptziel dieser Diplomarbeit ist es, dem Benutzer des Portals eine Suchmöglichkeit nach Unternehmensprozessen und Prozesszuständen zu bieten. Die Suchmöglichkeit soll sich über so genannte Hauptsuchfelder (Indizes) erstrecken. Als Hauptsuchfelder können hier u. a. Kundennummer und Prozesszustand genannt werden. Ebenfalls soll der Benutzer seine Suche zeitlich eingrenzen können. Weitergehend sollen die Prozesse und deren Zustände, dem Benutzer adäquat angezeigt werden. Adäquat bedeutet zum einen, dass die Informationen textuell in tabellarischer Form präsentiert werden und zum anderen auf Wunsch des Benutzers grafisch auf dem Bildschirm gezeichnet werden sollen. Die grafische Darstellung soll dem Benutzer zusätzlich die Möglichkeit bieten, durch Interaktion in der Grafik detaillierte Informationen des gewählten Prozesses und dessen Zustandes zu bekommen. Da die Anwendungen der Dresdner Bank, die ein Prozess von Anfang bis Ende durchlaufen kann, die Prozesse und deren Zustände nicht einheitlich bezeichnen, ist es notwendig, die Informationen zu den verschiedenen Prozessen zu sammeln und zu konzentrieren. Dies geschieht in einer eigens hierzu entwickelten Datenbank. Da sich an den Stammdaten von Prozessen und Zuständen nichts oder nur wenig ändert, spricht man im weiteren Teil der Diplomarbeit vom statischen Teil der Datenbank. Informationen und Daten zu Prozessen und Zuständen, die aus der Produktion der Dresdner Bank kontinuierlich entstehen, sollen in dieser Datenbank gesammelt, aufbereitet und für die Benutzersuche entsprechend gespeichert werden (dynamischer Teil der Datenbank). Um den Inhalt der Datenbanktabellen verwalten zu können, soll ein dynamisches Web-Interface geschaffen werden, das in das Unternehmensportal integriert ist. Dynamisch bedeutet hier, dass mit Hilfe bestimmter Programmiertechniken die Anzahl der Web-Seiten minimiert werden soll und erst zur Laufzeit durch Aktion des Benutzers entschieden wird, mit welchen Daten und Informationen die Web-Seite gefüllt wird. -8-

17 Seite 9 Des Weiteren kennzeichnet ein Unternehmensportal eine Benutzer- und Rechteverwaltung, damit jeder Benutzer des Portals ausschließlich das sehen und nutzen kann, was er aufgrund seiner Stellung im Unternehmen sehen und nutzen darf. Außerdem soll das Unternehmensportal internationalisiert sein. Dies bedeutet, dass sich das Erscheinungsbild des Portals an den länderspezifischen WebbrowserEigenschaften des angemeldeten Benutzers ausrichtet. -9-

18 Seite 10 4Anforderungsspezifikation Benutzer- und Rechteverwaltung Um einen Benutzer zu identifizieren und zu authentifizieren, soll eine Benutzer- und Rechteverwaltung implementiert werden, damit jeder Benutzer nur Zugriff auf die Web-Seiten des Portals hat, die er sehen und nutzen darf. Die Dresdner Bank verwendet die Single-Sign-On-Technologie. Dies bedeutet, dass ein Benutzer nach einer einmaligen Authentifizierung auf alle Rechner, Dienste und Anwendungen Zugriff hat, für die er berechtigt ist, solange er im System angemeldet bleibt. Diese Single-Sign-On-Technologie soll in das Prozess-Portal eingebaut werden. Suchfunktion Die Implementierung der Suchfunktion ist die Hauptaufgabe dieser Diplomarbeit. Ein Prozess durchläuft in seinem Lebenszyklus mehrere Anwendungen, die keine einheitliche Bezeichnung des Prozesses verwenden. Da der Benutzer im Moment der Suche nicht weiß, in welchem Zustand sich der Prozess befindet, muss gewährleistet sein, dass über alle Zustände der Vergangenheit und über den aktuellen Zustand der Prozesse gesucht werden kann. Des Weiteren soll der Benutzer auswählen können, welche Kriterien seine Suche einschränken. Anzeige der Prozesse und Zustände Eine ansprechende Visualisierung der Prozesse und Zustände ist erwünscht. Die textuelle Darstellung soll übersichtshalber in Tabellenform erfolgen. Die grafische Darstellung hat den Anspruch, interaktiv zu sein. Dies bedeutet, dass der Benutzer per Mausklick in tiefere Ebenen des Prozesses vordringen kann. Dynamische Tabellenverwaltung Eine Datenbank ist notwendig, um die Daten und Informationen, die das ProzessPortal benötigt, abzuspeichern und bereit zu halten. Damit man nicht mit der datenbankspezifischen Abfragesprache SQL die Datensätze pflegen und bearbeiten muss, soll das Portal eine Möglichkeit bieten, diese Arbeiten browser-basiert ausführen zu können. Des Weiteren soll es möglich sein, mit einem minimalen Aufwand das Datenbankschema zu ändern und zu erweitern. Hierzu sollen ebenfalls keine SQLKenntnisse nötig sein. Mit Hilfe von Java Reflection soll die Webanwendung möglichst dynamisch gehalten werden

19 Seite 11 Open Source Software Für die Programmierung der Anwendung soll nach Möglichkeit Open Source Software verwendet werden. Dies soll der Anwendung den Vorteil bringen, gegenüber Unternehmensentscheidungen bezüglich Software und deren Lizenzen unabhängig zu sein. Programmiersprache(n) Für die Programmierung der Web-Seiten des Portals soll HTML verwendet werden. Des Weiteren wird Java verwendet, um die Logik der Anwendung zu realisieren. Datenbank Die in der Dresdner Bank verwendete Datenbank stammt vom Softwarehersteller Oracle. Diese Datenbanksoftware soll auch in dieser Diplomarbeit genutzt werden

20 Seite 12 2.Grundlagen und Technologien Im nächsten Kapitel wird auf grundlegende Themen und verwendete Technologien näher eingegangen, um das Verständnis für diese Diplomarbeit zu sichern. 1Datenbank 1.1Datenbank allgemein Eine Datenbank ist die elektronische Form eines Karteikastens. Sie beinhaltet Daten, die aus Sicht des Benutzers zusammen gehören (z. B.: Personaldatenbank, Bücherdatenbank usw.). Eine Datenbank wird üblicherweise von einem Datenbankmanagementsystem (kurz: DBMS) verwaltet. Ein DBMS in Verbindung mit einer oder mehreren Datenbanken wird Datenbanksystem (kurz: DBS) genannt. [WEB04] Vereinfacht ausgedrückt bestehen relationale Datenbanken aus Tabellen, in denen Daten gespeichert sind. Üblicherweise stehen diese Tabellen in Beziehung zueinander, das heißt manche Einträge sind Verweise auf andere Einträge in anderen Tabellen. Anforderungen an eine Datenbank sind unter anderem: Geringe Redundanz Nach Möglichkeit sollten identische Daten nicht an mehreren Stellen in der Datenbank gleichzeitig abgelegt werden. Behält man diese Vorgehensweise bei, bleibt die Datenbank übersichtlich. Außerdem spart man Speicherplatz. Gute Handhabbarkeit Durch eine übersichtliche Ablage der Daten vereinfachen sich die Abfragen. Sicherstellung von Konsistenz und Integrität Datenbeziehungen bleiben in sich logisch und stimmig. Die Gefahr, Daten bei Updates oder Löschungen zu verlieren, besteht nicht. [WEB26] 1.2Datenbankmanagementsystem Ein Datenbankmanagementsystem ist eine Sammlung von Programmen, welche die anwendungsunabhängige, dauerhafte Speicherung von Daten in einer Datenbank ermöglicht. Weitere Aufgaben einer DBMS sind die Bereitstellung von verschiedenen Sichten auf Daten (Views), die Konsistenzprüfung und Integritätssicherung der Daten, die Autorisationsprüfung, die Synchronisation zeitgleicher Zugriffe auf Daten verschiedener Personen und das Sichern der Daten. [WEB04]

21 Seite Relationale Datenbank Eine relationale Datenbank basiert auf einem relationalen Datenmodell. Relational bedeutet, dass eine Menge identisch aufgebauter Datensätze (Tupel) besteht. Die Daten werden in zweidimensionalen Tabellen dargestellt. Tabellen können untereinander über Schlüssel (Primär- und Fremdschlüssel) und durch logische Beziehungen verknüpft werden. Die meisten in der Praxis eingesetzten Datenbanksysteme sind für relationale Datenbanken konzipiert und werden daher relationale Datenbanksysteme (kurz: RDBMS) genannt. [WEB04] 1.4Das Entity-Relationship-Modell Zur Modellierung einer relationalen Datenbank wird meistens eine grafische Darstellungsmethode, ein Entity-Relationship-Modell (kurz: ER-Modell), verwendet. Das ER-Modell wurde 1976 von P. Chen zur Datenmodellierung entwickelt. Der zu betrachtende Sachverhalt wird in Dinge (Entitäten) und deren Beziehungen (Relationen) untereinander modelliert. Eine Entität ist ein unterscheidbares, in der realen Welt eindeutig identifizierbares Exemplar von Dingen, Personen oder Begriffen der realen oder der Vorstellungswelt. Zusammen gehörende Entitäten werden als Entitätsmenge zusammen gefasst. Entitäten können durch Attribute fachlich näher beschrieben werden. Attribute werden für jede Entität durch seinen Namen und entsprechende Werte konkretisiert (Attributwerte). Unter einer Beziehung (Relation) versteht man den semantischen Zusammenhang zwischen zwei Gegenständen (Beispiele: eine Haus ist ein Gebäude. Ein Auto hat vier Räder.). Die Zusammenfassung gleichartiger Beziehungen zwischen Entitäten wird Assoziation genannt. Kardinalitäten geben an, mit wievielen anderen Entitäten eine Entität einer bestimmten Entitätsmenge in einer konkreten Beziehung stehen muss oder kann. [WEB04], [WEB05], [BAL01] 1.5Das Relationenmodell Das Relationenmodell bildet das Bindeglied zwischen Datenbank und EntityRelationship-Modell. Das Entity-Relationship-Modell wird Schritt für Schritt in ein Relationenmodell transformiert. Jeder Entitätstyp wird in ein Relationsschema umgewandelt. Die Attribute des Entitättyps werden zu Attributen des Relationsschemas. Ebenso wird der Schlüssel der Entität zum Schlüssel des Relationsschemas

22 Seite 14 Als nächstes werden die Attribute der schwachen Entität um den Schlüssel der starken Entität erweitert. Eine schwache Entität hängt von der Existenz der starken Entität ab. Es gibt drei verschiedene zweistellige Beziehungen: 1:1-Beziehung Es entsteht kein neues Relationsschema. Eine an der Beziehung beteiligte Relation wird um den Fremdschlüssel der anderen Relation erweitert. 1:N-Beziehung Das Relationsschema auf Seiten der N-Kardinalität wird um den Schlüssel der 1Kardinalität erweitert. N:M-Beziehung Hier wird ein neues Relationsschema erzeugt. Der Primärschlüssel des neuen Relationsschemas entsteht aus den Primärschlüssel der an der Beziehungen beteiligten Relationen. Mehrwertige Attribute führen zu einem zusätzlichen Relationsschema. Der Schlüssel der ursprünglichen Relation bildet zusammen mit dem mehrwertigen Attribut den Schlüssel für das neue Relationsschema. Gibt es für eine Relation mehrere Alternativen, so muss die Relation spezialisiert werden. Angenommen es gibt eine Relation Person. Es ist möglich, dass eine Person ein Kunde oder ein Verkäufer sein kann. In diesem Fall ist es nötig, Subklassen zu bilden. Für jede Subklasse entsteht ein neues Relationsschema. Das Schlüsselattribut der Superklasse wird von allen beteiligten Subklassen übernommen. [WEB27] Des Weiteren gibt es noch dreistellige Beziehungen, auf deren Beschreibung hier nicht näher eingegangen wird. 1.6Oracle Oracle ist einer der größten Softwarehersteller weltweit mit Hauptsitz in Redwood Shores (Silicon Valley, Kalifornien). Folgende Produkte bietet Oracle an: Oracle Database Server (Datenbanksoftware) Zusatzsoftware Oracle Forms und Reports (Anwendungsentwicklung), Oracle Jdeveloper (Java-Entwicklungsumgebung), Oracle Designer (Datenmodellierung), Oracle Warehouse Builder (Datawarehouses), Oracle Discoverer (Endanwender-Tool) Oracle Application Server (Web-Server) Oracle Collaboration Suite (Groupware) Oracle E-Business Suite (Offene Anwendung zur Unternehmensverwaltung)

23 Seite 15 Bekanntestes und erfolgreichstes Produkt des Unternehmens ist das Datenbankmanagementsystem (DBMS). Es bildet das Kerngeschäft von Oracle. Der Oracle Database Server ist ein sehr leistungsfähiges, objekt-relationales Datenbanksystem, welches ein Höchstmaß an Performance bietet. Es unterstützt riesige Datenmengen und gleichzeitig sehr viele an der Datenbank angemeldete Benutzer. Der größte Vorteil besteht aber darin, dass lesende Zugriffe auf die Datenbank immer konsistent sind. Konsistenz in Verbindung mit einer Datenbank heißt, dass der Inhalt einer Datenbank alle vordefinierten Konsistenzbedingungen (Constraints) erfüllt. Lesende Zugriffe blockieren niemals schreibende Zugriffe. Dies gilt ebenso umgekehrt. Der Oracle Database Server weist weiterhin ein Vielzahl von Vorteilen und positiven Eigenschaften auf, auf dessen Aufzählung hier verzichtet wird. [WEB04], [WEB05]

24 Seite 16 2The Apache Software Foundation Die Apache Software Foundation (ASF) ist eine gemeinnützige Gesellschaft mit beschränkter Haftung, eingetragen seit Juni 1999 in Delaware, USA. Die ASF entstand aus einer Gruppe von Mitgliedern der Apache Group, die im Jahre 1995 gegründet wurde, um den Apache HTTP-Server zu entwickeln. Die ASF wurde hauptsächlich gegründet, um die Grundlage für eine offene, gemeinschaftliche Softwareentwicklung durch Bereitstellen der Hardware, Sicherstellung der Kommunikation und Geschäftsinfrastruktur zu gewährleisten. Des Weiteren stellt die ASF eine legale, juristische Person dar, welcher Firmen und Einzelpersonen Betriebsmittel spenden können. Dabei ist sicher gestellt, dass jene Betriebsmittel für den allgemeinen, öffentlichen Vorteil genutzt werden. Weitere Gründe waren ebenso der rechtliche Schutz aller Projekt-Mitarbeiter und der Schutz der Marke Apache vor dem Missbrauch durch andere Organisationen, in Bezug auf die Softwareprodukte der Apache Software Foundation. Die ASF ist in so genannte Projekte unterteilt, welche wiederum in Unterprojekte aufgegliedert sein können. In der vorliegenden Arbeit wurden die Programme Maven, Turbine, Velocity, Tomcat, Torque aus den drei Projekten Maven, Jakarta und DB verwendet. [WEB01] 2.1Apache Maven Project Softwareprojekte sind mit sich wiederholenden, administrativen Aufgaben verbunden. Durch Nutzung von Maven ist man in der Lage, diese Verwaltungstätigkeiten automatisiert durchzuführen. Maven entstand, weil Java-Projekte, die lose zusammengehörten, untereinander nicht kompatibel waren. Jedes Projekt hatte sein eigenes Ant-Skript, das meistens mehr oder weniger die identischen Aufgaben ausführte, aber dennoch unterschiedlich aufgebaut war. Bei Apache Ant handelt es sich um ein Java basiertes Build-Werkzeug für Java Projekte. Maven basiert auf dem Programm Ant Die Dateien project.xml und maven.xml Maven ist ein auf Java basierendes Build- und Projektmanagementwerkzeug und beruht auf der Metadatenbeschreibung Project Object Model (POM) und einer Sammlung von Plug-ins. In der Datei project.xml sammelt der Entwickler alle notwendigen Informationen, um das POM zu beschreiben. Das POM gewährleistet, dass alle von Maven stammenden Produkte ein Resultat des wohlgeformten Projekt Object Model sind. Es kontrolliert den Aufbau der Architektur, sichert Qualität durch Source-Metriken zu, sorgt für eine einheitliche Dokumentation und verschafft einen Überblick über die verwendeten Bibliotheken

25 Seite 17 Weiterhin liefert Maven eine Menge von Funktionalitäten, die für Projekte wieder verwendet werden können. Für die Kompilierung ist es ausreichend, das Quellverzeichnis im POM in der Form <build> <sourcedirectory>src/java</sourcedirectory> </build> Code 1: Beispieleintrag der project.xml einzutragen. Der Befehl maven java:compile kompiliert alle Java-Quelldateien unterhalb von./src/java. Im Übrigen liefert der Befehl maven g alle Plug-ins und die dazu gehörigen Goals. Ein Goal stellt bei Maven das dar, was bei Ant als Target bezeichnet wird. Im obigen Fall von java:compile ist java ein Plug-in und compile ein Goal. Maven erwartet per Voreinstellung einige Dateien in bestimmten Verzeichnissen. Startet man Maven per Befehl mit einem Goal als Parameter, sucht Maven nach der Datei project.xml und nach einem Goal in der Datei maven.xml. Die Steuerung von Maven erfolgt größtenteils über Parameter, wodurch die Properties-Dateien eine übergeordnete Rolle spielen. Die Parameter werden entweder mit dem Kommandozeilenparameter D oder in den Dateien plugin.properties, project.properties, build.properties und maven.xml definiert, welche von Maven genau in dieser Reihenfolge abgearbeitet werden. [WEB06], [IX01] 2.1.2Repositories Ein weiteres nützliches und auch neues Konzept stellen die Repositories dar, aus denen der Entwickler Jar-Dateien laden kann. Beim Start von Maven werden alle benötigten Jar-Dateien aus einem Remote Repository geladen und lokal in einem Verzeichnis abgelegt. Die Grundeinstellung sieht dafür das Home-Verzeichnis des Benutzers vor. In der Datei project.xml werden die benötigten Jars (Java Archives) definiert. In einem Kindelement des Tags <dependency> ist die URL gespeichert, um die JarDatei herunterzuladen, falls diese nicht vorhanden ist. [IX01] 2.1.3Build-Prozess Der Build-Prozess wird individuell in der Datei maven.xml gesteuert und programmiert. Diese Datei wird beim Start des Builds im gleichen Verzeichnis wie die Datei project.xml gesucht

26 Seite 18 Der Entwickler ruft Plug-ins auf und verfasst individuelle Abläufe in der Scriptsprache Jelly, welche ebenfalls ein Apache-Projekt ist. Jelly wurde in XML deklariert und in Java geschrieben. Somit erlaubt Jelly den Zugriff auf Java-Klassen, -Methoden und -Attribute. Aber nicht nur Jelly steht dem Entwickler zur Verfügung, sondern auch alle AntKonstrukte. [IX01] Im Anhang sind Beispiele für die Dateien project.xml und maven.xml zu finden und erklärt Plug-ins Für fast alle Anwendungsfälle in Maven ist ein Plug-in vorhanden. Sei es zum Verteilen der generierten Jar-Dateien, zum Ausführen mehrerer Goals oder für die in dieser Arbeit verwendeten Programme Turbine oder Torque. Eine Übersicht über alle installierten Plug-ins erhält man durch den Befehl maven-g. Auf der Maven-Web-Seite kann man Beschreibungen der Plug-ins einsehen. Außerdem werden dort alle konfigurierbaren Parameter der Plug-ins beschrieben. Sehr interessant ist das Site-Plug-in, welches eine Dokumentation erstellt, die auf XML-Dateien basiert. Der Entwickler hat die Möglichkeit, eine individuelle Dokumentation zu erstellen. Zum Beispiel bietet Maven vorgefertigte Reports zur Erstellung von Javadocs an. [IX01] Abbildung 2-3: Elementübersicht von Maven [WEB20]

27 Seite Fazit Maven erfreut sich sowohl bei Einsteigern als auch bei erfahrenen Programmierern immer größerer Beliebtheit. Es ist einfacher, Plug-ins über eine Scriptsprache (Jelly) und Steuerdateien zu erstellen als mit Java und Ant. Maven ist einfach zu bedienen und zu erweitern, da es auf einem gelungenen Plugin-Konzept basiert. In der nächsten Version (Maven 2) wird diese Strategie fortgesetzt und vertieft. Zum jetzigen Zeitpunkt existiert für Maven 2 lediglich eine Alpha-Version. [IX01] 2.2Apache Jakarta Project Das Apache Jakarta Project bietet eine Reihe von Open Source Java-Lösungen an und ist in weitere Unterprojekte (z. B.: Tomcat und Turbine) unterteilt Tomcat Tomcat ist ein Servlet-Container, der komplett in Java programmiert ist. Dies bedeutet, dass Tomcat plattformunabhängig ist und auf jedem Betriebssystem funktioniert, das über eine JVM (Java Virtual Machine) verfügt. Mit Tomcat ist man in der Lage, nicht nur HTML-Seiten, sondern auch dynamische Komponenten wie JavaServer Pages (JSP) und Java-Servlets auszuführen. Er verwirklicht die offizielle Referenzimplementierung der JavaServer Pages und Java Servlet API s, welche von Sun Microsystems in den aktuellen Versionen Java Servlet 2.4 und JavaServer Pages 2.0 gefordert wird. [WEB07] Tomcat kann: als eigenständiger Webserver fungieren einen bestehenden Webserver (Apache) als Add-on erweitern für die erweiterte Speicherung von Sessions und Lastenverteilung, eingebettet in einen Application-Server, sorgen bestehende Serveranwendungen (z. B.: Firewalls, DBMS) oder Anwendungen in anderen Geräten (z. B.: Router oder Haushaltsgeräte) verwalten In der Praxis findet man am häufigsten die ersten beiden Szenarien vor, weil zum einen die Wurzeln des Tomcat eng mit Apache-Server verbunden sind, zum anderen aber der Tomcat-Server ein eigenständiger, vielfach in der Praxis erprobter, eigenständiger Web-Container ist. Da das World Wide Web und seine Technologien von vielfältiger Natur sind, wird nicht nur aus Performancegründen (Lastverteilung, Sicherheit / Redundanz) der Tomcat-Server zusammen mit einem bestehenden Webserver eingesetzt. Bevor Java auf den Web-Servern Einzug hielt, gab es schon gute Lösungen, die weiterhin genutzt werden sollten. Webanwendungen, die in CGI, Perl, PHP oder ASP geschrieben worden sind, sollen weiterhin im gleichen Web nutzbar sein

28 Seite 20 Große Webserver nutzen die Begebenheiten der Betriebssysteme besser aus. Zum Beispiel werden SSL-Verbindungen schneller geschlossen oder es existieren bereits gute Lösungen zum Cachen von statischen und dynamischen Inhalten. [WEB16] 2.2.2Turbine Web Application Framework Motivation Turbine ist seit 1999 in der Entwicklung und macht aufgrund dessen einen ausgereiften Eindruck. Es handelt sich dabei um ein auf Servlets basierendes Framework (Gerüst), mit dem man Web-Applikationen erstellen kann. Es stellt dem Entwickler eine Vielzahl verschiedener Tools, Techniken und Frameworks zur Verfügung. Model-View-Controller (MVC)-basiert, eignet es sich hervorragend als Alternative für Datenbankanwendungen mit HTML-Sicht. Von Sun Microsystems wird der J2EE-Ansatz in einem MVC-Muster als Standard vorgeschlagen. Typischerweise bilden Enterprise JavaBeans (EJB) das Modell, welches mit der Datenbank kommuniziert. Die View wird mit JSP s realisiert, die mit Daten aus dem Modell versorgt werden. Servlets stellen die Controllerstruktur dar, die auf Benutzeranfragen reagieren, das Modell ändern und die neue View setzen. Bei größeren Anwendungen gibt es aber einige Probleme. Durch den Einsatz von Servlets ohne weitere Tools baut sich ein fast nicht zu bewältigendes Switchstatement auf. Ein weiteres Problem ist, dass man zwar MVC anwenden kann, aber nicht muss. Man ist bei einer kleinen Änderung oder bei einem kleinen Zusatzfeature verleitet, schnell ein paar Zeilen Code in die JSP-Seite einzubauen. Ebenso stellen EJBs oft ein Problem dar. Konsequenter Einsatz von EJBs treibt die Projektkosten (sowohl Implementierungszeit als auch Hardwarebedarf) in die Höhe. In diesen Fällen sollte man als Zwischenschicht ein objektrelationales Hilfsmittel verwenden. [WEB08] Turbine s Lösung Das Hauptaugenmerk liegt bei Turbine auf der Einhaltung des MVC-Musters. Für die Modellerzeugung wurde das objekt-relationale Tool Torque entwickelt, welches mittlerweile von Turbine entkoppelt ist und alleine benutzt werden kann. Torque wird in einem folgenden Kapitel vorgestellt. Man hat zwei Auswahlmöglichkeiten für die View-Erstellung. Zum einen die bekannten JavaServer Pages, zum anderen die bevorzugte reine Template-Lösung wie zum Beispiel mit der Template-Sprache Velocity. Ein Controller wird von Turbine bereitgestellt, so dass normalerweise keine dogetoder dopost-methoden implementiert werden müssen. Dafür werden Action-Klassen in eigenen Packages vom Turbine-Servlet als Controller aufgerufen, welche dann die notwendigen Änderungen am Modell vornehmen und die neue View setzen

29 Seite 21 Darüber hinaus kann man für jedes View-Template eine eigene so genannte ScreenKlasse schreiben, welche die Daten aus dem Modell für die Ansicht aufbereitet. [WEB17], [FRA01] Ablauf Die Hauptaufgabe von Turbine ist es, die gewünschte Seite, auf HTTP-Requests des Users reagierend, mit Kopf, Navigation und Fuß zusammenzusetzen und zurückzuliefern. Dieses stückweise Zusammenbauen der Seite in Verbindung mit der Reaktion auf Benutzeranfragen wird im Folgenden als Systemablauf bezeichnet. Der Systemablauf (Abbildung 2-2) wird von so genannten Assemblern erledigt. Abbildung 2-4: Die fünf Assembler im Systemablauf [WEB17] Die folgende Abbildung (Abbildung 2-3) zeigt die Zusammenarbeit der einzelnen Assembler. Typischerweise schickt der User durch einen Browseraufruf einen HTTPRequest an Turbine. Zuerst wird das Page-Modul ausgeführt, welches die Module Layout, Navigation und Screen beinhaltet. Ist aber eine Action aufgerufen worden, wird diese zuerst ausgeführt. Eine Action ist meist eine Methode einer sich im Modulpfad befindenden Action-Klasse. Beispielsweise wird eine Login-Action bei der Eingabe des Namens und Passworts des Benutzers auf einer Login-Seite aufgerufen. Dieses modulare Konzept ermöglicht das Wieder verwenden einer Action an mehreren Stellen einer Anwendung

30 Seite 22 Abbildung 2-5: Request-Response-Zyklus in Turbine [WEB17] Nachdem die Action ausgeführt worden ist, wird das Layout-Modul geladen und gestartet. Das Layout-Modul gibt die physikalische Struktur (Ablauf von Kopf, Navigation, Screen und Fuß) der HTML-Seite an. Abbildung 2-6: Physikalische Struktur der HTML-Seite [WEB17]

31 Seite 23 Normalerweise wird in einer Screen-Klasse der Template-Kontext mit Daten aus dem Modell gefüllt. Das vom Screen-Template erzeugte HTML wird an die vom Layout vorgesehenen Positionen eingefügt. Anschließend werden die Navigationsklassen aufgerufen und der von ihnen erzeugte HTML-Code in die Seite eingebaut. Die fertige HTML-Seite wird dem Benutzer zurückgegeben und ein neuer Zyklus kann beginnen. Die zur Seitenerzeugung instanziierten Objekte können durch einen CachingMechanismus für mehrere Seiten wieder verwendet werden. Weiterhin stellt Turbine ein durchdachtes Benutzerkonzept zur Verfügung. Man kann dem Benutzer verschiedene Rollen in verschiedenen Gruppen zuweisen. Unter einer Rolle versteht man die Vereinigung von verschiedenen Rechten, welche den granularsten Teil des Benutzerkonzeptes ausmachen. Gruppen dienen zur weiteren Aufteilung auf horizontaler Ebene. [WEB17], [FRA01] 2.2.3Velocity Velocity ist eine auf Java basierende Template-Engine des Jakarta-Projekts. Mit Velocity ist man in der Lage, dynamische Seiten mit der einfachen, aber dennoch mächtigen Scriptsprache Velocity Template Language (VTL) zu erzeugen. Dem Webdesigner ist es erlaubt, definierte Java-Methoden zu referenzieren. Die Zielsetzung von VTL, einfach, unkompliziert und sauber dynamische Inhalte für Internetseiten zu erstellen, ermöglicht es auch dem Web-Seiten-Designer ohne große Programmiererfahrung, dynamische Inhalte einzubinden. Durch die Anwendung des Model-View-Controller-Modells (MVC) können sowohl Designer als auch Informatiker an einem Projekt parallel arbeiten. Java-Code und Web-Seite werden im Gegensatz zu JavaServer Pages (JSP) konsequent getrennt. Aber mit Velocity kann man nicht nur auf einfache Weise HTML-Seiten erzeugen. Velocity kann SQL, Postscript, Mails und anderen Output generieren. Zum besseren Verständnis folgen noch ein paar erklärende Sätze zum Befehlssatz in Velocity und zum Kontext. Velocity ist, wie bereits vorher erwähnt, keine Programmiersprache, sondern eine Template-Engine. Template kann man mit Schablone übersetzen. Dennoch verfügt Velocity über eine kleine Menge an Befehlen. #set Wertzuweisung an Referenzen #if, #else, #elseif Bedingungen #foreach Schleifen #include Einfügen von Dateien #parse Bearbeitung von eingefügten Dateien #stop Abbruch bei der Ausführung der Template Engine

32 Seite 24 Mit dieser geringen Anzahl von Befehlen kann man aber noch nicht viel erreichen. Denn der Kontext steht im Mittelpunkt von Velocity. Mit Hilfe des Kontextes können Daten zwischen Programmierer und Designer bzw. zwischen Java und HTMLTemplate ausgetauscht werden. In den Java-Klassen stellt der Programmierer die Daten in den Kontext. Der Designer kann nun über die Referenzen auf diese Daten zugreifen und mit den wenigen VTLBefehlen in den HTML-Code einbauen. Programmierer und Designer müssen sich nur darüber einig sein, wo die Daten bereitgestellt werden und mit welchem Namen der Programmierer die Daten in den Kontext schreibt. [WEB09], [FRA01] 2.2.4Maven Environment for Turbine Applications (M.E.T.A.) Das Maven Environment for Turbine Applications hilft dem Anwender eine auf dem Turbine Framework basierende Applikation zu entwickeln. Es baut ein Applikations-Skelett bestehend aus einer bestimmten Ordnerstruktur und einer Anzahl von Konfigurationsdateien auf Installation von M.E.T.A. Um M.E.T.A. zu nutzen, muss man ein Plug-in für Turbine herunterladen und dieses in das Plug-in-Verzeichnis von Maven kopieren. M.E.T.A. ist in der Lage, die erstellte Anwendung in einen Servlet-Container zu installieren. Hierzu fügt man in der eigenen build.properties-datei, welche im Home-Verzeichnis liegt, folgende Zeile hinzu: Maven.appserver.home = %TOMCAT_HOME% Nun kann man mit dem Erstellen eines eigenen Projektes beginnen und dieses in einer Entwicklungsumgebung (Eclipse) verwenden. [WEB10] Diese Vorgehensweise ist im Anhang näher beschrieben. 2.3Apache DB Project DB ist ein eigenständiges Projekt der Apache Software Foundation. Ziel ist es, qualitativ hochwertige, kostenlose Open source-datenbanklösungen bereit zu stellen Torque Was ist Torque? Torque ist kein neues Projekt der Apache-Gruppe, sondern wurde als Teil des Turbine-Frameworks entwickelt. Seit der Turbine-Version 2.2 wurde Torque von der eigentlichen Frameworkentwicklung entkoppelt und ist seitdem ein eigenständiges Projekt

33 Seite 25 Heutzutage ist es notwendig, Daten, die von Webanwendungen abgerufen oder verändert werden, dauerhaft zu speichern. Dies geschieht vorzugsweise in Datenbanken. Mit Torque stellt die Apache-Gruppe ein kostenloses Werkzeug zur Verfügung, um aus Webanwendungen heraus speichernd, ändernd oder abfragend auf eine Datenbank zuzugreifen. [WEB11], [WEB18] Was kann Torque? Mit Torque ist es möglich, anhand einer XML-Datei, welche die Spezifikationen einer Datenbank enthält, sowohl die Datenbank selbst als auch die entsprechenden Zugriffe in Form von Java-Klassen zu erzeugen. Mittlerweile werden nahezu alle gängigen Datenbanken (DB2, Oracle, SapDB, MySQL usw.) unterstützt. Die durch den Torque-Generator erzeugten Klassen können über die TorqueLaufzeitumgebung problemlos in eine Anwendung integriert werden. Man kann zum Beispiel über einfache Methoden wie doselect(criteria criteria) Datensätze einlesen oder über save() einen Datensatz speichern. Man benötigt dazu keine Kenntnisse in SQL und JDBC. Genauer betrachtet analysiert der Torque-Generator die in einer Schema-Datei beschriebenen Entitäten wie zum Beispiel die Tabelle Person, welche die Attribute Name, Street und City besitzen kann. Dazu passend wird eine Tabelle erzeugt, die die jeweiligen Attribute in Form von Spalten aufweist. Die so genannte Datenzugriffsschicht regelt elegant, dass über ein Modellobjekt in Java-Syntax auf die Tabelleninhalte zugegriffen werden kann. Hierzu wird keine einzige Zeile SQLSyntax verwendet. [WEB11], [WEB18] Fazit Torque ist ein sehr leistungsfähiges und in der aktuellen Version ein sehr ausgereiftes, objekt-relationales (O/R) Mapping-Werkzeug. Mit Torque können schnell Modellobjekte an eine Datenbank gebunden werden. Die Performance lässt ebenfalls keine Wünsche offen. Auch kann man komplexe Beziehungen zwischen Entitäten problemlos abbilden und über die erzeugten Klassen verwalten. Auf die Konfiguration von Torque wird im Anhang eingegangen. [WEB11], [WEB18]

34 Seite 26 3Java 3.1Java Reflection API Die Java Reflection API dient dazu, Bestandteile von Klassen (Datenelemente, Konstruktoren und Methoden) dynamisch zur Laufzeit zu analysieren und zu nutzen. Dies bedeutet, dass man in einem Java-Programm auf Klassen und Interfaces zugreifen kann, die beim Kompilieren nicht bekannt waren. Diese Programme nennt man auch Meta-Programme, da sie auf den Klassen und Objekten anderer Programme agieren. [WEB22] Im Anhang wird kurz auf einen Teil der Java Reflection API eingegangen. 3.2Java Internationalization (I18N) Im Zeitalter der Globalisierung ist es auf vielen Web-Seiten unentbehrlich geworden, den Inhalt in verschiedenen Sprachen und angepasst auf einige Lokalitäten auszuliefern. Java ist die einzige allgemein verwendete Programmiersprache, bei der Internationalisierungsfunktionen in den Kern eingebaut und nicht im Nachhinein hinzugefügt worden sind. Die meisten Programmiersprachen verwenden 8bit breite Zeichen, die nur die Alphabete der westeuropäischen Sprachen repräsentieren. Java hingegen verwendet 16bit Unicode-Zeichen, die die phonetischen Alphabete und ideographischen Zeichensätze der ganzen Welt repräsentieren. Die Internationalisierungsfunktionen von Java beschränken sich aber nicht auf die elementare Zeichenrepräsentation, sondern ziehen sich durch die gesamte JavaPlattform, wodurch das Schreiben internationalisierter Programme mit Java leichter ist als mit jeder anderen Umgebung. [WEB22]

35 Seite 27 4SVG Scalable Vector Graphics 4.1Definition SVG ist eine in XML formulierte Sprache zur Beschreibung und Erstellung von zweidimensionalen Vektorgrafiken. Zurzeit werden SVG-Grafiken von InternetBrowsern noch nicht nativ unterstützt. Zur Darstellung wird ein Plug-in benötigt, was aber bei der nächsten Generation der Web-Browser entfällt. [WEB31] 4.2Merkmale SVG-Grafiken sind textbasiert und zeichnen sich durch geringe Datengröße im Vergleich zu anderen Grafikformaten (JPEG, GIF usw.) aus. Die Dateigröße kann durch den Einsatz von interner oder externer Stylesheets weiter verringert werden. Die Nutzung von Filtereffekten ist möglich (z. B.: Schattenwurf, Beleuchtung, Weichzeichnung, Verzerrung), die bisher nur von Rastergrafiken verwendet werden konnten. Auf Animationen, Dynamik und Interaktivität muss man nicht verzichten. Viele Effekte, wie zum Beispiel mouseover, lassen sich mit reinem SVG herstellen. SVG kann aber auch mit JavaScript kombiniert werden. Weiterhin lassen sich SVG-Dateien serverseitig dynamisch erzeugen (mit PHP, Perl, ASP, JSP, Ruby...). Es besteht die Möglichkeit, sich in SVG-Dokumente hinein- oder herauszuzoomen. SVG-Dateien können in jeder Auflösung mit bester Qualität ausgedruckt werden und erscheinen niemals pixelig Sounddateien (MP3 und WAV) können in SVG-Dateien eingebunden werden. Ein SVG-Beispiel ist im Anhang aufgeführt. [WEB31], [WEB05]

36 Seite 28 3.Analyse 1Was ist ein Prozess? Nach DIN versteht man unter einem Prozess eine Umformung und/oder Transport von Materie, Energie und/oder Information. Davon ausgehend wird in der Informatik der Prozess formal als eine Folge von Aktionen in einem Zustandsraum definiert. [WEB24] Ein Prozess setzt sich aus zahlreichen Einzelaufgaben zusammen, die aber einzeln betrachtet für den Kunden noch keinen Wert ergeben. Dieser entsteht erst aus der Gesamtheit der Prozesse. Dabei überschreitet ein Prozess typischerweise Abteilungsgrenzen und erstreckt sich quer durch das Unternehmen oder sogar darüber hinaus. 2Der Geschäftsprozess allgemein 2.1Definition Der Geschäftsprozess ist eine logisch zusammenhängende Kette von Teilprozessen, die auf das Erreichen eines bestimmten Zieles ausgerichtet sind. Ausgelöst durch ein definiertes Ereignis wird ein Input durch den Einsatz materieller und immaterieller Güter unter Beachtung bestimmter Regeln und der verschiedenen unternehmensinternen und externen Faktoren zu einem Output transformiert. Der Prozess ist in ein System von umliegenden Prozessen eingegliedert, kann jedoch als eine selbständige, von anderen Prozessen isolierte Einheit betrachtet werden, die unabhängig von Abteilungs- und Funktionsgrenzen ist. [WEB25]

37 Seite Struktur eines Geschäftsprozesses Abbildung 3-7: Struktur des Geschäftsprozesses Für jeden Geschäftsprozess ist entweder eine starre Ablaufdefinition oder ein flexibler, dynamischer Aufbau festzulegen, welcher während der Laufzeit entschieden wird. Unter anderem legen diese Regeln die Reihenfolge der einzelnen Teilprozesse, Tätigkeiten bzw. Funktionen fest (hier: p1 bis p5), die innerhalb des Geschäftsprozesses durchgeführt werden müssen. Zusammengefasst ergibt sich eine logisch zusammenhängende Kette, die den Geschäftsprozess darstellt. Innerhalb des Geschäftsprozesses erfolgt eine Kombination von bestimmten Einsatzgütern (Input), die in bestimmter Weise nach den vorgegebenen Regeln zu Ergebnissen (Output) verarbeitet werden

38 Seite 30 Unternehmensinterne Faktoren: Geschäftsprozesse orientieren sich direkt an der Wertschöpfungskette und den Zielen des Unternehmens. Jeder Teilprozess wird auf dessen Beitrag zur Erreichung des Geschäftsprozesses überprüft. Solche Prozesse, die nicht wertschöpfend oder nicht auf Erreichen des (eines) Unternehmensziels ausgerichtet sind, sind aus dem Geschäftsprozess zu eliminieren. Unternehmensexterne Faktoren: gesetzliche, ökonomische, technische, soziokulturelle oder ökologische Umweltbedingungen, die von außen auf das Unternehmen wirken, sind zumeist vorgegeben und können nicht geändert, vorgegeben oder definiert werden. Teilprozesse (hier: p1 bis p5) stellen die Teileinheiten des Geschäftsprozesses dar, die zusammengefügt den Geschäftsprozess ergeben und miteinander in Beziehung stehen. Ein Geschäftsprozess kann durch einen endlichen Automaten grafisch dargestellt werden. 2.3Merkmale von Geschäftsprozessen Ein Geschäftsprozess: ist inhaltlich geschlossen und kann deshalb bis zu einem gewissen Grade von anderen Betriebsvorgängen und -prozessen getrennt betrachtet werden. hat immer einen definierten Anfang und ein definiertes Ende. ist zielorientiert, sein Ende wird durch das Erreichen des Zieles definiert. Bei zentralen Prozessen ist dies meist ein Ergebnis von Wert für den Kunden. beinhaltet sämtliche Faktoren, die für das Erreichen eines Zieles von Bedeutung sind: Personal Material Qualität Durchlaufzeiten Kommunikation IT Organisation wird meist durch einen externen Auslöser gestartet (z. B.: Kundenanfrage)

39 Seite 31 kann aus Teilprozessen bestehen, die parallel oder nacheinander ablaufen und kann Input aus anderen Prozessen erhalten bzw. Output an andere Prozesse weitergeben. ist meist abteilungsübergreifend kann unter anderem Kunden, Lieferanten usw.. mit einbeziehen kann sowohl sehr kurz als auch extrem langlaufend sein (Monate oder Jahre) ist dynamisch und muss permanent den sich verändernden Bedingungen angepassen. Dadurch ist er einem ständigen Zyklus der Veränderung und Verbesserung unterworfen. Geschäftsprozesse sollen: sicher ablaufen, d. h. ein Geschäftsprozess ist so zu gestalten, dass er in der Wiederholung das gleiche Ergebnis mit dem gleichen Aufwand liefert. wirtschaftlich ablaufen, d. h. das Ergebnis soll mit möglichst geringen Kosten erreicht werden. effizient ablaufen, d. h. sie sollen möglichst wenig Ressourcen verbrauchen, um das Ergebnis zu erreichen. schnell ablaufen, d.h. das Ergebnis in möglichst kurzer Zeit erbringen. 2.4Geschäftsprozesstypen In einem Unternehmen können Geschäftsprozesse laut [Osterloh / Frost (1996)] grob in zwei Kategorien unterteilt werden. Zum einen die Kernprozesse, die direkt zur Wertschöpfung beitragen und zum anderen Supportprozesse, die diese Kernprozesse unterstützen, dabei jedoch nicht zwingend wertschöpfend sind. Kernprozesse: spiegeln die Kernkompetenz wieder schaffen unmittelbaren Wert für den Kunden helfen, das Unternehmensziel zu erreichen

40 Seite 32 Supportprozesse: sind nicht unmittelbar wertschöpfend schaffen Voraussetzung, dass wertschöpfende Prozesse stattfinden können Kreuz (1997) nimmt eine Unterteilung der Geschäftsprozesse in zwei Dimensionen vor. Einerseits Geschäftsprozesse mit Auswirkungen auf den Unternehmenserfolg, andererseits nach dem Nutzen für den Kunden. Das Vier-Felderportfolio unterscheidet vier Prozesstypen: Prozesse mit Hebelwirkung Schlüsselprozesse Unterstützende Prozesse Opportunistische Prozesse Abbildung 3-8: Typisierung nach Kreuz [KRE01] 2.5Geschäftsprozesse der Dresdner Bank Luxembourg Nachdem der Begriff des Geschäftsprozesses ausführlich erklärt wurde, wird in diesem Abschnitt geklärt, welche Geschäftsprozesse bei der Dresdner Bank Luxembourg existieren. Folgende Geschäftsprozesse seien beispielhaft genannt: Wertpapierstammdatenversorgungsprozess Wertpapierorder Preisprozess usw

41 Seite 33 3Das Portal 3.1Definition Ein Portal ist der durch architektonische Gliederung oder plastischen Schmuck hervorgehobene Eingang von Tempeln, Kirchen, Palästen u. ä. [WEB23] Übertragen auf die allgemeine Nutzung des Begriffes Portal im Internet kann man sagen, dass der Begriff Portal den Zugang zu Informationen, Daten und Prozessen und mithin auch Kommunikation über eine einzelne Internetadresse bedeutet. 3.2Historische Entwicklung Die Menge an Informationen und Datenmaterial, bedingt durch die steigende Verbreitung und Nutzung des Internets, erreichte schnell eine Komplexität, die viele Nutzer überforderte. Die Folge war eine zentrale und übersichtliche Strukturierung. Als Einstiegsseite ins Internet entstanden die so genannten Portale, die in Themenbereiche gegliedert und mit Suchfunktionen ausgestattet waren. Dies verschaffte dem Nutzer eine erleichterte Orientierung und Navigation. Als BeispielEinstiegsseiten seien hier AOL oder Yahoo genannt. Die von den oben genannten Einstiegsseiten gebotene Erleichterung der Orientierung und Navigation reichte aber durch das weiterhin exponentielle Wachstum von Daten und Informationen des Internets wenig später nicht mehr aus. Die Folge war eine Personalisierung der Seiten. Eine Benutzer-/Rechteverwaltung wurde in das Angebot der Portale integriert. Diese Form der Darstellung wurde von den Unternehmen übernommen, indem sie die gedruckten Broschüren auf den Unternehmens-Web-Seiten den Interessenten wie Kunden, Lieferanten usw. in digitaler Form anboten. Den Mitarbeitern wurden ebenfalls im so genannten Intranet Informationen zur Verfügung gestellt. Diese Informationen reichten von Organigrammen über interne Formulare bis hin zu Speiseplänen der Kantine. Die im Intranet erreichbaren Seiten waren jedoch statisch und wurden zentral und manuell gepflegt. Aber auch die Web-Seiten der Unternehmen wurden immer anspruchsvoller, da neue Informationen wie z. B. die Personalisierung der Seiten, der Zugriff auf benutzerspezifische Inhalte, dezentrale Inhaltserstellung oder Unterstützung von Geschäftsprozessen hinzu kamen. Man kann sagen, dass sich die Interpretation der Portaldefinition von der einfachen Einstiegsseite hin zur multiplen Unternehmensanwendung veränderte. Die Einbindung und Integration der Portale in die Back-End-Systeme garantiert einen durchgängigen Prozessfluss und ist ein Musskriterium für ein Portal. [WEB28]

42 Seite Das Unternehmensportal Das Portal ist die logische Weiterentwicklung bestehender Technologien. Zu diesen Technologien zählen Unternehmens-Web-Seiten, das Intranet und das Extranet. [WEB28] 3.3.1Definition und Abgrenzung Die Web-Seite eines Unternehmens wurde lediglich zur Präsentation und Darstellung des Unternehmens selbst sowie dessen Produkte genutzt. Nutzer der Informationen der Web-Seiten waren Kunden, Lieferanten, Bewerber und Partner des Unternehmens. Technisch gesehen basieren die Web-Seiten auf HTML-Seiten bzw. ContentManagement-Systemen. Dadurch kann man z. B. Shop-Systeme realisieren. Eine Kommunikation zwischen verschiedenen Systemen, Anwendungen und Applikationen ist nicht möglich. Zudem ist eine separate Anmeldung der Nutzer erforderlich. Ein Intranet basiert auf den gleichen Technologien wie das Internet. Das Intranet eines Unternehmens kann jedoch nur von einer festgelegten Gruppe von Mitgliedern eines Unternehmens als betriebsinterne Web-Kommunikation genutzt werden. Dazu gehören z. B. Fileserver, Web-Seiten, Chats oder Foren und im Idealfall alle relevanten, betriebsinternen öffentlichen Informationen. Um die vom Intranet angebotenen Anwendungen zu nutzen, ist es aber weiterhin erforderlich, sich separat anzumelden. Das Extranet beruht auf der gleichen Technik wie das Intranet. Auch hier kann nur eine bestimmte, festgelegte Gruppe die Informationen des Extranets nutzen. Nutzer sind Kunden oder Geschäftspartner von Unternehmen. Diese können im Gegensatz zur Konkurrenz u. a. Beschreibungen von Produkten oder Preislisten einsehen. Technisch gesehen ist das Portal eine webbasierte Anwendung, die mittels eines Internet-Browsers sämtliche Informationen und Applikationen eines Unternehmens auf einer gemeinsamen und einheitlichen Oberfläche bündelt und allen Mitarbeitern personalisiert zur Verfügung stellt. Als wesentliches Merkmal kommt die Prozessorientierung hinzu. Portale beziehen alle Funktionsbereiche des Unternehmens ein und werden zukünftig das universelle Online-Arbeitsmittel für ein Unternehmen sein. Portale stellen zentrale Dienste (zum Beispiel: security, performance, modernes homogenes Layout, Multi-Channel-Fähigkeit etc.) bereit. Eine Web-Applikation hingegen ist nur ein Teil davon. Durch Single-Sign-On ist es nicht mehr notwendig, sich immer wieder manuell neu an den an das Portal angeschlossenen Anwendungen und Applikationen anzumelden. Single-Sign-On bedeutet, dass der Nutzer nach einer einmaligen Anmeldung auf alle Rechner und Dienste, für die er berechtigt ist, zugreifen kann. Er muss sich nicht jedes Mal erneut anmelden

43 Seite 35 Ein Portal fungiert jederzeit und überall als Tor zur internen und externen OnlineDatenwelt für jeden Mitarbeiter, Kunden, Lieferanten oder am Unternehmen interessierten Nutzer. Dadurch wird die Verfügbarkeit und Erreichbarkeit wesentlich erhöht. In absehbarer Zeit werden die Anwendungen eines Portals auch auf anderen Endgeräten zur Verfügung gestellt (Pocket PC s, Smart Phones etc.). [WEB28] 3.3.2Klassifizierung Unternehmensportale kann man hinsichtlich ihrer Zielgruppe und den davon abhängigen Inhalten und Prozessen unterscheiden. Geschäftskunden, Mitarbeiter, Lieferanten und Endkunden sind die vier Zielgruppen. Das primäre Ziel von jedem Portal ist es, für jede Zielgruppe die relevanten Prozesse zwischen Unternehmer und Nutzer anzubieten. Die nutzerspezifischen Prozesse werden anhand der vorhandenen unternehmensinternen Prozesse und Anwendungen realisiert und ergeben für den Nutzer eine zielgruppenorientierte Schnittstelle. Abbildung 3-9: Klassifikation von Unternehmensportalen [WEB28] Geschäftskundenportale unterstützen in erster Linie die zwischenbetrieblichen Geschäftsprozesse zwischen dem Unternehmen und den Endkunden. Das Hauptaugenmerk liegt hier auf den Marketing-, Vertriebs- und Serviceprozessen. Ein Lieferantenportal stellt u. a. Kataloge und Lieferanteninformationen für das Unternehmen bereit. Des Weiteren werden die Prozesse der Angebotsabgabe, der Leistungsannahme und der Rechnungserstellung abgewickelt. Das Endkundenportal stellt Marketing-, Vertriebs- und Serviceprozesse für den Endkunden bereit. Als letzte Portalform bleibt das Mitarbeiterportal übrig. Es bildet eine Schnittstelle zwischen dem Mitarbeiter und den Prozessen und Systemen des Unternehmens, die er für die tägliche Arbeit benötigt. Die Komplexität eines Mitarbeiterportals kann von

44 Seite 36 Unterstützung des Mitarbeiters bis zum Workplace reichen, der das einzige Werkzeug für die Arbeit des Mitarbeiters darstellt. [WEB28] Das in dieser Diplomarbeit zu erarbeitende Portal wird ebenfalls ein Mitarbeiterportal sein, weil es ausschließlich von Angestellten eines Unternehmens genutzt wird. Da es sich hauptsächlich um die Geschäftsprozesse der Dresdner Bank Luxembourg S.A. handelt, trägt die Arbeit den Namen Aufbau eines Prozess-Portals. 3.4Anforderungen an das Prozess-Portal der Dresdner Bank Luxembourg S.A. Basisdienste, die ein Portal allgemein bieten muss, sind Layout- und Strukturmanagement, Rechte- und Benutzerverwaltung sowie Single-Sign-On [WEB28]. Im Layoutmanagement wird die Zusammenstellung der Anwendungen und die Ausgabe auf den entsprechenden Endgeräten des Portalnutzers festgelegt (Farbschemata, Platzierung der einzelnen Komponenten, grafische Elemente wie zum Beispiel Bilder). Das Strukturmanagement ist für den strukturellen Aufbau und die Navigierbarkeit des Portals zuständig. Hier wird definiert, an welcher Stelle des Portals Anwendungen platziert sind. Weitergehend wird ebenso festgelegt, welche Anwendungen fix definiert oder durch den Nutzer frei konfigurierbar sind. Des Weiteren muss das fertige Programm eine Benutzer- und Rechteverwaltung enthalten. Nicht jedem User soll es erlaubt sein, alle Zustände und Ansichten der Prozesse zu verfolgen und einzusehen. Genau hier liegt die Abgrenzung zum Intranet. Ein Mitarbeiter hat zum Intranet keinen personalisierten Zugang. Daher wird die Struktur der Information nur bedingt angepasst. Da jeder Mitarbeiter aber eine eigene, durch seine Aufgaben bestimmte Sicht auf das Unternehmen und daher auch auf sein Portal hat, kann es keine feste Struktur geben, die allen Mitarbeitern gerecht wird. Die Hauptfunktion des Portals stellt die Suchfunktion dar. Der Nutzer soll in der Lage sein, nach einzelnen Geschäftsprozessen und Instanzen von Prozessen zu suchen. Die Suche soll der Top-Down-Methode entsprechen. Dies bedeutet, der Benutzer klickt sich von einem Hauptprozess zu den Unterprozessen durch. In einer Suchmaske hat er dann die Möglichkeit seine Suche des gewählten Prozesses einzuschränken. Als Suchkriterien sind die Auswahl des Prozesszustandes, die zeitliche Eingrenzung und die Indexfelder eines Unterprozesses zu nennen. Nach Auswahl der Suchkriterien soll dem Benutzer das Ergebnis der Suche mit den wichtigsten Daten des Prozesszustandes angezeigt werden. Über einen Link hat er die Wahl, zu einer detaillierten Ansicht der Daten oder zu einer Visualisierung des Prozesszustandes zu gelangen

45 Seite 37 Um die Daten und Informationen zu halten, wird eine Datenbank benötigt. Zur Verwaltung der Datenbanktabellen soll das Prozess-Portal ein konfigurierbares WebInterface enthalten. Der berechtigte Benutzer hat dann die Möglichkeit über den Browser, den Inhalt der Tabellen einzusehen und Daten hinzuzufügen, zu löschen oder zu aktualisieren. Eine besonders wichtige Funktion des Prozess-Portals soll eine ansprechende, grafische Visualisierung der Zustände der Geschäftsprozesse sein. Der Nutzer soll die Möglichkeit haben, in Prozesse hineinzuklicken und sich mehrere Ebenen eines Gesamtprozesses nach und nach anzeigen zu lassen. Als weitere Anforderung wurde festgelegt, dass das Prozess-Portal ausschließlich unter Verwendung von kostenloser Software entwickelt werden soll. Das Entwickeln mit Open Source-Software hat des Weiteren auch den Vorteil, herstellerunabhängig zu sein. Die einzige Ausnahme bildet die Datenbanksoftware Oracle, die in der Dresdner Bank genutzt wird

46 Seite 38 4.Entwurf 1Datenbankdesign Die Aufgabe des Datenbankentwurfs ist der Entwurf der logischen und physischen Struktur einer Datenbank, so dass die Informationsbedürfnisse der Benutzer in einer Organisation für bestimmte Anwendungen adäquat befriedigt werden können. 1.1Das Entity-Relationship-Modell Um den logischen und inhaltlichen Zusammenhang zu veranschaulichen, wird eine grafische Darstellungsweise gewählt, das Entity-Relationship-Modell (ER-Modell). Zuerst wird der zu betrachtende Sachverhalt in Dinge (Entitäten) und deren Beziehungen modelliert. Anschließend können Dinge und Beziehungen mit Attributen versehen werden Notation des ER-Modells Für den Entwurf eines ER-Modells existieren verschiedene Möglichkeiten der grafischen Darstellung. Da jeder Leser dieses Modell verstehen soll, wird die in dieser Arbeit verwendete Notation beschrieben und erläutert. Für die Erstellung des ER-Modells wurde das Programm Visio 2000 von Microsoft verwendet. Eine Entitätsmenge wird durch ein Rechteck dargestellt. Der Name des Entität wird über dem Rechteck aufgeführt. Es wird zwischen beschreibenden und identifizierenden Attributen unterschieden. Ein Schlüssel kann aus einem oder mehreren Attributen zusammengesetzt sein. Er ist aber immer eine minimale, identifizierende Attributkombination. Im Rechteck oberhalb des teilenden Striches findet man das identifizierende Attribut der Tabelle. Darunter sind die übrigen Attribute aufgelistet. Abbildung 4-10: Entitätsmenge mit Attributen

47 Seite 39 In dieser Notation wird eine Assoziation durch eine Linie dargestellt. In der Mitte der Linie befinden sich die Beschreibungen der Assoziation. Kardinalitäten werden durch eine Zahl bzw. einen Buchstaben spezifiziert und an den Enden der Linien platziert, die die beteiligten Entitätsmengen verbinden. 1:1-Assoziation: Jede Entität aus A ist mit genau einer Entität aus B verbunden und umgekehrt. 1:N-Assoziation: Jede Entität aus A ist mit einer oder mehreren Entitäten aus B verknüpft und jede Entität aus B ist genau mit einer Entität aus A verbunden. N:M-Assoziation: Zu einer Entität aus A gibt es eine oder mehrere Entitäten aus B und umgekehrt. Abbildung 4-11: Mögliche Kardinalitäten In den bisherigen Beispielen muss immer eine Beziehung zwischen zwei Entitäten bestehen. Dies ist aber nicht immer erforderlich. In solchen Fällen spricht man nicht von einer Muss-Beziehung, sondern von einer Kann-Beziehung. Auch hier gibt es drei mögliche Mengenverhältnisse. 1:C-Assoziation: Zu jeder Entität A gibt es eine oder auch keine Entität in B. Zu jeder Entität aus B muss es aber eine Entität aus A geben. 1:MC-Assoziation: Zu jeder Entität in A gibt es keine, eine oder mehrere Entitäten in B. Zu jeder Entität aus B muss es aber eine Entität aus B geben

48 Seite 40 N:MC-Assoziation: Zu jeder Entität in A gibt es keine, eine oder mehrere Entitäten in B. Hier muss es zu jeder Entität aus B jedoch N Entitäten aus A geben. Zwischen zwei Entitätsmengen Kardinalitäten. [BAL01] ergeben sich insgesamt 16 verschiedene Abbildung 4-12: 16 mögliche Kardinalitäten [BAL01] Des Weiteren kann eine Entität rekursive Assoziationen und Rollen enthalten. Auf diese Art der Darstellung wird verzichtet, da sie nicht in dieser Arbeit verwendet worden ist Entwurf des ER-Modells Die erforderlichen Daten für die Realisierung des Prozess-Portals können in zwei Bereiche eingeteilt werden. Zum einen gibt es den statischen Teil (grün), welcher sich im Laufe der Zeit selten ändert und somit die Stammdaten der Prozesse enthält, zum anderen den dynamischen Teil (rot), welcher ständig mit neuen Daten gefüllt wird, die im Tagesgeschäft der Dresdner Bank anfallen. Generell gilt für das gesamte ER-Modell, dass die Spalte des Primärschlüssels für alle Entitäten dieselbe Bezeichnung (ID) trägt. Der Vorteil hiervon ist, dass in der späteren Anwendung die Suche nach der Java-Methode des Primärschlüssels der jeweiligen Tabelle vereinfacht wird, um mit den Java-Klassen von Torque auf die Inhalte der Tabelle zugreifen zu können

49 Abbildung 4-13: Entity-Relationship-Modell des Prozess-Portals Seite 41

50 Seite Der statische Bereich Die Entitäten des statischen Bereiches halten alle Daten, die einen Prozess identifizieren oder einem Prozess zugeordnet werden können. Statisch bedeutet hier, dass diese Daten einmalig erfasst, in den Tabellen gespeichert werden und sich nur selten ändern. MainProcess Als Einstieg soll hier die Entität MainProcess dienen. Hier werden alle Namen der Hauptprozesse gespeichert, die sich meistens auf eine Anwendung beschränken, aber auch über mehrere Anwendungen der Dresdner Bank existieren können. SubProcess In der Entität SubProcess werden alle Unterprozesse gehalten, die innerhalb einer Schnittstelle zwischen zwei Anwendungen auftreten können. Weiter liegt eine kurze Beschreibung des Unterprozesses und ein Fremdschlüsselverweis auf die Tabelle ImageSource vor. SubProcess2MainProcess Die Beziehung zwischen den Haupt- und Unterprozessen wird in der Entität SubProcess2MainProcess dargestellt. Man spricht hier von einer assoziierten Tabelle. Dies bedeutet, dass die Tabelle keinen eigenen Primärschlüssel besitzt, sondern sich aus den Fremdschlüsseln der Entitäten MainProcess und SubProcess zusammensetzt. Es soll sicher gestellt sein, dass ein Unterprozess mehreren Hauptprozessen zugeordnet werden kann. Hätte man lediglich einen Fremdschlüssel für den Hauptprozess in der Tabelle SubProcess zugefügt, wäre dies nicht möglich gewesen. ProcessDep Die Entität SubProcess besitzt eine weitere assoziierte Tabelle, welche in der Entität ProcessDep dargestellt ist. Hier werden die Abhängigkeiten definiert, die Unterprozesse untereinander besitzen können. In dieser Tabelle erfolgt ein Eintrag, falls ein Unterprozess einen anderen Unterprozess nach sich zieht. Der Primärschlüssel dieser Tabelle setzt sich aus zwei Fremdschlüsseln der Tabelle SubProcess zusammen. ProcessState Die Entität ProcessState speichert Daten, die einen Zustand eines Unterprozesses definieren. Diese Daten bestehen aus einem Code-Kürzel, einer kurze Beschreibung des Prozesszustandes und einem Fremdschlüsselverweis auf die Tabelle MessageFilter

51 Seite 43 MessageFilter Zu jedem Prozess-Status gibt es einen Filter, welcher in der Tabelle MessageFilter abgelegt ist. Diese Entität besitzt neben dem Primärschlüssel nur eine weitere Spalte Filter. Diese Spalte ist vom Datentyp CLOB, was die Abkürzung für Character Large Objects ist. Ein solcher Datentyp hat die Aufgabe, lange Texte zu speichern. Der Vorteil des CLOB-Datentypen gegenüber einer entsprechend großen Varchar-Spalte liegt in der verbesserten Leistungsfähigkeit. Die Datenbanksysteme bieten für den Zugriff aus der Anwendung heraus auf die Datenbanksystem-LOBs spezielle Verfahren an, so genannte Locator (Querverweise). Ein Locator repräsentiert den Wert eines LOB in einer Anwendung, ohne die Daten zu enthalten. [WEB19] In der CLOB-Spalte der Tabelle werden XSL-Dokumente abgelegt, die benötigt werden, um aus Nachrichten die wichtigen und interessanten Informationen herauszufiltern. StateIndexFields Zu jedem Unterprozess-Status existiert mindestens ein Indexfeld. Die Entität StateIndexFields bildet diese Indexfelder eines Status ab. Neben der Spalte für den Primärschlüssel und den beiden Fremdschlüssel-Spalten für die Tabellen ProcessState und IndexFields gibt es eine weitere Spalte, in welcher der XMLPfad des Indexfeldes gespeichert wird. Dieser Pfad spielt eine wichtige Rolle, um die Indexfelder aus den XML-Dokumenten der Prozesszustände herauszufiltern. IndexFields Die Informationen über die Indexfelder aller Sub-Prozesse in dieser Anwendung sind in der Entität IndexFields hinterlegt. Die Aufgabe dieser Indexfelder ist es, dem Anwender Vorgaben für seine Suche nach Prozessen und Zuständen zu geben. Eine weitere Spalte zur kurzen Beschreibung des Indexfeldes ist ebenfalls vorhanden. ImageSource In der Tabelle ImageSource werden Informationen zu Bilddateien gehalten. Für diesen gibt es neben der Primärschlüsselspalte zwei weitere Spalten für den Namen und Pfad der Bilddatei

52 Seite Der dynamische Bereich Der rote Bereich des ER-Modells stellt den dynamischen Teil der Datenbank dar. Dynamisch heißt in diesem Fall, dass kontinuierlich Daten, die im Tagesgeschäft der Dresdner Bank anfallen, in eine bestimmte Tabelle geschrieben werden. ProcessMessage Die Start-Tabelle des dynamischen Bereiches ist in der Entität ProcessMessage beschrieben. Jede Anwendung der Dresdner Bank wird bei einer Statusänderung eines Prozesses eine Nachricht in XML-Form in dieser Tabelle ablegen. Hierfür ist die Spalte ProcessMessageXML vorgesehen. Sie ist als Datentyp XMLTYPE definiert. Des Weiteren gibt es eine Spalte Statusmeldung eines Prozesses Zuordnung von Prozessen sehr Primärschlüssel generiert und nur kennt. MasterID. Diese Nummer wird bei der ersten vergeben. Diese Spalte ist für die spätere wichtig, da jede Anwendung ihren eigenen den Primärschlüssel der Vorgängeranwendung Um alle Statusnachrichten eines Prozesses zu finden, benötigt man eine von den Anwendungen losgelöste, durchgehend verwendete ID. Dies hätte auch durch eine zweite Tabelle gelöst werden können, in der die Primärschlüssel der einzelnen Anwendungen abgebildet werden. Jeder Eintrag wird zeitlich protokolliert und in der Spalte PMDate festgehalten. Als Einstiegspunkt zum statischen Teil der Datenbank gibt jede Anwendung eine zum Prozess-Status passende MESSAGEFILTERID in der hierfür vorgesehenen Spalte mit. HistoryProcessMessage Die Entität HistoryProcessMessage ProcessMessage dar. stellt eine Kopie der Entität Der Grund hierfür ist ein auf der Tabelle ProcessMessage lauschender Trigger, welcher effizienter in einer Tabelle mit wenigen Datensätzen arbeitet. Um dies zu erreichen, kopiert er einen neuen Datensatz aus der Tabelle ProcessMessage in die Tabelle HistoryProcessMessage und löscht anschließend den Datensatz aus der Ursprungstabelle. Was man unter einem Trigger versteht und wie er arbeitet, wird später erläutert. ProcessStructuredMessage Die nächste Entität ProcessStructuredMessage besitzt dieselben Spalten und Datentypen wie die Entität ProcessMessage. In der Spalte StructuredMessage

53 Seite 45 wird jedoch ein XML-Dokument abgelegt, aus dem die uninteressanten Tags herausgefiltert wurden. ProcessIndexFieldValues Die Tabelle ProcessIndexFieldValues ist die zentrale Stelle, welche die relevanten Daten der Prozess-Stati bereithält. Für jedes Indexfeld eines ProzessZustandes existiert ein Datensatz, der aus einem Primärschlüssel, der MasterID, dem Fremdschlüssel zur Tabelle StateIndexFields und dem Wert des Indexfeldes, der aus dem XML-Dokument der Zustandsänderung des Prozesses herausgefiltert wurde

54 Seite 46 5.Implementierung 1Die Datenbank Als erstes wird das ER-Modell in ein Relationenmodell überführt. Das Aufsetzen und Einrichten der Datenbank anhand des Relationenmodells geschieht mit den Werkzeugen Maven und Torque. Hierfür ist es notwendig, eine Reihe von Dateien zu erstellen bzw. anzupassen. Die Vorgehensweise ist im Anhang näher beschrieben und wird hier nur kurz angedeutet. 1.1Das Relationenmodell Mit Hilfe des ER-Modells kann die grundlegende Struktur einer Datenbank entworfen und visualisiert werden. Um von dieser konzeptionellen zu einer konkreteren Struktur der Datenbank zu gelangen, wird das ER-Modell in ein Relationenmodell überführt. Für jede Entität wird eine Relation definiert. Die Attribute der Entität werden zu Attributen der Relation, wobei das Schlüsselattribut der Entität als Primärschlüssel der Relation dienen kann. Die Beziehungen der Entitäten werden auf verschiedene Art und Weise aufgelöst. 1:1 und 1:n-Beziehungen können durch geeignete Fremdschlüssel aufgelöst werden. Der Fremdschlüssel wird in die Relation eingesetzt, die auf der n-seite der Beziehung steht. Bei 1:1-Beziehungen kann frei gewählt werden. Eine zusätzliche Tabelle wird bei n:m-beziehungen gebildet. Die so genannte Relationentabelle realisiert die n:m-beziehung der verbundenen Entitäten. Die Attribute der ursprünglichen Beziehung werden zu Attributen der Relationentabelle. Die Relationentabelle steht jeweils in einer 1:n-Beziehung zu den beiden Tabellen, die aus den verbundenen Entitäten entstanden ist. Sie erhält deren Primärschlüssel als Fremdschlüssel. Meist wird aus den beiden Fremdschlüsseln der Primärschlüssel der Relationentabelle gebildet Notation des Relationenmodells Da es einige Unterschiede bezüglich der grafischen Darstellung des Relationenmodells gegenüber dem ER-Modell gibt, werden diese nachfolgend kurz erläutert

55 Seite 47 Relationen werden in Rechteckform dargestellt und sind in drei Bereiche unterteilt. Abbildung 5-14: Zwei Relationen Im oberen Bereich findet man den Namen der Relation, im mittleren Bereich die Schlüsselspalte(n), weiterhin Primary-Key-Spalte(n) genannt, und im unteren Bereich die übrigen Spalten der Tabelle. Weiterhin sind der mittlere und der untere Bereich in drei Spalten aufgeteilt. Die linke Spalte trägt ein Kürzel, um welche Art es sich bei der Tabellenspalte handelt. Die mittlere Spalte trägt den Namen der Tabellenspalte und die rechte den Datentypen. Die Primary-Key-Spalte(n) werden mit einem PK gekennzeichnet, der Text wird fett geschrieben und der Spaltenname ist unterstrichen. Liegt eine Beziehung einer Spalte zu einer Spalte einer anderen Tabelle vor, wird diese Spalte mit einem FKx gekennzeichnet, wobei das x für eine fortlaufende Zahl steht und die Zählung bei eins beginnt. Spalten, die nicht leer sein dürfen, werden in fetter Schrift dargestellt. Weiterhin erfolgt die Bezeichnung der Fremdschlüssel-Spalten durch Großbuchstaben. Durch einen Unique-Key-Constraint, die Spalte ist mit Ux gekennzeichnet, wird sichergestellt, dass die Werte dieser Spalte eindeutig sind und auch bleiben. NullWerte sind hier erlaubt. Beziehungen zwischen zwei Relationen werden mit Hilfe von Linien dargestellt. Eine Beziehung bedeutet hier, dass ein Zusammenhang zwischen zwei Relationen

56 Seite 48 besteht. Die Kardinalität beschreibt die Komplexität oder den Grad einer Beziehung in einer relationalen Datenbank zwischen zwei Relationen. Anders ausgedrückt: die Kardinalität definiert, wie viele Instanzen eines Relationen-Typs an einer Beziehung teilnehmen. Abbildung 5-15: Relationenmodell des Prozess-Portals

57 Seite Qualitätssicherung der Daten Um die Widerspruchsfreiheit in einer Datenbank zu gewährleisten, sind der Datenbank einige Konstrukte hinzugefügt worden, die in den nachfolgenden Unterkapiteln erläutert werden. Man spricht von Widerspruchsfreiheit in einer Datenbank, wenn die Inhalte der Datenbank alle vordefinierten Konsistenzbedingungen erfüllen. [WEB05] Sequences, Id-Broker Eine Bedingung für eine konsistente Datenbank ist es, keine doppelten Primärschlüssel zu beinhalten. Die Vergabe von Primärschlüsseln ist sehr wichtig, weil sichergestellt wird, dass in einem Mehrbenutzerbetrieb, eindeutige Identifikatoren erzeugt werden. Zum Erzeugen des Primärschlüssels wird in allen Tabellen dieser Arbeit entweder eine Sequence in der Datenbank verwendet oder es wird auf den von Torque bereitgestellten Mechanismus Id-Broker zurückgegriffen. Mit Hilfe einer Sequence wird ein interner Zähler für die jeweilige Tabelle generiert. Der Startpunkt des Zählers kann individuell festgelegt werden. Der Zähler wird bei jedem Einfügen eines Datensatzes um eins weiter gezählt. Die Funktion nextval(seq_name) übernimmt das Inkrementieren. Der Id-Broker von Torque verhält sich ähnlich wie die Sequence. Ein Unterschied ist die Speicherung des nächsten Primärschlüssels der jeweiligen Tabelle. Für den Id-Broker existiert für diesen Zweck eine eigene Tabelle id_table, in der ein Eintrag existieren muss, um die entsprechende Tabelle für den Id-Broker zu initialisieren Constraints Um Benutzereingaben vor dem Speichern in die Datenbank auf Fehlerfreiheit zu prüfen, werden in den Tabellen Bedingungen und Kontrollmechanismen definiert, so genannte Constraints. Mit Hilfe dieser Constraints wird auf Datenbankebene unabhängig von der Applikation die Gültigkeit der Regeln erzwungen. Der Primary_Key-Constraint legt automatisch die Eigenschaften eines Primärschlüssels fest. Die Werte dieser Spalte dürfen nicht null und müssen eindeutig (unique) sein. Primärschlüsselspalten sind im Relationenmodell mit pk gekennzeichnet. Aber auch andere Spalten der Tabelle können Regeln besitzen, die abgeprüft und eingehalten werden müssen

58 Seite 50 Spalten mit Datensätzen, welche eindeutig sein müssen, werden mit einem Unique_Key-Constraint versehen. Diese Spalten sind im Relationenmodell mit uk gekennzeichnet. Mit der Übernahme eines Primärschlüssels in eine andere Tabelle wird eine Beziehung zwischen den beteiligten Relationen hergestellt. Um die Konsistenz dieser Daten zu wahren, besitzt jede Relation, die über einen Fremdschlüssel verfügt, einen Foreign_Key-Constraint. Dadurch wird sichergestellt, dass keine Daten gelöscht werden können, auf die aus einer anderen Tabelle verwiesen wird. Foreign_Key-Constraints sind im Relationenmodell mit FKx versehen, wobei das x zur Nummerierung dient. Des Weiteren gibt es noch den Check-Constraint, welcher Datensätze nach definierten Bedingungen überprüft. Nicht direkt zu den Constraints zählen die Spalteneigenschaften not null und default Trigger Ein Trigger (Datenbanktrigger) ist ein in der Datenbank gespeichertes Programm, welches vor oder nach Änderungen (INSERT, UPDATE, DELETE) einer Tabelle aufgerufen wird. Der Trigger erlaubt oder verhindert die Änderungen und/oder nimmt weitere Tätigkeiten vor. [WEB05] Trigger PROCESSMESSAGE_INSERT_TR Dieser Trigger wird nach dem Einfügen eines Datensatzes in die Tabelle ProcessMessage aufgerufen. Der Trigger hat folgende Aufgaben zu erfüllen: einen neuen Eintrag der Tabelle ProcessMessage in die Tabelle HistoryProcessMessage kopieren einen passenden XSL-Filter (CLOB) aus der Tabelle MessageFilter laden den XSL-Filter in einen XML-Datenypen wandeln den gewandelten Filter über einen neuen Eintrag (XML-Datentyp) der Spalte processmessagexml der Tabelle ProcessMessage legen und das Ergebnis (XML-Datentyp) der Transformation als neuen Eintrag in der Tabelle ProcessStructuredMessage abspeichern die strukturierte Nachricht mit Hilfe eines Cursors in einzelne Datensätze zerlegen, wobei ein Datensatz pro Indexfeld erzeugt wird. jeden Datensatz in der Tabelle ProcessIndexFieldValues abspeichern

59 Seite 51 DECLARE xml_old XMLTYPE; xsl_clob CLOB; xsl_xml XMLTYPE; xml_new XMLTYPE; rowcounter NUMBER := 0; tr_processmessageid PROCESSMESSAGE.ID%TYPE; tr_processmessagemasterid PROCESSMESSAGE.MASTERID%TYPE; tr_messagefilterid PROCESSMESSAGE.MESSAGEFILTERID%TYPE; tr_indexfieldvalue PROCESSINDEXFIELDVALUES.INDEXFIELDVALUE%TYPE; tr_stateindexfieldpath STATEINDEXFIELDS.STATEINDEXFIELDPATH%TYPE; tr_stateindexfieldsid STATEINDEXFIELDS.ID%TYPE; tr_processstructuredmessageid PROCESSSTRUCTUREDMESSAGE.ID%TYPE; CURSOR c1 (mf_id PROCESSMESSAGE.MESSAGEFILTERID%TYPE) IS SELECT sif.id, sif.stateindexfieldpath FROM messagefilter mf, stateindexfields sif, processstate ps WHERE ( (mf.id = ps.messagefilterid) AND (ps.id = sif.processstateid) AND (mf.id = mf_id) ); Code 2: "Declare"-Teil des Triggers PROCESSMESSAGE_INSERT_TR Um die Aufgaben des Triggers zu realisieren sind einige Initialisierungen von Variablen und ein Cursor nötig. Der Cursor liest alle zu diesem Prozess gehörenden Indexfelder in der Tabelle StateIndexFields aus und speichert diese. BEGIN xml_old := :new.processmessagexml; tr_processmessageid := :new.id; tr_messagefilterid := :new.messagefilterid; tr_processmessagemasterid := :new.masterid; SELECT filter INTO xsl_clob FROM messagefilter WHERE id = tr_messagefilterid; Zuerst erfolgen einige Wertzuweisungen an die vorher definierten Variablen. Anschließend wird der für den Prozess passende XSL-Filter ausgelesen und in einer entsprechenden Variablen abgelegt

60 Seite 52 xsl_xml := XMLTYPE.createXML(xsl_clob); xml_new := xml_old.transform(xsl_xml); select processstructuredmessage_seq.nextval into tr_processstructuredmessageid from dual; In diesem Teil wird der XSL-Filter, welcher als CLOB-Datentyp in der Datenbank gespeichert ist, mittels der SQL-Funktion createxml in einen XML-Datentyp umgewandelt, um anschließend mit einer weiteren SQL-Funktion transform die XML-Transformation auf dem alten XML-Dokument auszuführen. INSERT INTO HISTORYPROCESSMESSAGE (ID, MASTERID, PROCESSMESSAGEXML, PMDATE, MESSAGEFILTERID) VALUES (:new.id, :new.masterid, :new.processmessagexml, :new.pmdate, :new. MESSAGEFILTERID); Der neue Eintrag der Tabelle HistoryProcessMessage kopiert. ProcessMessage wird in die Tabelle INSERT INTO PROCESSSTRUCTUREDMESSAGE (ID, MASTERID, STRUCTUREDMESSAGE, PSMDATE, PROCESSMESSAGEID) VALUES (tr_processstructuredmessageid, tr_processmessagemasterid, xml_new, sysdate, tr_processmessageid); Der gefilterte, jetzt strukturierte Eintrag ProcessStructuredMessage eingetragen wird in die Tabelle

61 Seite 53 OPEN c1(tr_messagefilterid); LOOP FETCH c1 INTO tr_stateindexfieldsid, tr_stateindexfieldpath; EXIT WHEN c1%notfound; rowcounter := rowcounter + 1; select extractvalue(xml_new, (tr_stateindexfieldpath)) into tr_indexfieldvalue from dual; INSERT INTO PROCESSINDEXFIELDVALUES ( ID, MASTERID, PROCSTRUCMESSAGEID, STATEINDEXFIELDSID, INDEXFIELDVALUE) VALUES ( PROCESSINDEXFIELDVALUES_SEQ.nextVal, tr_processmessagemasterid, tr_processstructuredmessageid, tr_stateindexfieldsid, tr_indexfieldvalue); END LOOP; CLOSE c1; EXCEPTION WHEN OTHERS THEN raise_application_error (-20102, 'Exception occurred in processmessage_insert_tr: ' SQLERRM); END processmessage_insert_tr; Code 3: Hauptteil des Triggers PROCESSMESSAGE_INSERT_TR Der Cursor c1 wird initialisiert. In einer Schleife werden die Ergebnisse in entsprechende Variablen gespeichert. Anschließend wird durch Selektion der Funktion extractvalue für jedes Cursor-Ergebnis der Wert eines Indexfeldes des Prozesses aus der gefilterten, neuen XML-Datei ermittelt. Als letztes wird dieser Wert mit einigen anderen Informationen als neuer Datensatz in der Tabelle ProcessIndexFieldValues abgespeichert. Nach Beendigung des Triggers liegt in der Tabelle ProcessIndexFieldValues für jedes Indexfeld eines Prozesses ein Eintrag vor. Die Indexfelder stellen die Hauptsuchfelder für das Prozess-Portal dar. Trigger HISTORYPROCESSMESSAGE_INSERT_TR Dieser Trigger ist so implementiert, dass er nach einem Eintrag in der Tabelle HistoryProcessMessage den Eintrag mit der gleichen ID in der Tabelle ProcessMessage löscht

62 Seite Dynamische Generierung von SVG-Grafiken Die dynamische Generierung von SVG-Grafiken kann auf unterschiedliche Weise realisiert werden. Zwei Möglichkeiten wurden im Rahmen der Diplomarbeit untersucht. Die erste Möglichkeit, die getestet wurde, besteht aus einer Transformation eines XML-Dokuments für einen bestimmten Sub-Prozess mit einem XSL-Stylesheet in eine SVG-Datei. Die zweite Möglichkeit zur dynamischen Generierung von SVG-Grafiken nutzt die XML-Fähigkeit einer Oracle-Datenbank. Hierzu wurde eine Prozedur getprocessimage in der Datenbank gespeichert, die im Folgenden erklärt wird. Procedure getprocessimage( xstart IN NUMBER, ystart IN NUMBER, xwidth IN NUMBER, yheight IN NUMBER, svgimage OUT CLOB ) Code 4: Procedure getprocessimage Die Prozedur bekommt x- und y-koordinaten sowie Breite und Höhe als Parameter mit, die die Grafik in einer JPEG-Datei positionieren. Der Parameter svgimage stellt das Ergebnis der Prozedur zur weiteren Verwendung in der Applikation zur Verfügung. Innerhalb der Prozedur getprocessimage werden eine Funktion und eine weitere Prozedur aufgerufen. Als Erstes wird die Prozedur Procedure getfilllevel( inlevel IN NUMBER, intargetid IN NUMBER, xval IN NUMBER, xwidth IN NUMBER, yheight IN NUMBER ) Code 5: Procedure getfilllevel aufgerufen. Sie führt eine rekursive Ermittlung der Prozess-Knotenpunkte durch. Hierzu wird ein Cursor mit einem select-statements initialisiert. Das selectstatement verarbeitet die Parameter der Prozedur und wird über die Tabelle ProcessDep abgesetzt. In dieser Tabelle sind die Abhängigkeiten eines SubProzesses beschrieben. In einer Schleife werden die Ergebnisse des select-statements in einer temporären Tabelle TempProcessDep abgespeichert. Auf diese Tabelle kann während des Prozedur-Aufrufs getprocessimage zugegriffen werden

63 Seite 55 Nachdem die Prozedur getfilllevel abgearbeitet ist, kommt es zum Aufruf der Funktion getnextlevel( inlevel IN NUMBER, intargetid IN NUMBER, xval IN NUMBER, xwidth IN NUMBER, yheight IN NUMBER ) return XMLTYPE Code 6: Funktion getnextlevel Der Rückgabewert dieser Funktion vom Typ XMLTYPE wird in der Rückgabevariablen der Prozedur getprocessimage gespeichert. Ein komplexes select-statement baut unter Verwendung der Oracle-Funktionen SYS_XMLAGG, XMLELEMENT, XMLATTRIBUTES und der temporären Tabelle TempProcessDep das SVG-XML-Dokument auf. SELECT SYS_XMLAGG(XMLELEMENT("g", XMLATTRIBUTES(e.SourceID as "id"), (XMLELEMENT("text", XMLATTRIBUTES( e.xval as "x", e.yval as "y"), s.subprocessname)), (getnextlevel((level+1), e.sourceid, (xwidth*(level+1)), xwidth, yheight)), XMLELEMENT("path", XMLATTRIBUTES('arrow1' as "id", ( SELECT 'M ' p.xval ', ' p.yval ' L ' c.xval ', ' c.yval FROM TempProcessDep p, TempProcessDep c WHERE ((p.sourceid = c.targetid) AND (c.sourceid = e.sourceid) AND ((c.targetid = e.targetid) OR (c.targetid is null and inlevel = 1)))) AS "d"))), xmlformat('svg')) INTO returnvalue FROM TempProcessDep e, subprocess s WHERE (s.id = e.sourceid) AND ((e.targetid = intargetid and LEVEL = inlevel) or (e.targetid is null and LEVEL = inlevel)) Code 7: rekursives select-statement der Funktion getnextlevel Ohne eine Zeile Java-Programmcode, nur durch Verwendung von Prozeduren und Funktionen in einer Datenbank sowie XML-Funktionen einer Oracle-Datenbank wird dynamisch auf Benutzer-Interaktion reagierend ein SVG-Dokument erstellt

64 Seite Projektbezogene Dateien Um die Verbindung zur Datenbank aufbauen zu können, müssen einige Konfigurationsdateien des Projektes angepasst bzw. erweitert werden. Die wichtigste Datei torque.properties befindet sich im Projekt-Ordner conf. Nachfolgend sind die wichtigsten Einträge aufgeführt und kurz erläutert. torque.database.default = portal01 torque.database.portal01.adapter = oracle # SharedPoolDataSourceFactory torque.dsfactory.portal01.factory = org.apache.torque.dsfactory.sharedpooldatasourcefactory torque.dsfactory.portal01.pool.maxactive = 20 torque.dsfactory.portal01.pool.testonborrow = true torque.dsfactory.portal01.pool.validationquery = SELECT 1 FROM DUAL torque.dsfactory.portal01.connection.driver = oracle.jdbc.driver.oracledriver torque.dsfactory.portal01.connection.url = torque.dsfactory.portal01.connection.user = portal01 torque.dsfactory.portal01.connection.password = portal01 Code 8: Beispieleinträge der Datei torque.properties Diese Datei regelt die Laufzeiteigenschaften von Torque und wird nicht zum Erzeugen des Datenbankschemas und der Java-Klassen benötigt. Die Einstellungen definieren Datenbankparameter und steuern das Pooling der Datenbankverbindungen. Ähnliche Einstellungen müssen in den Dateien setup.properties, project.properties und build.properties vorgenommen werden. Anhand des Relationenmodells wird die Datei portal01-schema.xml erstellt. Im Anhang ist diese Datei beispielhaft beschrieben

65 Seite 57 2Die Anwendung Bevor näher auf die Klassen und Dateien der Anwendung eingegangen wird, wird im Folgenden ein Überblick verschafft, die den Aufbau der nächsten Abschnitte betreffen. Zuerst wird ein grafischer Überblick gegeben, wie die Anwendung chronologisch ablaufen kann (Abbildung 5-3). Dann werden Klassen und Dateien näher beschrieben, die über die gesamte Anwendung benutzt werden und nicht zu Turbine und Velocity gehören (Kapitel 5.2.2). Anschließend werden Dateien erklärt, die über die komplette Anwendung hinweg von Turbine und Velocity genutzt werden (Kapitel 5.2.3). Ab Kapitel Sicherheits- und Benutzerkonzept betreffen die Klassenund Dateibeschreibungen nur einzelne Web-Seiten. Wie im Kapitel Grundlagen und Technologien unter Turbine erwähnt, gehören Template-Dateien und Java-Klassen mit gleichem Namen unmittelbar zusammen. Aufgrund dessen erfolgt keine Aufteilung, sondern eine Template-Datei stellt mit der gleichlautenden Java-Klasse ein eigenes Unterkapitel dar. Die Action-Klassen des Sicherheits- und Benutzerkonzeptes (Kapitel 5.2.4) werden einzeln erwähnt. Action-Klassen der Bereiche Dynamische Tabellenverwaltung (Kapitel 5.2.5) und Prozess-Suche (Kapitel 5.2.6) werden in Zusammenhang mit den beteiligten Templates beschrieben

66 Seite Ablaufdiagramm Abbildung 5-16: Ablaufdiagramm des Prozess-Portals Die Abbildung 5-3 zeigt den möglichen Ablauf des Prozess-Portals Die Möglichkeit, zur vorherigen Seite zu gelangen, ist durch einen Zurück-Link realisiert

67 Seite Anwendungsübergreifende Klassen und Dateien 2.2.1SecureScreen.java Turbine stellt ein ausgereiftes Sicherheits- und Benutzerkonzept zur Verfügung. Dem Benutzer können mehrere Rollen in verschiedenen Gruppen zugewiesen werden. Jedem Benutzer, der erfolgreich identifiziert worden ist, wird eine so genannte AccessControlList zugewiesen. Anhand der AccessControlList kann man prüfen, ob der Benutzer das jeweilige Recht oder Rolle besitzt, sich eine Web-Seite anzeigen zu lassen oder nicht. Diese Prüfung erfolgt in jeder Screen- und Actionklasse. Praktischerweise stellt Turbine für diesen Zweck Erweiterungen der Klassen VelocityScreen und VeloctiyAction namens VelocitySecureScreen und VelocitySecureAction zur Verfügung. In den beiden letztgenannten Klassen muss zusätzlich zu den Methoden dobuildtemplate oder doperform in der Actionklasse die abstrakte Methode protected abstract boolean isauthorized(rundata data) überschrieben werden. Falls die Methode false zurückliefert, wird die Screen- bzw. die Action-Klasse nicht ausgeführt. In dieser Arbeit überprüft die Methode lediglich, ob ein Benutzer angemeldet ist, das heißt, dass die AccessControlList nicht null ist. Ist dies der Fall, wird die Login-Seite angezeigt. Da die Klasse SecureScreen die Methode dobuildtemplate als leere Methode implementiert, wird durch die Zeile Services.VelocityService.default.screen = SecureScreen in der Datei TurbineResources.properties die Klasse SecureScreen als Standardscreenklasse gesetzt. Dies hat den Vorteil, dass auch Templates ohne eine zugehörige Screen- oder Action-Klasse trotzdem die Sicherheitsabfrage ausführen, weil in diesem Falle immer noch die Klasse SecureScreen standardmäßig aufgerufen und somit die Sicherheitsabfrage durchgeführt wird

68 Seite Translator.java Die Klasse Translator.java stellt die Funktionalitäten bereit, um die Applikation Prozess-Portal zu internationaliseren. Um zu gewährleisten, dass immer nur ein Objekt der Klasse existiert, ist die Klasse gemäß dem Singleton-Modell entwickelt worden. Ein Singleton besitzt drei Merkmale: eine statische Membervariable ihres eigenen Typs, in dem genau eine Instanz gespeichert wird eine statische Methode getinstance(), mit der auf die Instanz zugegriffen werden kann einen privaten parameterlosen Konstruktor, um zu verhindern, dass andere Klassen durch Anwendung des new-operators eine Instanz erzeugen Damit pro Sprache genau eine Instanz der Klasse existieren kann, ist die Methode getinstance() mit einem Locale-Objekt parametrisiert. Außerdem ist als statische Membervariable eine HashMap vorhanden, die die einzelnen Instanzen speichert. private static Map translator_s = new HashMap(); private ResourceBundle messages; public synchronized static Translator getinstance(locale loc) { Translator selectedtranslator = (Translator) translator_s.get(loc); if(selectedtranslator == null) { selectedtranslator = new Translator(loc); translator_s.put(loc, selectedtranslator); } return selectedtranslator; } Code 9: Singleton-Modell der Klasse Translator.java Im Konstruktor wird einem Objekt der Klasse ResourceBundle der Dateipfad mitgegeben, in dem sich die Properties-Dateien der in dieser Anwendung unterstützten Sprachen befinden. Weiterhin existieren zwei Methoden, um die jeweilige Properties-Datei auszulesen und die richtige Übersetzung als String an die Anwendung zurückzuliefern

69 Seite Language_xx.properties In den Dateinamen ist anstelle des Platzhalters xx die entsprechende, länderspezifische Kennung eingebaut. In dieser Diplomarbeit sind Properties-Dateien für die deutsche (Language_de.properties) und für die englische Sprache (Language_en.properties) vorhanden. In der ganzen Anwendung ist kein einziges, sprachspezifisches Wort in den HTMLCode hineincodiert. Durch einen später beschriebenen Mechanismus wird abhängig von den Browser-Spracheinstellungen des angemeldeten Benutzers der passende Text in den HTML-Code eingefügt PortalData.java Der Klasse PortalData.java kommt zentrale Bedeutung zu. Sie dient als Basis für die Java Reflection, welche hauptsächlich in der dynamischen Tabellenverwaltung des Prozess-Portals genutzt wird. Diese Klasse besitzt einige globale, statische Variablen. In einer Properties-Variable wird der komplette Inhalt der Datei Portal.properties abgelegt. Die longvariable timeoflastmodification_s dient zum Speichern der Zeit der letzten Veränderung der Datei Portal.properties. Ausserdem werden einige java.util.maps deklariert, in denen später die Werte dieser Properties-Datei gespeichert werden. Im Konstruktor der Klasse wird zuerst der Pfad der Datei Portal.properties, welcher in der Datei web.xml hinterlegt ist, in einem String gespeichert. Anschließend wird ein File-Objekt mit Hilfe dieses Strings erstellt. Durch eine ifanweisung wird überprüft, ob die Klassenvariable properties_s gleich null ist oder sich der Wert der long-variable timeoflastmodification_s von dem Speicherdatum der Properties-Datei unterscheidet. Liefert eine der beiden Prüfungen einen positiven Boolean-Wert zurück, erfolgt ein Aufruf der Methode loadconfiguration(string propertiespath). Diese Methode legt ein neues File-Objekt an und lädt dessen Inhalt in die statische Properties-Variable. Anschließend wird die long-variable timeoflastmodification_s aktualisiert und die Maps werden als HashMaps initialisiert. Zum Füllen der HashMaps wird die Methode fillhashmaps() aufgerufen. Der Zweck dieser Methode ist es, die Datei Portal.properties auszulesen und die passenden Werte unter bestimmten Schlüsseln in die entsprechenden HashMaps abzulegen

70 Seite 62 Zuerst wird die Zeile, in der die Tabellennamen aufgeführt sind, in einem String gespeichert. Danach wird dieser String in einen StringTokenizer umgewandelt und als Trennzeichen das Komma definiert. Pro Durchlauf einer while-schleife wird das aktuelle Element in einem String gespeichert. Durch Konkatenation des aktuellen Elements und des Strings.class erhält man den Schlüssel der Properties-Datei, um an den exakten Package-Pfad des class-objektes des aktuellen Elements (Tabellenname) der while-schleife zu gelangen. subprocess.class = lu.dresdner_bank.portal01.db.subprocess Dieser Dateiname inklusive Package-Pfad wird unter dem Schlüssel aktuelles Element (Tabellenname) in der entsprechenden HashMap abgelegt. Durch Konkatenation des durch obige Aktion erhaltenen Dateinamens und des Strings Peer erhält man die entsprechende class-datei der Tabellen-Peer-Klasse, welche ebenfalls unter dem Tabellennamen in einer HashMap abgespeichert wird. Diese Vorgehensweise wird bei den Spaltennamen, den regulären Ausdrücken und dessen Fehlermeldungen fortgesetzt. Zum Schluss enthalten die HashMaps den kompletten Inhalt der Datei Portal.properties. Des Weiteren enthält die Klasse PortalData.java einige Getter-Methoden, um die HashMaps auszulesen. Die Methoden besitzen einen String als Parameter, der in Verbindung mit der Methode get(string key) zum Auslesen der HashMaps dient. Die Get-Methode getmethodnames(string key) liefert zu einer Tabelle ein Method-Array zurück, in dem alle Getter-Methoden für die Spalten dieser Tabelle gespeichert sind. Mit Hilfe dieser Funktionalitäten und Methoden dieser Klasse und der im nächsten Abschnitt erläuterten Datei Portal.properties kann zur Laufzeit nur durch Kenntnis des Tabellennamens eine dynamische Tabellenverwaltung mit einer minimalen Anzahl von Web-Seiten realisiert werden Portal.properties Wie an der Dateiendung.properties schon zu erkennen ist, beinhaltet diese Datei Schlüssel-Wert-Paare. Falls zu einem Schlüssel mehrere Werte gehören, dient das Komma als Trennzeichen. Das erste Paar liefert unter dem Schlüssel dataholders alle Tabellennamen des Prozess-Portal-Schemas. Anschließend ist der Aufbau in dieser Datei für alle Tabellen gleich. Die für die Java Reflection wichtige class-datei der zur Laufzeit ausgewählten Tabelle findet die Anwendung unter dem Schlüssel tabellenname.class

71 Seite 63 Hinter dem Schlüssel tabellenname.fields erfolgt eine Aufzählung der Tabellenspalten. Fremdschlüssel sind der Kenntlichkeit wegen in Grossbuchstaben geschrieben. Der Schlüsselaufbau für die restlichen Tabelleninformationen besteht aus den Tabellennamen, der Spalte und dem jeweiligen Zweck der Zeile. Für jede Spalte gibt es zwei Einträge. Der erste Eintrag wird benötigt, um zur Laufzeit zu bestimmen, welcher reguläre Ausdruck auf den Wert einer Tabellenspalte angewendet werden muss. Reguläre Ausdrücke dienen der Beschreibung von formalen Sprachen. Unter einer formalen Sprache versteht man ein mathematisches Objekt, in diesem Falle eine Menge von Zeichenketten. [WEB05] Beispiel: subprocess.subprocessname.regex=^[\\w\\s]{1,100}$ Das Zeichen ^ vor der eckigen Klammer steht für den Zeilenanfang. Der erste Teil des regulären Ausdrucks (\\w) in den eckigen Klammer bedeutet, dass die Zeichen in der Zeichenkette aus einem Buchstaben, einer Zahl oder dem Unterstrich [a-za-z_0-9] bestehen können. Der zweite Teil (\\s) der eckigen Klammer sagt aus, dass in der Zeichenkette Leerraumzeichen [ \f\n\r\t\v] vorkommen dürfen. Die geschweiften Klammern (hier: {1,100})definieren, dass die Zeichenkette aus mindestens einem bis maximal 100 Zeichen bestehen darf. Das Zeichen $ hinter der schließenden, geschweiften Klammer steht für das Zeilenende. Der zweite Eintrag für eine Tabellenspalte in der Datei Portal.properties wird benötigt, um zur Laufzeit die passende Fehlermeldung aus der sprachspezifischen Properties-Datei zu lesen. dataholders=subprocess subprocess.class=lu.dresdner_bank.portal01.db.subprocess subprocess.fields=subprocessname, subprocessdesc, IMAGESOURCEID subprocess.subprocessname.regex=^[\\w\\s]{1,100}$ subprocess.subprocessname.regex.error=onetohundredcharacters subprocess.subprocessdesc.regex=^[\\w\\s\\p{punct}]{0,100}$ subprocess.subprocessdesc.regex.error=zerotohundredcharacters subprocess.imagesourceid.regex=^[\\w\\s\\p{punct}]{1,255}$ subprocess.imagesourceid.regex.error=oneto255characters Code 10: Beispieleintrag für die Tabelle subprocess in der Datei Portal.properties

72 Seite format.css Cascading Style Sheets verleihen einem gekennzeichneten Abschnitt oder einem Element ein vorher festgelegtes Format. Damit man diese Formatvorlagen in der ganzen Anwendung nutzen kann, sind die Style Sheets in die externe Datei format.css ausgelagert. [WEB30] 2.2.6errorHandling.js Obwohl sich die Verwendung von javascript-code im Prozess-Portal auf wenige Funktionen beschränkt, sind diese konsequenterweise in eine externe Datei ausgelagert. In der Datei errorhandling.js existieren zwei Funktionen, die lediglich überprüfen, wie viele Checkboxen auf einer Web-Seite mit einem Haken versehen worden sind. Die Funktion checkupdate(text) zählt nach dem Drücken des Update-Buttons einer Web-Seite die aktivierten Haken. Ist nicht genau eine Checkbox selektiert, wird ein alert-dialogfenster mit dem der Funktion als Parameter übergebenen Text ausgegeben. Die zweite Funktion checkdelete(text) agiert ähnlich. Nur erscheint nach dem Betätigen des Delete-Buttons ein alert-dialogfenster, wenn weniger als eine Checkbox ausgewählt worden ist. Auch hier enthält das Dialogfenster den Text, welcher der Funktion als Parameter übergeben worden ist

73 Seite Layout und Navigation Durch einen HTTP-Request eines Benutzers, typischerweise ein Browseraufruf, beginnt der so genannte Request-Response-Zyklus von Turbine. Als erstes Modul dieser Kette wird das Page-Modul ausgeführt. Das Page-Modul beinhaltet die nacheinander auszuführenden Module Layout, Screen und Navigation. [FRA01] 2.3.1Default.vm In dieser Velocity-Datei ist die physikalische Struktur der zu erzeugenden HTMLSeite definiert. Unter einer physikalischen Struktur ist der Ablauf von Navigation (Kopf und Fuß der HTML-Seite) und Screen gemeint. Eine Screen ist für den Großteil der Benutzeraktion und Datenanzeige verantwortlich. <html> <head> <title>$page.title</title> <meta http-equiv="content-type" content="text/html; charset=iso " /> <base href="$link.getabsoluteuri()" /> <script type="text/javascript" src="scripts/errorhandling.js"></script> <link rel="stylesheet" media="print" href="http://dblbrain/de/basics/printer.css" /> <link rel="stylesheet" media="screen" href="http://dblbrain/de/basics/screen.css" /> <link rel="stylesheet" type="text/css" href="style/format.css" /> </head> <body> <div id="header"> $navigation.settemplate("/defaulttop.vm") </div> <div id="screen"> $screen_placeholder </div> <div id="footer"> $navigation.settemplate("/defaultbottom.vm") </div> </body> </html> Code 11: Beispiel für das Layout-Modul Default.vm Man kann erkennen, dass in der Datei Default.vm der äußere Rahmen für die darzustellende Seite geschaffen wird. Die bekannten Tags <html>, <head> und <body> sind in gewohnter Reihenfolge implementiert. Im <body>-tag fasst die Layout-Datei Kopf, Hauptscreen und Fuß in Blockelemente (<div>-tags) zusammen. Die Blockelemente sind in der Datei format.css als Stylesheets beschrieben

74 Seite 66 In den <div>-tags header und footer wird das Turbine-Pull-Tool $navigation verwendet, welches dem Page-Modul mitteilt, an welchen Stellen der HTML-Seite ein Template einzufügen ist. Allgemein ausgedrückt sind Pull-Tools Java-Klassen, die gewisse Funktionalitäten bereitstellen und direkt in den Templates zugänglich sind. Diese Templates müssen im navigations-ordner vorhanden sein, damit sie vom Pull-Tool $navigation auch gefunden und geladen werden können. Im <div>-tag screen ist letztendlich nur eine Variable, die aber sehr wichtig ist. Sie legt fest, wo die Screens in die HTML-Seite eingebunden werden DefaultTop.vm / DefaultBottom.vm Die beiden Template-Dateien DefaultTop.vm und DefaultBottom.vm sind in einer Tabellenstruktur zusammengefasst. Besonders interessant ist die Nutzung des data-objektes der Klasse RunData. Für jeden Request-Aufruf des Benutzers existiert immer genau ein RunData-Objekt. In der Template-Datei DefaultTop.vm wird durch die erste #if-anweisung überprüft, ob der Benutzer überhaupt in der Anwendung angemeldet ist. Falls dies nicht der Fall ist, wird keine Menü-Leiste in Link-Form angezeigt. Der Benutzer hat lediglich die Möglichkeit, sich über die eingestellte Startseite (Login.vm) anzumelden. Die Benutzerrechte werden durch die zweite, innere #if-anweisung überprüft. Hat ein Benutzer Admin-Rechte, wird zusätzlich zu den Links der Prozess-Suche und dem Logout der Link für die Tabellenadministration eingefügt. Das Auftauchen der Variable $i18n verwirrt an dieser Stelle noch ein wenig. Sie wird durch die Screen-Klasse des aktuellen Templates initialisiert und in den Kontext gestellt. Da die beiden Template-Dateien DefaultTop.vm und DefaultBottom.vm durch das $navigations-pull-tool in jeder Web-Seite vorhanden sind, kann im Template DefaultTop.vm auf die Variable $i18n zugegriffen werden. Zu dieser Variable folgt später eine detailliertere Erklärung

75 Seite 67 #if($data.getuser().hasloggedin()) <a href="$link.setpage("index.vm")">home </a> #if($data.getacl().hasrole("turbine_root")) <a href="$link.setpage("alltables.vm")"> $i18n.getmessage("tableadministration", null) </a> #end <a href="$link.setpage ("MainProcesses.vm/selectedTable/mainprocess") "> $i18n.getmessage("processsearch", null) </a> <a href="$link.setaction("logoutuser").setpage("login.vm")"> Logout </a> #end Code 12: Auszug aus der Datei "DefaultTop.vm" Der Code der Datei DefaultBottom.vm besteht nur aus HTML-Tags und bedarf keiner weiteren Erklärung

76 Seite Sicherheits- und Benutzerkonzept Wie bereits im Abschnitt Analyse erörtert wurde, zählt das Sicherheits- und Benutzerkonzept zu den grundlegenden Funktionen eines Portals. Ebenfalls wurde im Abschnitt Grundlagen und Technologien schon erwähnt, dass Turbine von vorneherein ein solches Benutzerkonzept zur Verfügung stellt Login.vm / Login.java Abbildung 5-17: Login.vm In der Konfigurationsdatei TurbineResources.properties ist die Web-Seite Login.vm als Startseite des Prozess-Portals festgelegt. Die Screen-Klasse Login.java initialisiert ein Objekt der Klasse Translator.java und stellt es in den Kontext. Dieser Vorgang wiederholt sich in allen Screen-Klassen der Anwendung, da das Objekt zur Internationalisierung der Web-Seiten benötigt wird

77 Seite 69 public void dobuildtemplate(rundata data, Context context) throws Exception { Translator trans = Translator.getInstance(data.getLocale()); } context.put("i18n", trans); Code 13: Java-Code-Auszug aus der Screen-Klasse Login.java Auf dieses Objekt der Klasse Translator.java kann man nun in allen Templates, die zu Login.vm gehören, unter Verwendung des $-Zeichens zugreifen. Des Weiteren kann man mit der Referenz (hier: $i18n) alle Methoden der Klasse Translator.java nutzen. Der Velocity-Code besteht aus einem HTML-Formular. <form method="post" action="$link.setaction("loginuser")"> <table id="centered" border="1"> <tr> #formcell("user" "username" "") </tr> <tr> #formpasswordcell("password" "password" "") </tr> <tr> <td colspan="2"> <input type="submit" name="eventsubmit_doperform" value="login"> </td> </tr> </table> </form> Code 14: Velocity-Code-Auszug aus dem Template Login.vm Zum Ersten wird im Formular-Attribut action ein Link-Pull-Tool genutzt. Dieses PullTool wird zum vereinfachten Aufruf von Turbine-Servlets in Templates genutzt. Durch Methoden wie setpage, setscreen oder setaction kann man den Verlauf einer Anwendung beeinflussen. Im Template Login.vm bewirkt das Link-Pull-Tool den Aufruf der Action-Klasse LoginUser. Zweitens werden in dem Formular Makros benutzt. Makros eignen sich für sich wiederholende Scriptelemente und dienen nur der Zeitersparnis. Zwar wiederholen sich die Textfelder für den Benutzernamen und das Passwort im Prozess-Portal nicht, wurden aber dennoch interessehalber implementiert, um die Funktionsweise von Makros in Velocity zu zeigen. Wie immer gibt es in der Konfigurationsdatei TurbineResources.properties einen entsprechenden Eintrag, um den Ort anzugeben, an dem die Makros gespeichert sind und Turbine nach ihnen suchen muss

78 Seite 70 Der dritte, interessante Aspekt fällt zuerst gar nicht auf. Jedoch ist die Namensgebung eines Formular-Buttons von entscheidender Bedeutung. Damit die passende Methode in der Action-Klasse aufgerufen werden kann, muss der Name des Buttons mit eventsubmit_do beginnen. Anschließend muss ein Großbuchstabe folgen und der Rest des Namens muss klein geschrieben sein Index.vm / Index.java Abbildung 5-18: Index.vm Nach der erfolgreichen Anmeldung auf der Startseite des Prozess-Portals, gelangt man auf die Begrüßungsseite. Auf dieser Seite kann man zum ersten Mal sehen, dass sich die Link-Leiste im Kopf der Anwendung je nach den Rechten des angemeldeten Benutzers anpasst. Im Hauptteil werden allgemeine Informationen angezeigt

79 Seite Error.vm / Error.java Die Fehlerseite Error.vm wird immer dann aufgerufen, wenn auf einer anderen Web-Seite durch eine Interaktion des angemeldeten Benutzers ein Fehler oder ein unlogisches Ergebnis resultiert. Im Hauptfenster dieser Web-Seite wird lediglich die Fehlermeldung in Textform angezeigt. Außerdem hat man die Möglichkeit, über einen Link zur vorherigen Seite zu gelangen Actions LoginUser.java und LogoutUser.java Die Action LoginUser.java wird durch Betätigen des Login-Buttons aufgerufen. In der doperform-methode der Klasse werden die vom Benutzer eingegebenen Daten auf Richtigkeit überprüft. Schlägt diese Überprüfung fehl, erscheint die LoginSeite erneut. Sind die Angaben des Benutzers in der TurbineSecurity-Tabelle korrekt hinterlegt, wird ein User-Objekt initialisiert, welches dem RunData-Objekt der aktuellen Session zugewiesen wird. Das RunData-Objekt wird im Kontext gespeichert und der Benutzer hat sich somit erfolgreich am Prozess-Portal angemeldet. Die Action LogoutUser.java wird durch Anklicken des Logout-Link im Header der Web-Seite aktiviert. In der doperform-methode der Klasse wird das UserObjekt der aktuellen Session geladen, dessen Login-Status auf false gesetzt. Die benutzerspezifischen Daten des RunData-Objektes werden ebenfalls auf null gesetzt und dieses im Kontext gespeichert. Schließlich hat sich der Benutzer erfolgreich abgemeldet und die Login-Seite wird angezeigt

80 Seite Dynamische Tabellen-Administration Den Bereich der dynamischen Tabellen-Administration kann ein Benutzer nur betreten, wenn er die entsprechenden Rechte besitzt. Falls er diese nicht besitzt, fehlt der Link im Header. Der Aufbau des Bereiches Tabellen-Administration wurde dynamisch mit Hilfe der Java Reflection implementiert. Dies bedeutet, dass zur Kompilierzeit nicht bekannt war, welche Tabellen der Benutzer auswählt und wie die anschließende Folgeseite der Anwendung aus dieser Interaktion des Benutzers entsteht. Hier werden die Funktionalitäten der Klasse PortalData.java genutzt. Es wird bei Beschreibungen der Screen-Klassen der folgenden Kapitel darauf verzichtet zu erwähnen, dass in jeder Screen-Klasse jeweils ein Objekt der Klasse Translator.java (i18n) und PortalData.java (pdata) erzeugt werden und das Objekt i18n in den Kontext gestellt wird AllTables.vm / AllTables.java Abbildung 5-19: AllTables.vm

81 Seite 73 Nachdem der autorisierte Benutzer den Link für die Tabellen-Administration geklickt hat, wird das Template AllTables.vm aufgerufen. In der dobuildtemplate(rundata data, Context context)-methode wird mit Hilfe des Objektes pdata die Methode getavailableholders() aufgerufen. Das Ergebnis dieser Methode ist eine Liste der Tabellennamen des Prozess-PortalSchemas, welche in einem Vektor gespeichert und in den Kontext gestellt wird. <table> #foreach($availableholder in $availableholders) <tr> <td> <a href="$link.setpage("onetable.vm") /selectedtable/$availableholder"> $i18n.getmessage($availableholder, null) </a> </td> </tr> #end </table> Code 15: Code-Auszug AllTables.vm In einer #foreach-schleife wird über den Vektor iteriert. Für jedes Element des Vektors wird ein Link zusammengebaut. Hierzu wird ein weiteres Mal das Link-PullTool genutzt, um zur nächsten Web-Seite (OneTable.vm) zu verweisen. An diesen Link wird das Schlüssel-Wert-Paar selectedtable und $availableholder gehangen. Der Unterschied zu der gewohnten Vorgehensweise, um Informationen an eine URL zu hängen, ist die Verwendung von zwei Schrägstrichen (Slashes). Über den Schlüssel selectedtable gelangt man in der Screen-Klasse durch Aufruf von bestimmten Methoden des RunData-Objektes an den Wert $availableholder. Diese Vorgehensweise hat den Vorteil, dass dynamisch, zur Laufzeit nicht wissend, welchen Link der Benutzer klickt, der Inhalt der ausgewählten Tabelle auf der nächsten Seite angezeigt wird

82 Seite OneTable.vm / OneTable.java Abbildung 5-20: OneTable.vm Die Web-Seite OneTable.vm wird durch Anklicken eines Link auf der Web-Seite AllTables.vm aufgerufen. An den Namen der ausgewählten Tabelle kommt man durch Auslesen des RunDataObjektes mit den Methoden getparameters() und getstring(string key). String selectedtable = data.getparameters().getstring("selectedtable"); Der Rückgabewert wird in einem String mit passenden Namen gespeichert und später in den Kontext gestellt. In einem String-Array werden die Namen der Tabellenspalten abgelegt. Zuvor wurde jedoch die Methode getfields(string key) der Klasse PortalData.java aufgerufen. Als Parameter der Methode dient der Tabellenname. Das String-Array wird ebenfalls in den Kontext gelegt

83 Seite 75 Etwas komplizierter ist die Vorgehensweise, um die Datensätze einer Tabelle zu erhalten und diese für das Template zu speichern. Hierzu ist eine eigene Methode private ArrayList getselectedtabledata(rundata data)throws Exception implementiert worden, welche eine java.util.arraylist zurückgibt. Zu Beginn der Methode werden einige Objekte initialisiert, die man für die dynamische Ermittlung der Reflection-Objekte und zur Speicherung der Datensätze benötigt. Um an die richtige Methode zum Selektieren der Datensätze zu gelangen, braucht man dass Class-Objekt der ausgewählten Tabelle. Das Ergebnis der Selektier-Methode wird zuerst in einer Liste gespeichert und anschließend an ein Iterator-Objekt übergeben. Schließlich gelangt man in einer while-schleife an die einzelnen Datensätze der Tabelle. PortalData pdata = new PortalData(data.getServletContext()); String selectedtable = data.getparameters().get("selectedtable"); ArrayList rows = new ArrayList(); Method[] currentmethods = pdata.getmethodnames(selectedtable); Criteria crit = new Criteria(); Method selectionmethod = (Method) (pdata.getholderspeerclass(selectedtable).getmethod("doselect ", new Class[] { Criteria.class } ); List resultlist = (List) selectionmethod.invoke(null, new Object[] { crit } ); Iterator iter = resultlist.iterator(); while(iter.hasnext()) {... } Code 16: Beispiel für die Nutzung von Torque Innerhalb der while-schleife wird für jeden Durchlauf das nächste Element des Iterators in einem Objekt vom Typ java.lang.object gespeichert. Weiter wird für jede Iteration ein der Spaltenanzahl entsprechend großes String-Array-Objekt initialisiert. Zur Ermittlung der ID des aktuellen Datensatzes wird die passende ID-Methode der Tabelle benötigt, welche analog der Ermittlung der Selektier-Methode bestimmt wird. Voraussetzung hierfür ist, dass die ID-Spalten der Tabellen den gleichen Namen tragen. Der Wert des Aufrufens der ID-Methode wird an erster Stelle im String-ArrayObjekt abgelegt. Anhand der im Method-Array vorhandenen Getter-Methoden wird der Inhalt der einzelnen Spalten ermittelt und nacheinander im String-Array-Objekt gespeichert. Ist

84 das Method-Array abgearbeitet, wird das String-Array-Objekt Methodenanfang initialisierten ArrayList hinzugefügt. Seite 76 der am Nach Beendigung der while-schleife wird die mit allen Datensätzen gefüllte ArrayList an den Aufrufer der Methode zurückgegeben. while(iter.hasnext()) { Object currentobject = iter.next(); String[] currentrowentries = new String[(currentMethods.length + 1)]; String idstring = (String) idmethod.invoke(currentobject, null).tostring(); currentrowentries[0] = idstring; for(int i = 0; i < currentmethods.length; i++) { String currentcolumnentry; Object obj = currentmethods[i].invoke(currentobject, null); if (obj == null) { currentcolumnentry = ""; } else { currentcolumnentry = obj.tostring(); } currentrowentries[i+1] = currentcolumnentry; } } rows.add(currentrowentries); return rows; Code 17: While-Schleife der Methode getselectedtabledata(rundata data) Die zurückgegebene ArrayList wird in den Kontext gestellt und im Template darauf zugegriffen. In einer äußeren foreach-schleife gelangt man an die einzelnen String-Array-Objekte und in einer inneren Schleife erhält man die in einem StringArray-Objekt gespeicherten Daten. Für das erste Objekt des Arrays wird eine Checkbox der Tabellenzeile hinzugefügt, andernfalls der Inhalt

85 Seite 77 #foreach($row in $rows) <tr> #set($counter = 0) #foreach($columnentry in $row) #if($counter == 0) <td> <input type="checkbox" value="$columnentry" name="selectedrowid" onclick="count(this)"> #set($counter = $counter + 1) #set($idcounter = $idcounter + 1) </td> #else <td> $columnentry #set($counter = $counter + 1) </td> #end #end #end </tr> Code 18: Abarbeitung der ArrayList in TemplateOneTable.vm Da das Template größtenteils aus einem Formular besteht, werden noch die zur Bearbeitung benötigten Buttons in den HTML-Code eingefügt. Das Formularattribut action verweist zuerst auf die Action-Klasse OneTableAction.java und anschließend auf ein zum Button passendes Template. Dies bedeutet, dass die zum Button gehörende Methode zuerst abgearbeitet wird und anschließend das Template OneTable.vm aufgerufen wird. Die in diesem Kapitel beschriebene Vorgehensweise läuft in ähnlicher Form an vielen Stellen der Anwendung ab. Sie wurde hier etwas ausführlicher erläutert, worauf in den nachfolgenden Kapiteln verzichtet und nur auf Besonderheiten oder Unterschiede eingegangen wird

86 Seite Insert.vm / Insert.java / OneTableAction.java Abbildung 5-21: Insert.vm Die Ermittlung und Bereitstellung der Daten für das Template Insert.vm geschieht in der Action-Klasse OneTableAction.java, da zum ersten Mal in dieser Anwendung Daten eines Formulars durch Drücken eines Buttons übermittelt werden. Die richtige Methode der Action-Klasse OneTableAction.java wird durch das Namensattribut des Buttons bestimmt. Für dieses Template trägt er den Namen eventsubmit_donew, so dass die Methode donew(rundata data, Context context) throws Exception aufgerufen wird. Diese Methode liest das RunData-Objekt nach passenden Informationen (hier: Tabellennamen) aus und stellt diese im Kontext zur Verfügung. Mit Hilfe des Tabellennamens werden die Spaltennamen ermittelt, in einem String-Array gespeichert und ebenfalls in den Kontext gelegt

87 Seite 79 Zum Schluss wird die Methode settemplate(rundata data, String template) aufgerufen, um die Anwendung zum richtigen Template zu leiten. Die Screen-Klasse Insert.java stellt lediglich das aktuelle Translator-Objekt in den Kontext. Mit den sich im Kontext befindlichen Daten stellt das Template Insert.vm ein Formular in Tabellenform zusammen. Das Formularattribut action verweist wiederum zuerst auf die Action-Klasse OneTableAction.java und anschließend auf das Template OneTable.vm, um die Tabelle erneut auf dem Bildschirm auszugeben. Die Zeilen der Tabelle bestehen aus dem Spaltennamen, einem Textfeld, welches der Benutzer füllen kann, und einem Button zum Bestätigen der Eingabe unter der letzten Spalte. Durch Drücken eines Bestätigen-Buttons wird die Methode dosavenewentry(rundata data, Context context) der Action-Klasse aufgerufen. Diese Methode muss genauer erklärt werden, weil sie etwas umfangreicher ist und einige wichtige Eigenschaften der Anwendung abhandelt. Zuerst wird der für die Reflection wichtige Tabellenname aus dem Kontext gelesen. Anschließend werden die Spalten der gewählten Tabelle ermittelt, in einem Array abgelegt und eine neue Instanz des Class-Objektes der zur Tabelle gehörenden Torque-Klasse gebildet. In einer for-schleife wird über das Spalten-Array iteriert. In jedem Durchlauf passiert folgendes: Ein String, welcher zum späteren Vergleich der passenden Setter-Methode dient, wird mit Hilfe des Spaltennamens zusammengesetzt. String currentmethodname = "set" + Character.toUpperCase(currentFields[i].toString().charAt(0)) + currentfields[i].tostring().substring(1); Ein weiterer String wird initialisiert, um den Wert des Benutzereintrags für die Tabellenspalte zu erhalten. Nachfolgend ist eine if-anweisung implementiert, um die syntaktische Korrektheit des Benutzereintrags mit Hilfe eines regulären Ausdrucks zu überprüfen. if (Pattern.matches(pData.getRegex(selectedTable + "." + currentfields[i]), specifiedargumentvalueasstring)) Ist der Benutzereintrag korrekt, wird die geeignete Setter-Methode durch Vergleich des zusammengesetzten Strings mit allen Methoden der Torque-Klasse der Tabelle ermittelt

88 Seite 80 Anschließend wird durch eine Reihe von if-anweisungen die richtige Type-Klasse des Parameters ermittelt. Ist der richtige Datentyp des Eintrags gefunden, wird der Benutzereintrag in einem Objekt der Klasse java.lang.object gespeichert. Danach wird die ermittelte Setter-Methode auf die Instanz des Class-Objektes mit dem im Objekt der Klasse java.lang.object gespeicherten Benutzereintrag angewendet. selectedmethod.invoke(newobject, new Object[] { argument }); Ist der Benutzereintrag nicht korrekt, wird die zur Spalte passende Fehlermeldung des regulären Ausdrucks ermittelt, diese Fehlermeldung in den Kontext gestellt und eine am Methodenanfang initialisierte Boolean-Variable auf true gesetzt. Zum Schluss wird die Boolean-Variable überprüft. Ist das Ergebnis true, wird auf das Template Error.vm umgeleitet. Andernfalls wird die save-methode der gewählten Tabelle ermittelt und auf die Instanz des Class-Objektes angewendet. Erst jetzt ist der neue Eintrag in der Tabelle der Datenbank gespeichert und das Template OneTable.vm wird aufgerufen Update.vm / Update.java / OneTableAction.java Erst durch Aktivieren von genau einer Checkbox eines Datensatzes und durch Drücken des Update-Buttons im Template OneTable.vm gelangt der Benutzer zum Template Update.vm. Der Ablauf zum Aktualisieren eines Datensatzes ähnelt größtenteils dem eines Datensatzneueintrags. Daher wird in diesem Kapitel nur auf die Unterschiede der beiden Vorgänge eingegangen. Die Action-Methode doupdate(rundata data, Context context) throws Exception ist im Gegensatz zur Action-Methode doinsert des Templates Insert.vm aufwendiger. Die Daten der vom Benutzer selektierten Zeile müssen ermittelt und in geeigneter Form in den Kontext gelegt werden. Das Namensattribut der Checkboxen im Template OneTable.vm wurde mit der jeweiligen ID des Datensatzes initialisiert. Diese ID wird durch Drücken des UpdateButtons übertragen und kann mit Hilfe des RunData-Objektes abgefragt werden. Zusammen mit dem ID-Spaltennamen wird die ID der Zeile dem Criteria-Objekt hinzugefügt. Field idfield = pdata.getholderspeerclass(selectedtable).getfield("id"); String idfieldname = (String) idfield.get(null); updcrit.add(idfieldname, (Object) selectedrowid, Criteria.EQUAL);

89 Seite 81 Das Ergebnis des Aufrufs der Selektier-Methode mit dem um ID und IDSpaltennamen erweiterten Criteria-Objekt ist die vom Benutzer ausgewählte Zeile, die in einem java.lang.object gespeichert wird. Anschließend werden in einer for-schleife alle Getter-Methoden der Tabelle abgearbeitet. Zuerst wird für jeden Durchlauf ein zwei-elementiges String-Array initialisiert. Nacheinander wird zuerst der Name und dann der Wert der Spalte abgelegt. Dieses Array wird einer zuvor initialisierten ArrayList zugefügt. Diese wird am Ende der Methode zusammen mit einigen anderen Informationen in den Kontext gestellt. Der Aufbau des Templates Update.vm stimmt mit dem Aufbau des Templates Insert.vm beinahe überein. Der Unterschied ist das Abarbeiten der ArrayList durch eine äußere und eine innere foreach-schleife. Die Textfelder des Formulars sind mit den Werten der Spalten gefüllt. Durch Drücken des Bestätigen-Buttons wird die Methode dosaveupdate(rundata data, Context context) der Action-Klasse OneTableAction.java aufgerufen. Diese Methode ist ebenfalls fast mit der Methode dosavenewentry identisch. Der einzige Unterschied ist, dass keine neue Instanz für ein neues Objekt geschaffen, sondern ein vorhandenes Objekt anhand der Datensatz-ID geladen werden muss. Hierzu wird die Methode retrievebypkmethod genutzt. Object objecttobeupdated = retrievebypkmethod.invoke(null, new Integer[] { objectid }); Nach Speicherung der Aktualisierung des Datensatzes wird das Template OneTable.vm aufgerufen und die Tabelle auf dem Bildschirm dargestellt Delete-Action / OneTableAction.java Das Löschen eines oder mehrerer Datensätze stellt eine Besonderheit dar. Für diesen Vorgang sind weder ein Template noch eine Screen-Klasse erforderlich. Durch Aktivieren mindestens einer Checkbox und durch Drücken des Lösch-Buttons des Templates OneTable.vm wird der Vorgang gestartet. Die passende Methode dodelete(rundata data, Context context) throws Exception wird aufgerufen. Neu im Gegensatz zu den vorher beschriebenen Methoden ist die Speicherung der IDs der selektierten Checkboxen in einem Object-Array. In einer for-schleife wird dieses Array durchlaufen. In jeden Durchlauf wird zuerst dem Criteria-Objekt die aktuelle ID und der ID-Spaltenname hinzugefügt und dann die zuvor ermittelte Methode zum Löschen von Datensätzen der gewählten Tabellen aufgerufen

90 Seite 82 PortalData pdata = new PortalData(data.getServletContext()); String selectedtable = data.getparameters().getstring("selectedtable"); Object[] objarray = data.getparameters().getobjects("selectedrowid"); Criteria delcrit = new Criteria(); Field idfield = pdata.getholderspeerclass(selectedtable).getfield("id"); String idfieldname = (String) idfield.get(null); Method delmethod = pdata.getholderspeerclass(selectedtable).getmethod("dodelete ", new Class[] { Criteria.class } ); for(int i = 0; i < objarray.length; i++) { delcrit.add(idfieldname, objarray[i]); delmethod.invoke(null, new Object[] { delcrit } ); } Code 19: dodelete-methode der Klasse OneTableAction.java Nach Beendigung der for-schleife wird das Template OneTable.vm aufgerufen und die Tabelle wird aktualisiert angezeigt

91 Seite Prozess-Suche Die Prozess-Suche stellt den größten und wichtigsten Teil dieser Diplomarbeit dar. Sie steht jedem Benutzer offen, der sich an der Anwendung anmelden kann MainProcesses.vm / MainProcesses.java Abbildung 5-22: MainProcesses.vm Das Template MainProcesses.vm bildet die Einstiegsseite in die Prozess-Suche. Die Screen-Klasse MainProcesses.java stellt neben den üblichen Informationen ein ArrayList-Objekt in den Kontext, welches den Inhalt der Tabelle MainProcess speichert. Das Template MainProcesses.vm liest das ArrayList-Objekt nach der gewohnten Weise aus. Neu ist die Zusammensetzung des Links. Um die ID der Zeile zu speichern, wird in der äußeren foreach-schleife eine Zählervariable mit null initialisiert, die in einer if-anweisung der inneren foreach-schleife abgefragt wird

92 Seite 84 #foreach($row in $rows) <tr> #set($counter = 0) #foreach($columnentry in $row) #if($counter == 0) #set($mainprocessid = $columnentry) #set($counter = $counter + 1) #elseif($counter == 1) <td> <a href="$link.setpage("subprocesses.vm") /selectedtable/subprocess /mainprocessid/$mainprocessid /mainprocessname/$columnentry"> $columnentry </a> #set($counter = $counter + 1) </td> #end #end </tr> #end Code 20: äußere und innere foreach-schleife des Templates MainProcesses.vm Ist der Zähler null, handelt es sich um die ID der Zeile und wird in einer weiteren Variable gespeichert. Danach wird der Zähler um eins erhöht. Beim nächsten Durchlauf der Schleife wird der else-fall aufgerufen. Jetzt wird der Link mit der IDVariablen und dem aktuellen Wert der Spalte zusammengesetzt. Hinzu kommt das Wertepaar selectedtable und subprocess

93 Seite SubProcesses.vm / SubProcesses.java Abbildung 5-23: SubProcesses.vm Die Web-Seite SubProcesses.vm wird durch Anklicken eines Links auf der WebSeite MainProcesses.vm aufgerufen. Die Screen-Klasse stellt neben der dobuildtemplate-methode eine weitere Methode private ArrayList getsubprocesses(rundata data) zur Verfügung. In der Methode getsubprocesses wird eine etwas größere Abfrage in einem Criteria-Objekt abgebildet. Mit Hilfe des Aufrufs der SelektierMethode doselect wird ein ArrayList-Objekt mit Daten aus der Tabelle SubProcess gefüllt. Das ArrayList-Objekt wird in den Kontext gestellt. Der Ablauf des Templates SubProcesses.vm ist nahezu identisch mit dem Ablauf des Templates MainProcesses.vm. Der Unterschied besteht darin, dass die Wertepaare des Links andere sind

94 Seite SearchFrontEnd.vm / SearchFrontEnd.java Abbildung 5-24: SearchFrontEnd.vm Klickt man auf einen Link auf der Vorgängerseite SubProcesses.vm, wird das Template SearchFrontEnd.vm aktiviert. Um die geeigneten Daten bereit zu stellen, benötigt die Screen-Klasse SearchFrontEnd.java einzig die ID des ausgewählten Sub-Prozesses. Dennoch ist die Ermittlung der geeigneten Daten schwieriger, als es auf den ersten Blick aussieht. Neben der Standard-Methode dobuildtemplate sind Funktionalitäten der ScreenKlasse in zwei weitere Methoden ausgelagert. Zum Ersten liefert die Methode private ArrayList getallstates(rundata data) throws Exception eine ArrayList mit allen zu einem Sub-Prozess gehörenden Zuständen. Zum Zweiten bekommt man durch Aufruf der Methode private ArrayList getindexfields(rundata data, Vector notequalids_v) throws Exception eine ArrayList mit den Indexfeldern zurück

95 Seite 87 Doch zuerst zur Methode dobuildtemplate. Sobald diese aufgerufen wird, wird die aktuelle Zeit in einem java.util.calendar-objekt gespeichert, welches als ein java.util.gregoriancalendar-objekt initialisiert ist. Mit den passenden Methoden wird Tag, Monat, Jahr, Stunde, Minute und Sekunde abgefragt, in einer String-Variable gespeichert und einzeln in den Kontext platziert. Mit diesen Werten werden die Auswahllisten der Web-Seite gefüllt, um die Suche zeitlich einschränken zu können. Als nächstes wird ein Vector-Objekt initialisiert und statisch mit zwei Zahlen gefüllt. Die zwei Zahlen sind IDs für die Indexfelder Status und Zeit der Tabelle IndexFields. Der Grund hierfür ist, dass diese beiden Suchfelder für jeden SubProzess Indexfelder sind. Alle weiteren Indexfelder sind prozessabhängig und sollen dynamisch ermittelt werden. Das Vector-Objekt wird zusammen mit dem RunData-Objekt der Methode getindexfields übergeben. Dort werden die Spaltennamen, die für eine Abfrage über vier Tabellen nötig sind, zuerst als java.lang.reflect.field initialisiert und anschließend in Strings umgewandelt. Die Methoden zum Aufbau der whereklausel für ein Criteria-Objekt verlangen einen String als Datentypen. Nachdem das Criteria-Objekt mit den geeigneten Methoden und Spaltennamen erweitert worden ist, wird der Vektor in einer for-schleife abgearbeitet, der der Methode als Parameter übergeben worden ist. for (int i = 0; i < notequalids_v.size(); i++) { String currentid = (String) notequalids_v.elementat(i); crit.and(str_if_id_f, (Object) currentid, Criteria.NOT_EQUAL); } Code 21: Nutzung des NOT_EQUAL-Operators mit Torque Die for-schleife erweitert die where-klausel pro Iteration um folgende Zeile:... and indexfields.id!= notequalids_v.elementat(i) Durch Aufruf der Selektier-Methode doselect mit dem gefüllten Criteria-Objekt erhält man eine Liste mit allen Einträgen der Tabelle IndexFields, außer den herausgefilterten Objekten. Wie man aus einer Liste mit Datensatz-Objekten an eine ArrayList mit den gewünschten Informationen gelangt, wurde schon einmal im Kapitel OneTable.vm / OneTable.java erläutert. Die Methode getindexfields gibt als letzte Aktion eine ArrayList zurück, welche in der Methode dobuildtemplate in den Kontext gestellt wird. Die zweite Methode getallstates funktioniert nahezu identisch. Hier wird auf den Filter verzichtet und alle Daten der Tabelle ProcessState werden in eine

96 Seite 88 ArrayList gepackt und an den Aufrufer der Methode zurückgeliefert. Dort wird die zweite ArrayList ebenfalls in den Kontext gestellt. Nun kann das Template SearchFrontEnd.vm auf alle erforderlichen Daten zugreifen. Die komplette Suchmaske besteht aus einem HTML-Formular. In den ersten beiden Tabellenzeilen der Suchmaske, die Überschriftenzeile nicht mitgezählt, hat man die Möglichkeit, den Suchzeitraum einzustellen. Die Zeit der ersten Zeile wurde willkürlich auf :00:00 Uhr festgelegt. Die zweite Zeile spiegelt das aktuelle Datum mit der aktuellen Zeit wider. Um im Template SearchFrontEnd.vm Zeit zu sparen und die Anzahl der Codezeilen möglichst gering zu halten, ist das Makro Loop implementiert worden. #macro(loop $combo $begin $end) #foreach($counter in [$begin..$end]) #if($counter < 10) #if( ($combo.equals("d") && $d.equals("$counter")) ($combo.equals("mo") && $mo.equals("$counter")) ($combo.equals("y") && $y.equals("$counter")) ($combo.equals("h") && $h.equals("$counter")) ($combo.equals("mi") && $mi.equals("$counter")) ($combo.equals("s") && $s.equals("$counter"))) <option selected>0$counter</option> #else <option>0$counter</option> #end #else #if( ($combo.equals("d") && $d.equals("$counter")) ($combo.equals("mo") && $mo.equals("$counter")) ($combo.equals("y") && $y.equals("$counter")) ($combo.equals("h") && $h.equals("$counter")) ($combo.equals("mi") && $mi.equals("$counter")) ($combo.equals("s") && $s.equals("$counter"))) <option selected>$counter</option> #else <option>$counter</option> #end #end #end #end Code 22: Das Makro Loop Das Makro Loop verlangt drei Parameter. Der erste beschreibt die aufrufende Auswahlliste, wobei d für den Tag (day), mo für den Monat (month) usw. steht. Der zweite Parameter gibt den Startwert vor, der dritte den Endwert

97 Seite 89 Das komplette Makro läuft in einer foreach-schleife ab, die logischerweise beim Startwert beginnt und beim Endwert abbricht. Die erste if-anweisung bewirkt, dass der Optionswert der Auswahlliste eine führende Null erhält, wenn der Zähler kleiner als zehn ist. Die zweite if-anweisung entscheidet darüber, ob ein Wert der Auswahlliste vorselektiert ist. Will man dies verhindern, was in der ersten Zeile der Suchmaske der Fall ist, übergibt man dem Makro als ersten Parameter einen leeren String. Die dritte und vierte Tabellenzeile der Suchmaske wird unabhängig von den Indexfeldern des Prozesszustandes statisch aufgebaut. Alle weiteren Zeilen der Suchmaske, bis auf die letzte, werden dynamisch, abhängig von der Anzahl der Indexfelder des Sub-Prozesses erzeugt. In der ersten Spalte dieser Zeilen ist ein Radio-Button platziert. Zu Beginn ist die dritte Zeile vorselektiert. Bleibt diese Selektierung bestehen, erfolgt die Suche über alle in der Tabelle ProcessIndexFieldValues gespeicherten Datensätze. Dies bedeutet eine Suche über alle Prozesszustände und alle Indexfelder des Unterprozesses. In der vierten Spalte hat man die Möglichkeit nach einem bestimmten Prozesszustand des Sub-Prozesses zu suchen. Die restlichen Spalten werden prozessabhängig erzeugt. In Abbildung 5-11 sieht man die Indexfelder für den Sub-Prozess Triple `A (Prozessnummer, Kundennummer und Kundenkonto). In der letzen Zeile der Suchmaske befinden sich zwei Buttons. Ein Reset-Button zum Zurücksetzen des Formulars und ein Bestätigen-Button zum Fortsetzen der Prozess-Suche

98 Seite SearchResult.vm / SearchResult.java / OneProcessAction.java Abbildung 5-25: SearchResult.vm Das Drücken des Bestätigen-Buttons der Suchmaske bewirkt einen Aufruf der Action-Klasse OneProcessAction.java. In dieser Action-Klasse wird lediglich bei Fehlerfreiheit auf das Template SearchResult.vm umgeleitet, andernfalls wird das Template Error.vm aufgerufen und die entsprechende Fehlermeldung angezeigt. Innerhalb der Screen-Klasse SearchResult.java werden die Einstellungen der Suchmaske verarbeitet und die daraus resultierenden Daten für das Template SearchResult.vm in den Kontext gestellt Funktionen der Screen-Klasse SearchResult.java Der Zusammenhang zwischen den Funktionen wird im Anschluss aufgeführt. Um dies zu bewerkstelligen, folgt eine Liste mit Funktionen der Screen-Klasse und deren inhaltliche Erklärung. private Vector getindexfieldnames(rundata data) throws Exception Speichert die Namen der Indexfelder in einem Vektor und gibt diesen Vektor an den Aufrufer zurück

99 Seite 91 private ArrayList getsearchdata(rundata data) throws Exception Liefert eine ArrayList mit den Prozesszustandsdaten zurück, in dem die Suchmaskeneinstellungen und Benutzerdaten verarbeitet werden. private Vector getprocstrucmessageids(rundata data, Vector masterids_v) throws Exception Verarbeitet einen Vektor mit masterids und liefert einen Vektor mit ProcStrucMessageIDs zurück. ProcStrucMessageID ist der Fremdschlüssel der Tabelle ProcessIndexFieldValues für die Tabelle ProcessStructuredMessage. private String getmaxdate(rundata data, String masterid) throws Exception Liefert einen String zurück, der das letzte Datum eines Sub-Prozesses enthält. Mit der masterid wird ein Criteria-Objekt zusammengesetzt, dessen Ergebnis den Maximal-Wert einer Spalte bringt. Der Maximal-Wert ist dementsprechend die letzte Statusänderung eines Sub-Prozesses, also das letzte Datum. private String getstateindexfieldsid(rundata data, String indexfieldsid) throws Exception Liefert einen String zurück, der eine ID der Tabelle StateIndexFields gespeichert hat. private ArrayList getindexfields(rundata data, Vector notequalids_v) throws Exception Liefert eine ArrayList zurück, die den Inhalt der Tabelle IndexFields bereit hält, bereinigt um die Datensätze, deren IDs im Vektor notequalids_v gespeichert sind. private Vector getmasteridsofperiod(rundata data, String stateindexfieldsid, String condition) throws Exception Liefert einen Vektor zurück, der mit masterids eines bestimmten Zeitraums gefüllt ist. private String getdatestring(rundata data, String fromorto) Baut einen String zusammen, der syntaktisch dem Datum-Typ einer OracleDatenbank entspricht und gibt diesen an den Aufrufer zurück. Der Übergabeparameter fromorto beeinflusst den String, mit dem das RunData-Objekt abgefragt wird

100 Seite Zusammenhang der Funktionen Abbildung 5-26: Funktionen der Screen-Klasse SearchResult.java Abbildung 5-13 zeigt den groben Zusammenhang der Funktionen der Screen-Klasse SearchResult.java. In der Standardfunktion einer Screen-Klasse dobuildtemplate erfolgt ein Aufruf von zwei Methoden. Diese beiden Methoden haben die Aufgabe, aus den Angaben und Einstellungen des Benutzers die richtigen Prozess-Daten herauszufiltern und bereitzustellen. Zuerst wird die Methode getindexfieldnames aufgerufen. Sie filtert aus einer ArrayList die Namen von Indexfeldern heraus und liefert die Namen in einem Vektor an den Aufrufer zurück. Die ArrayList wird durch die Methode getindexfieldnames bereitgestellt und beinhaltet den Inhalt der Tabelle IndexFields. Die zweite Methode getsearchdata liefert dem Aufrufer eine ArrayList zurück. Diese ArrayList beinhaltet die Prozess-Daten, die nach Aufruf mehrerer Methoden übrig geblieben sind. Zunächst werden einige Variablen initialisiert, die zur Speicherung der Daten benötigt werden. Weiterhin werden Strings der Spaltennamen der Tabelle IndexFields erstellt. Anschließend folgt ein Block mit if-anweisungen, die den Wert der RadiobuttonVariable abprüfen. Als erstes erfolgt ein Prüfen auf den String processnumber. Der Grund hierfür ist, dass die Überprüfung durch die if-anweisungen abgebrochen

101 Seite 93 werden kann, wenn die richtige masterid gefunden wurde. Die Prozessnummer der Suchmaske ist gleich einer masterid. Handelt es sich um den String processnumber, wird der Wert des Textfeldes in der entsprechenden Variable gespeichert und die Methode getprocstrucmessageids aufgerufen. Diese Methode filtert aus der Tabelle ProcessIndexFieldValues anhand der masterids die dazugehörigen IDs der Tabelle ProcessStructuredMessage heraus. Dies ist nötig, weil ein Prozess (masterid) mehrere Zustandsänderungen (ID der Tabelle ProcessStructuredMessage haben kann. Dem Benutzer soll immer der letzte Zustand eines Sub-Prozesses angezeigt werden. Hierzu erfolgt in einer for-schleife der Methode getprocstrucmessageids, die den masterid-vektor abarbeitet, der Aufruf der Methode getmaxdate. Diese Methode sucht das Maximum in der Spalte heraus, die die Information über das Datum speichert. Hierzu wird ein Criteria-Objekt zusammengesetzt, das nur über eine Spalte selektiert. Hierzu ist es nötig, als ausführende Torque-Methode nicht das gebräuchliche doselect zu wählen, sondern das aus dem Framework WorkingDogs stammende doselectvillagerecords. Das Framework WorkingDogs dient Turbine und somit auch Torque als Basis. Der String, der das älteste Datum zu einem Sub-Prozess repräsentiert, wird zum Criteria-Objekt der Methode getprocstrucmessageids hinzugefügt. Das Ergebnis des Aufrufes der Select-Methode mit diesem Criteria-Objekt ist die jüngste ID der Tabelle ProcessStructuredMessage und wird in einem entsprechenden Vektor gespeichert. Nach Beendigung der for-schleife wird der Vektor an den Aufrufer zurückgegeben. Handelt es sich bei der ersten if-anweisung nicht um den String processnumber, wird auf den String state abgeprüft. Das Indexfeld des Zustandes gehört wie das Datum zu den Indexfeldern, die jeder Prozess hat. Will der Benutzer seine Prozess-Suche über den Zustand eines Prozesses durchführen, wird einem String (condition) der Name des Radiobuttons zugewiesen (hier: state). Dieser String wird später als Parameter der Methode getmasteridsofperiod benötigt. Des Weiteren wird die Methode getstateindexfieldsid aufgerufen und deren Rückgabewert in einer entsprechenden Variable (stateindexfieldsid) gespeichert. Diese Methode liefert die ID der Tabelle StateIndexFields des Indexfeldes zurück, das in der Suchmaske gefüllt wurde. Dies ist wichtig, weil in der Tabelle IndexFields die Suchfelder der Prozesse allgemein aufgeführt sind und in der Tabelle StateIndexFields einem Sub-Prozess zugeordnet sind

102 Seite 94 Falls in der Suchmaske weder über die Prozessnummer noch über den Zustand Angaben gemacht wurden, wird ein Vektor statisch mit drei IDs (für Prozessnummer, Zustand und Zeit) gefüllt. Anschließend wird die Methode getindexfields mit dem Vektor als Parameter aufgerufen. Das Ergebnis ist eine ArrayList mit Indexfeldern ohne die Indexfelder Prozessnummer, Zustand und Zeit. In einer for-schleife wird nun der Indexfeldvektor durchlaufen und jeder Eintrag auf Übereinstimmung mit dem Namen des Radiobuttons geprüft. Stimmt ein Eintrag mit dem Namen überein, werden die Strings condition und stateindexfieldsid analog wie vorher beschrieben gefüllt. Nun hat man alle Informationen in Variablen gespeichert, um die zeitliche Einschränkung zu berücksichtigen. Es folgt ein Aufruf der Methode getmasteridsofperiod mit den Strings condition und stateindexfieldsid als Parameter. Das Ergebnis dieses Aufrufs, masterids in einem bestimmten Zeitraum durch ein bestimmtes Indexfeld zu filtern, wird in einem Vektor (procstrucmessageids_v) gespeichert. Dafür wird die Schnittmenge aus zwei select-statements gebildet. Das erste select-statement selektiert die masterids eines bestimmten Zeitraumes. Das zweite Statement grenzt die Suche über den String condition ein. Eine masterid wird dem Ergebnisvektor nur hinzugefügt, wenn die masterid in beiden Statements in der Ergebnisliste vorkam. Dieser Vektor dient als Parameter für die Methode getprocstrucmessageids, die wie schon einmal vorher erwähnt, die IDs der Tabelle ProcessStructuredMessage zu einer masterid liefert. Nun kann man mit dem Zusammensetzen des Criteria-Objektes beginnen. In einer for-schleife wird der Vektors procstrucmessageids_v abgearbeitet. Für jeden Durchlauf wird ein neuer Vektor erzeugt, dessen erster Eintrag die masterid ist. Anschließend folgen die Einträge der Tabelle ProcessIndexFieldValues, die zu dieser masterid gehören. Der Vektor wird zu einer ArrayList hinzugefügt Nach Beendigung der for-schleife wird die gefüllte ArrayList zurückgegeben. Der Aufruf der Methode getsearchdata erfolgte in der Methode dobuildtemplate. Die ArrayList wird anschließend zusammen mit den anderen für das Template wichtigen Daten in den Kontext gestellt. Das Template SearchResult.vm fügt eine Tabelle zusammen. Die Informationen für die erste Zeile der Tabelle stammen aus dem Vektor, der die Namen der Indexfelder speichert. Der Rest der Tabelle wird mit Hilfe der ArrayList gefüllt. Dabei wird, wie schon vorher beschrieben, vorgegangen. Zusätzlich zu den Spalten für die Indexfelder werden zwei weitere Spalten an die Tabelle hinzugefügt. Die erste Spalte enthält den Link zur Web-Seite

103 DetailedData.vm, die VisualizedProcess.vm. zweite Spalte den Link Seite 95 zur Web-Seite 2.6.5DetailedData.vm / DetailedData.java Abbildung 5-27: DetailedData.vm Durch Klick eines Links in der Detailed Data-Spalte der Web-Seite SearchResult.vm wird das Template DetailedData.vm aktiviert. In der dobuildtemplate-methode der Screen-Klasse werden alle Schlüssel-Wert-Paare mit Hilfe des RunData-Objektes ausgelesen und wie üblich in den Kontext gestellt. Zusätzlich wird eine weitere Methode private String getxmldata(rundata data) throws Exception aufgerufen. Sie liefert einen String zurück, der aus einer XSL-Transformation resultiert. Hierzu werden zwei weitere Strings mit Hilfe des RunData-Objektes initialisiert, einen String für die ID des Sub-Prozesses und einen zweiten für die ID der strukturierten Nachricht des gewählten Prozesszustandes. Die ID-Strings werden in ein select-statement eingebaut, das in dem String sql gespeichert wird. Das

104 Seite 96 select-statement nutzt die XML-Fähigkeit von Oracle durch Aufruf der Funktion XMLTransform(XML, XSL). Anmerkung: Die ID der XSL-Datei in der Tabelle DetailedDataXSLT ist mit der ID des Sub-Prozesses identisch. String sql = "SELECT XMLTransform(PROCESSSTRUCTUREDMESSAGE.STRUCTUREDMESSAGE, " + "DETAILEDDATAXSLT.XSLT).getStringVal() " + "FROM PROCESSSTRUCTUREDMESSAGE, DETAILEDDATAXSLT " + "WHERE DETAILEDDATAXSLT.ID=" + subprocessid + "AND PROCESSSTRUCTUREDMESSAGE.ID=" + procstrucmessageid; Code 23: Select-String der Methode getxmldata Das Ergebnis des select-statements ist ein String, der ein <table>-tag in HTMLCode speichert. Ein Tag der XML-Datei wurde zu einer Tabellenzeile transformiert, wobei die erste Spalte den Tag-Namen und die zweite Spalte den zugehörigen TagInhalt enthält. Der Ergebnis-String des select-statements wird in einer Variablen gespeichert und in den Kontext gestellt. Das Template DetailedData.vm greift auf diese Variable zu und baut sie an passender Stelle ein. Die Web-Seite zeigt die gefilterten, detaillierten Informationen eines Prozesszustandes in Tabellenform

105 Seite VisualizedProcess.vm / VisualizedProcess.java Abbildung 5-28: VisualizedProcess.vm Klickt der Benutzer einen Link in der Visualization-Spalte der Web-Seite SearchResult.vm an wird das Template VisualizedProcess.vm aufgerufen. Wie in der Screen-Klasse DetailedData.java werden in der Screen-Klasse VisualizedProcess.java alle verfügbaren Schlüssel-Wert-Paare ausgelesen und in den Kontext gelegt. Außerdem wird eine weitere Methode private String createsvg() throws Exception aufgerufen. In dieser Methode wird zum ersten Mal die Kommunikation mit der Datenbank nicht Torque alleine überlassen. Dies ist erforderlich, weil es zurzeit via Torque nicht möglich ist, in der Datenbank gespeicherte Prozeduren mit Parametern aufzurufen. Nachdem die Verbindung zur Datenbank aufgebaut worden ist, wird die Prozedur zur dynamischen Generierung von SVG-Grafiken aufgerufen, die im Kapitel

106 Seite 98 Dynamische Generierung von SVG-Grafiken beschrieben wurde. Der Aufruf geschieht mit einem Objekt der Klasse java.sql.callablestatement. CallableStatement pstmt = con.preparecall("{ CALL Portal01.ProcessPortal.getProcessImage (?,?,?,?,? )}"); pstmt.setint(1, pstmt.setint(2, pstmt.setint(3, pstmt.setint(4, 100); 100); 100); 100); pstmt.registeroutparameter(5, java.sql.types.clob); pstmt.execute(); Clob xmlclob= pstmt.getclob(5); Code 24: Prozeduraufruf zur dynamischen Generierung von SVG-Grafiken in Java Die ersten vier Fragezeichen werden mit Parametern gefüllt, das fünfte Fragezeichen in der Signatur der Prozedur wird als Ausgabeparameter deklariert. Nachdem das Statement ausgeführt worden ist, wird der Ausgabeparameter der Prozedur ausgelesen und in einer CLOB-Variablen abgelegt. Anschließend erfolgt eine Umwandlung der CLOB-Variable in einen String. Des Weiteren wird die aktuelle Systemzeit in Millisekunden in einer long-variable gespeichert. Dann wird ein Dateiname unter Verwendung der long-variable erstellt, ein neues File-Objekt mit diesem eindeutigen Dateinamen angelegt und der String, der den SVG-Grafik-Code enthält, in dieses File-Objekt geschrieben. Zum Schluss wird die Datei auf der Festplatte abgelegt. Der Dateiname wird an den Aufrufer zurückgegeben und in den Kontext gestellt. Der Dateiname ist wichtig, weil im object-tag mit dieser Information auf die richtige SVG-Datei zugegriffen wird. <object id="showprocesssvg" data="$content.geturi("/images/svg/$svgfile")" width="100%" type="image/svg+xml"> <embed src="$content.geturi("/images/svg/$svgfile")" width="100%" type="image/svg+xml" /> </object> Code 25: Object-Tag des Templates VisualizedProcess.vm Zum Schluss wird eine Grafik auf dem Bildschirm angezeigt, die nur aus Abhängigkeiten eines Sub-Prozesses entstanden ist

107 Seite Resümee Die Aufgabe, in einen mir bis dato unbekannten Geschäftssektor ein Verständnis für die Abläufe in einem Bankenbetrieb zu entwickeln, nahm das erste Drittel der Zeit in Anspruch, die für diese Diplomarbeit gewährt wurde. Anschließend musste ich festlegen, welche Technologien und Werkzeuge zum Entwurf und Implementierung verwendet werden sollten. Eine Anforderung seitens der Dresdner Bank war es, Open Source-Software zu verwenden. Ich entschloss mich, Programme aus der Produktpalette der Apache Software Foundation zu nutzen. Hierbei stellte sich heraus, dass sich das Zusammenspiel der Open SourceProgramme zwar fordernder gestaltete als angenommen, aber dafür umso mehr meinen Spaß an dieser Arbeit steigerte. Da die finanziellen Mittel heutzutage immer knapper werden und die Unternehmen immer mehr auf die Ausgaben für Software-Lizenzen achten, bin ich sehr dankbar, dass es mir möglich war, mit einigen Open Source-Programmen der Apache-Gruppe zu arbeiten und diese kennen zu lernen Der Fakt, dass für das Prozess-Portal eine eigene Datenbank nötig war, stellte sich als glücklicher Umstand heraus. Nicht nur der Entwurf, die Modellierung und das Anlegen der Datenbank in dieser Arbeit steigerten meinen Lerneffekt, sondern auch die Interaktion der Datenbank mit der Anwendung über die Open SourceProgramme. Ein weiterer positiver Nebeneffekt war für mich die Tatsache, dass mir eine OracleDatenbank zur Verfügung gestellt wurde. Die Oracle-Datenbanksoftware Oracle 9i beinhaltet einige XML-Funktionen, mit deren Hilfe ich Transformationen von XMLDokumenten in der Datenbank bewältigt habe. Sogar die dynamische Generierung von XML-Code (SVG-Grafik) innerhalb der Datenbank wurde mit diesen Funktionen gelöst. Mein Entschluss, als Entwicklungsumgebung die Eclipse-Plattform zu nutzen, war eine sehr gute Entscheidung. Die Ausbaufähigkeit von Eclipse durch entsprechende Plug-ins kam mir bei der Entwicklung des Prozess-Portals sehr entgegen, so dass ich in der Lage war, trotz einer Vielzahl von Programmen alles in einer Entwicklungsumgebung steuern zu können. Wie bereits erwähnt, stellt die vorliegende Version des Prozess-Portals zum Zeitpunkt der Abgabe dieser Diplomarbeit lediglich eine Basisplattform dar, auf der spätere Arbeiten aufbauen können. Die elementaren Grundeigenschaften eines Internet-Portals wurden in die Anwendung übernommen

108 Seite 100 Aufgrund der Wahl des Web-Frameworks Turbine war es mir möglich, das Sicherheits- und Benutzerkonzept von Turbine zu übernehmen und auf das Portal abzustimmen. Einmal im Prozess-Portal angemeldet, muss der Benutzer sich nicht für jede Anwendung neu anmelden (Grundeigenschaft 1). Das Prozess-Portal verfügt über ein einheitliches Struktur- und Layoutmanagement. Dies bedeutet, dass das Ergebnis dieser Arbeit für jeden Benutzer gleich aussieht (Grundeigenschaft 2). Eine Suchfunktion über die Geschäftsprozesse und deren Zustände wurde ebenfalls in die Anwendung übernommen (Grundeigenschaft 3). Sie lässt zurzeit eine beschränkte Suche über die Indexfelder eines Prozesses zu. Weiterhin ist die Suche zeitlich eingrenzbar. Die Fülle und Komplexität der Geschäftsprozesse inklusive deren Zustände der Dresdner Bank ließ keine vollständige Portierung in das Prozess-Portal zu. Die Funktionalitäten und Möglichkeiten der Anwendung sind nur mit wenigen Testdaten überprüft worden. 2Ausblick Wie bereits im Resümee erwähnt wurde, stellt das Ergebnis dieser Arbeit eine Basisplattform eines Internet-Portals dar. Dies bedeutet, dass das Prozess-Portal um beliebig viele Funktionen und Anwendungen erweitert werden kann. Das Benutzer- und Sicherheitskonzept wurde nur mit zwei Benutzern (Administrator und normaler Benutzer) getestet. Eine Übernahme der Angestellten der Dresdner Bank stellt kein Problem dar. Der zuständigen Abteilung muss lediglich mitgeteilt werden, in welche Tabellen die Angestelltendaten eingespielt werden sollen. Die Vergabe von Rechten und Rollen und die Zuteilung in Gruppen können mit Hilfe der im Prozess-Portal implementierten Tabellen-Administration geschehen. Eine mögliche Funktion könnte die Anzeige von Prozessabhängigkeiten zwischen den verschiedenen Anwendungen der Dresdner Bank Luxembourg S.A. sein, die der Benutzer per Klick erreichen kann. Das Prozess-Portal könnte um eine aggregierte Sicht auf bestimmte Merkmale erweitert werden (beispielsweise die Gesamtsumme eines Status oder das Wertpapiervolumen eines Kunden usw.). Weiter wäre eine Funktion sinnvoll, um Statistiken zu einem bestimmten Prozess, einer Instanz und zu Indexfeldern anzuzeigen. Prozess-Statistiken könnten zur Ermittlung der Fehlerquote oder der Durchlaufzeit eines Prozesses dienen. Aufgrund der Zeitknappheit am Ende der Diplomarbeit weist zum Beispiel das Erscheinungsbild der SVG-Grafik einige Mängel auf. Diese Mängel zu beheben und die Funktionen innerhalb der Grafik zu perfektionieren, wären ein weiteres Ziel

109 Seite 101 Die Tatsache, dass es sozusagen für jeden Prozess einen eigenen Monitor zur Überwachung gibt, macht ein weiteres Entwickeln des Prozess-Portals äußerst interessant. Zwar ist es zum jetzigen Zeitpunkt nicht abschätzbar, wie groß die Zeitersparnis des Anwenders und die daraus resultierende Geldersparnis für das Unternehmen Dresdner Bank wäre, aber man kann mit Sicherheit sagen, dass dieser Betrag nicht unerheblich ist. Zusammenfassend kann gesagt werden, dass das Prozess-Portal eine Vielzahl von Erweiterungsmöglichkeiten aufweist, die den Nutzen für den Anwender steigern könnten

110 Aufbau eines Prozessportals Glossar Seite 102 Glossar Ant Ant ist ein in Java implementiertes Werkzeug, um aus Quellcode automatisiert Programme zu erzeugen. Eclipse Eclipse ist eine freie Entwicklungsumgebung und bildet den Kern der Anwendung, die die einzelnen Plug-ins lädt, welche die eigentlichen Funktionalitäten zur Verfügung stellen. Framework Ein Framework ist ein durch einen Software-Entwickler anpassbares oder erweiterbares System kooperierender Klassen, die einen wiederverwendbaren Entwurf für einen bestimmten Anwendungsbereich implementieren. [BAL01] Front-Office-System Einrichtungen und Applikationen, die im Bereich ecommerce dem direkten Kundenkontakt dienen. [WEB05] HTML (Hyper Text Markup Language Auszeichnungsformat zur Gestaltung von Web-Seiten HTTP (HyperText Transfer Protocol) Protokoll für den Transfer von Daten über das Internet J2EE (Java2 Platform, Enterprise Edition) Abkürzung für Java 2 Platform, Enterprise Edition. Spezifikation Standardarchitektur für die Ausführung von J2EE-Applikationen einer J2SE (Java2 Platform, Standard Edition) Abkürzung für Java 2 Platform, Standard Edition. Java-Plattform für client-seitige Applikationsentwicklung Maven Maven ist eine Werkzeug, um in Java programmierte Projekte zu managen und automatisiert Software-Build-Prozesse durchzuführen. Es integriert die freie MakeAlternative Ant und ist durch eine Plug-in-Architektur beliebig erweiterbar. [IX01]

111 Aufbau eines Prozessportals Glossar Seite 103 Prozess Inhaltlich abgeschlossene, zeitliche und sachlogische Folge von Aktivitäten, die zur Bearbeitung eines betriebswirtschaftlichen Objektes (z.b. Wertpapierorder) notwendig ist. Repository Datenspeichereinrichtung ähnlich einer Datenbank. Man kann ein Repository auch als Lager oder Archiv zur Aufbewahrung von Programmen und Dokumenten bezeichnen Single-Sign-On Ein Benutzer kann nach einer einmaligen Identifizierung auf alle Rechner und Dienste zugreifen, für die er berechtigt ist, ohne sich jedes Mal neu anzumelden. [WEB05] Tomcat Ein Web-Server delegiert Anfragen seiner Clients an Java-Objekte der Java 2 Platform, Enterprise Edition, um Antworten für die Clients zu erzeugen. Diese Instanzen existieren in einem Web-Container. Tomcat ist solch ein Web-Container. Torque Torque ist ein objektrelationales Mapping-Werkzeug für Datenbanken. Turbine Turbine ist ein Web-Applikations-Framework, das nach dem erweiterten MVC-Modell implementiert ist. Velocity Velocity ist eine auf Java basierende Template Engine (Schablone, Vorlage) des Apache Jakarta-Projekts. XML (extensible Markup Language) Standard zur Erstellung maschinen- und menschenlesbarer Dokumente in Form einer Baumstruktur. XML definiert dabei die Regeln für den Aufbau solcher Dokumente. XSL (extensible Stylesheet Language) Sprache zur Spezifikation von Stylesheets. Sie bietet Instruktionen, um XML-Daten zu formatieren. Um ein XML-Dokument tatsächlich umzuwandeln, nutzen Applikationen XSLT, das eine Erweiterung von XSL darstellt

112 Aufbau eines Prozessportals Glossar Seite 104 XSLT (XSL Transformations) Sprache zur Transformation von XML-Dokumenten in andere XML-Dokumente oder in Dokumente anderen Formats, wie beispielsweise HTML. Eine Applikation kann XSLT nutzen, um Dokumente umzuwandeln, ausgehend von Instruktionen in einem XSL-Stylesheet oder aber davon unabhängig

113 Aufbau eines Prozessportals Literaturverzeichnis Seite 105 Anhang Anhang A Maven ()i Installation Nach dem Download und dem Entpacken der Maven-Datei in ein Verzeichnis freier Wahl muss man die Umgebungsvariablen anpassen. Die $MAVEN_HOME-Variable setzt man auf das Verzeichnis, in das man Maven installiert hat. Außerdem wird die $PATH-Variable um das bin-verzeichnis von Maven erweitert. Optional kann ein lokales Repository im HOME-Verzeichnis des angemeldeten Users erstellt werden. Windows: SET MAVEN_HOME=c:\apache\maven SET PATH=%PATH;%MAVEN_HOME%\bin Code 26: Umgebungsvariablen setzen Nun kann man durch Absetzen des Kommandos maven v auf der Konsole testen, ob die Installation funktioniert hat und die Umgebungsvariablen korrekt angepasst worden sind. Maven müsste nun die Nummer der installierten Version zurückliefern. Als nächstes muss man ein lokales Repository anlegen. Sinn eines lokalen Repository ist es, eine Bibliothek (z. B.: jar-datei) genau einmal zur Verfügung zu stellen, damit die jar-archive für alle Projekte genutzt werden können. [WEB21] ()ii Konfiguration )1 build.properties Einstellungen, die für alle Projekte gelten, werden in der Datei build.properties im Home-Verzeichnis des am System angemeldeten Users gesetzt. Beispielhaft sind hier nur zwei Einstellungen aufgeführt, die in dieser Arbeit verwendet worden sind: #lokales maven-verzeichnis maven.local.home=c:/apache/maven #remote repository maven.repo.remote=http://www.ibiblio.org Code 27: Beispieleinträge der lokalen build.properties -Datei (maven) Zum zweiten Eintrag ist noch anzufügen, dass Maven beim Start prüft, ob Bibliotheken, die in der Datei project.xml angegeben worden sind, lokal schon gespeichert wurden. Ist dies nicht der Fall, wird automatisch versucht, diese Bibliotheken aus dem Remote-Repository (http://www.ibiblio.org) zu laden

114 Aufbau eines Prozessportals Literaturverzeichnis Seite 106 )2 project.xml Die Datei project.xml basiert auf dem Project Object Model (POM). Objekte dieser Datei können sein: Projektname, -version, -beschreibung und die Lizenz URL der Projekthomepage Zugang zum CVS Repository Projektmitglieder und Personen, die etwas zum Projekt beisteuern Sehr wichtig: Abhängigkeiten der verschiedenen jar-archive Die Datei project.xml wird erst beim Erstellen eines Projektes erzeugt. Mit den oben genannten Einstellungen ist die Grundkonfiguration von Maven abgeschlossen. <project> <!-- Die POM-Version, welche aktuell genutzt werden soll. --> <pomversion>3</pomversion> <!-- Ein eindeutiger Name für das Projekt. --> <id>app</id> <!-- Eine kurze Beschreibung für das Projekt. --> <name>example Application</name> <!-- Die Version der Anwendung. --> <currentversion>1.0</currentversion> <!-- Details über die Organisation des Projekts. --> <organization> <name>example Organisation</name> <url>http://www.example-url.com/</url> <logo>http://www.example-url.com/images/example.gif</logo> </organization> <!-- Das Jahr, in dem das Projekt gestartet ist. --> <inceptionyear>2004</inceptionyear> <package>example.app</package> <logo>http://www.example-url.com/images/logo.jpg</logo> <description>example description</description> <!-- Eine kleine Beschreibung des Projekts. --> <shortdescription>short example description</shortdescription> <!-- Die Homepage des Projekts. --> <url>http://www.exampleproject-url.com/</url> <siteaddress>exampleproject-url.com</siteaddress> <sitedirectory>/reference/plugins/examples/</sitedirectory> <distributiondirectory>/url/builds/</distributiondirectory> <!-- Informationen über das cvs system. --> <repository>

115 Aufbau eines Prozessportals Literaturverzeichnis Seite 107 cvspublic:maven-plugins/examples</connection> <url>http://cvs.example-url/maven-plugins/examples/</url> </repository> <!-- Entwickler des Projekts. --> <developers/> <!-- Jar-Archive, die dieses Projekt benutzt. --> <dependencies/> <!-- Build-Informationen für dieses Projekt. --> <build> <sourcedirectory>src/java</sourcedirectory> <unittestsourcedirectory>src/test</unittestsourcedirectory> <unittest> <includes> <include>**/*test.java</include> </includes> <excludes> <exclude>**/naughtytest.java</exclude> </excludes> </unittest> <resources> <resource> <directory>src/conf</directory> <includes> <include>*.properties</include> </includes> </resource> </resources> </build> </project> Code 28: Beispiel für Einträge in der Datei project.xml

116 Aufbau eines Prozessportals Literaturverzeichnis Seite 108 Anhang B Beschreibung der Entwicklung mit der Entwicklungsumgebung Eclipse Eclipse, hauptsächlich initiiert und vertrieben von IBM, ist eine Entwicklungsumgebung für die Entwicklung mit unterschiedlichsten Programmiersprachen, Skriptsprachen oder Tools. Der Vorteil von Eclipse ist der modulare Aufbau und die Tatsache, dass Eclipse Freeware ist. Dies bedeutet, dass es als Open-Source-Software frei erhältlich und einsetzbar ist und man den Quellcode einsehen und unter Umständen sogar anpassen kann. Eclipse ist ein Rahmenwerk zur Integration verschiedenster Anwendungen. Eine solche Anwendung ist z.b. die mitgelieferte Java Entwicklungsumgebung JDT (Java Development Tooling). Diese Anwendungen werden in Form so genannter Plug-ins zur Verfügung gestellt und von der Eclipse-Plattform automatisch erkannt und integriert. Eclipse bietet weiterhin Funktionalität zum Verwalten von Ressourcen (normalerweise Dateien) auf der Festplatte. Diese befinden sich im so genannten Workspace, einem speziellen Verzeichnis im Dateisystem. Verändert eine Anwendung eine solche Ressource aus Eclipse heraus, werden auch die anderen Anwendungen - über entsprechende Benachrichtigungsmechanismen - davon erfahren (Externes Manipulieren von Ressourcen). Der Benutzer arbeitet dabei immer in der Workbench, dem grafisch sichtbaren Teil der Eclipse-Plattform. Das konkrete Aussehen der Workbench wird von der gerade ausgewählten Perspektive bestimmt. Diese fassen jeweils eine Menge von so genannten Views und Editoren zusammen und stellen spezielle Befehle für die Menü- und Werkzeugleisten zur Verfügung. Eine View bietet hierbei meist eine Sicht auf die vorhandenen Ressourcen. Je nach View werden nur Teile oder auch innere Zusammenhänge zwischen den Ressourcen angezeigt. Ein Editor dient zum Bearbeiten einer Ressource. Hierbei wird ein strikter LadenVerändern-Speichern-Lebenszyklus eingehalten. Erst wenn eine im Editor veränderte Ressource auch gespeichert wird, können alle oben erwähnten Benachrichtigungsmechanismen greifen. Spezielle Views können auch direkt mit einem Editor (und nicht mit der eigentlichen Ressource) gekoppelt werden. Zum Beispiel ist die Outline View der JavaPerspektive direkt an den Java-Quelltexteditor gekoppelt. Eine Besonderheit bei Eclipse ist nun die äußerste Flexibilität, mit der vorhandene Views und Editoren kombiniert werden können. Nicht nur die Anordnung der Workbench ist frei wählbar. Man kann in eine geöffnete Perspektive jede andere View und jeden Editor hinzufügen, auch wenn diese in einem ganz anderen Plug-in definiert wurden. Dies ermöglicht es dem Benutzer, eine auf ihn zugeschnittene Entwicklungsumgebung zusammenzustellen

117 Aufbau eines Prozessportals Literaturverzeichnis Seite 109 Anhang C Konfiguration von Torque Um Torque einzurichten, ist keine Programmierarbeit notwendig. Für das Erzeugen eines Datenbankschemas und die dazu gehörenden so genannten Peer-Klassen, die einen Zugriff auf Datenbankelemente durch Java-Aufrufe ermöglichen, müssen lediglich zwei Konfigurationsdateien sowie maximal zwei Schemadateien angepasst werden. [WEB18] ()i build.properties Die erste Konfigurationsdatei ist die Torque-Build-Datei. Diese Datei regelt generelle Einstellungen hinsichtlich der Datenbank sowie der Zugriffsparameter. Man findet sie im Hauptverzeichnis von Torque. Wichtig ist, dass die Treiberklasse der jeweiligen verwendeten Datenbank im Klassenpfad tatsächlich auch vorhanden ist. Aufgrund der in dieser Diplomarbeit verwendeten, relationalen Oracle-Datenbank müssen entsprechende Jar-Dateien für die Treiber der Datenbank sowohl im Web-Inf/lib-Verzeichnis im Projekt-Ordner der Tomcat-Installation als auch im lib-verzeichnis von Torque vorhanden sein. [WEB18] ()ii torque.properties Die zweite Datei, die angepasst werden muss, heißt torque.properties. Diese Datei legt die Laufzeiteigenschaften fest und wird erst zur Laufzeit benötigt. In ihr werden nochmals Datenbankparameter analog zur build.properties hinterlegt. Des Weiteren findet man hier Einstellungen für das Logging. Bei Bedarf kann man diese Datei auch umbenennen. [WEB18] ()iii project-schema.xml Die wichtigste, anzupassende Datei ist die portal01-schema.xml. Diese enthält die Beschreibung der Entitäten, die via Torque an eine Datenbank gebunden werden sollen. Die Datei portal01-schema.xml liegt im Projekt-Unterverzeichnis /schema. Der Name der Datei ist dabei nicht fest vorgegeben und kann verändert werden, muss jedoch dem Aufbau xxx-schema.xml genügen. Äußerst positiv hervorzuheben ist, dass die in dieser Datei vorhandene Beschreibung völlig losgelöst von dem eingesetzten Datenbanksystem ist. Erst bei der konkreten Erzeugung der Datenbank wird das Zielsystem mit einbezogen. Der Vorteil hiervon ist, dass man basierend auf diesem Datenbankschema ohne größere Veränderungen eine Anbindung an ein anderes Datenbanksystem realisieren kann

118 Aufbau eines Prozessportals Literaturverzeichnis Seite 110 <database name="portal01" defaultidmethod="idbroker" defaultjavatype="object" package="lu.dresdner_bank.portal01.db"> <table name="subprocess" javaname="subprocess" idmethod="idbroker"> <column name="id" javaname="id" primarykey="true" required="true" type="integer" /> <column name="subprocessname" javaname="subprocessname" required="true" type="varchar" size="100" /> <column name="subprocessdesc" javaname="subprocessdesc" type="varchar" size="100" /> <column name="imagesourceid" javaname="imagesourceid" type="integer" /> <foreign-key foreigntable="imagesource"> <reference local="imagesourceid" foreign="id" /> </foreign-key> </table> </database> Code 29: Auszug aus der Datei portal01-schema.xml Wie an der Endung xml zu erkennen ist, werden die Entitäten in der XML-Sprache beschrieben. Ein Vorteil hiervon ist, dass diese Art der Beschreibung völlig losgelöst von dem einzusetzenden Datenbanksystem ist. Die meisten Elemente aus dem Code-Beispiel 5 sind selbsterklärend. Der umschließende database-tag beschreibt die Datenbank. Innerhalb dieses Tags befindet sich für jede Tabelle ein weiterer Tag. Die Tabellen-Tags enthalten für jede Spalte ein column-tag. Zu beachten ist das Attribut defaultidmethod. Dieses Attribut legt das Verhalten von Torque bezüglich Erzeugung von Primärschlüsseln der Tabellen fest. Es existieren drei Möglichkeiten, den Primärschlüssel zu erzeugen. 1. Verwendung der native-methode. Hier wird der Primärschlüssel anhand der zugrunde liegenden Datenbank erzeugt. 2. Wahl der Methode idbroker. Der IdBroker wird von Torque bereitgestellt und erzeugt Primärschlüssel, die nicht an ein spezielles Datenbanksystem gebunden sind. 3. Verwender der Methode none. Hier wird kein Primärschlüssel erzeugt, was bei n:m-beziehungen von Vorteil ist, da bei diesen Beziehungen meist ein aus den Fremdschlüsseln zusammengesetzter Primärschlüssel gewählt wird. Mit dem IdBroker-Service bietet Torque einen einfachen Mechanismus, um datenbanksystem-unabhängig Primärschlüssel zu generieren. Hierzu wird eine separate Tabelle zur Verwaltung dieser Schlüssel angelegt. Wählt man die IdBroker-Methode, hat man noch die Möglichkeit, eine weitere Schema-Datei anzupassen. Man muss dazu nur die Datei id-table-schema.xml im /schema-unterverzeichnis dahingehend ändern, dass der korrekte

119 Aufbau eines Prozessportals Literaturverzeichnis Seite 111 Datenbankname eingetragen wird. Alle weiteren Einstellungen können beibehalten werden. [WEB18] ()iv Erzeugung des Objektmodells Für das Build- und Managementwerkzeug Maven liegt ein Plug-in für das Tool Torque vor. Nachdem das Plug-in in den Repository-Ordner von Maven kopiert worden ist, liegen für Torque neue maven-goals vor, von denen nur die wichtigsten aufgeführt werden. torque generiert SQL-Dateien und das peer-basierte Objekt-Modell torque:create-db generiert die Ziel-Datenbank torque:datadtd generiert die DATA DTD für das Projekt torque:datasql generiert ein SQL-Skript anhand der data.xml torque:doc generiert Dokumentation für das Datenmodell torque:id-table-init-sql generiert das Startskript für den IdBroker torque:init erzeugt den classpath und grenzt die Ziele ab torque:insert-sql führt die generierten SQL-Skripte in der Datenbank aus torque:om generiert das peer-basierte Objekt-Modell torque:sql generiert SQL-Skripte für das Projekt Für alle Tabellen, die auf die IdBroker-Methode zugreifen, müssen Leereinträge vorhanden sein, bevor man mit der Anwendung darauf zugreifen kann. Ansonsten gibt es Fehlermeldungen und es werden keine Primärschlüssel erzeugt. Durch den Aufruf des Goals maven torque:om wird die Generierung der JavaKlassen angestoßen. Diese Klassen bieten daraufhin die Möglichkeit, auf die Tabellen und deren Datensätze via Methodenaufruf zuzugreifen, zu verändern oder zu löschen. Für jede Entität werden vier Klassen erzeugt. Als Beispiel soll hier eine Entität namens SubProcess dienen. Für diese Entität werden die Java-Klassen SubProcess.java, SubProcessPeer.java, BaseSubProcess.java und BaseSubProcessPeer.java angelegt. Die Basisklassen enthalten die von Torque erzeugte Logik und werden bei jedem neuen Generierungslauf überschrieben. Deshalb ist es nur sinnvoll, Änderungen und Erweiterungen, die dauerhaft genutzt werden sollen, in den Klassen SubProcess.java und SubProcessPeer.java vorzunehmen. Die beiden letztgenannten Klassen sind leer, erweitern aber die jeweilige Base-Klasse. [WEB18] ()v Erzeugung der Datenbank und der Tabellen Nach dem Erzeugen des Objekt-Modells liegen im Unterverzeichnis target/sql zusätzlich einige SQL-Skripte, mit denen die Datenbank samt den benötigten Tabellen erstellt werden kann. Für eine fehlerfreie Ausführung der Skripte ist es

120 Aufbau eines Prozessportals Literaturverzeichnis Seite 112 erforderlich, die jar-datei für den Datenbanktreiber in das lib-verzeichnis von Torque zu kopieren. Mit Aufruf von maven torque:create-db wird eine neue, aber auch leere Datenbank erzeugt. Existiert die Datenbank eventuell schon durch vorher getätigte Aufrufe, kann dieser Schritt auch entfallen. Es sei denn die Datenbank-Struktur hat sich grundlegend geändert. Um die Tabellen für die Entitäten sowie die Tabelle für die ID-Verwaltung anzulegen, setzt man folgende zwei Aufrufe ab: maven torque:id-table-init-sql und maven torque:insert-sql. [WEB18] ()vi Einbinden in eine Applikation Zwei Beispiele: 1. Neuer Datenbankeintrag: man legt ein neues Objekt wie in Java gewohnt an. Anschließend ruft man die passenden Methoden für dieses Objekt auf, um zum Beispiel eine neue Person mit Vor- und Nachnamen anzulegen. Zum Schluss wird das erzeugte Objekt in die Tabelle der Datenbank eingetragen und ein commit ausgeführt. Person persobj = new Person(); persobj.setvorname( Max ); persobj.setnachname( Mustermann ); persobj.save(); Code 30: Eintragen eines neuen Datensatzes via Torque 2. Abfrage von Daten: Hierzu verwendet man die Klasse Criteria. Man legt ein neues Objekt der Klasse Criteria an und fügt diesem Objekt Einschränkungen zu. Anschließend führt man hier in diesem Falle die doselect-methode mit dem Criteria-Objekt als Argument aus. Man erhält eine Liste mit den Datensätzen, die die doselect-methode in Verbindung mit den Einschränkungen des Criteria-Objektes zurückliefert. Criteria crit = new Criteria(); crit.add(personpeer.nachname, Mustermann ); List examplelist = PersonPeer.doSelect(crit); Iterator iter = list.iterator(); Code 31: Ein select-statement zusammenbauen und absetzen via Torque Die Liste wird in einen Iterator umgewandelt, über den man jetzt schleifen und sich zum Beispiel die Ergebnisse anzeigen lassen kann. Diese beiden Beispiele zeigen aber bei weitem nicht das komplette Leistungsspektrum von Torque. [WEB18]

121 Aufbau eines Prozessportals Literaturverzeichnis Seite 113 Anhang D Erstellen eines Beispiel-Projektes mit einer IDE (Eclipse) Erstellen einer neuen Turbine-Applikation maven -Dturbine.app.name=portal -Dturbine.app.package=lu.dresdner_bank.portal -Dturbine.app.om.package=lu.dresdner_bank.portal.om -Dtorque.database=oracle -Dtorque.database.driver=oracle.jdbc.driver.OracleDriver -Dtorque.database.user=portal01 -Dtorque.database.password=portal01 -Dtorque.database.buildUrl= -Dtorque.database.createUrl= turbine:setup Code 32: Statement mit Parametern zum Erstellen eines neuen Projekten Erstellen der Object-Model-Peer-Klassen maven torque:om Code 33: Maven-Goal torque:om Ändert sich das Objekt-Modell der Datenbank, muss dieses Kommando immer wieder erneut ausgeführt werden. Kompilieren der Applikation maven java:compile Code 34: Maven-Goal java: compile Diese Aktion stellt sicher, dass alle Abhängigkeiten der Projektbeschreibung in das lib-verzeichnis der Applikation kopiert werden. Die Applikation für Eclipse bereit stellen maven eclipse Code 35: Maven-Goal eclipse" Das Kommando erstellt eine für Eclipse typische.project-datei, welche Informationen enthält, die eine Ordnerstruktur als Eclipse-Projekt definieren. Nun kann man die erstellte Applikation in Eclipse importieren, indem man File -> Import -> Existing Project into Workspace klickt und im von Eclipse bereit gestellten Wizard den Ordner der Applikation angibt

122 Aufbau eines Prozessportals Literaturverzeichnis Seite 114 Abbildung 6-29: Helloworld -Projekt in Eclipse Zum Schluss muss man in den Projekteinstellungen Eclipse mitteilen, dass dieses Projekt eine Tomcat-Applikation ist und in einem Web-Container ausgeführt wird. Abbildung 6-30: Tomcat-Einstellungen für das Helloworld -Projekt

123 Aufbau eines Prozessportals Literaturverzeichnis Seite 115 Anhang E Java Reflection API ()i Class-Objekt Um den dynamischen Zugriff zu realisieren, muss ein Class-Objekt erstellt werden. Objekte der Klasse Class repräsentieren jeweils eine Java-Klasse. Hierfür definiert die Reflection API die Klassen Constructor, Method und Field. Die Klassen Constructor und Method besitzen Methoden lediglich zum Aufrufen und die Klasse Field zum Setzen und Auslesen. Objekte dieser Klassen werden nicht direkt erzeugt, sondern mit den Methoden getconstructor(), getmethod() und getfield() der Klasse Class besorgt. Das heißt, es muss immer zuerst ein Class-Objekt für die jeweilige Klasse ermittelt werden, um auf dessen Bestandteile dynamisch zuzugreifen. Es gibt mehrere Möglichkeiten, an ein Class-Objekt zu gelangen: 1) Ist ein Exemplar der Klasse vorhanden, kann die getclass()-methode auf dieses Exemplar angewendet werden und man erhält das Class-Exemplar der jeweiligen Klasse. 2) Des Weiteren enthält jede Klasse eine Klassenvariable mit Namen.class vom Typ Class. Auch auf primitive Datentypen (int, char usw.) ist das Ende.class erlaubt. Ebenso verhält es sich mit dem Zugriff auf die statische Variable TYPE der Wrapper-Klassen. 3) Als nächste Methode kann man über den Namen und Aufruf der Klassenmethode Class.forName(String) an das Class-Objekt kommen. Dies ist sinnvoll, wenn der Klassenname bei der Übersetzung des Programms noch nicht fest stand. Ein Class-Objekt kann eine Schnittstelle, eine Klasse, einen primitiven Datentyp oder einen Array-Typ beschreiben. Durch die drei Methoden isinterface(), isprimitive() und isarray() ist diese Unterscheidung möglich. ()ii Modifizierer Modifizierer sind Schlüsselwörter. Eine Klassendeklaration kann Schlüsselwörter enthalten. Schlüsselwörter können unter anderem die Sichtbarkeit bestimmen (z.b.: public, protected, private usw.). Sie werden in der Klassendeklaration, vor dem Schlüsselwort class oder vor Methoden verwendet. Um an die Modifizierer zu gelangen, wird die Methode getmodifiers() verwendet. Der Rückgabewert ist eine Ganzzahl, welche für eine bestimmte Sichtbarkeit steht. Modifizierer können auch kombiniert werden (z. B.: public static void main())

124 Aufbau eines Prozessportals Literaturverzeichnis Seite 116 Damit man sich nicht die Zahlen merken muss, gibt es eine Reihe von isxxx()methoden, die diese Ganzzahl testen. Des Weiteren sind Konstanten definiert (z. B.: Modifier.PUBLIC), mit denen man Integer-Werte vergleichen kann. Aufgrund der Kombination von Modifizierern ist es aber einfacher, den Wert der Ganzzahl über die isxxx()-methoden abzufragen. ()iii Methoden einer Klasse Um herauszufinden, welche Methoden eine Klasse besitzt, gibt es die Methode getmethods(). Sie liefert ein Array mit allen öffentlichen Method-Objekten der Klasse zurück, auf die sie angewendet worden ist. Des Weiteren werden geerbte Methoden in das Array übernommen. Eine alphabetische Sortierung des Arrays liegt nicht vor. Nun kann man sich mit getname() den Methodennamen, mit getreturntype() den Ergebnistypen und mit getparametertypes() ein Array von Class-Objekten geben lassen, das die Typen der Methodenparameter enthält. ()iv Konstruktoren einer Klasse Konstruktoren und Methoden haben einige Gemeinsamkeiten. Einer der Hauptunterschiede jedoch ist, dass Konstruktoren keinen Rückgabewert besitzen. Die Gemeinsamkeiten von Konstruktoren und Methoden kann man an der Methode getconstructors() der Klasse Class sehen. Der Aufruf dieser Methode auf ein Class-Objekt liefert ein Array mit Constructor-Objekten zurück. Analog zum Methoden-Array kann man hier wieder Name, Modifizierer, Parameter und Exceptions abfragen. ()v Objekte erzeugen Normalerweise erzeugt man mit dem new-operator zur Laufzeit ein Objekt einer Klasse. Hierzu muss man aber den Namen der Klasse kennen, um den korrekten Konstruktor aufzurufen. Ist der Name aber nicht zur Laufzeit bekannt, kann man mit dem new-operator nichts anfangen. Damit man dynamisch Objekte von Klassen erzeugen kann, braucht man das zu einer bestimmten Klasse passende Class-Objekt. Anschließend besorgt man sich über dieses Class-Objekt ein Constructor-Objekt, welches dem gewünschten Konstruktor entspricht. Dieses Constructor-Objekt kennt die Methode newinstance(object[]). Das Object-Array der newinstance()-methode stellt die Parameter des Konstruktors dar. Durch den korrekten Aufruf der Methode erhält man ein dynamisch erzeugtes Objekt einer Klasse, welches zur Kompilierzeit nicht bekannt war. In dieser Diplomarbeit war es nicht nötig, auf diese Weise neue Objekte zu erzeugen. Sie wurden durch den Aufruf der newinstance()-methode auf ein Class-Objekt erzeugt, wobei die newinstance()-methode keine Parameter hatte

125 Aufbau eines Prozessportals Literaturverzeichnis Seite 117 ()vi Methoden aufrufen Ein weiterer sehr wichtiger Punkt ist das Aufrufen von Methoden mittels Java Reflection. Eine zur Kompilierzeit nicht bekannte Methode kann im Programm dennoch aufgerufen werden, wenn der Methodenname als Zeichenkette vorliegt. Falls die Methode überladen ist, wird noch die Parameterliste in Form von ClassObjekten benötigt. Als erstes benötigt man das Class-Objekt für die Klasse, auf welche die Methode angewendet werden soll. Ist der Methodenname bekannt, ruft man auf das ClassObjekt die getmethod()-methode auf, welche zwei Argumente besitzt. Zum Ersten einen String für den Methodennamen und zum Zweiten ein Array von ClassObjekten. Jedes Element dieses Arrays entspricht einem Parametertyp aus der Signatur der Methode zur Unterscheidung von überladenen Methoden. Durch die Methode invoke(object object, Object[] args) der Java Reflection-Klasse Method kann man einen Aufruf absetzen. Die invoke-methode besitzt ebenfalls zwei Parameter. Der erste Parameter ist eine Objektreferenz, d.h. für dieses Objekt wird die Methode aufgerufen. Der zweite Parameter liefert ein Object-Array, welches der aufrufenden Methode übergeben wird. Als Rückgabewert nach Aufruf der Methode invoke erhält man bei einfachen Datentypen ein Exemplar der jeweiligen Wrapper-Klasse (z. B.: int, boolean usw.) oder bei void ein Objekt der Klasse Void zurück. ()vii Zugriff auf Datenelemente Der Zugriff auf Datenelemente ist von einfacherer Natur als der Aufruf von Methoden. Es werden keine Angaben von Parameterwerten und typen gemacht. Um ein Field-Objekt zu einem Datenelement zu ermitteln, reicht es aus, der Methode Class.getField den Namen des Datenelementes zu übergeben. Darüber hinaus definiert die Klasse Field Hilfsmethoden zum Setzen und Lesen von Feldern mit einfachen Datentypen. Beispielsweise gibt es für den Typ int die Methoden setint() und getint(). Dies macht ein Anlegen von Wrapper-Objekten überflüssig

126 Aufbau eines Prozessportals Literaturverzeichnis Seite 118 Anhang F SVG Da eine SVG-Datei eine XML-Datei ist, wird mit der XML-Deklaration und Dokumenttypdeklaration begonnen, die den Namensraum beschreibt. Eine entsprechende DTD wird ebenfalls eingefügt. Anschließend folgt der Start-Tag <svg>, das die Elemente der SVG-Grafik umfasst. <?xml version="1.0" encoding="iso " standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/tr/2001/rec-svg /dtd/svg10.dtd"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300"> </svg> Code 36: SVG-Grundgerüst Alle grafischen Objekte in SVG bauen auf einfachen grafischen Grundelementen auf. Komplexere Objekte sind dabei aus mehreren einfachen Objekten zusammengesetzt, die im folgenden Code-Beispiel nachgelesen werden können. <circle cx="100" cy="200" r="50" style="fill:blue;" /> <ellipse cx="100" cy="100" rx="50" ry="20" style="fill:red;"/> <rect x="200" y="70" width="100" height="200" style="fill:green;"/> <line x1="100" y1="100" x2="200" y2="200" style="fill:yellow;" /> <polygon points=" " style="fill:purple;"/> <text x="30" y="50" style="font-size:40">hallo Welt!</text> <polyline points="350 10, " stroke="yellow" stroke-width="5px" /> Code 37: Grafische Grundelemente einer SVG-Grafik Fügt man beide oben aufgeführten Code-Beispiele zusammen, erhält man folgende SVG-Grafik: Abbildung 6-31: Beispiel für eine SVG-Grafik

Benutzerdokumentation Web-Portal

Benutzerdokumentation Web-Portal GRUPP: SWT0822 Benutzerdokumentation Web-Portal Yet Another Reversi Game Martin Gielow, Stephan Mennicke, Daniel Moos, Christine Schröder, Christine Stüve, Christian Sura 05. Mai 2009 Inhalt 1. Einleitung...3

Mehr

TECHNISCHE PRODUKTINFORMATION CARUSO

TECHNISCHE PRODUKTINFORMATION CARUSO 1111 TECHNISCHE PRODUKTINFORMATION CARUSO TECHNISCHE PRODUKTINFORMATION Seite 0/7 Inhalt 1 Systemdefinition............2 2 Technische Details für den Betrieb von CARUSO......2 2.1 Webserver... 2 2.2 Java

Mehr

Relationale Datenbanken Datenbankgrundlagen

Relationale Datenbanken Datenbankgrundlagen Datenbanksystem Ein Datenbanksystem (DBS) 1 ist ein System zur elektronischen Datenverwaltung. Die wesentliche Aufgabe eines DBS ist es, große Datenmengen effizient, widerspruchsfrei und dauerhaft zu speichern

Mehr

Version 4.4. security.manager. Systemvoraussetzungen

Version 4.4. security.manager. Systemvoraussetzungen Version 4.4 security.manager Systemvoraussetzungen Version 4.4 Urheberschutz Der rechtmäßige Erwerb der con terra Softwareprodukte und der zugehörigen Dokumente berechtigt den Lizenznehmer zur Nutzung

Mehr

09.06.2003 André Maurer andre@maurer.name www.andre.maurer.name Wirtschaftsinformatik FH 3.5 Fachhochschule Solothurn, Olten

09.06.2003 André Maurer andre@maurer.name www.andre.maurer.name Wirtschaftsinformatik FH 3.5 Fachhochschule Solothurn, Olten Aktuelle Themen der Wirtschaftsinformatik Zusammenfassung 09.06.2003 André Maurer andre@maurer.name www.andre.maurer.name Wirtschaftsinformatik FH 3.5 Fachhochschule Solothurn, Olten 1 Serverseitige Webprogrammierung

Mehr

Apache Tomcat. Inhalt. Rechner und Netzarchitektur SS 2003. Einleitung. Architektur

Apache Tomcat. Inhalt. Rechner und Netzarchitektur SS 2003. Einleitung. Architektur Apache Tomcat Rechner und Netzarchitektur SS 2003 Johannes Jabornig Daniel Peintner Inhalt Einleitung Was sind Servlets und JSP Vorteile Architektur Catalina Jasper Konnektoren Installation / Konfiguration

Mehr

Von SAP R/3 zu mysap ERP und NetWeaver

Von SAP R/3 zu mysap ERP und NetWeaver Von SAP R/3 zu mysap ERP und NetWeaver Bremerhaven 06.05.2006 T4T Bremerhaven 1 Inhaltsverzeichnis 1. Motivation für SAP NetWeaver 2. SAP R/3 mysap ERP und SAP Business Suite 3. Application Platform T4T

Mehr

Managed VPSv3 Was ist neu?

Managed VPSv3 Was ist neu? Managed VPSv3 Was ist neu? Copyright 2006 VERIO Europe Seite 1 1 EINFÜHRUNG 3 1.1 Inhalt 3 2 WAS IST NEU? 4 2.1 Speicherplatz 4 2.2 Betriebssystem 4 2.3 Dateisystem 4 2.4 Wichtige Services 5 2.5 Programme

Mehr

DRESDEN, 08.10.2009 CHRISTIAN.KNAUER@INF.TU-DRESEDEN.DE

DRESDEN, 08.10.2009 CHRISTIAN.KNAUER@INF.TU-DRESEDEN.DE DOKUMENTATION MAAS - MONITORING AS A SERVICE DRESDEN, 08.10.2009 CHRISTIAN.KNAUER@INF.TU-DRESEDEN.DE Dokumentation MaaS - Monitoring as a Service Inhalt 1. MaaS - Monitoring as Service... 3 1.1 Einleitung...

Mehr

Herzlich Willkommen! eine praxisnahe Übersicht. Mit Java ins Web - mb@bebox.franken.de. 26.11.2000 (c) Michael Behrendt -

Herzlich Willkommen! eine praxisnahe Übersicht. Mit Java ins Web - mb@bebox.franken.de. 26.11.2000 (c) Michael Behrendt - Herzlich Willkommen! Mit Java ins Web - eine praxisnahe Übersicht 1 Wer bin ich? Michael Behrendt, 21, Nürnberg kurzer Lebenslauf: 1991 Erster Rechner: Commodore C128 1995 Ausbildung zum Datenverarbeitungskaufmann

Mehr

3 Anwendungsarchitektur und Entwicklungsumgebung

3 Anwendungsarchitektur und Entwicklungsumgebung 21 3 Anwendungsarchitektur und Bei den Entwicklern von Web-basierten Dialogsystemen hat sich im Laufe der Zeit eine Vorgehensweise im Design von Anwendungen entwickelt, dies es ermöglicht, flexible Web-Dialoge

Mehr

Grundlagen der Verwendung von make

Grundlagen der Verwendung von make Kurzskript zum Thema: Grundlagen der Verwendung von make Stefan Junghans Gregor Gilka 16. November 2012 1 Einleitung In diesem Teilskript sollen die Grundlagen der Verwendung des Programmes make und der

Mehr

Oracle BI Publisher in der Oracle Business Intelligence Enterprise Edition Plus. Eine Mehrwertdiskussion

Oracle BI Publisher in der Oracle Business Intelligence Enterprise Edition Plus. Eine Mehrwertdiskussion Oracle BI Publisher in der Oracle Business Intelligence Enterprise Edition Plus Eine Mehrwertdiskussion Der Oracle BI Publisher als Teil der Oracle BI Suite versus Oracle BI Publisher Standalone Der Oracle

Mehr

Web 2.0 Software-Architekturen

Web 2.0 Software-Architekturen Web 2.0 Software-Architekturen Servlets als Controller einer MVC Web Architektur Prof. Dr. Nikolaus Wulff HTTP und HTML Das HyperText TransferProtokoll (HTTP) beschreibt eine einfache verbindungslose Kommunikation,

Mehr

Dataport IT Bildungs- und Beratungszentrum. HTML- Grundlagen und CSS... 2. XML Programmierung - Grundlagen... 3. PHP Programmierung - Grundlagen...

Dataport IT Bildungs- und Beratungszentrum. HTML- Grundlagen und CSS... 2. XML Programmierung - Grundlagen... 3. PHP Programmierung - Grundlagen... Inhalt HTML- Grundlagen und CSS... 2 XML Programmierung - Grundlagen... 3 PHP Programmierung - Grundlagen... 4 Java - Grundlagen... 5 Java Aufbau... 6 ASP.NET Programmierung - Grundlagen... 7 1 HTML- Grundlagen

Mehr

Modul 2.4.1: Möglichkeiten zur Erweiterung des Internet-Auftritts der Schule zu einem umfassenden Auftritt als Bildungsnetzwerk

Modul 2.4.1: Möglichkeiten zur Erweiterung des Internet-Auftritts der Schule zu einem umfassenden Auftritt als Bildungsnetzwerk Informationsmaterial zum Modul-Nr. 2.4: Bildungsnetzwerke planen (Schwerpunkt: IT-Unterstützung in Bildungsnetzwerken) Modul 2.4.1: Möglichkeiten zur Erweiterung des Internet-Auftritts der Schule zu einem

Mehr

Android Kurs Online Kurs Entwicklung auf Android-Handys

Android Kurs Online Kurs Entwicklung auf Android-Handys Android Kurs Online Kurs Entwicklung auf Android-Handys Akademie Domani info@akademiedomani.de Allgemeines Programm des Kurses Modul Eins - Programmierung J2ee 1) Grundlegende Java - Programmierung : Grundlegende

Mehr

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Präsentation zur Diplomarbeit von Übersicht Java 2 Enterprise Edition Java Servlets JavaServer Pages Enterprise JavaBeans Framework

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

Remote Communications

Remote Communications HELP.BCFESDEI Release 4.6C SAP AG Copyright Copyright 2001 SAP AG. Alle Rechte vorbehalten. Weitergabe und Vervielfältigung dieser Publikation oder von Teilen daraus sind, zu welchem Zweck und in welcher

Mehr

Die Laborjournalführungs-Software professionell - zuverlässig

Die Laborjournalführungs-Software professionell - zuverlässig Produktinformation Die Laborjournalführungs-Software professionell - zuverlässig Integration von InfoChem ICEdit, ensochemeditor, MDL ISIS / Draw und CS ChemDraw Optional mit Schnittstelle zu anderen Datenbanksystemen

Mehr

1. Java Grundbegriffe

1. Java Grundbegriffe 1. Java Grundbegriffe Geschichte von Java Programmieren mit Java Interpretieren vs. Kompilieren Java Byte-Code Jave Virtual Machine Arbeitsmaterialien Allgemeine Informatik 2 SS09 Folie 1.1 Java, eine

Mehr

Hochschule Darmstadt Fachbereich Informatik

Hochschule Darmstadt Fachbereich Informatik Hochschule Darmstadt Fachbereich Informatik 6.3 Systemarchitektur 430 6.3 Systemarchitektur Drei Schichten Architektur Die "Standardtechniken" des Software-Engineering sind auch auf die Architektur einer

Mehr

Migrationsanleitung von 2.0 auf 2.1

Migrationsanleitung von 2.0 auf 2.1 Die wichtigste Neuerung von 2.0 auf 2.1 aus Sicht der Anwendungs- Migration ist die Verwendung von Maven. Mit Maven holt sich die Anwendung alle notwendigen Bibliotheken in den jeweils angegebenen Versionen

Mehr

Konzept eines Datenbankprototypen. 30.06.2003 Folie 1 Daniel Gander / Gerhard Schrotter

Konzept eines Datenbankprototypen. 30.06.2003 Folie 1 Daniel Gander / Gerhard Schrotter Konzept eines Datenbankprototypen 30.06.2003 Folie 1 Daniel Gander / Gerhard Schrotter Inhalt (1) Projektvorstellung & Projektzeitplan Softwarekomponenten Detailierte Beschreibung der System Bausteine

Mehr

Relationale Datenbanken Kursziele

Relationale Datenbanken Kursziele Relationale Datenbanken Kursziele DB Grundlagen Daten-Modellierung Relationales Modell und DB => Praxis: Mit SQL als Anfragesprache Mit MySQL als DB RDB 1-1 Kursinhalt (Tage) 1. DB Einleitung / Entity-Relationship

Mehr

Das Interceptor Muster

Das Interceptor Muster Das Interceptor Muster Implementierung des Interceptor Musters basierend auf OSGi and Friends Benjamin Friedrich Hochschule für Technik und Wirtschaft des Saarlandes Praktische Informatik - Entwurfsmuster

Mehr

Konzepte zur Datenhaltung für Webseiten in einem Web-Content- Management-System

Konzepte zur Datenhaltung für Webseiten in einem Web-Content- Management-System Konzepte zur Datenhaltung für Webseiten in einem Web-Content- Management-System Web-Content-Management-Systeme () dienen dazu, komplexe Websites zu verwalten und den Autoren einzelner Webseiten möglichst

Mehr

Ein Auszug aus... Studie. Content Management Systeme im Vergleich. Empfehlungen und Entscheidungshilfen für Unternehmensbereiche

Ein Auszug aus... Studie. Content Management Systeme im Vergleich. Empfehlungen und Entscheidungshilfen für Unternehmensbereiche Ein Auszug aus... Studie Content Management Systeme im Vergleich Empfehlungen und Entscheidungshilfen für Unternehmensbereiche Die komplette Studie ist bei amazon.de käuflich zu erwerben. Inhaltsverzeichnis

Mehr

Application Server und Continuous Integration

Application Server und Continuous Integration Application Server und Continuous Integration Outline 2 Einleitung Application Server Java EE Enterprise Applikationen vs. Web Applikationen Web Application Life Cycle Servlets JavaServer Pages verschiedene

Mehr

Angreifbarkeit von Webapplikationen

Angreifbarkeit von Webapplikationen Vortrag über die Risiken und möglichen Sicherheitslücken bei der Entwicklung datenbankgestützter, dynamischer Webseiten Gliederung: Einführung technische Grundlagen Strafbarkeit im Sinne des StGB populäre

Mehr

Liste der Handbücher. Liste der Benutzerhandbücher von MEGA

Liste der Handbücher. Liste der Benutzerhandbücher von MEGA Liste der Handbücher Liste der Benutzerhandbücher von MEGA MEGA 2009 SP4 1. Ausgabe (Juni 2010) Die in diesem Dokument enthaltenen Informationen können jederzeit ohne vorherige Ankündigung geändert werden

Mehr

Ruby on Rails. Florian Ferrano Ralf Heller Markus Nagel

Ruby on Rails. Florian Ferrano Ralf Heller Markus Nagel Ruby on Rails Florian Ferrano Ralf Heller Markus Nagel Überblick Ruby on Rails Ruby Rails Geschichte MVC allgemein MVC in Rails Scaffolding Webserver Installation Beispiele Wo wird Rails verwendet? Ausblick

Mehr

Apparo Fast Edit Datenmanagement mit der Standalone Version Technische Übersicht

Apparo Fast Edit Datenmanagement mit der Standalone Version Technische Übersicht Apparo Fast Edit Datenmanagement mit der Standalone Version Technische Übersicht 2 Apparo Fast Edit ist die das Standardprogramm für unternehmensweite Dateneingabe, mit der Sie Daten ändern, importieren

Mehr

Softwaretests. Werkzeuge zur Automatisierung. Thementag Wer testet, ist feige. Autor: für 24.06.2009. Markus Alvermann.

Softwaretests. Werkzeuge zur Automatisierung. Thementag Wer testet, ist feige. Autor: für 24.06.2009. Markus Alvermann. Softwaretests Werkzeuge zur Automatisierung für Thementag Wer testet, ist feige 24.06.2009 Autor: Markus Alvermann Seite 2 / 39 Agenda Motivation Versionsverwaltung Build-Tools Unit-Tests GUI-Tests Continuous

Mehr

Grundsätzliche Struktur und Entwurfsprinzipien des Gesamtsystems. Grundsätzliche Struktur und Entwurfsprinzipien der einzelnen Pakete

Grundsätzliche Struktur und Entwurfsprinzipien des Gesamtsystems. Grundsätzliche Struktur und Entwurfsprinzipien der einzelnen Pakete Allgemeines 2 Produktübersicht 2 Grundsätzliche Struktur und Entwurfsprinzipien des Gesamtsystems 3 Grundsätzliche Struktur und Entwurfsprinzipien der einzelnen Pakete Account-Verwaltung 5 Freund-Funktionen

Mehr

DWH Szenarien. www.syntegris.de

DWH Szenarien. www.syntegris.de DWH Szenarien www.syntegris.de Übersicht Syntegris Unser Synhaus. Alles unter einem Dach! Übersicht Data-Warehouse und BI Projekte und Kompetenzen für skalierbare BI-Systeme. Vom Reporting auf operativen

Mehr

Modellgetriebene Entwicklungsprozesse in der Praxis - eine Bestandsaufnahme. Tillmann Schall, anaptecs GmbH

Modellgetriebene Entwicklungsprozesse in der Praxis - eine Bestandsaufnahme. Tillmann Schall, anaptecs GmbH Modellgetriebene Entwicklungsprozesse in der Praxis - eine Bestandsaufnahme Tillmann Schall, anaptecs GmbH : Agenda Grundlagen modellgetriebener Entwicklungsprozesse Schritte zur Einführung Erfahrungen

Mehr

Internet und WWW Übungen

Internet und WWW Übungen Internet und WWW Übungen 7 Serverseitige Web-Technologien [WEB7] Rolf Dornberger 1 06-11-12 7 Serverseitige Web-Technologien 1. Begriffe Zusatz für Interessierte: 2. JSP erstellen 3. Servlet erstellen

Mehr

Das Build Tool Ant. Sebastian Mancke, mancke@mancke-software.de

Das Build Tool Ant. Sebastian Mancke, mancke@mancke-software.de Das Build Tool Ant Sebastian Mancke, mancke@mancke-software.de Grundlagen Motivation Bei der Übersetzung und Pflege von Software treten viele, gleich bleibende Arbeitsschritte auf. Übersetzen des Codes

Mehr

App-Entwicklung für Android

App-Entwicklung für Android App-Entwicklung für Android Einleitung - Systemarchitektur Hochschule Darmstadt WS15/16 1 Inhalt Historie Systemarchitektur Sandbox 2 Motivation Kontra Pro Limitierte Größe Begrenzte Ressourcen Kein Standardgerät

Mehr

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER INHALTSVERZEICHNIS 1. Datenbanken 2. SQL 1.1 Sinn und Zweck 1.2 Definition 1.3 Modelle 1.4 Relationales Datenbankmodell 2.1 Definition 2.2 Befehle 3.

Mehr

Praktische Anwendungsentwicklung mit Oracle Forms

Praktische Anwendungsentwicklung mit Oracle Forms Praktische Anwendungsentwicklung mit Oracle Forms von Perry Pakull, Stefan Jüssen, Walter H. Müller 1. Auflage Hanser München 2007 Verlag C.H. Beck im Internet: www.beck.de ISBN 978 3 446 41098 5 Zu Leseprobe

Mehr

M i t a r b e i t e r p r o f i l (Stand: August 09)

M i t a r b e i t e r p r o f i l (Stand: August 09) M i t a r b e i t e r p r o f i l (Stand: August 09) KB-M1-Java134 Schwerpunkte / Spezialisierung: Softwareentwickler Java / J2EE Swing JSF JavaScript Verfügbarkeit (skalierbar): Ab sofort Ausbildung:

Mehr

Definition Informationssystem

Definition Informationssystem Definition Informationssystem Informationssysteme (IS) sind soziotechnische Systeme, die menschliche und maschinelle Komponenten umfassen. Sie unterstützen die Sammlung, Verarbeitung, Bereitstellung, Kommunikation

Mehr

Icinga Teil 1. Andreas Teuchert. 11. Juli 2014

Icinga Teil 1. Andreas Teuchert. 11. Juli 2014 Icinga Teil 1 Andreas Teuchert 11. Juli 2014 1 Icinga 2009 als Fork des Nagios-Cores entstanden Nagios-Hauptentwickler wollte Patches/Weiterentwicklungen nicht aufnehmen Nagios/Icinga sind der Industriestandard

Mehr

FH LU JEE Vorlesung SS 2014. Ralf Gitzel ralf_gitzel@hotmail.de

FH LU JEE Vorlesung SS 2014. Ralf Gitzel ralf_gitzel@hotmail.de FH LU JEE Vorlesung SS 2014 Ralf Gitzel ralf_gitzel@hotmail.de 1 Einführung + Organisatorisches Ralf Gitzel ralf_gitzel@hotmail.de 2 Dozent Dr. Ralf Gitzel Promotion an der Universität Mannheim in Wirtschaftsinformatik

Mehr

- Entwurfsphase: Entwurfsbeschreibung Gesamtsystem - Version: 1.0

- Entwurfsphase: Entwurfsbeschreibung Gesamtsystem - Version: 1.0 Projektbezeichnung Projektleiter Verantwortlich - Entwurfsphase: Entwurfsbeschreibung Gesamtsystem - Version: 1.0 MSP-13 - Integration eines Semantischen Tagging Systems in Microsoft Sharepoint Martin

Mehr

Intelligentes Datenmanagement. Simplify your project.

Intelligentes Datenmanagement. Simplify your project. Intelligentes Datenmanagement. Simplify your project. Einfach. Sicher. Effizient. strukturierte Ablage umfangreiche Suchfunktionen einfache Kommunikation lückenlose Dokumentation Mit dem Datenpool, der

Mehr

Innovator 2007. Anbindung an openarchitectureware. Connect. Klaus Weber. www.mid.de

Innovator 2007. Anbindung an openarchitectureware. Connect. Klaus Weber. www.mid.de Innovator 2007 Anbindung an openarchitectureware Klaus Weber Connect www.mid.de Anbindung an openarchitectureware (oaw) Wozu dient die Anbindung an openarchitectureware? Für Innovator Object excellence

Mehr

bix BOE Java Tools bix Consulting GmbH & Co. KG BusinessITPeople

bix BOE Java Tools bix Consulting GmbH & Co. KG BusinessITPeople bix BOE Java Tools bix Consulting GmbH & Co. KG bix BOE Services Mit den BOE Services liefert die BIX einfache Schnittstellen zur täglichen Arbeit im SAP Business Objects Umfeld. Die Services sind konzipiert

Mehr

Ajax & GWT. Kurs: User Interfaces und ihre Evaluierung Dozent: Manfred Thaller WS 2012/2013 Referent: Rafael Kalina

Ajax & GWT. Kurs: User Interfaces und ihre Evaluierung Dozent: Manfred Thaller WS 2012/2013 Referent: Rafael Kalina Ajax & GWT Kurs: User Interfaces und ihre Evaluierung Dozent: Manfred Thaller WS 2012/2013 Referent: Rafael Kalina Ajax Technisches Verfahren, bei dem Browser aktualisierte Inhalte nicht mehr synchron

Mehr

DRIVE LIKE A VIRTUAL DEVELOPER Die Poleposition für Ihre Softwareentwicklung

DRIVE LIKE A VIRTUAL DEVELOPER Die Poleposition für Ihre Softwareentwicklung DRIVE LIKE A VIRTUAL DEVELOPER Die Poleposition für Ihre Softwareentwicklung Was für ein Tempo! Das Rad dreht sich rasant schnell: Die heutigen Anforderungen an Softwareentwicklung sind hoch und werden

Mehr

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java Grundlagen von Java Aufgabe 1: Typen und Zuweisungen in Java Welche der folgenden Java-Anweisungen sind fehlerhaft? Handelt es sich um einen Compiler- oder einen Laufzeitfehler? Anmerkung: Folgefehler

Mehr

Oracle 10g und SQL Server 2005 ein Vergleich. Thomas Wächtler 39221

Oracle 10g und SQL Server 2005 ein Vergleich. Thomas Wächtler 39221 Oracle 10g und SQL Server 2005 ein Vergleich Thomas Wächtler 39221 Inhalt 1. Einführung 2. Architektur SQL Server 2005 1. SQLOS 2. Relational Engine 3. Protocol Layer 3. Services 1. Replication 2. Reporting

Mehr

PLATTFORMÜBERGREIFENDE ENTWICKLUNG MITHILFE MODELLGETRIEBENER METHODEN UND TECHNOLOGIEN

PLATTFORMÜBERGREIFENDE ENTWICKLUNG MITHILFE MODELLGETRIEBENER METHODEN UND TECHNOLOGIEN PLATTFORMÜBERGREIFENDE ENTWICKLUNG MITHILFE MODELLGETRIEBENER METHODEN UND TECHNOLOGIEN Mathias Slawik, WI (M), 3. FS Aktuelle Themen der Wirtschaftsinformatik, HTW Berlin, WS 10/11 Gliederung 2 Methode

Mehr

TimeSafe Leistungserfassung

TimeSafe Leistungserfassung Keep your time safe. TimeSafe Leistungserfassung Adressimport 1/8 Inhaltsverzeichnis Inhaltsverzeichnis... 2 1 Allgemeines... 3 1.1 Adressen in der TimeSafe Leistungserfassung... 3 1.2 Organisationen und/oder

Mehr

Allgemeine Einführung. 13.11.2013 Elisabeth Beyrle Stefan Paffhausen

Allgemeine Einführung. 13.11.2013 Elisabeth Beyrle Stefan Paffhausen Allgemeine Einführung 13.11.2013 Elisabeth Beyrle Stefan Paffhausen Ablauf Allgemeines über Typo3 Unterschiede zu Drupal Oberfläche des Typo3 Backends Erstellen einer Seite Typo3 Open-Source Content-Management-System

Mehr

Integration Services - Dienstarchitektur

Integration Services - Dienstarchitektur Integration Services - Dienstarchitektur Integration Services - Dienstarchitektur Dieser Artikel solle dabei unterstützen, Integration Services in Microsoft SQL Server be sser zu verstehen und damit die

Mehr

Microsoft Dynamics NAV Technische Details

Microsoft Dynamics NAV Technische Details Microsoft Dynamics NAV Technische Details INHALT Microsoft Dynamics NAV Technische Details........................................ [3] Infrastruktur.............................................. [3] Systemanforderungen.....................................

Mehr

Werkzeuge für Datenbank Handwerker: IBM Data Studio und IBM Optim QWT

Werkzeuge für Datenbank Handwerker: IBM Data Studio und IBM Optim QWT Werkzeuge für Datenbank Handwerker: IBM Data Studio und IBM Optim QWT Neue Technologien effizient nutzen Ehningen, 3. Juli 2014 Rodney Krick rk@aformatik.de aformatik Training & Consulting GmbH & Co. KG

Mehr

Datenbanksysteme SS 2007

Datenbanksysteme SS 2007 Datenbanksysteme SS 2007 Frank Köster (Oliver Vornberger) Institut für Informatik Universität Osnabrück Kapitel 9c: Datenbankapplikationen Architektur einer Web-Applikation mit Servlets, JSPs und JavaBeans

Mehr

Mehr Dynamik in Apex mit Javascript und JQuery. Alexander Scholz its-people

Mehr Dynamik in Apex mit Javascript und JQuery. Alexander Scholz its-people Vortrag zur DOAG Konferenz 2011 Mehr Dynamik in Apex mit und Alexander Scholz its-people 1 Ablauf Thema des Vortragsthemas Motivation Besonderheit des Referenten Alexander Scholz its-people Wie kann in

Mehr

Inhaltsverzeichnis. Teil 1 Node.js... 1

Inhaltsverzeichnis. Teil 1 Node.js... 1 xiii Teil 1 Node.js... 1 1 Was ist Node.js? 3 1.1 Die Zeitalter des Webs................................... 3 1.1.1 1990 bis 2000: Das Web 1.0....................... 3 1.1.2 2000 bis 2010: Das Web 2.0.......................

Mehr

[DIA] Webinterface 2.4

[DIA] Webinterface 2.4 [DIA] Webinterface 2.4 2 Inhalt Inhalt... 2 1. Einleitung... 3 2. Konzept... 4 2.1 Vorteile und Anwendungen des... 4 2.2 Integration in bestehende Systeme und Strukturen... 4 2.3 Verfügbarkeit... 5 3.

Mehr

Programmieren was ist das genau?

Programmieren was ist das genau? Programmieren was ist das genau? Programmieren heisst Computerprogramme herstellen (von griechisch programma für Vorschrift). Ein Computerprogramm ist Teil der Software eines Computers. Als Software bezeichnet

Mehr

Installation Anleitung für JTheseus und MS SQL Server 2000

Installation Anleitung für JTheseus und MS SQL Server 2000 Installation Anleitung für JTheseus und MS SQL Server 2000 Inhaltsverzeichnis 1 Installation der Datenbank 3 1.1 Erstellen der Datenbank 3 1.2 Tabellen und Minimal Daten einlesen 4 1.3 Benutzer JTheseus

Mehr

Handover von Daten IBM Rational DOORS StartUp Training - Teil 2

Handover von Daten IBM Rational DOORS StartUp Training - Teil 2 Handover von Daten IBM Rational DOORS StartUp Training - Teil 2 Inhalt: Überblick Daten Import & Export Import von RTF Dateien Import von Spreadsheet Daten Export als RTF und HTML DOORS Repository In-Export

Mehr

Datenbank-basierte Webserver

Datenbank-basierte Webserver Datenbank-basierte Webserver Datenbank-Funktion steht im Vordergrund Web-Schnittstelle für Eingabe, Wartung oder Ausgabe von Daten Datenbank läuft im Hintergrund und liefert Daten für bestimmte Seiten

Mehr

URT Eclipse All in one

URT Eclipse All in one URT Eclipse All in one Das Paket Eclipse All in one enthält Programme und Einstellungen, die zum Programmieren mit Eclipse in Zusammenarbeit mit Subversion und ANT benötigt werden. Dieses Paket dient als

Mehr

Einsatz von Applikationsservern. Untersucht am Beispiel des Sybase Enterprise Application Server

Einsatz von Applikationsservern. Untersucht am Beispiel des Sybase Enterprise Application Server Einsatz von Applikationsservern Untersucht am Beispiel des Sybase Enterprise Application Server Architektur von Datenbanksystemen Client / Server Modell (2 Schichten Modell) Benutzerschnittstelle Präsentationslogik

Mehr

VWA Rhein-Neckar Dipl.-Ing. Thomas Kloepfer. Kommunikation I (Internet) Übung 4 PHP

VWA Rhein-Neckar Dipl.-Ing. Thomas Kloepfer. Kommunikation I (Internet) Übung 4 PHP VWA Rhein-Neckar Dipl.-Ing. Thomas Kloepfer Kommunikation I (Internet) Übung 4 PHP SS 2004 Inhaltsverzeichnis 1. PHP die serverseitige Programmiersprache...1 1.1. PHP - Bereiche in HTML definieren...1

Mehr

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick Vorlesung Objektorientierte Softwareentwicklung Sommersemester este 2008 Kapitel 0. Java-Überblick Was sind die Ziele? Warum Java? Komplexe Anwendungen e-business verteilt zuverlässig sicher mobil persistent

Mehr

In die Zeilen würden die Daten einer Adresse geschrieben werden. Das Ganze könnte in etwa folgendermaßen aussehen:

In die Zeilen würden die Daten einer Adresse geschrieben werden. Das Ganze könnte in etwa folgendermaßen aussehen: 1 Einführung in Datenbanksysteme Fast jeder kennt Excel und hat damit in seinem Leben schon einmal gearbeitet. In Excel gibt es Arbeitsblätter, die aus vielen Zellen bestehen, in die man verschiedene Werte

Mehr

3.9 Grundelemente einer Benutzeroberfläche

3.9 Grundelemente einer Benutzeroberfläche 92 3 Grundlagen einer ios-anwendung 3.8.4 Target-Actions Einer der häufigsten Anwendungsfälle bei einer Oberfläche ist das Betätigen einer Schaltfläche durch einen Anwender, woraufhin eine bestimmte Aktion

Mehr

Architekturübersicht. April 2005. IBM Rational Portfolio Manager. Architekturübersicht

Architekturübersicht. April 2005. IBM Rational Portfolio Manager. Architekturübersicht April 2005 IBM Rational Portfolio Manager Architekturübersicht Seite 2 Inhalt 3 Architekturübersicht 3 Datenbankschicht 3 Anwendungsschicht 4 Darstellungsschicht 6 Systemanforderungen 7 Beispielkonfigurationen

Mehr

PHP Kurs Online Kurs Analysten Programmierer Web PHP

PHP Kurs Online Kurs Analysten Programmierer Web PHP PHP Kurs Online Kurs Analysten Programmierer Web PHP Akademie Domani info@akademiedomani.de Allgemeines Programm des Kurses PHP Modul 1 - Einführung und Installation PHP-Umgebung Erste Lerneinheit Introduzione

Mehr

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH Erfahrungen und Erkenntnisse Klaus Richarz, HBT GmbH Java Enterprise Edition 5.0 JBoss Seam Konsequenzen für Realisierung Qualitätssicherung Build & Deployment Fazit & Empfehlungen JBoss Seam in Projekten,

Mehr

Mobile Application Development

Mobile Application Development Mobile Application Development Android: Einführung Jürg Luthiger University of Applied Sciences Northwestern Switzerland Institute for Mobile and Distributed Systems Lernziele Der/die Kursbesucher/in kann

Mehr

Whitepaper Walkyre Enterprise Resource Manangement

Whitepaper Walkyre Enterprise Resource Manangement Whitepaper Walkyre Enterprise Resource Management Seite 1 Whitepaper Walkyre Enterprise Resource Manangement Stand 15.11.2004 Inhalt 1. Hinweis... 2 2. Grundsätzliches zur Funktionalität... 3 3. Der Walkyre-Client...

Mehr

Sicherheitskonzept Verwendung Batix CMS

Sicherheitskonzept Verwendung Batix CMS TS Sicherheitskonzept Verwendung Batix CMS Sicherheitsrichtlinien und Besonderheiten Batix CMS ausgearbeitet für VeSA Nutzer Version: 1.3 Stand: 1. August 2011 style XP communications Gössitzer Weg 11

Mehr

Enterprise Java Beans Einführung

Enterprise Java Beans Einführung Enterprise Java Beans Einführung Vorlesung 8 Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht EJBs im JEE Umfeld Verschiedene Typen von EJBs Von der Javaklasse

Mehr

Ausarbeitung zum Vortrag Java Web Start von Adrian Fülöp Fach: Komponentenbasierte Softwareentwicklung WS 06/07 Fachhochschule Osnabrück

Ausarbeitung zum Vortrag Java Web Start von Adrian Fülöp Fach: Komponentenbasierte Softwareentwicklung WS 06/07 Fachhochschule Osnabrück Ausarbeitung zum Vortrag Java Web Start von Adrian Fülöp Fach: Komponentenbasierte Softwareentwicklung WS 06/07 Fachhochschule Osnabrück Adrian Fülöp (297545) - 1 - Inhaltsverzeichnis: 1. Einführung 2.

Mehr

Seminar Business Process Management und Workflow-Technologie: Grundlagen, Produkte, Forschung

Seminar Business Process Management und Workflow-Technologie: Grundlagen, Produkte, Forschung IBM WebSphere Process Server Seminar Business Process Management und Workflow-Technologie: Grundlagen, Produkte, Forschung AGENDA 1. Überblick 2. WebSphere Process Server 3. Komponenten 4. Präsentation

Mehr

Applications Applets (eingeschränkte Rechte)

Applications Applets (eingeschränkte Rechte) 1 Arten von Java-Programmen Man unterscheidet 2 verschiedene Arten von Java-Programmen: Applications Applets (eingeschränkte Rechte) Erstere sind eigenständige Programme. Letztere sind "kleine" Programme,

Mehr

scmsp SMARTES Content-Management-System Bestimmtes kann und das dafür sehr gut. Bei der Konzeption des blockcms stand die Einfachheit im Vordergrund:

scmsp SMARTES Content-Management-System Bestimmtes kann und das dafür sehr gut. Bei der Konzeption des blockcms stand die Einfachheit im Vordergrund: scmsp SMARTES Content-Management-System blockcms steht für Block Content Management System Wir brauchen kein CMS, das alles kann, sondern eines, das nur Bestimmtes kann und das dafür sehr gut. Bei der

Mehr

Web-Anwendungsentwicklung mit dem Delivery Server

Web-Anwendungsentwicklung mit dem Delivery Server Web-Anwendungsentwicklung mit dem Delivery Server Java-Framework auf Basis der Open API Bernfried Howe, Webertise Consulting GmbH WEBertise Consulting Dipl. Informatiker (Wirtschaftsinformatik) 2001-2010

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

Einführung in die OPC-Technik

Einführung in die OPC-Technik Einführung in die OPC-Technik Was ist OPC? OPC, als Standartschnittstelle der Zukunft, steht für OLE for Process Control,und basiert auf dem Komponentenmodel der Firma Microsoft,dem Hersteller des Betriebssystems

Mehr

Glossar. Launching auf.

Glossar. Launching auf. 243 Ad Hoc Distribution Die Ad Hoc Distribution ist eine Möglichkeit, um Ihre entwickelte Anwendung auf anderen Endgeräten zu verteilen. Diese Art der Verteilung erfolgt ohne den App Store. Die Anzahl

Mehr

Das Redaktionssystem UCMS. Beschreibung Technisches Profil

Das Redaktionssystem UCMS. Beschreibung Technisches Profil 1/6 CONTENTMANAGEMENTSYSTEM UCMS 03.12.08 Das Redaktionssystem UCMS Beschreibung Technisches Profil Das vorliegende Dokument gibt einen Überblick über das System und geht auf die Ankopplung oder Integration

Mehr

Einführung in SQL Datenbanken bearbeiten

Einführung in SQL Datenbanken bearbeiten Einführung in SQL Datenbanken bearbeiten Jürgen Thomas Entstanden als Wiki-Buch Bibliografische Information Diese Publikation ist bei der Deutschen Nationalbibliothek registriert. Detaillierte Angaben

Mehr

Vorwort. Zu dieser Reihe. Autoren. Vorwort

Vorwort. Zu dieser Reihe. Autoren. Vorwort Vorwort 9 10 Vorwort Vorwort Herzlich Willkommen zu einem Fachbuch von Comelio Medien, ein Bereich der Comelio GmbH. Dieses Buch aus unserer Reihe zur.net-entwicklung ist das Ergebnis einer Forschungsarbeit,

Mehr

Rechnernetze Projekt SS 2015

Rechnernetze Projekt SS 2015 30/03/15 Seite 1 Aspektorientierte Programmierung logische Aspekte (Concerns) im Programm separieren Crosscutting Concerns (Ziel: generische Funktionalitäten über mehrere Klassen hinweg zu verwenden -

Mehr

Aufbau und Pflege von Internetseiten leicht gemacht

Aufbau und Pflege von Internetseiten leicht gemacht Aufbau und Pflege von Internetseiten leicht gemacht Einführung in die Grundlagen der CMS (Content Management Systeme) Was ist ein CMS? frei übersetzt: Inhaltsverwaltungssystem ist ein System, das die gemeinschaftliche

Mehr

Relationale Datenbanken in der Praxis

Relationale Datenbanken in der Praxis Seite 1 Relationale Datenbanken in der Praxis Inhaltsverzeichnis 1 Datenbank-Design...2 1.1 Entwurf...2 1.2 Beschreibung der Realität...2 1.3 Enitiy-Relationship-Modell (ERM)...3 1.4 Schlüssel...4 1.5

Mehr

egenix PyRun Python Runtime in einer einzigen 12MB Datei FrOSCon 2012 Sankt Augustin Marc-André Lemburg EGENIX.COM Software GmbH Langenfeld, Germany

egenix PyRun Python Runtime in einer einzigen 12MB Datei FrOSCon 2012 Sankt Augustin Marc-André Lemburg EGENIX.COM Software GmbH Langenfeld, Germany Python Runtime in einer einzigen 12MB Datei FrOSCon 2012 Sankt Augustin Marc-André Lemburg EGENIX.COM Software GmbH Langenfeld, Germany Marc-André Lemburg Geschäftsführer der egenix.com GmbH Mehr als 20

Mehr

Mehmet-Oktay Tugan Gliederung Grundsätzliches und Begriffserklärung Einleitung Geschichte Architektur Funktionalitätsumfang Hauptunterstützungen Zusammenfassung Grundsätzliches WebSphere ist ein Entwicklungstool

Mehr

3. Spezielle ER-Modelle und Tabellenableitung. Transformation von ER-Diagrammen in Relationen

3. Spezielle ER-Modelle und Tabellenableitung. Transformation von ER-Diagrammen in Relationen 3. Spezielle ER-Modelle und Tabellenableitung Spezialfälle von ER-Modellen Grundlage, was sind Relationen Transformation von ER-Diagrammen in Relationen 56 Lesebeispiel Access (Realisierungmodell!) 57

Mehr