Workflow, Business Process Management, 2.Teil

Transcription

Workflow, Business Process Management, 2.Teil
򔻐򗗠򙳰
Workflow, Business Process Management,
2.Teil
12. Dezember 2003
Der vorliegende Text darf für Zwecke der Vorlesung Workflow, Business Process Management des Autors vervielfältigt
werden. Eine weitere Nutzung bedarf der schriftlichen Einverständnis des Autors.
© Copyright International Business Machines Corporation 2001,2003. Alle Rechte vorbehalten.
Inhaltsverzeichnis
Literaturverzeichnis. . . . . . . . . . v
Kapitel 2. Funktionale Struktur eines
Workflow-Systems . . . . . . . . . . 11
Kapitel 1. Codestruktur eines
Workflow-Systems . . . . . . . . . . 1
Administration Server . . .
Administration Client . . .
Navigation, Execution Server
Program Execution Server .
Scheduling Server . . . .
Cleanup Server . . . . .
Workflow API . . . . .
Web Client . . . . . .
Buildtime . . . . . . .
Workload Management . .
Aufgaben . . . . . . .
Kernel . . . . . . . . . . . . . . .
Messagelayer . . . . . . . . . . . . .
Das Interface zur Datenbank . . . . . . . .
Verwendete Funktionen des Datenbanksystems .
Database Access Layer . . . . . . . . .
TOM (Tiny Object Manager) . . . . . . .
Staff Resolution . . . . . . . . . . .
Server Framework . . . . . . . . . . .
FDL Parser, Verifier . . . . . . . . . . .
Regression Test . . . . . . . . . . . .
© Copyright IBM Corp. 2001,2003
.
.
.
.
.
.
.
.
.
.
1
2
3
3
4
5
5
7
8
8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
12
12
13
13
13
13
13
14
14
iii
iv
Workflow, Business Process Management, 2.Teil
Literaturverzeichnis
Gustavo Alonso, Fabio Casati, Harumi Kuno,
Vijay Machiraju: Web Services
Springer Verlag 2004, 350 Seiten.
Beschreibt Konzepte und Architektur
sowohl von Web Services als frühere
Beispiele von Middleware. Ohne auf die
technischen Details der einzelnen
Produkte einzugehen wird hier die
Entwicklung der Software hin zu den
Web Servies beschrieben.
William Crawford, Jonathan Kaplan: J2EE
Design Patterns
O’Reilly 2002, 350 Seiten.
© Copyright IBM Corp. 2001,2003
v
vi
Workflow, Business Process Management, 2.Teil
Kapitel 1. Codestruktur eines Workflow-Systems
Kriterien für die Strukturierung des Codes:
Vermeidung von Redundanz
1. über die verschiedenen Komponenten
2. über Plattformgrenzen
3. im Verarbeitungsfluß der Daten
Isolierung von Interfaces durch Wrapper
1. um mit vertretbarem Aufwand andere Interfaces zu unterstützen
2. um allgemeine Interfaces zu spezialisieren für die Bedürfnisse des
Produkts
3. zur Bereitstellung von Conveniance-Methoden
Kernel
Stellt Basisklassen zur Verfügung. Eine Auswahl:
String-Klasse
Enthält neben den Standard-String-Operationen auch Methoden zum Lesen
und Schreiben bei Datenbankzugriffen, Methoden zum Verschlüsseln von
Paßwörtern. Kann DBCS (Double Byte Character Sequence) verarbeiten.
Syntax Checker
Testet Eingabewerte z.B. von UserIds, Paßwörtern, Namen auf Länge und
gültige Zeichen.
Codepage Conversion
Einheitliche Benennung von gleichen oder fast gleichen Codepages über
die verschiedenen Plattformen. Ermittlung der System-Codepage.
Stringkonvertierung in zwei Schritten über Unicode.
Assertion Handling
Codiert wird nach dem Fail-Fast-Paradigma: Implizite Annahmen über
Daten, die Input für Methoden sind, werden explizit durch Pre-Conditions
geprüft. Konsistenzregeln am Ende einer Methode werden explizt durch
Post-Conditions geprüft. Was passiert, wenn eine dieser Bedingungen
verletzt ist:
1. Abbruch des Programms
2. Ausgabe der Sourcecodestelle des Fehlers
3. Schreiben eines Traceeintrags
4. Ausgabe des Callstacks
Beispiel im Code:
int Wert = 0;
FMC_ASSERT( Wert != 0 );
Beispiel im Trace:
THROW_INT, FmcAssertionException, Condition=***
Assertion failed in c:\V350\srd\fmctkstr.cxx(1724): Wert != 0
Tracing
Wurde schon in einem früheren Kapitel vorgestellt.
© Copyright IBM Corp. 2001,2003
1
Profilezugriff
Konfigurationsparameter des Systems werden je nach Plattform
unterschiedlich gespeichert (Registry bei Windows, Files bei Unix, Data
Sets bei zOS). Die Profileklasse verbirgt diese Details. Eine Liste
Konfigurationsvariablen ist definiert.
Messages für Benutzer
Alle Texte für Benutzer werden separat vom ausführbaren Code gehalten
und werden in verschiedene Sprachen übersetzt. Es gibt Klassen, die dafür
sorgen, daß die durch eine Zahl identifizierte Message formatiert
(Parameterersetzung) und ausgegeben wird. Fehlermeldungen mit
Erklärungen erscheinen auch in einem Buch (Messages and Codes).
Streaming
Klasse zur Serialisierung und Deserialisierung von Datenstrukturen in
Messages oder in den Trace.
OID Handling
OIDs (Object Identifier), sind 16 Byte lang. Jedes Programm, welches
persistente Objekte anlegt, reserviert zuerst einen Bereich von OIDs, die es
verwenden kann. Die höchste vergebene OID ist persistent gespeichert
ID-Klassen
Die IDs dienen zur Identifizierung von Objekten sowohl im Code als auch
in der Datenbank. Dort sind die IDs Primary und Secondary Keys. Beispiel:
ATID
Activity Template ID, eine OID.
BTID
Block Template ID, eine OID. Zur Identifizierung von Blöck- und
Prozesstemplates.
BIID
Block Instance ID, besteht aus einer OID und der BTID des
entsprechenden Templates.
AIID
Activity Instance ID, besteht aus der laufenden Nummer in der
Block Instance, der BIID und der ATID.
Enthält auch Methoden zum Lesen und Schreiben bei Datenbankzugriffen
und zur Serialisierung in Messages.
Verwaltung von Shared Libraries
Methoden zum dynamischen Laden und Entladen von ausführbarem
Code.
Messagelayer
Interface zum Message Queueing System: Fehlerbehandlung.
Messages haben einen Messagetyp, der für die Aktion der Message steht, z.B. Start
Activity. Für jeden Messagetyp ist folgendes definiert:
1. Quelle und Ziel der Message
2. Request/Reply Messages sind paarweise definiert.
3. Liste der Datenfelder der Message
Für jedes Datenfeld einer Message sind folgende Attribute definiert:
1. Name
2. Typ
3. Maximale Länge
4. Mögliche Anzahl; 0, 1, mehrfach
2
Workflow, Business Process Management, 2.Teil
Ein Codegenerator erzeugt C++ und Java Klassen mit den Interfaces zu Messages.
Das Interface zur Datenbank
Navigation Engine
Staff Resolution
TOM
DBA
Database
Abbildung 1. Die Code-Ebenen beim Datenbankzugriff
Verwendete Funktionen des Datenbanksystems
Trigger, Constraints
... werden nicht verwendet. Die Integrität der Datenbank zu erhalten ist
Aufgabe des Workflow-Systems. Es dürfen keine Updates in der
Datenbank gemacht werden unter Umgehung des Workflow-Systems.
Views
... sind definiert als Schnittstelle für Kunden: Selektiver Zugriff auf die
Daten z.B. auf Audittrail-Tabelle:
CREATE VIEW FMC.ACTSTART AS(
SELECT CREATED, ASSOCIATED_OBJECT AS ACTID
FROM FMC.AUDIT_TRAIL A1
WHERE EVENT IN (21007,21022) AND ACTIVITY_TYPE = 21100)
Der Grund zur Verwendung der Views ist eine Abkoppelung des Interfaces
für Kunden vom intern verwendeten Datenbankschema.
Authorisierung
Datenbanken haben ein Authorisierungskonzept. Verschiedene Personen
können unterschiedliche Rechte haben beim Zugriff auf die Datenbank.
Das Workflowsystem hat ein eigenes Authorisierungskonzept. Die
Datenbankzugriffe für alle Workflow-Benutzer erfolgen immer mit dem
gleichen Datenbankbenutzer.
Die Rechte dieses Datenbankbenutzers werden von manchen Kunden auf
ein Minimum eingeschränkt, es muß also dokumentiert sein, was dieser
minimale Satz an Berechtigungen ist.
Datenbankschema erweiterbar
Kapitel 1. Codestruktur eines Workflow-Systems
3
Das mit dem Workflow-System bei der Installation angelegte
Datenbankschema ist fest mit der folgenden Ausnahme: Der Global
Datacontainer von Prozessen: Abhängig von der Struktur des Global
Datacontainers wird eine Tabelle beim Import des Processtemplates
angelegt.
Tablespaces der Datenbank
Bei der physischen Organisation der Daten unterstützen wir die Kunden,
damit sie über geeignete Schnittstellen bei der Konfiguration die
Datenbank an ihre Bedürfnisse bezüglich Speicherplatz und Performance
anpassen können.
Migration bei Releasewechsel
Von einem Workflow-Release zum nächsten können Schemaerweiterungen
vorgenommen werden. Falls in diesem Zusammenhang Änderungen der
Kundendaten notwendig ist, wird ein Programm zur Datenbankmigration
mit dem neuen Release ausgeliefert.
Database Access Layer
Generierter C++ Code
Dieser Layer besteht im Wesentlichen aus generiertem Code.
Beispieldefinition einer Query:
METHOD seluni2
UNIQUE SELECT *
FROM FMC.PROCESS_INST
WHERE NAME = ?
AND
STATE <> 128
;
Static SQL
Es wird hier statisches SQL verwendet, d.h. alle Queries und Update
SQL-Statements sind zum Compilezeitpunkt definiert.
Einfache Zugriffsstruktur
Typisch für die SQL-Calls des DBA ist das Lesen und Schreiben aus einer
Tabelle.
Isolation vom Datenbanksystem
Der generierte Code liest dann die Felder alle in eine entsprechende
Datenstruktur ein. Durch diesen Layer werden Unterschiede zwischen
verschiedenen DB2–Versionen und Oracle vom restlichen Code
abgeschirmt: z.B. Unterschiede bei der SQL-Syntax oder verschiedene
Datentypen, die verwendet werden können.
Da für Oracle und DB2 das Interface von DBA zu TOM gleich ist, reicht es
aus, nur den DBA an die Datenbank anzupassen und die Shared Libraries
für beide Datenbanktypen auszuliefern. Der restliche ausführbare Code ist
gleich.
Denormalisierung beim Lesen
Beim Lesen von Instanzdaten werden zusätzlich auch die Templatedaten
gelesen und auch in der Datenstruktur der Instanz gespeichert
(Denormalisierung der Daten beim Lesen). Templatedaten dürfen
grundsätzlich nicht geändert werden.
4
Workflow, Business Process Management, 2.Teil
TOM (Tiny Object Manager)
Lesen
von A
Ändern
von A
Schreiben
von A
TOM
Datenbank
Abbildung 2. Der Tiny Object Manager
Eingenschaften des TOM
1. Hält Objekte in seinem Cache innerhalb einer Transaktion.
2. Objekte werden im Cache nach ihrem Schlüssel verwaltet
3. Updates vom Anwendungsprogramm finden direkt auf den Objekten des TOM
statt.
4. Das Zurückschreiben von Records in die Datenbank geschieht nur explizit
5. Einfache Updates von mehreren Records werden direkt ausgeführt, z.B.
UPDATE work_item
SET state = ’inactive’
WHERE process_inst = ? AND owner != ?
Dazu sollte der Cache geleert werden, damit keine veralteten Daten im Cache
stehen (Cache Coherency).
6. Werden mehrere Objekte mit einer Query gelesen, wird dem
Anwendungsprogramm eine Liste dieser Objekte zurückgegeben. Wenn das
Anwendungsprogramm nur eine beschränkte Anzahl an Objekten bearbeiten
will, sollte vom TOM nur diese Anzahl geholt werden.
Staff Resolution
Wie im ganzen Code wurde auch hier versucht, mit statischem SQL zu arbeiten.
Da die Menge der möglichen Staff-Resolution Queries nicht begrenzt ist, wurde
folgende Lösung gewählt:
Kapitel 1. Codestruktur eines Workflow-Systems
5
Navigation
engine
Regression
test
Resolve
PerformQry
Code
generation
BldDynQry
ExecDynQry
ExecStatQry
Abbildung 3. Aufrufhierarchie Staff Resolution
Die Staff Resolution liefert im Wesentlichen eine Liste von Personen, die ein
Workitem zu einer bestimmten Activity erhalten sollen. Dies kann im Prinzip
durch eine Query erreicht werden.
Beispiel 1: Gesucht sind alle anwesenden Mitglieder einer Abteilung. Ist keiner
anwesend, sollen alle Mitglieder der Abteilung ermittelt werden.
DECLARE PQERY1111 CURSOR FOR
WITH
FMC.BASIC(NAME, ABSENT) AS
(
SELECT P.NAME, P.ABSENT
FROM
FMC.PERSON P
WHERE P.ORGANIZATION = :org
),
FMC.ABS_INDICATOR(EMPTY) AS
(
VALUES
(
CASE
WHEN (SELECT 1
FROM
(VALUES(1)) AS Q
WHERE EXISTS (SELECT *
FROM
FMC.BASIC
WHERE ABSENT = 0)) IS NOT NULL
THEN 0
ELSE 1
END
)
)
SELECT P.NAME, 0
FROM
FMC.BASIC P, FMC.ABS_INDICATOR I
WHERE I.EMPTY = P.ABSENT
FOR READ ONLY;
Erläuterungen
1. Es werden hier Common Table Expressions verwendet.
2. FMC.BASIC ermittelt alle Personen der Abteilung.
6
Workflow, Business Process Management, 2.Teil
3. Mit FMC.ABS_INDICATOR wird ermittelt, ob es anwesende Personen gibt. In
diesem Fall hat er den Wert 0, sonst 1.
4. Abhängig von diesem Indikator sucht dann die Query entweder die
anwesenden Personen oder die abwesenden Personen dieser Abteilung.
Die gleiche Aufgabe wird jetzt mit einer allgemeineren Query gelöst:
DECLARE PQERY5073 CURSOR FOR
SELECT P.NAME, P.ABSENT
FROM
FMC.PERSON P
WHERE P.ORGANIZATION = :org
FOR READ ONLY;
Hier liefert die Query alle Mitglieder der Abteilung. Danach muß noch im C++
Code durch die Liste durchgegangen werden um entweder alle abwesenden oder
alle anwesenden Personen zu löschen.
Beispiel 2: Wie oben werden die Mitglieder einer Abteilung gesucht. Ist eine Person
abwesend, soll ihr Vertreter ausgewählt werden, wenn sie anwesend ist.
DECLARE PQERY1110 CURSOR FOR
WITH
FMC.BASIC(OID) AS (
SELECT P.OID
FROM
FMC.PERSON P
WHERE P.ORGANIZATION = :org ),
FMC.NORMAL(NAME, ASSIGNMENT_TYPE) AS (
SELECT P.NAME, 0
FROM
FMC.PERSON P
WHERE P.ABSENT = 0 AND P.OID IN (SELECT OID FROM FMC.BASIC) ),
FMC.SUBSTITUTE(NAME, ASSIGNMENT_TYPE) AS (
SELECT DISTINCT P.NAME, 1
FROM
FMC.PERSON P, FMC.PERSON P2
WHERE P2.ABSENT = 1 AND
P2.SUBSTITUTE_OID IS NOT NULL AND
P.OID = P2.SUBSTITUTE_OID AND
P.ABSENT = 0 AND
P2.OID IN (SELECT OID FROM FMC.BASIC) )
SELECT *
FROM
FMC.NORMAL
UNION ALL
SELECT *
FROM
FMC.SUBSTITUTE
WHERE NAME NOT IN (SELECT NAME FROM FMC.NORMAL)
FOR READ ONLY;
Wie oben erledigt die folgende Aufgabe mit etwas C++ Code die gleiche Aufgabe:
DECLARE PQERY5074 CURSOR FOR
SELECT P.NAME, P.ABSENT, P.SUBSTITUTE, FMCS.ABSENT
FROM
FMC.PERSON P
LEFT OUTER JOIN FMC.PERSON FMCS ON P.SUBSTITUTE_OID = FMCS.OID
WHERE P.ORGANIZATION = :org
FOR READ ONLY;
Server Framework
Das Serverframework kann als Betriebssystem eines Servers bezeichnet werden.
Aufgaben:
1. Initialisierung und Beenden des Servers.
Kapitel 1. Codestruktur eines Workflow-Systems
7
2. Fangen und korrektes Verarbeiten von Exceptions, die vom Server geworfen
wurden.
3. Weiterleiten der Message in eine Hold Queue, wenn sie nicht verarbeitet
werden kann.
4. Die Main-Message-Loop: Transaktionsbeginn, Lesen einer Message, Bearbeiten
und Abschluß der Transaktion.
5. Spezielle Anpassungen an das Betriebssystem bei z/OS.
FDL Parser, Verifier
Ausschnitt aus einer FDL-Definition eines Prozesses:
PROCESS ’CreditRequest’ ( ’PersonInfo’, ’Default Data Structure’ )
DESCRIPTION ’Credit request’
PROMPT_AT_PROCESS_START
NO AUTONOMY
WINDOW ZOOM_FACTOR 100
WINDOW PAPERSIZE WIDTH 2970 HEIGHT 2100
WINDOW SHOW ALL CONNECTORS
WINDOW SHOW TRANSITION_CONDITIONS
SOURCE 1 XPOS -918 YPOS 433
PROGRAM_ACTIVITY ’AssessRisk’ ( ’CreditInfo’, ’CreditInfo’ )
DESCRIPTION ’Credit request for %CredReq.FirstName% %CredReq.LastName%’
START MANUAL WHEN AT_LEAST_ONE CONNECTOR TRUE
EXIT AUTOMATIC
LAYOUT XPOS -232 YPOS 177
NAME_POSITION XPOS -232 YPOS 102
DONE_BY STARTER_OF_ACTIVITY ’CollectCreditInformation’
PROGRAM ’NAssessCreditRisk’
END ’AssessRisk’
...
CONTROL
FROM ’AssessRisk’ TO ’AcceptCredit’
WHEN ’CreditAmount<100000 AND RiskFactor="L"’
XPOS 188 YPOS 146
...
DATA
FROM SOURCE 1 TO ’CollectCreditInformation’
MAP ’_STRUCT’ TO ’_STRUCT’
...
END ’CreditRequest’
Die FDL Parser bestehen aus zwei Teilen:
Parser-Frontend
Das Parser-Frontend für C++ ist mit einem YACC- (yet another compiler
compiler) ähnlichen Tool geschrieben, für Java wurde JavaCC verwendet.
Das Frontend baut einen Parsertree im Speicher auf. Syntaktische und
semantische Fehler sollten möglichst bei diesem Schritt erkannt werden.
Parser-Backend
Der Parsetree wird vom Backend bearbeitet.
Beispielsweise haben Runtime-Import und Buildtime-Import ein gemeinsames
Frontend, aber verschiedene Backends.
Regression Test
Schon bei der Entwicklung von größeren Komponenten sind Tests zu schreiben,
die sicherstellen, daß Szenarien korrekt bearbeitet werden. Kennzeichen:
8
Workflow, Business Process Management, 2.Teil
Produktstabilität
Die Hauptaufgabe von Regressiontests ist, zu gewährleisten, daß neu
eingebaute Funktionen oder Korrekturen nicht unerwünschte Nebeneffekte
haben.
Der Regression Test läuft automatisch ab.
Validierung
Die Ergebnisse werden entweder mit einem früheren, als korrekt
identifiziertem Ergebnis verglichen oder auf auch eine andere Weise
bestimmt und dann verglichen.
Fehlerursachen
Falls Differenzen auftreten, ist die Analyse oft sehr aufwändig. Mögliche
Ursachen sind: Setupproblem beim Testcase, korrekt geänderter Code,
liefert etwas andere Ergebnisse, neu eingebauter Fehler im Code.
Aufsetzpunkt
Speziell am Anfang eines Entwicklungsprojektes ist es sinnvoll, über
spezielle Interfaces eine Komponente zu testen. Zum Beispiel kann dann
ein Workflow-Server ohne das Message-Queueing-Interface getestet
werden.
Später sollten dann eher die offiziellen Schnittstellen beim Test verwendet
werden, um praxisnähere Bedingungen zu haben.
Kapitel 1. Codestruktur eines Workflow-Systems
9
10
Workflow, Business Process Management, 2.Teil
Kapitel 2. Funktionale Struktur eines Workflow-Systems
Folgende Kriterien wurden bei der Aufteilung der Funktionen verwendet:
Trennung der Verarbeitung der Client-Requests von anderen Aufgaben
Die Hauptlast eines Workflow-Systems sind Client-Requests. Durch diese
Trennung läßt sich das System besser kontrollieren.
Andere Transaktionen, die lange laufen, behindern dadurch nicht kurze
Transaktionen, die vom gleichen Server zu bearbeiten wären.
Sonderaufgaben müssen oft zentral für die ganze Installation ausgeführt
werden. Für diese Aufgaben speziell geschriebene Programme können dies
besser kontrollieren.
Fehlertoleranz
Fehler sollten zwar gemeldet werden, das System sollte aber nach
Möglichkeit robust sein.
Verschiedene Workflow-Installationen sinnvoll unterstützen
Speziell bei größeren Kunden gibt es Systeme zum Modellieren, Testen und
für die Produktion.
Administration Server
Watchdog
Überwacht und steuert die anderen Server des Systems, gibt Auskunft über
den Zustand des Systems.
Session Handling
Da eine Kommunikation mit dem Administration Server nur in einer
gültigen Session möglich ist, und der Administration Server auch allein
laufen sollte, wird das Session Handling für das gesamte Workflow-System
vom Administration Server ausgeführt.
Logging
Es gibt verschiedene Ziele für Log-Messages: Administration Client,
Datenbanktabellen, Files. Die Log-Messages werden an den Administration
Server geschickt, der sie dann weiterverteilt.
Hold-Quere Handling
Messages, deren Backout-Count überschritten wurden, werden in die
Hold-Queue geschickt. Der Administration Server ermöglicht die
Verwaltung dieser Messages (Löschen, Wiederausführung, Lesen der
Messages).
Administration Client
Stellt das Userinterface des Administration Servers dar:
1. Auskunft, welche Server gerade laufen.
2. Manuelles Starten und Stoppen von Serverinstanzen.
3. Ist Konsole des Systems, es werden Ereignisse des Systems wie z.B.
Fehlersituationenen angezeigt.
© Copyright IBM Corp. 2001,2003
11
Navigation, Execution Server
Bearbeitet die Client Requests (Außer Logon/Logoff und Administration Tasks). Ist
Quelle und Ziel der Messages von verketteten Transaktionen.
Ready
Start
Running
Suspend
Resume
Suspended
Completed
Terminate
Finished
Terminated
Expire
Expired
Delete,
keep time
exeeded
Deleted
Abbildung 4. Vereinfachtes Statsübergangsdiagramm von Activities
Falls Memory Leaks auftreten, kann der Server nach einer festgelegten Anzahl von
Transaktionen stoppen. Der Administration Server startet in diesem Fall eine neue
Serverinstanz.
Anlegen und Löschen von Process Instances kann auf Zeiten verlegt werden, bei
denen das System weniger belastet ist.
Program Execution Server
Startet die Programmaktivitäten für das Workflow-System. Mögliche
Invokationmechanismen:
CICS, IMS Transaktionen
Aufruf als Safe Application, das heißt als verkettete Transaktion.
Ausführbares Programm
Keine Transaktionssicherheit
Java Programm, Shared Library
Keine Transaktionssicherheit. Wichtige Optionen:
1. Fenced Mode: in separatem Prozess für eine größere Robustheit.
2. Keep Loaded: die Library wird im Speicher für eine bestimmte Zeit
gehalten, damit nicht mit jedem Programmaufruf die Library erneut
geladen werden muß.
12
Workflow, Business Process Management, 2.Teil
Scheduling Server
Es gibt zeitgesteuerte Ereignisse wie Notification (Mitteilung, wenn eine Activity
zu lange in Bearbeitung ist) oder Expiration (Weiternavigation nach einer
bestimmten Zeit).
Diese Ereignisse werden in einer Tabelle gesammelt.
Der Scheduling Server ermittelt regelmäßig die Ereignisse, die in der
Vergangenheit liegen. Für jedes Ereignis wird eine Message an den Execution
Server geschickt, der dann die notwendigen Aktionen ausführt.
Cleanup Server
Das Löschen von Prozessen läuft in drei Schritten ab:
1. Der Cleanup Server ermittelt dir Prozesse, die gelöscht werden sollen. Den
Execution Server wird eine Liste dieser Prozesse geschickt. Dieser Schritt kann
auch über ein API angestoßen werden.
2. Der Execution Server identifiziert alle Records, die gelöscht werden sollen und
markiert sie als Deleted.
3. Der Cleanup Server löscht alle Records, die im Status Deleted sind.
Workflow API
Die eigentliche Benutzerschnittstelle. Basis ist ein C-API, auf dem alle anderen
APIs aufbauen. Folgende Kategorien gibt es:
Prozessnavigation
Starten von Prozessen und Programmen
Prozessadministration
Status des Prozesses, Verändern des Prozessstuses.
Listen Basis zur Anzeige von Worklisten.
Container API
Zum Zugriff auf Containerfelder von einem Programm aus.
Web Client
Siehe auch Kapitel über Web-basierte Anwendungen oben.
Der Web Clientsetzt auf das Java API auf. Die Darstellungssicht ist über JSP (Java
Server Pages) programmiert.
Session Handling geschieht über Cookies im Browser und die Services des
Application Servers.
Buildtime
Modellierungskomponente
Kapitel 2. Funktionale Struktur eines Workflow-Systems
13
Workload Management
Plattformen für geschäftskritische Anwendungen bieten ein Workload Management
an. Hier werden Ziele für Durchsatz, Antwortzeiten und Prioritäten definiert.
Workload Management steuert das System dann so, daß diese Ziele möglichst
erreicht werden. Bei dem Workflow-System wurde dies auf z/OS umgesetzt.
Aufgaben des Administration Servers werden hier von Workload Management
übernommen.
Aufgaben
1. Der Schedulingserver hat einen Konfigurationsparameter: die Zeit, die
zwischen zwei Queries zum Ermitteln der aktuellen Ereignisse liegt.
a. Welche Kriterien sind relevant bei der Frage, wie lang dieses Intervall sein
sollte ?
b. Welche andere Lösungen wären möglich, um diesen Konflikt zu entschärfen
?
2. Für diese Aufgabe betrachten wir im Detail, was im Execution Server abläuft,
wenn ein Workitem im Zustand Ready selektiert wird und dadurch die
assoziierte Activity gestartet wird.
Wir nehmen an, diese Transaktion läuft wie folgt ab: Der Client-Request enthält
neben der Aktion Start Workitem die Id des Workitems. Der Reihe nach werden
folgende Records gelesen, um ihre Stati zu ändern: Als erstes wird der
Workitem-Record gelesen um daraus auch die Activity zu ermittlen. Diese wird
dann in einem zweiten Schritt gelesen. Zuletzt werden dann die restlichen
Workitems dieser Activity gelesen. Das eigene Workitem und die Activity
werden in den Status Running und alle anderen Workitems in den Zustand
Disabled gesetzt.
a. Überlegen Sie sich, welches Problem auftreten kann, wenn quasi gleichzeitig
zwei verschiedene Workitems einer Activity gestartet werden.
b. Überlegen Sie sich eine Lösung des Problems.. Hinweis: Datenbankrecords
können auch ohne Setzen eines Locks (uncommitted read) gelesen werden.
14
Workflow, Business Process Management, 2.Teil

Documents pareils