147 88 5MB
German Pages 428 Year 2008
Peter Mandl Masterkurs Verteilte betriebliche Informationssysteme
Aus dem Programm
Wirtschaftsinformatik
Weitere Titel des Autors: Grundkurs Betriebssysteme von P. Mandl Grundkurs Datenkommunikation von P. Mandl, A. Bakomenko und J. Weiß Grundkurs Wirtschaftsinformatik von D. Abts und W. Mülder Anwendungsorientierte Wirtschaftsinformatik von P. Alpar, H. L. Grob, P. Weimann und R. Winter Grundkurs Verteilte Systeme von G. Bengel Masterkurs Parallele und Verteilte Systeme von G. Bengel, C. Baun, M. Kunze und K.-U. Stucky Java-Grundkurs für Wirtschaftsinformatiker von K.-G. Deck und H. Neuendorf Geschäftsprozesse realisieren von H. Fischer, A. Fleischmann und S. Obermeier Grundkurs Geschäftsprozess-Management von A. Gadatsch Grundkurs IT-Projektcontrolling von A. Gadatsch Masterkurs IT-Management von J. Hofmann und W. Schmidt (Hrsg.) Business Intelligence – Grundlagen und praktische Anwendungen von H.-G. Kemper, W. Mehanna und C. Unger Informationssysteme im Personalmanagement von S. Strohmeier www.viewegteubner.de
Peter Mandl
Masterkurs Verteilte betriebliche Informationssysteme Prinzipien, Architekturen und Technologien Mit 196 Abbildungen STUDIUM
Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über abrufbar.
Das in diesem Werk enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Der Autor übernimmt infolgedessen keine Verantwortung und wird keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programm-Materials oder Teilen davon entsteht. Höchste inhaltliche und technische Qualität unserer Produkte ist unser Ziel. Bei der Produktion und Auslieferung unserer Bücher wollen wir die Umwelt schonen: Dieses Buch ist auf säurefreiem und chlorfrei gebleichtem Papier gedruckt. Die Einschweißfolie besteht aus Polyäthylen und damit aus organischen Grundstoffen, die weder bei der Herstellung noch bei der Verbrennung Schadstoffe freisetzen.
1. Auflage 2009 Alle Rechte vorbehalten © Vieweg+Teubner | GWV Fachverlage GmbH, Wiesbaden 2009 Lektorat: Sybille Thelen | Andrea Broßler Vieweg+Teubner ist Teil der Fachverlagsgruppe Springer Science+Business Media. www.viewegteubner.de Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Umschlaggestaltung: KünkelLopka Medienentwicklung, Heidelberg Druck und buchbinderische Verarbeitung: MercedesDruck, Berlin Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier. Printed in Germany ISBN 978-3-8348-0518-8
Vorwort Inȱdenȱ80erȱundȱ90erȱJahrenȱwurdeȱdieȱobjektorientierteȱSoftwareentwicklungȱvorȱ allemȱdurchȱdasȱMarketingȱeinigerȱProduktherstellerȱalsȱdieȱLösungȱfürȱalleȱProbȬ lemeȱ derȱ Softwareentwicklungȱ dargestellt.ȱ Parallelȱ dazuȱ entwickeltenȱ sichȱ dieȱ KonzepteȱundȱTechnologienȱfürȱverteilteȱSysteme.ȱAnfangsȱmussteȱmanȱdieȱKomȬ munikationȱverteilterȱAnwendungenȱnochȱaufȱBasisȱvonȱSocketsȱoderȱeinerȱähnliȬ chenȱ Transportzugriffsschnittstelleȱ programmieren.ȱ Etwasȱ späterȱ kamȱ dannȱ derȱ Remoteȱ Procedureȱ Callȱ (RPC)ȱ hinzu.ȱ Dieȱ meistenȱ Problemeȱfürȱ Entwicklerȱ warenȱ inȱ derȱ Kommunikationsschichtȱ zuȱ lösen.ȱ Dieȱ eigentlicheȱ Anwendungslogikȱ bliebȱ oftȱaufȱderȱStrecke.ȱ AlsȱschließlichȱdieȱObjectȱManagementȱGroupȱ(OMG)ȱAnfangȱderȱ90erȱJahreȱCORȬ BAȱ standardisierte,ȱ prophezeiteȱ man,ȱ mitȱ diesemȱ Standardȱ endlichȱ vernünftigeȱ objektorientierteȱ Softwareȱ auchȱ inȱ einerȱ verteiltenȱ Umgebungȱ entwickelnȱ undȱ betreibenȱ zuȱ können.ȱ Mehrereȱ Herstellerȱ entwickeltenȱ CORBAȬPlattformenȱ undȱ verkauftenȱdieseȱalsȱdieȱLösungȱallerȱProbleme.ȱDieȱAufgabeȱvonȱMarketingȬȱundȱ Vertriebsabteilungenȱistȱesȱnunȱeinmal,ȱProdukteȱsoȱdarzustellen,ȱdassȱsieȱgekauftȱ werden.ȱȱ Langeȱ dauerteȱ esȱ nichtȱ undȱ daȱ bemerkteȱ man,ȱ dassȱ dieȱ Netzwerkeȱ undȱ auchȱ dieȱ ServersystemeȱbeiȱvielenȱkleinenȱMethodenaufrufenȱnichtȱmithaltenȱkonnten.ȱManȱ brauchteȱ Ȭȱ wieȱ manȱ zuȱ sagenȱ pflegteȱ Ȭȱ etwasȱ „grobkörnigere“ȱ Methoden,ȱ umȱ dieȱ Ressourcenȱ zuȱ schonen.ȱ Imȱ Zugeȱ derȱ Verbreitungȱ vonȱ Javaȱ kamȱ daherȱ auchȱ eineȱ neueȱ Technologieȱ aufȱ denȱ Markt,ȱ dieȱ alsȱ Komponententechnologieȱ bezeichnetȱ wurdeȱ undȱ inȱ Enterpriseȱ Javaȱ Beansȱ (EJB)ȱ mündete.ȱ Nunȱ warenȱ aberȱ alleȱ techniȬ schenȱ Schwierigkeitenȱ gelöst,ȱ dachteȱ man.ȱ Demȱ warȱ natürlichȱ wiederȱ nichtȱ so.ȱ Auchȱ dieȱ Komponentenentwicklungȱ brachteȱ ihreȱ Problemeȱ mitȱ sich.ȱ Derȱ nächsteȱ Hypeȱ kamȱ mitȱ derȱ XMLȬTechnologieȱ undȱ inȱ denȱ letztenȱ Jahrenȱ mitȱ serviceorienȬ tiertenȱArchitekturenȱundȱalsȱkonkreteȱAusprägungȱdieserȱmitȱWebservices.ȱVieleȱ HerstellerȱbeteiligtenȱsichȱanȱdiesemȱThemenkomplex.ȱ Wennȱ auchȱ dieȱ meistenȱ Konzepteȱ undȱ Technologienȱ derȱ letztenȱ Jahrzehnteȱ vieleȱ Fortschritteȱ fürȱ dieȱ Softwareentwicklungȱ brachten,ȱ soȱ kommenȱ dochȱ immerȱ nochȱ ständigȱVerbesserungenȱundȱauchȱneueȱTechnologienȱaufȱunsȱzu.ȱDieȱstabilenȱundȱ gewinnbringendenȱ ausȱ denȱ imȱ Versuchsstadionȱ befindlichenȱ Technologienȱ herȬ auszufiltern,ȱistȱeineȱkomplizierteȱAufgabe,ȱderȱmanȱsichȱheuteȱzunehmendȱstellenȱ
ȱ
Vȱ
Vorwortȱ muss.ȱHierȱistȱ derȱ Techniker,ȱ meistȱ derȱInformatikerȱoderȱimȱ betriebswirtschaftliȬ chenȱ Umfeldȱ derȱ Wirtschaftsinformatikerȱ gefragt,ȱ dieȱ richtigeȱ TechnologieȬȱ undȱ ProduktauswahlȱfürȱseineȱUmgebungȱzuȱtreffenȱundȱdiesȱistȱbeiȱderȱkurzenȱHalbȬ wertzeitȱkeineȱeinfacheȱAufgabe,ȱdieȱauchȱPraktikerȱimmerȱwiederȱvorȱgroßeȱHerȬ ausforderungenȱstellt.ȱ Wirtschaftsinformatiker,ȱ Systemarchitektenȱ undȱ Softwareentwicklerȱ imȱ Umfeldȱ betrieblicherȱSteuerungsȬȱundȱ Informationssystemeȱmüssenȱ heutzutageȱ eineȱ Fülleȱ vonȱRegelnȱanwenden,ȱumȱguteȱAnwendungssystemeȱkonzipierenȱundȱentwickelnȱ zuȱkönnen.ȱDasȱpureȱWissenȱüberȱSoftwaretechnikȱundȱwieȱmanȱintelligenteȱKlasȬ senmodelleȱ erstellt,ȱ reichtȱ fürȱ dieȱ Umsetzungȱ einesȱ größerenȱ Projektsȱ beiȱ Weitemȱ nichtȱ aus.ȱ Manȱ mussȱ sichȱ auchȱ mitȱ Betriebssystemen,ȱ Datenbanken,ȱ Netzwerken,ȱ Kommunikationsprotokollen,ȱ Middleware,ȱ Objektorientierung,ȱ ProgrammierspraȬ chen,ȱNebenläufigkeitsproblemenȱusw.ȱauskennenȱundȱdasȱZusammenspielȱdieserȱ komplexenȱThemenfelderȱbeherrschen.ȱȱ Diesesȱ Buchȱ sollȱ dazuȱ beitragen,ȱ dassȱ derȱ Themenkomplexȱ etwasȱ transparenterȱ undȱ greifbarerȱ wird.ȱ Wichtigeȱ Prinzipien,ȱ Softwarekonzepte,ȱ Architekturenȱ undȱ TechnologienȱzurȱUnterstützungȱverteilterȱSystemeȱwerdenȱerörtert,ȱundȱzwarȱimȱ Speziellenȱ fürȱ betrieblicheȱ Informationssystemeȱ (inȱ Abgrenzungȱ zuȱ technischenȱ Anwendungssystemenȱ wieȱ Anlagensteuerungen,ȱ Robotersystemen,ȱ EchtzeitsysȬ temenȱusw.).ȱVorȱallemȱwerdenȱauchȱpraktischeȱGesichtspunkteȱhinterfragt.ȱȱ VieleȱAspekteȱverteilterȱSystemeȱsindȱinteressantȱundȱnichtȱalleȱkönnenȱinȱdiesemȱ Buchȱ behandeltȱ werden.ȱ Esȱ wirdȱ Wertȱ aufȱ dieȱ Erläuterungȱ praktischȱ nutzbarerȱ KonzepteȱundȱTechnologienȱgelegt.ȱ Dasȱ Buchȱ behandeltȱ dieȱ folgendenȱ Themenkomplexe,ȱ denenȱ jeweilsȱ einȱ eigenesȱ Kapitelȱgewidmetȱist:ȱ 1. EinführungȱinȱverteilteȱSystemeȱ 2. KonzepteȱundȱModelleȱverteilterȱKommunikationȱ 3. VerteilteȱDiensteȱundȱWebservicesȱ 4. Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ 5. ArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ Kapitelȱ1ȱerklärtȱeinigeȱGrundbegriffeȱundȱführtȱinȱdieȱVorȬȱundȱNachteileȱverteilȬ terȱ Systemeȱ ein.ȱ Kapitelȱ 2ȱ stelltȱ dieȱ wichtigstenȱ Konzepteȱ undȱ Modelleȱ verteilterȱ Anwendungsentwicklungȱ wieȱ dasȱ RPCȬModell,ȱ MessageȬPassing,ȱ verteilteȱ ProzeȬ duren,ȱverteilteȱObjekte,ȱverteilteȱTransaktionen,ȱverteilteȱKomponentenȱusw.ȱvor.ȱ Kapitelȱ 3ȱ befasstȱ sichȱ mitȱ SOAȬKonzeptenȱ undȱ Webservicesȱ alsȱ speziellerȱ SOAȬ
VI ȱ
Vorwortȱ ImplementierungsvarianteȱimȱDetail.ȱInȱKapitelȱ4ȱwerdenȱdieȱgrundlegendenȱKonȬ zepte,ȱ Modelleȱ undȱ Standardsȱ verteilterȱ Transaktionsverarbeitungȱ erläutertȱ undȱ derenȱUmsetzungȱinȱverschiedenenȱTechnologienȱdiskutiert.ȱKapitelȱ5ȱgibtȱschließȬ lichȱeinigeȱwichtigeȱHinweiseȱfürȱdieȱGestaltungȱvonȱverteiltenȱArchitekturenȱbeȬ trieblicherȱInformationssystemeȱ DieȱEinzelkapitelȱkönnenȱausȱPlatzgründenȱoftȱkeineȱallzuȱdetailliertenȱtechnischenȱ Erläuterungen,ȱsondernȱnurȱdieȱgrundlegendenȱAspekteȱundȱPrinzipienȱwiedergeȬ ben.ȱWeiterführendeȱLiteraturȱistȱzurȱGenügeȱimȱAnhangȱaufgeführt.ȱImȱÜbrigenȱ istȱderȱAutorȱallerdingsȱderȱAuffassung,ȱdassȱmanȱnurȱdurchȱvielȱÜbungȱeineȱEntȬ wicklungstechnikȱoderȱTechnologieȱvollȱbeherrschenȱkann.ȱDiesȱistȱnatürlichȱdemȱ Leserȱüberlassen.ȱȱ BeiȱderȱständigenȱWeiterentwicklungȱvonȱKonzeptenȱundȱTechnologienȱinȱverteilȬ tenȱ Systemenȱ istȱ esȱ fürȱ Softwarearchitektenȱ undȱ Entscheiderȱ schwer,ȱ dasȱ fürȱ dieȱ praktischeȱ Nutzungȱ Wichtigeȱ vomȱ wenigerȱ Wichtigenȱ auszufiltern.ȱ Diesesȱ Buchȱ sollȱ derartigeȱ Entscheidungsprozesseȱ einȱ wenigȱ unterstützenȱ bzw.ȱ dieȱ StudierenȬ denȱinȱdieȱLageȱversetzen,ȱEntscheidungsprozesseȱinȱdiesemȱUmfeldȱvorzubereitenȱ undȱinȱZukunftȱmitzutragen.ȱ DerȱInhaltȱdesȱBuchesȱentstandȱausȱmehrerenȱVorlesungenȱüberȱVerteilteȱSystemeȱ anȱ derȱ Hochschuleȱ fürȱ angewandteȱ Wissenschaftenȱ –ȱ FHȱ München.ȱ Bedankenȱ möchteȱichȱmichȱsehrȱherzlichȱfürȱdasȱFeedbackȱmeinerȱStudentInnenȱundȱStudenȬ ten.ȱEsȱhatȱmirȱsehrȱbeiȱderȱStrukturierungȱdesȱStoffesȱgeholfen.ȱDemȱVerlagȱdankeȱ ichȱ fürȱ dieȱ Unterstützungȱ imȱ Projektȱ undȱ fürȱ dieȱ allzeitȱ konstruktiveȱ undȱ angeȬ nehmeȱZusammenarbeit.ȱ FragenȱundȱKorrekturvorschlägeȱrichtenȱSieȱbitteȱanȱ[email protected].ȱ FürȱbegleitendeȱInformationenȱzurȱVorlesungȱsieheȱwww.profȬmandl.de.ȱ München,ȱimȱJuniȱ2008ȱ PeterȱMandlȱ
ȱ
VIIȱ
Inhaltsverzeichnis ȱ 1ȱȱEinführungȱinȱverteilteȱSysteme....................................................................................1 1.1ȱȱDefinitionenȱundȱFestlegungen..............................................................................2 1.1.1
GrundlegendeȱBegriffe ...............................................................................2
1.1.2
WasȱsindȱverteilteȱSysteme?.......................................................................3
1.1.3
KlassifizierungȱverteilterȱSysteme ............................................................6
1.1.4
BeispielȱeinerȱverteiltenȱSystemlandschaft ..............................................7
1.2ȱȱHistorischeȱTechnologieȬBetrachtung .................................................................10 1.3ȱȱGründeȱfürȱdieȱVerteilungȱbetrieblicherȱInformationssysteme .......................13 1.4ȱȱDasȱProblemȱderȱHeterogenität............................................................................15 1.5ȱȱSpezielleȱProblemeȱverteilterȱInformationssysteme ..........................................21 1.5.1
PersistenteȱDatenhaltungȱinȱverteilterȱUmgebung ...............................21
1.5.2
FehleranfälligkeitȱverteilterȱKommunikation........................................22
1.5.3
TransaktionssicherheitȱinȱverteiltenȱInformationssystemen ...............25
1.6ȱȱÜbungsaufgaben ....................................................................................................26 2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikation ..................................................27 2.1ȱȱClientȬServerȬModell .............................................................................................28 2.1.1
KommunikationsȬȱundȱInteraktionsformen ..........................................29
2.1.2
ImplementierungskonzepteȱfürȱdasȱClientȬServerȬComputing..........31
2.1.3
ServeroptimierungȱdurchȱCaching .........................................................46
2.1.4
ErweiterungenȱdesȱClientȬServerȬModells.............................................47
2.2ȱȱVerteilteȱProzeduraufrufe .....................................................................................50 2.2.1
GrundlegendesȱModell.............................................................................50
2.2.2
FallbeispielȱONCȱRPCȱvonȱSun ...............................................................52
2.3ȱȱVerteilteȱObjekte.....................................................................................................62 2.3.1
ȱ
GrundlegendesȱModell.............................................................................62
IXȱ
Inhaltsverzeichnisȱ 2.3.2
FallbeispielȱCORBA.................................................................................. 66
2.3.3
FallbeispielȱJavaȬRMI ............................................................................... 81
2.3.4
Fallbeispielȱ.NETȱRemoting .................................................................. 100
2.3.5
Zusammenfassung ................................................................................. 110
2.4ȱȱVerteilteȱKomponenten....................................................................................... 113 2.4.1
GrundlegendesȱModell .......................................................................... 113
2.4.2
FallbeispielȱCORBAȱComponentsȱ(CCM) ........................................... 116
2.4.3
Fallbeispielȱ.NETȱEnterpriseȱServices .................................................. 119
2.4.4
FallbeispielȱJEEȱ/ȱEnterpriseȱJavaȱBeans .............................................. 123
2.5ȱȱMessageȬPassing.................................................................................................. 148 2.5.1
GrundlegendesȱModell .......................................................................... 148
2.5.2
KlassifikationȱnachrichtenorientierterȱKommunikation ................... 149
2.5.4
PersistenteȱKommunikation.................................................................. 151
2.5.6
Fallbeispiel:ȱJavaȱMessagingȱService.................................................... 153
2.5.7
Fallbeispiel:ȱMessageȬdrivenȱBeans ..................................................... 167
2.5.8
Zusammenfassung ................................................................................. 169
2.6ȱȱÜbungsaufgaben.................................................................................................. 170 3ȱȱVerteilteȱDienstaufrufeȱundȱWebservices ............................................................... 173 3.1ȱȱVerteilteȱDienste .................................................................................................. 173 3.2ȱȱGrundlegendeȱKonzepteȱvonȱWebservices...................................................... 175 3.3ȱȱTechnologienȱfürȱSOAȱundȱWebservices ......................................................... 177 3.3.1
XMLȱalsȱBasistechnologie ...................................................................... 177
3.3.2
SimpleȱObjectȱAccessȱProtocol .............................................................. 180
3.3.4
WebȱServicesȱDescriptionȱLanguageȱ(WSDL) .................................... 188
3.3.5
UniversalȱDescription,ȱDiscoveryȱandȱIntegrationȱ(UDDI) .............. 195
3.3.6
Kommunikationsmodell,ȱNachrichtenformatȱundȱKodierungsstil . 196
3.3.7
WSȬIȬStandard......................................................................................... 200
3.3.8
VorgehensweiseȱzurȱEntwicklungȱvonȱWebservices......................... 201
3.4ȱȱJavaȬTechnologienȱfürȱWebservices.................................................................. 207 3.4.1
Xȱ ȱ
UnterstützteȱStandardsȱundȱAblaufumgebungen.............................. 207
Inhaltsverzeichnisȱ 3.4.2
JAXȬRPC ...................................................................................................208
3.4.3
JAXȬWS .....................................................................................................219
3.5ȱȱZusammenfassung ...............................................................................................223 3.6ȱȱÜbungsaufgaben ..................................................................................................224 4ȱȱKonzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitung............225 4.1ȱȱTransaktionen:ȱIdeeȱundȱHerausforderungen..................................................226 4.2ȱȱGrundlagen ...........................................................................................................231 4.2.1
ACIDȬEigenschaften ...............................................................................231
4.2.2
WichtigeȱTransaktionsmodelle..............................................................232
4.2.3
AnatomieȱeinesȱTransaktionssystems ..................................................237
4.2.4
ConcurrencyȱControl ..............................................................................238
4.2.5
LoggingȱundȱRecovery ...........................................................................247
4.3ȱȱKoordinationsprotokolleȱundȱverteiltesȱRecovery ..........................................251 4.3.1
TwoȬPhaseȬCommitȬProtokoll...............................................................251
4.3.2
ThreeȬPhaseȬCommitȬProtokoll ............................................................254
4.3.3
OneȬPhaseȬCommitȬProtokoll ...............................................................255
4.3.4
VergleichȱundȱOptimierungsvarianten ................................................256
4.3.5
ZustandsautomatenȱfürȱCommitȬProtokolle .......................................257
4.4ȱȱStandardsȱderȱTransaktionsverarbeitung .........................................................261 4.4.1
OSIȬTransaktionsprotokolle...................................................................261
4.4.2
DasȱDTPȬModell ......................................................................................267
4.4.3
OMG/CORBAȬTransaktionsmodell......................................................279
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologien ...............................289 4.5.1
TransaktionsunterstützungȱbeiȱJEE/EJB ...............................................289
4.5.2
JavaȱTransactionȱAPIȱ(JTA) ....................................................................293
4.5.3
JavaȱTransactionȱServicesȱ(JTS)..............................................................299
4.5.4
TransaktionsverarbeitungȱbeiȱEJBȱ3.0...................................................301
4.5.5
TransaktionsunterstützungȱbeiȱJMS .....................................................303
4.5.6
Transaktionsunterstützungȱbeiȱ.NET ...................................................303
4.5.7
TransaktionenȱfürȱWebanwendungen..................................................306
ȱ
XIȱ
Inhaltsverzeichnisȱ 4.5.8
TransaktionenȱfürȱWebserviceȬbasierteȱAnwendungen.................... 307
4.6ȱȱZusammenfassung,ȱpraktischeȱAnsätzeȱundȱAusblick .................................. 309 4.7ȱȱÜbungsaufgaben.................................................................................................. 313 5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungen .......................................... 315 5.1ȱȱBegriffeȱundȱDefinitionen................................................................................... 316 5.2ȱȱArchitekturstileȱundȱArchitekturqualität......................................................... 324 5.2.1
Architekturstile ....................................................................................... 324
5.2.2
Qualitätseigenschaften........................................................................... 326
5.3ȱȱSchichtenorientierteȱArchitekturen................................................................... 330 5.3.1
Schichtenarchitekturen .......................................................................... 330
5.3.2
SchichtenverteilungȱinȱClientȬServerȬArchitekturen ......................... 332
5.3.3
MiddlewareȱimȱSchichtenmodell ......................................................... 335
5.4ȱȱServiceȬorientierteȱArchitekturen...................................................................... 338 5.4.1
Grundlegendes........................................................................................ 338
5.4.1
Architekturvarianten.............................................................................. 339
5.5ȱȱSpezielleȱArchitekturenȱverteilterȱSysteme...................................................... 341 5.5.1
PeerȬtoȬPeerȬArchitekturen ................................................................... 341
5.5.2
PushȬȱundȱEventȬbasierteȱArchitekturen............................................. 344
5.5.3
GridȬArchitekturen................................................................................. 345
5.6ȱȱDatenzugriffsarchitekturen................................................................................ 346 5.6.1
GrundlegendesȱzumȱDatenbankzugriff............................................... 346
5.6.2
ObjectȬRelationalȱMappingȱundȱderenȱVarianten.............................. 346
5.6.3
Fallbeispiel:ȱBMPȱundȱCMPȱinȱEJBȱ2.x................................................. 355
5.6.4
Fallbeispiel:ȱJavaȱPersistenceȱAPIȱundȱEJBȱ3.0.................................... 363
5.7
Clientzugriffsarchitekturen ............................................................................ 369
5.7.1
Grundlegendes........................................................................................ 369
5.7.2
Fallbeispiel:ȱJEEȬPatternsȱfürȱdieȱServerkapselung............................ 370
5.8
WebȬArchitekturen .......................................................................................... 372
5.8.1
Grundlegendes........................................................................................ 372
5.8.2
Fallbeispiel:ȱJEEȬArchitektur................................................................. 373
XIIȱ ȱ
Inhaltsverzeichnisȱ 5.8.3 5.9
ServletsȱundȱJavaȱServerȱPages..............................................................375
ResümeeȱzurȱArchitekturbetrachtung ...........................................................379
5.10ȱȱÜbungsaufgaben ................................................................................................379 6ȱȱSchlussbemerkung ......................................................................................................381 7ȱȱLösungenȱzuȱdenȱÜbungsaufgaben..........................................................................383 7.1ȱȱEinführungȱinȱverteilteȱSysteme.........................................................................383 7.2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikation .........................................385 7.3ȱȱVerteilteȱDienstaufrufeȱundȱWebservices .........................................................392 7.4ȱȱKonzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitung.....394 7.5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungen ....................................398 Literaturhinweise ............................................................................................................403 Sachwortverzeichnis .......................................................................................................413 ȱ
ȱ
XIIIȱ
1 Einführung in verteilte Systeme WasȱistȱdennȱeigentlichȱeinȱverteiltesȱSystem?ȱDieseȱFrageȱwirdȱheuteȱinȱderȱLiteraȬ turȱ nichtȱ eindeutigȱ beantwortet.ȱ Esȱ gibtȱ soȱ vieleȱ verschiedeneȱ Facettenȱ verteilterȱ Systemeȱbzw.ȱverteilterȱAnwendungen,ȱdassȱesȱschwerȱfällt,ȱeineȱallgemeingültigeȱ Definitionȱ zuȱ finden.ȱ Einigeȱ Definitionsversucheȱ sollenȱ inȱ diesemȱ Kapitelȱ vorgeȬ stelltȱwerden.ȱDaȱverteilteȱSystemeȱsehrȱvielȱmitȱdenȱTechnologien,ȱdieȱverwendetȱ werdenȱ können,ȱ zuȱ tunȱ haben,ȱ wirdȱ imȱ Anschlussȱ daranȱ eineȱ kurzeȱ Historieȱ derȱ Technologieentwicklungȱspeziellȱ fürȱ Technologien,ȱdieȱinȱ verteiltenȱ Umgebungenȱ eingesetztȱwerden,ȱgegeben.ȱ DamitȱRechnerȱ bzw.ȱProgrammeȱ miteinanderȱ überȱeinȱNetzwerkȱ kommunizierenȱ können,ȱ istȱ einȱ gemeinsamesȱ Verständnisȱ überȱ dieȱ Regelnȱ derȱ Kommunikationȱ erforderlich.ȱ Alleȱ Partnerȱ müssenȱ einheitlicheȱ Kommunikationsprotokolleȱ einhalȬ ten.ȱ Inȱ Referenzmodellenȱ wieȱ demȱ ISO/OSIȬReferenzmodellȱ undȱ demȱ TCP/IPȬ ReferenzmodellȱwerdenȱdieȱGrundlagenȱfestgelegt.ȱDieȱKenntnisȱderȱgrundlegenȬ denȱ Mechanismenȱ undȱ derȱ entsprechendenȱ Referenzmodelle,ȱ insbesondereȱ desȱ TCP/IPȬReferenzmodellsȱwirdȱfürȱdieȱweiterenȱBetrachtungenȱweitgehendȱvorausȬ gesetztȱ(sieheȱhierzuȱTanenbaumȱ2003ȱundȱMandlȱ2008b).ȱ NachȱderȱEinführungȱwerdenȱwichtigeȱDesignzieleȱverteilterȱSysteme,ȱwieȱLastverȬ teilung,ȱ Skalierbarkeit,ȱ Ausfallsicherheitȱ undȱ Flexibilitätȱ diskutiert.ȱ Esȱ wirdȱ auchȱ erläutert,ȱ dassȱ Transparenzȱ inȱ verschiedenenȱ Variantenȱ fürȱ dieȱ Entwicklungȱ undȱ NutzungȱverteilterȱSystemeȱsehrȱwichtigȱist.ȱDieȱProblemeȱderȱHeterogenitätȱundȱ weitereȱ Aspekte,ȱ dieȱ inȱ verteiltenȱ Umgebungenȱ gelöstȱ werdenȱ müssen,ȱ werdenȱ ebenfallsȱerörtert.ȱ
Zielsetzung des Kapitels ZielȱdiesesȱKapitelsȱistȱes,ȱeineȱEinführungȱinȱdieȱProblematikȱderȱverteiltenȱSysteȬ meȱ zuȱ geben.ȱ Derȱ Studierendeȱ sollȱ grundlegendeȱ Begriffeȱ verteilterȱ Systemeȱ kenȬ nenlernenȱ undȱ Technologienȱ fürȱ dieȱ Entwicklungȱ verteilterȱ Systemeȱ einordnenȱ können.ȱȱ
Wichtige Begriffe Verteiltesȱ System,ȱ verteilteȱ Anwendung,ȱ Transparenzȱ undȱ Heterogenität,ȱ PerȬ sistenz,ȱ Transaktionssicherheit,ȱ Fehlersemantiken,ȱ Maybe,ȱ AtȬMostȬOnce,ȱ AtȬ LeastȬOnce,ȱExactlyȬOnceȱ
ȱ
1ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ
1.1 Definitionen und Festlegungen Heuteȱ sindȱ fastȱ alleȱ betrieblichenȱ Informationssystemeȱ inȱ derȱ einenȱ oderȱ anderenȱ Formȱ verteilt,ȱ wobeiȱ unterschiedlichsteȱ Technologienȱ eingesetztȱ werden.ȱ Dieserȱ Abschnittȱ sollȱ nachȱ einerȱ kurzenȱ Einführungȱ einigerȱ Begriffeȱ undȱ einerȱ Klärung,ȱ wasȱ manȱ unterȱ einemȱ verteiltenȱ Systemȱ heuteȱ versteht,ȱ eineȱ kurzeȱ Geschichteȱ zuȱ denȱTechnologienȱfürȱdieȱEntwicklungȱverteilterȱSystemeȱgeben.ȱ
1.1.1
Grundlegende Begriffe
Fürȱ unsereȱ weiterenȱ Betrachtungenȱ sollenȱ zunächstȱ einigeȱ Begriffeȱ erläutertȱ werȬ den,ȱdieȱimȱUmfeldȱderȱbetrieblichenȱInformationssystemeȱhäufigȱverwendetȱwerȬ den.ȱHierzuȱgehörenȱdieȱBegriffeȱSystem,ȱInformationssystem,ȱTechnikȱundȱTechnoloȬ gie.ȱ Systemȱ undȱ Informationssystem:ȱ Inȱ derȱ Informatikȱ wirdȱ oftȱ vonȱ Systemenȱ geȬ sprochen.ȱGanzȱallgemeinȱwirdȱderȱBegriffȱSystemȱinȱunterschiedlicherȱBedeutungȱ verwendet.ȱ Imȱ Prinzipȱ istȱ allerdingsȱ immerȱ dieȱ ȈZusammenstellungȈȱ mehrererȱ Elemente,ȱdieȱuntereinanderȱinȱWechselwirkungȱstehen,ȱgemeint.ȱ Einȱ Informationssystemȱ dientȱ dagegenȱ prinzipiellȱ derȱ rechnergestütztenȱ Erfassung,ȱ Speicherung,ȱ Verarbeitung,ȱ Verwaltung,ȱ Pflegeȱ usw.ȱ vonȱ Information.ȱ Esȱ bestehtȱ ausȱ Hardwareȱ (Rechnerȱ oderȱ einȱ ganzerȱ Rechnerverbund),ȱ Datenbank(en),ȱ SoftȬ wareȱ (SystemȬȱ undȱ Anwendungssoftware),ȱ Datenȱ undȱ derenȱ Anwendungen.ȱ InȬ formationssystemeȱ sindȱ soziotechnischeȱ Systeme,ȱ dieȱ auchȱ ausȱ einzelnenȱ TeilsysȬ temenȱbestehenȱkönnen,ȱundȱfürȱdieȱoptimaleȱBereitstellungȱvonȱȱInformationȱundȱ (technischer)ȱKommunikationȱdienen.ȱDieseȱBeschreibungȱlässtȱvielȱSpielraumȱfürȱ Interpretationen.ȱ EinȱbetrieblichesȱInformationssystemȱ(BusinessȱInformationȱSystem)ȱistȱeinȱInformatiȬ onssystem,ȱdasȱsichȱinȱersterȱLinieȱmitȱbetrieblichenȱFunktionenȱundȱDatenȱbefasst,ȱ umȱdieseȱeffizientȱzuȱbearbeitenȱundȱbereitzustellen.ȱ InȱderȱpraktischenȱInformatikȱbezeichnetȱmanȱauchȱeinȱRechnersystemȱmitȱHardȬȱ undȱSoftwareȱeinfachȱkurzȱalsȱSystemȱundȱsprichtȱzumȱBeispielȱvonȱeinerȱSystemȬ architektur,ȱ wennȱ Hardwareȱ undȱ Softwareȱ gleichermaßenȱ inȱ dieȱ ArchitekturbeȬ trachtungȱeinesȱInformationssystemsȱmitȱeinbezogenȱwerden.ȱ Technikȱ undȱ Technologie:ȱ Unterȱ Technikȱ verstehtȱ manȱ nachȱ (WWWȬ038)ȱ VerfahrenȱundȱFähigkeitenȱzurȱpraktischenȱAnwendungȱderȱNaturwissenschaftenȱ undȱ zurȱ Produktionȱ industrieller,ȱ handwerklicherȱ oderȱ auchȱ künstlerischerȱ ErȬ zeugnisse.ȱTechnikȱkannȱauchȱalsȱdieȱFähigkeitȱdesȱMenschenȱverstandenȱwerden,ȱ Naturgesetze,ȱKräfteȱoderȱRohstoffeȱzurȱSicherungȱseinerȱExistenzgrundlageȱsinnȬ vollȱeinzusetzenȱoderȱumzuwandeln.ȱ Technologieȱistȱnachȱ(WWWȬ038)ȱdagegenȱdieȱWissenschaftȱvomȱEinsatzȱderȱTechȬ nikȱimȱengerenȱSinne,ȱinȱderȱesȱumȱdieȱUmwandlungȱvonȱRohȬȱundȱWerkstoffenȱinȱ fertigeȱProdukteȱ undȱ Gebrauchsartikelȱ geht,ȱ imȱ weiterenȱ Sinneȱ gehtȱ esȱ aberȱ auchȱ
2
ȱ
1.1ȱȱDefinitionenȱundȱFestlegungenȱ umȱHandfertigkeitenȱundȱKönnen.ȱEineȱandereȱDefinitionȱbezeichnetȱmitȱTechnoȬ logieȱ dieȱ Gesamtheitȱ derȱ Verfahrenȱ zurȱ Produktionȱ vonȱ Güternȱ undȱ Dienstleistungen,ȱdieȱeinerȱGesellschaftȱzurȱVerfügungȱsteht.ȱTechnologieȱbeinhalȬ tetȱdieȱKomponentenȱderȱTechnikȱ(Werkzeuge,ȱGeräte,ȱApparate),ȱdieȱmateriellenȱ undȱ organisatorischenȱ Voraussetzungenȱ undȱ derenȱ Anwendung.ȱ Häufigȱ wirdȱ Technologieȱ inȱ derȱ Praxisȱ auchȱ einfachȱ anstelleȱ vonȱ Technikȱ verwendet.ȱ Sprichtȱ manȱimȱZusammenhangȱz.B.ȱbeiȱFahrzeugenȱvonȱneuesterȱeingesetzterȱTechnoloȬ gie,ȱistȱnurȱdieȱTechnikȱgemeint.ȱȱ Unterȱ HighȬTechȱ verstehtȱ manȱ hochentwickelteȱ Technologien,ȱ dieȱ neuesteȱ wissenȬ schaftlicheȱ Erkenntnisseȱ umsetzen,ȱ soȱ beispielsweiseȱ dieȱ Produktionȱ vonȱ CPUsȱ oderȱ bakteriellȱ hergestelltesȱ Insulin.ȱ ImȱGegensatzȱ dazuȱ bezeichnetȱ LowȬTechȱ abȬ sichtlichȱ möglichstȱ einfache,ȱ ausfallsichereȱ Technologienȱ (beiȱ derenȱ Entwicklungȱ natürlichȱauchȱneuesteȱwissenschaftlicheȱErkenntnisseȱzumȱEinsatzȱkommenȱkönȬ nen),ȱdieȱdadurchȱeinfachȱinȱHerstellung,ȱAnwendungȱoderȱWartungȱsind.ȱ
1.1.2
Was sind verteilte Systeme?
Wasȱgenauȱsindȱ„verteilteȱSysteme“?ȱAuchȱdieserȱBegriffȱistȱinȱderȱInformatikȱnichtȱ einheitlichȱdefiniert,ȱobwohlȱerȱȬȱinsbesondereȱinȱderȱPraxisȱȬȱsehrȱhäufigȱverwenȬ detȱwird.ȱMehrereȱDefinitionenȱbzw.ȱBeschreibungenȱfürȱverteilteȱSystemeȱsindȱinȱ derȱLiteraturȱzuȱfinden.ȱEinigeȱdavonȱsollenȱhierȱerwähntȱwerden:ȱ Tanenbaumȱ definiertȱ einȱ verteiltesȱ Systenȱ wieȱ folgtȱ (Tanenbaumȱ 2003):ȱ „Einȱ verȬ teiltesȱ Systemȱ istȱ eineȱ Mengeȱ voneinanderȱ unabhängigerȱ Computer,ȱ dieȱ demȱ BeȬ nutzerȱwieȱeinȱeinzelnes,ȱkohärentesȱSystemȱerscheinen“.ȱ Bengel’sȱ Definitionȱ einesȱ verteiltenȱ Systemsȱ lautetȱ folgendermaßenȱ (Bengelȱ 2004):ȱ „Einȱ verteiltesȱ Systemȱ istȱ definiertȱ durchȱ eineȱ Mengeȱ vonȱ Funktionenȱ oderȱ KomȬ ponenten,ȱdieȱinȱBeziehungȱzueinanderȱstehenȱ(ClientȬServerȬBeziehung)ȱundȱeineȱ Funktionȱerbringen,ȱdieȱnichtȱerbrachtȱwerdenȱkannȱdurchȱdieȱKomponentenȱalleiȬ ne.“1ȱ (Kurmannȱ 2004)ȱ beschreibtȱ einȱ verteiltesȱ Systemȱ inȱ einerȱ „Arbeitsdefinition“ȱ wieȱ folgt:ȱ„EinȱverteiltesȱSystemȱistȱeinȱSoftwaresystem,ȱwelchesȱdieȱVerteilungȱeinzelȬ nerȱ Bausteineȱ einesȱ Anwendungssystemsȱ aufȱ verschiedene,ȱ räumlichȱ getrennteȱ KnotenȱeinesȱNetzwerks,ȱunterstützt.ȱEinzelneȱTeileȱdesȱSystemsȱkönnenȱdezentralȱ administriertȱ werdenȱ undȱ kommunizieren,ȱ umȱ gemeinsamȱ Aufgabenȱ zuȱ bewältiȬ gen.ȱ Einȱ verteiltesȱ Systemȱ unterstütztȱ nebenläufigeȱ Verarbeitungȱ vonȱ GeschäftsȬ prozessenȱundȱistȱsowohlȱfürȱdenȱAnwenderȱalsȱauchȱfürȱdenȱEntwicklerȱtranspaȬ rent“.ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 1
ȱȱ EineȱClientȬServerȬBeziehungȱistȱnachȱMeinungȱdesȱAutorsȱnichtȱzwingendȱerforderlich.ȱ Wieȱwirȱnochȱsehenȱwerden,ȱgibtȱesȱauchȱgenügendȱAnwendungssysteme,ȱinȱdenenȱdieȱ einzelnenȱKomponentenȱaufȱunterschiedlicheȱWeiseȱmiteinanderȱkommunizieren.ȱ
ȱ
3ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ Überȱ dieȱ Definitionenȱ lässtȱ sichȱ wieȱ immerȱ diskutieren.ȱ Derȱ Begriffȱ derȱ TranspaȬ renzȱ wirdȱ z.B.ȱ inȱ diesemȱ Zusammenhangȱ rechtȱ unterschiedlichȱ benutzt.ȱ Einemȱ Entwicklerȱmussȱz.B.ȱdurchausȱbewusstȱsein,ȱaufȱwelchenȱSystemenȱdieȱeinzelnenȱ Komponentenȱ ablaufen.ȱ Auchȱ istȱ dieȱ Unterstützungȱ vonȱ Nebenläufigkeitȱ keineȱ zwingendeȱ Notwendigkeit,ȱ obwohlȱ sieȱ inȱ heutigenȱ verteiltenȱ Systemenȱ meistȱ übȬ lichȱist.ȱ UnsȱsollȱimȱWeiterenȱdieȱDefinitionȱvonȱTanenbaumȱfürȱverteilteȱSystemeȱgenügen,ȱ daȱ sieȱ amȱ flexibelstenȱ ist.ȱ Dieȱ Begriffeȱ verteiltesȱSystemȱ undȱ verteiltesȱAnwendungsȬ systemȱverwendenȱwirȱinȱdiesemȱDokumentȱalsȱSynonyme,ȱdaȱesȱausȱunsererȱSichtȱ inȱ ersterȱ Linieȱ umȱ Anwendungssystemeȱ geht.ȱ Wirȱ erweiternȱ daherȱ dieȱ Definitionȱ vonȱTanenbaumȱundȱnehmenȱdieseȱalsȱBasisȱfürȱunsereȱBetrachtungen:ȱ VerteiltesȱSystem:ȱEinȱverteiltesȱSystemȱbasiertȱaufȱeinerȱMengeȱvoneinanderȱunabȬ hängigerȱ Rechnersystemeȱ undȱ Softwarebausteine,ȱ dieȱ demȱ Benutzerȱ wieȱ einȱ einȬ zelnes,ȱ kohärentesȱ Systemȱ bzw.ȱ Anwendungssystemȱ erscheinen.ȱ Jederȱ SoftwareȬ bausteinȱ einerȱ verteiltenȱ Anwendungȱ kannȱ aufȱ einemȱ eigenenȱ Rechnerȱ liegen.ȱ Esȱ könnenȱaberȱauchȱmehrereȱSoftwarebausteineȱaufȱdemȱgleichenȱRechnerȱinstalliertȱ sein.ȱ Typischeȱ verteilteȱ Systemeȱ sindȱ z.B.ȱ Webanwendungen,ȱ dasȱ EȬMailsystemȱ imȱ InȬ ternet,ȱdasȱDomainȱNameȱSystemȱ(DNS)ȱfürȱdieȱVerwaltungȱderȱIPȬAdressen,ȱverȬ teilteȱ Datenbankanwendungen,ȱ verteilteȱ Dateisystemeȱ wieȱ dasȱ Networkȱ Fileȱ SysȬ temȱ (NFS)ȱ vonȱ Sunȱ Microsystemsȱ undȱ dasȱ WWW.ȱ Diesȱ sindȱ verteilteȱ AnwenȬ dungssysteme,ȱdieȱimȱWesentlichenȱaufȱeinemȱintelligentenȱProtokollȱderȱAnwenȬ dungsschichtȱbasierenȱundȱvonȱderȱKomplexitätȱherȱklarȱumrissenȱsind.ȱȱ Verteiltesȱ Informationssystem:ȱ Wirȱ beschäftigenȱ unsȱ vorwiegendȱ mitȱ verteiltenȱ Anwendungssystemenȱ imȱ betrieblichenȱ Umfeldȱ bzw.ȱ verteiltenȱ InformationssysteȬ men,ȱbeiȱdenenȱeinzelneȱFunktionenȱaufȱmehrereȱRechnerȱ(mindestensȱzwei)ȱverȬ teiltȱ sind,ȱ alsoȱ verteilteȱ Systeme,ȱ dieȱ inȱ betrieblichenȱ Informationssystemenȱ releȬ vantȱsind.ȱVerteilteȱInformationssystemeȱsindȱspezielle,ȱmeistȱkomplizierteȱverteilȬ teȱSysteme,ȱdieȱsichȱnachȱ(Hammerschallȱ2005)ȱdurchȱfolgendeȱEigenschaftenȱausȬ zeichnen:ȱ – Verteilteȱ Informationssystemeȱ sindȱ meistȱ sehrȱ groß,ȱ wasȱ denȱ Codeumfangȱ anbelangtȱ(mehrereȱ100.000,ȱteilweiseȱmehrereȱMillionenȱLinesȱofȱCode).ȱ – Verteilteȱ Informationssystemeȱ sindȱ sehrȱ datenorientiert,ȱ d.h.ȱ dieȱ DatenhalȬ tungȱstehtȱimȱZentrumȱderȱAnwendung.ȱÜblicherweiseȱwerdenȱdieȱDatenȱinȱ einerȱ Datenbankȱ verwaltet.ȱ Dieȱ zugrundeliegendenȱ Datenmodelleȱ sindȱ meistȱsehrȱumfangreich.ȱ – Verteilteȱ Informationssystemeȱ sindȱ extremȱ interaktivȱ undȱ verfügenȱ (nebenȱ HintergrundȬȱ undȱ BatchȬFunktionalität)ȱ überwiegendȱ überȱ graphischeȱ BeȬ nutzerschnittstellen.ȱ – VerteilteȱInformationssystemeȱsindȱmeistensȱauchȱsehrȱnebenläufig,ȱwasȱsichȱ durchȱeineȱgroßeȱAnzahlȱanȱparallelȱarbeitendenȱBenutzernȱäußert.ȱ
4
ȱ
1.1ȱȱDefinitionenȱundȱFestlegungenȱ Hinzuȱ kommt,ȱ dassȱ derartigeȱ Anwendungenȱ oftȱ auchȱ sehrȱ unternehmenskritischȱ sind.ȱFälltȱbeispielsweiseȱeinȱWarenwirtschaftssystemȱeinesȱVersandhändlersȱoderȱ einȱ CoreȬBankingȬSystemȱ überȱ längereȱ Zeitȱ aus,ȱ istȱ diesȱ durchausȱ existenzbedroȬ hendȱfürȱdasȱUnternehmen.ȱVerteilteȱbetrieblicheȱInformationssystemeȱstehenȱauchȱ imȱMittelpunktȱunsererȱweiterenȱBetrachtung.ȱDerartigȱkomplexeȱSystemeȱbenötiȬ genȱ eineȱ entsprechendȱ komfortableȱ Infrastrukturȱ mitȱ TransaktionsȬ,ȱ SicherheitsȬȱ undȱsonstigenȱDiensten.ȱ Inȱanderen,ȱmehrȱtechnischerenȱBereichenȱ(z.B.ȱinȱAutomobilen)ȱentstehenȱderzeitȱ ebenfallsȱimmerȱkomplexereȱverteilteȱAnwendungssysteme.ȱInȱmanchenȱFahrzeuȬ genȱ kommunizierenȱ mehrȱ alsȱ 50ȱ Microcontrollerȱ bzw.ȱ dieȱ daraufȱ laufendenȱ SoftȬ warebausteineȱ überȱ verschiedeneȱ Bussystemeȱ miteinander.ȱ Hierȱ handeltȱ esȱ sichȱ auchȱumȱhochkomplexeȱverteilteȱSysteme,ȱdieȱwirȱaberȱinȱunserenȱAusführungenȱ wenigerȱbetrachten.ȱ Inȱ Abgrenzungȱ hierzuȱ sindȱ Netzwerkbetriebssystemeȱ undȱ verteilteȱ BetriebssysteȬ meȱzuȱnennen:ȱȱ Verteilteȱ Betriebssystemeȱ verteilenȱ Betriebssystemfunktionalitätȱ so,ȱ dassȱ dasȱ geȬ samteȱNetzȱwieȱeinȱRechnersystemȱerscheint.ȱFürȱdenȱAnwenderȱistȱesȱnichtȱmehrȱ ersichtlich,ȱwoȱwelcheȱRessourcenȱverwaltetȱwerdenȱ(sieheȱAbbildungȱ1Ȭ1).ȱ Rechnersystem A
Rechnersystem B
Rechnersystem C
Verteilte Applikationen
Verteilte Betriebssystemdienste
Kernel
Kernel
Kernel
Netzwerk
ȱ
Abbildungȱ1Ȭ1:ȱVerteiltesȱBetriebssystemȱnachȱTanenbaumȱ2003ȱ
Netzwerkbetriebssystemeȱ liegenȱ überȱ denȱ lokalenȱ Betriebssystemenȱ undȱ stellenȱ DiensteȱwieȱdenȱZugriffȱaufȱentfernteȱRessourcenȱ(Dateien,ȱDrucker)ȱimȱNetzwerkȱȱ zurȱVerfügung.ȱSieȱsindȱheuteȱnichtȱmehrȱsoȱverbreitet,ȱalsȱdasȱNovellȬSystemȱdieȱ PCȬNetzeȱ eroberte.ȱ Dieseȱ Funktionalitätȱ istȱ heuteȱ schonȱ inȱ denȱ StandardbetriebsȬ systemenȱ enthalten.ȱ Inȱ Abbildungȱ 1Ȭ2ȱ istȱ derȱ Einsatzȱ einesȱ NetzwerkbetriebssysȬ temsȱskizziert.ȱ VerteilteȱBetriebssystemeȱhabenȱsichȱinȱderȱPraxisȱnieȱrichtigȱdurchgesetzt.ȱVerteilȬ teȱ Systemeȱ allerdingsȱ Ȭȱ undȱ hierȱ sindȱ vorȱ allemȱ Anwendungssystemeȱ gemeintȱ Ȭȱ
ȱ
5ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ sindȱ heuteȱ fastȱ überallȱ imȱ Einsatz.ȱ Sieȱ sindȱ imȱ Internetȱ genausoȱ zuȱ findenȱ wieȱ inȱ Intranetsȱ undȱ esȱ spieltȱ imȱ Prinzipȱ keineȱ Rolle,ȱ welcheȱ Definitionȱ nunȱ amȱ bestenȱ passt.ȱȱ Rechnersystem A
Rechnersystem B
Rechnersystem C
Verteilte Applikationen
Netzwerkbetriebssystemdienste
Netzwerkbetriebssystemdienste
Netzwerkbetriebssystemdienste
Kernel
Kernel
Kernel
Netzwerk
ȱ
Abbildungȱ1Ȭ2:ȱNetzwerkbetriebssystemȱ
1.1.3
Klassifizierung verteilter Systeme
Eineȱ Typisierungȱ bzw.ȱ Klassifizierungȱ verteilterȱ Systemeȱ wurdeȱ schonȱ mehrfachȱ versucht.ȱTanenbaumȱunterscheidetȱbeispielsweiseȱgrobȱnachȱverteiltenȱComputerȬ systemenȱ (Distributedȱ Computingȱ Systems),ȱ verteiltenȱ Informationssystemenȱ (Distributedȱ Informationȱ Systems)ȱ undȱ verteiltenȱ pervasivenȱ Systemenȱ (DistribuȬ tedȱ pervasiveȱ Systems,ȱ pervasiveȱ =ȱ überallȱ vorhanden,ȱ durchdringend)ȱ (TanenȬ baumȱ2007):ȱ – UnterȱverteiltenȱComputersystemenȱverstehtȱTanenbaumȱverteilteȱSystemeȱfürȱ Hochleistungsaufgabenȱ undȱ ordnetȱ hierȱ Cluster 2 ȬComputersystemeȱ undȱ GridȬComputersystemeȱ ein.ȱ ClusterȬComputersystemeȱ bestehenȱ ausȱ einerȱ Mengeȱ ähnlichȱ aufgebauterȱ Rechnersysteme,ȱ dieȱ üblicherweiseȱ inȱ einemȱ LANȱmiteinanderȱvernetztȱsindȱundȱKomponentenȱeinerȱverteiltenȱAnwenȬ dungȱenthalten.ȱUnterȱGridȬComputersystemenȱkannȱmanȱauchȱeineȱMengeȱ (evtl.ȱ sogarȱ eineȱ sehrȱ großeȱ Menge)ȱ vonȱ Rechnersystemenȱ verstehen,ȱ dieȱ weiterȱ verteiltȱ undȱ zumȱ Teilȱ inȱ sehrȱ unterschiedlichenȱ AdminstrationsdoȬ mänenȱstehenȱ undȱ gemeinsamȱ eineȱ verteilteȱAnwendungȱ unterstützen.ȱ TyȬ pischeȱ GridȬbasierteȱ Anwendungenȱ findenȱ sichȱ heuteȱ nurȱ nochȱ seltenȱ undȱ dannȱvorȱallemȱfürȱrechenintensiveȱAufgaben.ȱManȱversuchtȱauch,ȱdieȱvielenȱ RechnerȱimȱInternet,ȱdieȱjaȱdieȱmeisteȱZeitȱihreȱCPUsȱfastȱgarȱnichtȱnutzen,ȱinȱ
ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 2
ȱClusterȱ=ȱnumberȱofȱthingsȱofȱtheȱsameȱkindȱgrowingȱcloselyȱtogetherȱ(Baukeȱ2006).ȱ
6
ȱ
1.1ȱȱDefinitionenȱundȱFestlegungenȱ Grids3ȱzusammenzuschalten.ȱ Einȱ Beispielȱfürȱ eineȱ GridȬAnwendungȱ istȱ dasȱ Earthȱ Systemȱ Gridȱ Project,ȱ inȱ demȱ Simulationenȱ fürȱ dieȱ Klimaforschungȱ durchgeführtȱ werden.ȱ ClusterȬȱ undȱ GridȬComputersystemeȱ zeichnenȱ sichȱ durchȱ eineȱ sehrȱ guteȱ Skalierbarkeit,ȱ durchȱ guteȱ Möglichkeitenȱ derȱ LastverȬ teilungȱundȱdurchȱhoheȱFehlertoleranzȱaus.ȱ – Unterȱ verteiltenȱ Informationssystemenȱ verstehtȱ Tanenbaumȱ dieȱ bereitsȱ obenȱ angesprochenenȱklassischenȱbetrieblichenȱAnwendungen,ȱdieȱTransaktionenȱ ausführen.ȱ Dieseȱ Anwendungssystemeȱ stehenȱ imȱ Fokusȱ unsererȱ BetrachȬ tung.ȱInsbesondereȱTransaktionsanwendungenȱwerdenȱwirȱnochȱausführlichȱ besprechen.ȱ – Verteilteȱ pervasiveȱ Systemeȱ sindȱ kleineȱ oderȱ auchȱ sehrȱ kleine,ȱ oftȱ batteriegeȬ triebeneȱSystemeȱundȱSysteme,ȱdieȱauchȱmobilȱseinȱkönnen.ȱHierunterȱfallenȱ SensorenȬSystemeȱ fürȱ dasȱ Gesundheitswesenȱ etwaȱ zurȱ Überwachungȱ vonȱ Körperfunktionenȱ(HerzȬKreislaufȱusw.).ȱDieseȱSystemeȱerfreuenȱsichȱheuteȱ bereitsȱ zunehmenderȱ Verbreitung.ȱ Manȱ sprichtȱ inȱ diesemȱ Zusammenhangȱ auchȱ vonȱ UbiquitousȱComputingȱ (kurz:ȱ Ubicomp).ȱ Ubicompȱ beschäftigtȱ sichȱ mitȱComputerȬSystemen,ȱdieȱunauffälligȱundȱunsichtbarȱagieren,ȱinȱAlltagsȬ gegenständenȱvorhandenȱsindȱundȱintelligenteȱFunktionenȱübernehmen.ȱFürȱ dieȱEntwicklungȱderartigerȱSystemeȱgibtȱesȱheuteȱnochȱkeineȱStandards,ȱdaȱ sieȱsichȱnochȱweitgehendȱimȱForschungsstadiumȱbefinden.ȱ AndereȱKlassifizierungsversucheȱordnenȱverteilteȱSystemeȱanhandȱihrerȱArchitekȬ turmerkmale.ȱInȱ(Dustdarȱ2003)ȱwirdȱbeispielsweiseȱeineȱEinordnungȱnachȱArchiȬ tekturstilenȱ vorgenommen.ȱ Esȱ wirdȱ zwischenȱ datenzentriertenȱ Architekturen,ȱdaȬ tenflussorientiertenȱ Architekturen,ȱ CallȬAndȬReturnȬArchitekturen,ȱ unabhängigenȱ KomponentenȬArchitekturenȱundȱauchȱvirtuellenȱMaschinenȬArchitekturenȱunterȬ schieden.ȱ CallȬAndȬReturnȬArchitekturen,ȱ unabhängigeȱ KomponentenȬArchiȬ tekturenȱsowieȱhierfürȱvorhandeneȱTechnologienȱwerdenȱwirȱimȱRahmenȱunsererȱ Betrachtungȱnochȱgenauerȱuntersuchen.ȱEineȱallgemeinȱanerkannteȱKlassifizierungȱ verteilterȱ Systemeȱ liegtȱ aberȱ nichtȱ vor.ȱ Wieȱ wirȱ imȱ Weiterenȱ nochȱ sehenȱ werden,ȱ nutzenȱ heutigeȱ verteilteȱ Anwendungenȱ meistȱ mehrereȱ Architekturstileȱ undȱ auchȱ dieȱ Typenȱ nachȱ Tanenbaumȱ sindȱ inȱ derȱ Praxisȱ nichtȱ eindeutigȱ abzugrenzen.ȱ BeiȬ spielsweiseȱ werdenȱ inȱ heutigenȱ verteiltenȱ Informationssystemenȱ auchȱ ClusterȬ Ansätzeȱ verwendet.ȱ Clusterȱ findetȱ manȱ heuteȱ beispielsweiseȱ häufigȱ inȱ internetȬ basiertenȱVerkaufssystemenȱvor,ȱdieȱsehrȱvieleȱAnwenderȱbedienenȱmüssen.ȱ
1.1.4
Beispiel einer verteilten Systemlandschaft
BetrachtenȱwirȱeinȱBeispielȱausȱdemȱUmfeldȱderȱbetrieblichenȱInformationssystemeȱ undȱzwarȱspeziellȱeineȱ(völligȱunvollständige)ȱAnwendungslandschaftȱeinesȱGroßȬ händlers,ȱderȱseineȱUnternehmensdatenȱinȱeinemȱERPȬSystemȱ(EnterpriseȱResourȬ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 3
ȱȱ InȱAnalogieȱzumȱStromnetzȱkannȱmanȱsichȱeinȱComputerȬGridȱauchȱsoȱvorstellen,ȱdassȱ manȱRechenleistungȱausȱderȱSteckdoseȱoderȱüberȱdenȱInternetanschlussȱbezieht.ȱ
ȱ
7ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ ceȱ Planning)ȱ verwaltetȱ undȱ derȱ einȱ großesȱ Lagersystemȱ unterhält,ȱ dasȱ überȱ ITȬ Systemeȱ gesteuertȱ wird.ȱ Inȱ Abbildungȱ 1Ȭ3ȱ istȱ dieȱ logischeȱ Sichtȱ aufȱ dieȱ AnwenȬ dungssystemeȱundȱderenȱZusammenspielȱdargestellt.ȱȱ Endbenutzer / Clients
Business-Logik
Datenhaltung
ERP-System
Auftragsabwicklung Auftragsbearbeiter
Bestellungsystem Einkäufer
ERPDB
...
Bestandsverwaltung Disponent
Lagerverwaltung Lagerverwalter
LagerDB
Materialflusssteuerung
WWW-Browser
Webshop Kunde
ShopDB
ȱ
Abbildungȱ1Ȭ3:ȱBeispielȱeinerȱverteiltenȱAnwendungȱ(logischeȱSicht)ȱ
Inȱ einemȱ ERPȬSystemȱ werdenȱ u.a.ȱ dieȱ Teilsystemeȱ zurȱ Auftragsabwicklung,ȱ dasȱ BestellwesenȱundȱdieȱBestandsverwaltungȱabgewickelt.ȱDieȱLagerverwaltungȱwirdȱ überȱeinȱeigenesȱLagerverwaltungssystemȱausgeführt,ȱdasȱwiederumȱüberȱmehrereȱ Subsystemeȱverfügtȱ(imȱBildȱnichtȱdargestellt).ȱDieȱMaterialflusssteuerungȱfürȱdieȱ unterlagertenȱ logistischenȱ Systemeȱ wieȱ Fördertechnikȱ undȱ automatischeȱ Lagerȱ werdenȱüberȱeinȱMaterialflusssystemȱbedient.ȱZudemȱwirdȱdenȱKundenȱüberȱeinenȱ Webshopȱ eineȱ direkteȱ Bestellmöglichkeitȱ überȱ dasȱ Internetȱ angeboten.ȱ Insgesamtȱ werdenȱdreiȱdisjunkteȱDatenbankenȱverwaltet.ȱDieȱeinzelnenȱTeilsystemeȱkommuȬ nizierenȱbeiȱBedarfȱmiteinander.ȱDieȱClientsȱbedienenȱverschiedeneȱBenutzerrollenȱ undȱverfügenȱentwederȱüberȱeineȱklassischeȱgrafischeȱOberflächeȱoderȱüberȱeinenȱ WebȬZugang.ȱȱ InȱderȱlogischenȱSichtȱistȱnochȱkeineȱAussageȱüberȱdieȱVerteilungȱderȱTeilsystemeȱ genannt.ȱ Inȱ einerȱ exemplarischenȱ physikalischenȱ Architekturȱ wirdȱ dieseȱ VerteiȬ lungȱ skizziertȱ (sieheȱ hierzuȱ Abbildungȱ 1Ȭ4).ȱ Dieȱ ERPȬTeilsystemeȱ undȱ auchȱ dieȱ Lagerverwaltungȱ liegenȱ aufȱ einemȱ doppeltȱ ausgelegtenȱ undȱ ausfallgesichertenȱ ERPȬȱbzw.ȱeinemȱLVSȬServerrechner.ȱȱDieȱDatenhaltungȱfürȱdieȱbeidenȱDatenbanȬ kenȱERPȬDBȱundȱLagerȬDBȱwirdȱinȱeinemȱebenfallsȱausfallgesichertenȱDatenbankȬ serverȱ abgewickelt.ȱ Derȱ Webshopȱ wirdȱ vonȱ einemȱ eigenenȱ ShopȬServerȱ bedient,ȱ derȱauchȱdieȱDatenhaltungȱübernimmt.ȱDieȱWebȬZugriffeȱwerdenȱüberȱeinenȱWebȬ serverȱanȱdasȱShopsystemȱweitergeleitet.ȱ
8
ȱ
1.1ȱȱDefinitionenȱundȱFestlegungenȱ
Auftragsbearbeiter ERP-Server 1 und 2
ERPDB
Einkäufer LagerDB DB-Server 1 und 2 Disponent LVS-Server 1 und 2
Lagerverwalter MFR ShopDB
WWW-Browser
Kunde
Webserver
Shop-Server inkl. DB
DB = Datenbank ERP = Enterprise Resource Planung MFR = Materialflussrechner LVS = Lagerverwaltungsrechner
ȱ
Abbildungȱ1Ȭ4:ȱBeispielȱeinerȱverteiltenȱAnwendungȱ(physikalischeȱSicht)ȱ
Dieȱ Kommunikationȱ derȱ Rechnerȱ erfolgtȱ überȱ dasȱ interneȱ Netzwerkȱ desȱ UnterȬ nehmensȱbzw.ȱdieȱWWWȬClientsȱgreifenȱüberȱdasȱInternetȱanȱdenȱunternehmensȬ eigenenȱWebserver.ȱWieȱdieȱeinzelnenȱRechnersystemeȱmiteinanderȱkommunizieȬ renȱundȱaufȱwelcheȱBasismechanismenȱundȱTechnologienȱsieȱzurückgreifen,ȱistȱimȱ Bildȱnichtȱdargestellt.ȱMehrereȱVariantenȱsindȱmöglichȱundȱsollenȱauchȱnochȱdiskuȬ tiertȱwerden.ȱEinesȱistȱaberȱdeutlichȱsichtbar:ȱDieȱSystemeȱstehenȱteilweiseȱinȱeinerȱ ClientȬServerȬBeziehung.ȱ Diesesȱ Grundmodellȱ derȱ Kommunikationȱ wirdȱ nochȱ ausführlichȱdiskutiert.ȱ Inȱ derȱ Praxisȱ wirdȱ dieȱ anwendungsübergreifendeȱ Kommunikationȱ heuteȱ nochȱ vielfachȱ überȱ denȱ Austauschȱ vonȱ Dateienȱ inȱ eigenenȱ Formatenȱ oderȱ StandardforȬ matenȱ ausgeführtȱ (EDIFACT,ȱ SWIFT,ȱ XMLȬSchemata,ȱ CSVȬDateien,...).ȱ Diesesȱ Vorgehenȱ hatȱ denȱ großenȱ Vorteil,ȱ dassȱ dieȱ kommunizierendenȱ AnwendungssysȬ temeȱ keineȱ technischenȱ Abhängigkeitenȱ habenȱ undȱ weitgehendȱ unabhängigȱ vonȬ einanderȱ arbeitenȱ können.ȱ Insbesondereȱ beiȱ derȱ unternehmensübergreifendenȱ Kommunikationȱ istȱ eineȱ ProzessȬProzessȬBeziehungȱ seltenȱ anzutreffen.ȱ Hierȱ hanȬ deltȱesȱsichȱaberȱauchȱumȱeineȱverteilteȱVerarbeitung.ȱBeispieleȱhierfürȱsind:ȱȱ – Bestellaufträgeȱ werdenȱ überȱ eineȱ EDIFACTȬȱ oderȱ XMLȬbasierendeȱ SchnittȬ stelleȱvomȱBestellerȱzumȱAuftraggeberȱgesendet.ȱ – Bankenȱ tauschenȱ fürȱ dasȱ Clearingȱ ihreȱ Umsatzdatenȱ überȱ sog.ȱ Datenträgerȱ aus.ȱ
ȱ
9ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ
1.2 Historische Technologie-Betrachtung Ausȱ unsererȱ Sichtȱ stehenȱ dieȱ Softwarekonzepteȱ fürȱ verteilteȱ Systemeȱ (AnwenȬ dungssysteme)ȱinsbesondereȱfürȱdieȱobenȱerwähntenȱCallȬAndȬReturnȬArchitektuȬ renȱ undȱ fürȱ dieȱ unabhängigenȱ KomponentenȬArchitekturenȱ imȱ Vordergrund.ȱ Inȱ denȱletztenȱJahrzehntenȱistȱhierȱsehrȱvielȱPionierarbeitȱgeleistetȱworden.ȱEsȱwurdeȱ undȱwirdȱauchȱinȱderȱPraxisȱvielȱZeitȱundȱGeldȱinȱdieȱEvaluationȱneuerȱTechnoloȬ gienȱ gesteckt.ȱ Vieleȱ Projekteȱ werdenȱ aberȱ auchȱ durchȱ nichtȱ ausgereifteȱ Produkteȱ fürȱBasissystemeȱerschwert.ȱȱ ȱ Hostorientierte Transaktionsmonitore 1966
CICS
IMS
SNA
...
UTM 1980
Protokollstandardisierung
OSIProtokolle
TCP/IP
XA
1990
RPC
ONC RPC ...
MicrosoftTechnologien
MOM
Webbasierte Technologien Messageorientierte Technologien
Encina COM
Tuxedo
Transaktionsmonitore für Client-Server
openUTM
DCOM
CORBA
...
Webtechniken
RMI
MTS
JMS KomponentenTechnologien
COM+
XML Servlets
EJB 1
CORBA 3
SOAP
CCM
EJB 2
.NET
WebServices
Hibernate WS-I
Spring EJB 3
.NET 2
.NET 3
WWW
Verteilte Objektsysteme
...
2000
MQSeries
DCE
WCF
ȱ Abbildungȱ1Ȭ5:ȱEntwicklungȱvonȱModellen/TechnologienȱfürȱverteilteȱSystemeȱ
InȱAbbildungȱ1Ȭ5ȱ istȱderȱzeitlicheȱAblaufȱskizziert,ȱwobeiȱnatürlichȱnichtȱalle,ȱsonȬ dernȱnurȱdieȱausȱunsererȱSichtȱwesentlichenȱ„Erfindungen“ȱeingezeichnetȱsind.ȱDieȱ Pfeileȱ zwischenȱ denȱ Knotenȱ deutenȱ Einflüsseȱ bzw.ȱ Weiterentwicklungenȱ besteȬ henderȱ Technologienȱ undȱ Modelleȱ an.ȱ Teilweiseȱ beeinflussenȱ sichȱ dieȱ TechnoloȬ gienȱ gegenseitig,ȱ daȱ dieȱ einzelnenȱ Herstellerȱ bzw.ȱ Organisationenȱ voneinanderȱ profitieren.ȱWirȱbeginnenȱmitȱdenȱ80erȱJahren.ȱ
10 ȱ
1.2ȱȱHistorischeȱTechnologieȬBetrachtungȱ
Entwicklung in den 80er Jahren: EinȱwesentlicherȱGrundȱfürȱdieȱDezentralisierungsbemühungenȱwarenȱinȱdenȱ80erȱ Jahrenȱ desȱ letztenȱ Jahrtausendsȱ dieȱ hohenȱ Kostenȱ fürȱ Mainframes,ȱ einȱ andererȱ natürlichȱdieȱhoheȱErwartungshaltungȱbzgl.ȱderȱFlexibilitätȱneuerȱverteilterȱSysteȬ me.ȱ Dieȱ Verbreitungȱ vonȱ PCsȱ brachteȱ inȱ diesemȱ Jahrzehntȱ schließlichȱ auchȱ dieȱ erstenȱNetzwerkeȱundȱNetzwerkbetriebssystemeȱ(sieheȱNovellȱNetware)ȱmitȱsich.ȱ Zunächstȱ wurdenȱ Diensteȱ wieȱ FileȬȱ undȱ Druckersharingȱ realisiertȱ undȱ nachȱ undȱ nachȱ wollteȱ manȱ auchȱ komplexereȱ Anwendungssystemeȱ aufȱ Serverrechnernȱ auȬ ßerhalbȱ derȱ Hostsystemeȱ platzieren.ȱ Datenbanksystemeȱ aufȱ eigenenȱ DatenbankȬ servernȱverbreitetenȱsich.ȱ Dieȱ Standardisierungȱ derȱ Kommunikationȱ zwischenȱ Rechnersystemenȱ wurdeȱ imȱ Rahmenȱ derȱ ISO/OSIȬSpezifikationenȱ (OSIȱ =ȱ Openȱ Systemsȱ Interconnection)ȱ undȱ derȱTCP/IPȬEntwicklungȱinȱdieserȱZeitȱstarkȱvorangetrieben.ȱDerȱBegriffȱdesȱoffenenȱ Systemsȱ wurdeȱ durchȱ dieȱ ISO/OSIȬSpezifikationenȱ geprägt.ȱ Einȱ offenesȱ Systemȱ istȱ nachȱOSIȱkeinȱrealesȱRechnersystem,ȱsondernȱallgemeinȱeinȱSystem,ȱdessenȱKomȬ ponentenȱsichȱdemȱOSIȬModellȱentsprechendȱverhalten.ȱEinȱSystemȱistȱdannȱoffen,ȱ wennȱesȱnachȱaußenȱeinȱnachȱOSIȱgenormtesȱVerhaltenȱzeigt.ȱDieseȱDefinitionȱzeigt,ȱ dassȱhierȱderȱGrundsteinȱfürȱdasȱZusammenspielȱvonȱverteiltenȱSystemenȱmehreȬ rerȱHerstellerȱgelegtȱwerdenȱsollte.ȱ Dieȱ Transportzugriffsschnittstelleȱ Socketsȱ undȱzeitweiseȱ XTIȱ (Extendentȱ Transportȱ Interface)ȱ sowieȱ TLIȱ (Transportȱ Layerȱ Interface)ȱ habenȱ sichȱ alsȱ Standardsȱ fürȱ Transportzugriffssystemeȱentwickelt,ȱwobeiȱletztendlichȱSocketsȱfürȱdenȱEinsatzȱinȱ derȱ Praxisȱ übrigȱ blieb.ȱ Dasȱ ClientȬServerȬModellȱ wurdeȱ Mitteȱ derȱ 80erȱ Jahreȱ herȬ ausgearbeitet.ȱ RemoteȬProcedureȬCallȬImplementierungenȱ (RPC)ȱ entstanden.ȱ SchließlichȱwurdeȱvonȱderȱdamaligenȱOpenȱSoftwareȱFoundationȱ(OSF),ȱeinerȱHerȬ stellervereinigung,ȱdieȱverschiedeneȱStandardsȱfestzulegenȱversuchte,ȱdasȱDistribuȬ tedȱ Computingȱ Environmentȱ (DCE)ȱ alsȱ Basisȱ fürȱ dieȱ Entwicklungȱ verteilterȱ AnȬ wendungenȱ standardisiert.ȱ Dasȱ grundlegendeȱ Kommunikationsparadigmaȱ warȱ auchȱhierȱderȱRemoteȱProcedureȱCallȱ(DCEȱRPC).ȱ
Entwicklung in den 90er Jahren: Dieȱ 90erȱ Jahreȱ warenȱ vorȱ allemȱ durchȱ dieȱ Weiterentwicklungȱ desȱ ClientȬServerȬ Modellsȱ undȱ derȱ RemoteȬProcedureȬCallȬMechanismenȱ (RPC)ȱ geprägtȱ (sieheȱ vorȱ allemȱ Sunȱ RPC).ȱ OSFȱ DCEȱ wurdeȱ umȱ eineȱ ganzeȱ Reiheȱ vonȱ Standarddienstenȱ (TimeȱService,ȱThreadȱService,ȱDirectoryȱService,ȱSecurityȱService,...)ȱerweitert,ȱdieȱ dieȱEntwicklungȱverteilterȱAnwendungenȱerleichternȱsollten.ȱ MitȱderȱObjectȱManagementȱArchitectureȱ(OMA)ȱundȱderȱCommonȱObjectȱRequestȱ Brokerȱ Architectureȱ (CORBA)ȱ wurdenȱ schließlichȱ vonȱ derȱ Objectȱ Managementȱ Groupȱ (OMG),ȱ einemȱ Herstellerkonsortium,ȱ dasȱ inȱ dieserȱ Zeitȱ dieȱ Entwicklungȱ starkȱ beeinflusste,ȱ Standardsȱ fürȱ objektbasierteȱ verteilteȱ Systemeȱ entwickelt,ȱ dieȱ dasȱ„prozedurale“,ȱCȬbasierteȱOSFȱDCEȱsehrȱschnellȱinȱVergessenheitȱgeratenȱlieȬ
ȱ
11ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ sen.ȱ OMAȱ (Objectȱ Managementȱ Architecture)ȱ undȱ CORBAȱ (Commonȱ Objectȱ ReȬ questȱBrokerȱArchitecture)ȱspezifiziertenȱeineȱFülleȱvonȱDienstenȱ(EventingȱService,ȱ Transactionȱ Service,ȱ Concurrrencyȱ ControlȱService,ȱ PersistencyȱService,...),ȱ dieȱfürȱ verteilteȱ Anwendungenȱ nützlichȱ seinȱ sollten,ȱ undȱ dasȱ aufȱ Basisȱ einesȱ verteiltenȱ Objektmodells.ȱ SowohlȱDCEȱalsȱauchȱCORBAȱtrugenȱwesentlichȱdazuȱbei,ȱdassȱsichȱdieȱSoftwareȬ konzepteȱ fürȱ verteilteȱ Anwendungenȱ undȱ derenȱ Basistechnologienȱ immerȱ mehrȱ durchsetzten.ȱ Aberȱ auchȱ CORBAȱ wurdeȱ schnellȱ wiederȱ überboten,ȱ alsȱ manȱ erȬ kannte,ȱ dassȱ dieȱ Entwicklungȱ verteilterȱ Anwendungenȱ immerȱ nochȱ zuȱ komplexȱ undȱfehleranfälligȱwar.ȱSunȱMicrosystemsȱbrachteȱeinenȱleichtgewichtigenȱMechaȬ nismusȱzurȱobjektbasiertenȱKommunikationȱinȱJavaȱheraus,ȱderȱalsȱJavaȱRMIȱ(ReȬ moteȱ Methodȱ Invocation)ȱ bezeichnetȱ wurde.ȱ Parallelȱ dazuȱ entwickelteȱ Microsoftȱ verteilteȱ Plattformdiensteȱ undȱ komponentenbasierteȱ Systemeȱ wieȱ COMȱ (CompoȬ nentȱ Objectȱ Model),ȱ DCOMȱ (Distributedȱ Componentȱ Objectȱ Model),ȱ COM+ȱ undȱ MTSȱ(MicrosoftȱTransactionȱServer).ȱ NebenbeiȱverbreiteteȱsichȱdasȱWorldȱWideȱWebȱmitȱseinenȱmittlerweileȱunzähligenȱ Technikenȱ zurȱ Entwicklungȱ vonȱWebanwendungenȱvonȱ einerȱzunächstȱ einfachenȱ Informationsplattformȱ immerȱ weiterȱ undȱ ermöglichteȱ komplexeȱ Anwendungen.ȱ Webtechnikenȱ wieȱ CGI,ȱ PHP,ȱ Javaȱ Servlets,ȱ Microsoftȱ ASPȱ usw.ȱ kamenȱ aufȱ denȱ Marktȱundȱwurdenȱvielfachȱeingesetzt.ȱ
Entwicklung seit dem Jahr 2000: Endeȱ derȱ 90erȱ undȱ mitȱ Beginnȱ desȱ neuenȱ Jahrtausendsȱ wurdenȱ komponentenȬ orientierteȱ verteilteȱ Systemeȱ moderner,ȱ dieȱ dieȱ Objektorientierungȱ nichtȱ mehrȱ soȱ ganzȱ inȱ denȱ Vordergrundȱ rückten.ȱ Verteilteȱ Komponenten,ȱ dieȱ manȱ sichȱ etwasȱ größerȱ alsȱ verteilteȱ Objekteȱ vorstellenȱ kann,ȱ solltenȱ möglichstȱ einfachȱ mitȱ einerȱ SchnittstelleȱversehenȱwerdenȱkönnenȱundȱinȱeinerȱkomfortablenȱUmgebungȱzumȱ Ablaufȱgebrachtȱwerden.ȱȱ AusȱderȱJavaȬWeltȱherausȱwurdeȱinsbesondereȱvonȱSunȱMicrosystemsȱJ2EEȱ(Javaȱ2ȱ Extendedȱ Edition)ȱ mitȱ ihrenȱ vielenȱ Programmierschnittstellenȱ undȱ insbesondereȱ Anfangȱ 2000ȱ dieȱ EJBȬSpezifikationȱ (Enterpriseȱ Javaȱ Beans)ȱ inȱ ihrerȱ erstenȱ Versionȱ entwickelt,ȱ dieȱ heuteȱ alsȱ Basisȱ fürȱ dieȱ Realisierungȱ sog.ȱ EJBȬApplicationȬServer,ȱ eineȱ Infrastrukturȱ fürȱ serverseitigeȱ Komponenten,ȱ dient.ȱ EJBȬApplicationȬServerȱ sindȱimȱWesentlichenȱmoderneȱTransaktionsmonitoreȱfürȱverteilteȱSysteme.ȱ ParallelȱdazuȱwurdenȱauchȱgesicherteȱMessageȬQueuingȬSystemeȱweiterentwickelt.ȱ Einȱ typischesȱ Produktȱ diesesȱ Typsȱ istȱ heuteȱ Websphereȱ MQȱ vonȱ IBM.ȱ Derartigeȱ ProdukteȱwerdenȱauchȱunterȱdemȱBegriffȱMOMȱ(MessageȬorientierteȱMiddleware)ȱ zusammengefasst.ȱ DasȱWWWȱundȱdieȱWebtechnikenȱentwickeltenȱsichȱständigȱweiter.ȱKomplexesteȱ dynamischeȱWebanwendungenȱwurdenȱundȱwerdenȱrealisiertȱundȱWebservicesȱinȱ Verbindungȱ mitȱ SOAPȱ (Ursprünglichȱ Kurzbezeichnungȱ fürȱ Simpleȱ Objectȱ Accessȱ
12 ȱ
1.3ȱȱGründeȱfürȱdieȱVerteilungȱbetrieblicherȱInformationssystemeȱ Protocol)ȱ undȱ XMLȱ sowieȱ derȱ Begriffȱ derȱ ServiceȬorientiertenȱ Architekturȱ (SOA)ȱ wurdenȱerfunden.ȱTeilweiseȱentstandȱderȱEindruck,ȱdassȱmanȱmitȱXMLȱundȱWebȬ servicesȱalleȱProblemeȱlösenȱkönnte.ȱAberȱdasȱwarȱnatürlichȱnichtȱganzȱkorrekt.ȱ Dieȱ Konzepteȱ komponentenorientierterȱ verteilterȱ Systemeȱ wurdenȱ weiterentwiȬ ckelt.ȱEineȱ„Standardisierung“ȱvonȱCORBAȱCCMȱ(CORBAȱComponentȱModel)ȱmitȱ CORBAȱ V3.0ȱ wurdeȱ durchȱ dieȱ OMGȱ durchgeführt.ȱ Microsoftȱ brachteȱ mitȱ derȱ .NETȬInitiativeȱ einȱ entsprechendesȱ Gegenstückȱ heraus,ȱ inȱ demȱ alleȱ ihreȱ geȬ wachsenenȱBausteineȱverteilterȱSystemeȱ(COM,ȱDCOM,ȱCOM+,ȱ…)ȱvereintȱwerdenȱ sollten.ȱ Imȱ Mittelpunktȱ vonȱ .NETȱ wurdeȱ vorȱ allemȱ auchȱ dieȱ neueȱ Spracheȱ C#ȱ alsȱ Konkurrentȱ zuȱ Javaȱ platziert.ȱ Neueȱ Ansätzeȱ derȱ verteiltenȱ Kommunikationȱ unterȱ Windowsȱ sindȱ imȱ Windowsȱ Communicationȱ Frameworkȱ (WCF)ȱ aufȱ denȱ Marktȱ gekommen.ȱ CORBAȱundȱvorȱallemȱJ2EE/EJBȱsowieȱ.NETȱmitȱWCFȱwerdenȱheuteȱständigȱweiȬ terentwickelt.ȱ CORBAȱ scheintȱ allerdingsȱ nurȱ nochȱ fürȱ heterogeneȱ Lösungenȱ undȱ alsȱPlattformȬinterneȱTechnologieȱinȱMiddlewareproduktenȱeingesetztȱzuȱwerden.ȱ Dasȱ Komponentenmodellȱ CCMȱ wurdeȱ bisȱ heuteȱ kommerziellȱ nochȱ nichtȱ impleȬ mentiert.ȱ Dieȱ beidenȱ praktischȱ relevanten,ȱ komponentenbasiertenȱ Basissystemeȱ sindȱ daherȱ J2EE/EJBȱ undȱ .NETȱ EnterpriseȱServices.ȱAberȱauchȱWebservicesȱscheiȬ nenȱsichȱfürȱbestimmteȱAufgabenstellungenȱdurchzusetzen.ȱMOMȱistȱfürȱbestimmȬ teȱAnwendungenȱebenfallsȱvonȱgroßerȱBedeutungȱundȱimȱZugeȱderȱVereinfachungȱ wurdeȱ dasȱ SpringȬFrameworkȱ alsȱ leichtgewichtigeȱ Konkurrenzȱ zuȱ EJBȱ entwickeltȱ undȱerfreutȱsichȱzunehmenderȱBeliebtheitȱ(WWWȬ035).ȱ GeradeȱinȱdenȱletztenȱJahrenȱistȱallerdingsȱnachȱeinerȱstarkenȱEuphorieȱeineȱleichteȱ Ernüchterungȱ eingetreten,ȱ daȱ manȱ erkannte,ȱ dassȱ verteilteȱ Systemeȱ wesentlichȱ aufwändigerȱ inȱ derȱ Administrationȱ sindȱ alsȱ zentralisierteȱ Systeme.ȱ Dieȱ Softwareȱ mussȱverteilt,ȱdieȱServersystemeȱmüssenȱüberwachtȱundȱdieȱvielenȱClientsystemeȱ müssenȱständigȱaktuellȱgehaltenȱwerden.ȱInȱderȱPraxisȱhatȱmanȱvielȱüberȱdieȱVorȬȱ undȱNachteileȱderȱVerteilungȱgelernt.ȱManȱistȱdazuȱübergegangen,ȱaufȱeineȱgezielȬ teȱ undȱ kontrollierbareȱ („administrierbare“)ȱ Verteilungȱ zuȱ setzen.ȱ Dieȱ imȱ letztenȱ Jahrzehntȱ entstandenenȱ ITȬInfrastrukturenȱ brachtenȱ eineȱ Inflationȱ anȱ ServersysteȬ menȱmitȱsich,ȱdieȱheuteȱwiederȱaufȱwenige,ȱleistungsfähigeȱ(undȱdamitȱMainframeȬ ähnliche)ȱSystemeȱkonsolidiertȱwerden.ȱDieserȱTrendȱderȱServerkonsolidierungȱistȱ aktuellȱzuȱerkennen.ȱAllerdingsȱsindȱdieȱVorteileȱeinerȱvernünftigenȱVerteilungȱsoȱ gravierend,ȱ dassȱ eineȱ Rückkehrȱ zuȱ reinenȱ MainframeȬbasiertenȱ Systemenȱ sehrȱ unwahrscheinlichȱist.ȱ
1.3 Gründe für die Verteilung betrieblicher Informationssysteme DieserȱAbschnittȱstelltȱeinigeȱGründeȱfürȱeineȱVerteilungȱvonȱSoftwarebausteinenȱ vor.ȱ Nichtȱ immerȱ sindȱ alleȱ Gründeȱ relevant,ȱ aberȱ vorȱ einerȱ Entscheidung,ȱ obȱ einȱ Systemȱ verteiltȱ seinȱ sollȱ oderȱ nicht,ȱ istȱ esȱ nützlich,ȱ überȱ dieȱ genanntenȱ Aspekteȱ nachzudenken.ȱ Esȱ werdenȱ heuteȱ mehrereȱ Gründeȱ fürȱ denȱ Einsatzȱ vonȱ verteiltenȱ
ȱ
13ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ Systemenȱgenannt.ȱMancheȱgeltenȱuneingeschränkt,ȱandereȱnurȱunterȱbestimmtenȱ Randbedingungen.ȱDieȱwesentlichenȱGründeȱsollenȱzunächstȱimȱÜberblickȱaufgeȬ zeigtȱwerden:ȱ – – – – –
Lastverteilungȱ Ausfallsicherheitȱ Skalierbarkeitȱ Flexibilitätȱ Transparenzȱ
Lastverteilung:ȱ Lastverteilungȱ bedeutet,ȱ dassȱ manȱ gewisseȱ Systembausteineȱ aufȱ mehrereȱ Rechnersystemeȱ verteilenȱ kann.ȱ Dadurchȱ kannȱ einȱ Leistungsgewinnȱ erȬ reichtȱwerden.ȱBeispielsweiseȱistȱesȱmöglich,ȱeinenȱServerbausteinȱmehrȱalsȱeinmalȱ laufenȱ zuȱ lassenȱ undȱ dieȱ Anfragenȱ derȱ Clientsȱ (sieheȱ auchȱ ClientȬServerȬModell)ȱ aufȱdieȱverschiedenenȱInstanzenȱzuȱverteilen.ȱDamitȱkannȱauchȱdieȱNetzbelastungȱ beeinflusstȱwerden.ȱManȱsprichtȱinȱdiesemȱZusammenhangȱoftȱauchȱvonȱClusterȬ Lösungen,ȱwobeiȱeinȱClusterȱausȱmehrerenȱRechnersystemenȱbesteht,ȱdieȱderȱLastȬ verteilungȱdienen.ȱ Skalierbarkeit:ȱ Skalierbarkeitȱ istȱ einȱ wichtigerȱ Aspekt,ȱ derȱ fürȱ verteilteȱ Systemeȱ spricht.ȱ Manȱ kannȱ Ȭȱ beiȱ entsprechenderȱ Anwendungsarchitekturȱ –ȱ einȱ Systemȱ soȱ konzipieren,ȱdassȱesȱaufȱhöhereȱBelastungenȱ(z.B.ȱdurchȱeineȱzunehmendeȱAnzahlȱ anȱBenutzern)ȱdurchȱHinzunahmeȱweitererȱRechnersystemeȱreagierenȱkann.ȱȱ Ausfallsicherheit:ȱAusfallsicherheitȱistȱebenfallsȱeinȱwichtigerȱAspekt.ȱInsbesondeȬ reȱ durchȱ dieȱ Verteilungȱ bestimmterȱ Services,ȱ dieȱ aufȱ mehrerenȱ Serversystemenȱ platziertȱ werden,ȱ istȱ esȱ möglichȱ einȱ Systemȱ redundantȱ auszulegenȱ undȱ damitȱ geȬ genȱAusfälleȱzuȱschützen.ȱȱ Flexibilität:ȱ Dieȱ Flexibilitätȱ istȱ einerȱ derȱ wichtigstenȱ Vorteileȱ verteilterȱ Systeme.ȱ DurchȱeineȱgeschickteȱArchitekturȱkannȱmanȱheuteȱSystemeȱsoȱgestalten,ȱdassȱsieȱ mitȱdenȱAnforderungenȱwachsenȱkönnen.ȱDieȱVerteilungȱderȱverschiedenenȱKomȬ ponentenȱeinesȱAnwendungssystemsȱaufȱmehrereȱRechnerȱundȱbeiȱentsprechenderȱ Architekturȱ aufȱ beliebigeȱ Rechnersystemeȱ ermöglichtȱ es,ȱ aufȱ Änderungenȱ zuȱ reaȬ gieren.ȱ Verteilteȱ Systemeȱ könnenȱ auchȱ durchȱ kooperierendeȱ Entwicklungsteamsȱ realisiertȱwerden.ȱEineȱgeeigneteȱArchitekturȱistȱhierȱnatürlichȱvorausgesetzt.ȱManȱ kannȱauchȱfertigeȱBausteineȱhinzukaufen,ȱdieȱinȱdieȱeigeneȱAnwendungȱintegriertȱ werden.ȱDiesȱsetztȱnatürlichȱeineȱgemeinsameȱAblaufumgebungȱvoraus.ȱEinȱrichtiȬ gerȱMarktȱfürȱ„Fertigbausteine“ȱwieȱbeiȱHardwarebausteinenȱistȱheuteȱnochȱnichtȱ vorzufinden,ȱistȱjedochȱseitȱlangemȱeinȱZiel.ȱEsȱistȱaberȱauchȱmöglich,ȱdassȱdiesesȱ nieȱ oderȱ zumindestȱ inȱ absehbarerȱ Zeitȱ nichtȱ erreichtȱ wird,ȱ weilȱ Herstellerȱ meistȱ dagegenȱarbeiten.ȱ Transparenz:ȱ Grundsätzlichȱ wirdȱ derȱ Begriffȱ derȱ Transparenzȱ verwendet,ȱ umȱ zuȱ erläutern,ȱ wieȱ dieȱ tatsächlicheȱ Verteilungȱ derȱ Bausteineȱ einesȱ verteiltenȱ Systemsȱ vorȱdemȱAnwenderȱoderȱEntwicklerȱverborgenȱwerdenȱkann.ȱEsȱgibtȱverschiedeneȱ FacettenȱderȱTransparenz:ȱ
14 ȱ
1.4ȱȱDasȱProblemȱderȱHeterogenitätȱ – MitȱOrtstransparenzȱ istȱ gemeint,ȱ dassȱ manȱ demȱ Anwenderȱ undȱ wennȱ mögȬ lichȱsogarȱdemȱEntwicklerȱverbergenȱmöchte,ȱaufȱwelchenȱRechnersystemenȱ bestimmteȱ Softwarebausteineȱ ablaufen,ȱ wieȱ manȱ dieseȱ findetȱ undȱ wieȱ sieȱ dahinȱkommen.ȱȱ – DerȱBegriffȱderȱMigrationstransparenzȱwirdȱverwendet,ȱumȱdarzustellen,ȱwieȱ gutȱ sichȱ Softwarebausteineȱ vonȱ einemȱ Rechnersystemȱ zumȱ anderenȱ verȬ schiebenȱlassen,ȱohneȱdassȱderȱBenutzerȱoderȱEntwicklerȱesȱmerkt.ȱȱ – Vonȱ Skalierungstransparenzȱ sprichtȱ man,ȱ wennȱ manȱ einȱ Systemȱ ausbauenȱ kann,ȱsoȱdassȱesȱmehrȱleistet,ȱohneȱdassȱderȱBenutzerȱesȱmerkt.ȱȱ – Unterȱ Zugriffstransparenzȱ istȱ zuȱ verstehen,ȱ dassȱ manȱ überȱ einȱ Systemȱ aufȱ Ressourcenȱzugreifenȱkannȱ(z.B.ȱaufȱObjekteȱinȱeinerȱDatenbank),ȱohneȱdassȱ derȱAnwenderȱwissenȱmuss,ȱwoȱdieseȱliegen.ȱȱ – ManȱsprichtȱvonȱFehlertransparenz,ȱwennȱvorȱdemȱAnwenderȱund/oderȱProȬ grammiererȱgewisseȱFehlersituationenȱdesȱSystemsȱverborgenȱwerden.ȱ DerȱBegriffȱderȱTransparenzȱwirdȱdarüberȱhinausȱverwendet,ȱumȱdieȱArtȱderȱDaȬ tendarstellungȱinȱdenȱverschiedenenȱRechnersystemenȱzuȱverbergenȱ(sieheȱweiterȱ unten).ȱȱ Allȱ dieseȱ Artenȱ vonȱ Transparenzȱ undȱ auchȱ nochȱ weitereȱ (NebenläufigkeitstranspaȬ renz,ȱ Persistenztransparenz,ȱ Replikationstransparenz,...)ȱ könnenȱ vonȱ verteiltenȱ SysteȬ menȱermöglichtȱwerden.ȱEinschränkendȱmussȱergänztȱwerden,ȱdassȱheutigeȱPlattȬ formenȱfürȱ verteilteȱSystemeȱ weitestgehendȱ fürȱ Transparenzȱausȱ Sichtȱ desȱ BenutȬ zersȱ sorgen,ȱ jedochȱ nurȱ eingeschränktȱ ausȱ derȱ Sichtȱ einesȱ AnwendungsprogramȬ mierersȱ oderȱ zumindestȱ desȱ Systemarchitekten,ȱ derȱ meistȱ genauȱ darüberȱ inforȬ miertȱ seinȱ sollte,ȱ woȱ dieȱ einzelnenȱ Bausteineȱ einesȱ verteiltenȱ Systemsȱ platziertȱ werden.ȱErȱtrifftȱjaȱsogarȱdieȱEntscheidungenȱdarüber.ȱ DieȱmeistenȱderȱaufgeführtenȱGründeȱfürȱeineȱVerteilungȱeinesȱSystemsȱsindȱsinnȬ voll.ȱ Esȱ gibtȱ aberȱ auchȱ guteȱ Gründeȱ gegenȱ eineȱ Verteilung,ȱ wieȱ z.B.ȱ derȱ erhöhteȱ AufwandȱanȱAdministrationȱundȱggf.ȱeineȱBeeinträchtigungȱderȱLeistungsfähigkeitȱ einesȱSystems.ȱBeiȱderȱKonzeptionȱdesȱSystemsȱundȱbeiȱderȱGestaltungȱderȱArchiȬ tekturȱsindȱjeweilsȱdieȱVorȬȱundȱNachteileȱabzuwägen.ȱMeistȱgibtȱesȱkeinȱPatentreȬ zept,ȱwohlȱaberȱmittlerweileȱguteȱErfahrungswerte.ȱȱ Fürȱ dieȱ Unterstützungȱ derȱ genanntenȱ Aspekteȱ istȱ esȱ wichtig,ȱ dassȱ dasȱ verteilteȱ Anwendungssystemȱ überȱ eineȱ geeigneteȱ Architekturȱ verfügt,ȱ daȱ ansonstenȱ SkaȬ lierbarkeit,ȱLastverteilungȱusw.ȱnichtȱoderȱnurȱerschwertȱmöglichȱist.ȱWirȱȱmüssenȱ unsȱalsoȱmitȱgeeignetenȱArchitekturenȱfürȱverteilteȱSystemeȱbefassen.ȱȱ
1.4 Das Problem der Heterogenität Transparenzȱ wirdȱ vorȱ allemȱ dadurchȱ erschwert,ȱ dassȱ kommunizierendeȱ Systemeȱ heuteȱ oftȱ nichtȱ homogenȱ konstruiertȱ sind.ȱ Inȱ verteiltenȱ Systemenȱ trifftȱ manȱ geȬ wöhnlichȱ aufȱ verschiedeneȱ Rechnersysteme,ȱ aufȱ denenȱ Anwendungenȱ ablaufen,ȱ
ȱ
15ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ dieȱ möglicherweiseȱ auchȱ nochȱ inȱ unterschiedlichenȱ Programmiersprachenȱ entwiȬ ckeltȱwurden,ȱaberȱmiteinanderȱkommunizieren.ȱȱ Anwendung 1
Laufzeitsystem 1
Betriebssystem 1
Rechnerhardware 1
Kommunikation
Unterschiedliche Sprachkonzepte
Unterschiedliche Zeichendarstellung Unterschiedliche Speicherung
Anwendung 2
Laufzeitsystem 2
Betriebssystem 2
Rechnerhardware 2
ȱ Abbildungȱ1Ȭ6:ȱHeterogenitätȱaufȱverschiedenenȱEbenenȱ
Dieȱ Heterogenitätȱ derȱ beteiligtenȱ Systemeȱ kannȱ sichȱ alsoȱ überȱ mehrereȱ Ebenenȱ erstrecken.ȱ Manȱ mussȱ inȱ einemȱ verteiltenȱ Systemȱ möglicherweiseȱ verschiedeneȱ Rechnerarchitekturen,ȱ Betriebssystemeȱ undȱ Programmiersprachenȱ (bzw.ȱ derenȱ Laufzeitsysteme)ȱ soȱ aufeinanderȱ abstimmen,ȱ dassȱ sieȱ auchȱ kommunikationsfähigȱ sindȱ(sieheȱAbbildungȱ1Ȭ6).ȱȱ Zurȱ Verbesserungȱ derȱ Transparenzȱ istȱ einȱ netzweites,ȱ oderȱ nochȱ besser,ȱ einȱ anȬ wendungsweitesȱ Standardformatȱ fürȱ Nachrichteninhalteȱ anzustreben.ȱ Diesȱ wirdȱ üblicherweiseȱ inȱ höherenȱ Kommunikationsschichtenȱ realisiert.ȱ Umȱ dieȱ ProblemaȬ tikȱbesserȱzuȱverstehen,ȱsollenȱdieȱverschiedenenȱEbenenȱderȱHeterogenitätȱinȱverȬ teiltenȱSystemenȱnochȱweiterȱerörtertȱwerden:ȱ Heterogenitätȱ inȱ denȱ Betriebssystemen:ȱ Betriebssystemeȱ nutzenȱ zumȱ Teilȱ rechtȱ unterschiedlicheȱ Zeichendarstellungen.ȱ Mancheȱ Betriebssystemeȱ verwendenȱ alsȱ internenȱZeichensatzȱdenȱEBCDICȬCode,ȱandereȱdenȱASCIIȬCodeȱundȱwiederȱanȬ dereȱnutzenȱeineȱUnicodeȬVariante.ȱȱ Heterogenitätȱ inȱ denȱ Rechnerarchitekturen:ȱRechnerarchitekturenȱ weisenȱ UnterȬ schiedeȱbeiȱderȱSpeicherungȱderȱDatenȱauf.ȱEinȱklassischesȱBeispielȱsindȱdieȱFormaȬ teȱBigȬȱundȱLittleȬEndian4,ȱdieȱdieȱinterneȱAnordnungȱderȱBytesȱeinesȱIntegerwertsȱ festlegen.ȱ Beimȱ LittleȬEndianȬFormatȱ wirdȱ dasȱ höchstwertigeȱ Byteȱ einesȱ IntegerȬ wertsȱ(short,ȱlongȱintegerȱmitȱundȱohneȱVorzeichen)ȱanȱderȱhöherenȱSpeicheradresȬ seȱ abgelegt.ȱ Beimȱ BigȬEndianȬFormatȱ istȱ esȱ geradeȱ umgekehrtȱ (sieheȱ hierzuȱ Abbildungȱ 1Ȭ7).ȱ Dasȱ höchstwertigeȱ Byteȱ wirdȱ beimȱ BigȬEndianȬFormatȱ anȱ derȱ niedrigstenȱSpeicheradresseȱabgelegt.ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱȱ Littleȱ Endianȱ bedeutetȱ wörtlichȱ „Kleinender“,ȱ Bigȱ Endianȱ bedeutetȱ wörtlichȱ „GroßenȬ der“.ȱDieȱBezeichnungȱstammtȱvonȱdenȱNamenȱderȱPolitikerȱinȱderȱGeschichteȱGulliver’sȱ Reisen,ȱdieȱdarüberȱKriegȱführten,ȱanȱwelchemȱEndeȱeinȱEiȱaufzumachenȱsei.ȱ
4
16 ȱ
1.4ȱȱDasȱProblemȱderȱHeterogenitätȱ Inȱ IntelȬProzessorenȱ nutztȱ manȱ gewöhnlichȱ dasȱ LittleȬEndianȬFormat.ȱ MotorolaȬ Prozessorenȱ vomȱ Typȱ 68000,ȱ PowerPCȬȱ undȱ SPARCȬProzessorenȱ sowieȱ z/SeriesȬ ProzessorenȱvonȱIBMȱnutzenȱdasȱBigȬEndianȬFormat.ȱMancheȱProzessorenȱwieȱz.B.ȱ dieȱProzessorenȱderȱIA64ȬArchitekturȱvonȱIntelȱbeherrschenȱbeideȱFormate.ȱ ȱ Darstellung: "little endian" n+3
n+2
n+1
n
Speicherauszug Zahlenbereich wächst
Vorzeichen
Darstellung: "big endian" n
n+1
n+2
n+3
Speicherauszug
Vorzeichen
Zahlenbereich wächst
ȱ
Abbildungȱ1Ȭ7:ȱLittleȬȱundȱBigȬEndianȱ
Heterogenität in den Programmiersprachen und Laufzeitsystemen:ȱ VerschieȬ deneȱ Programmiersprachenȱ habenȱ zumȱ Teilȱ ganzȱ unterschiedlicheȱ DatenȬȱ oderȱ Objektmodelle.ȱ Wennȱ alsoȱ z.B.ȱ eineȱ JavaȬAnwendungȱ einȱ Objektȱ vomȱ Typȱ „KunȬ de“ȱ anȱ eineȱ COBOLȬAnwendungȱ sendet,ȱ kannȱ dieȱ COBOLȬAnwendungȱ nichtsȱ damitȱ anfangen.ȱ Dieȱ interneȱ Darstellungȱ vonȱ Datentypenȱ weichtȱ zumȱ Teilȱ erhebȬ lichȱvoneinanderȱab.ȱZeichenfolgenȱ(Strings)ȱkönnenȱz.B.ȱmitȱeinerȱführendenȱLänȬ genangabeȱ ausgestattetȱ seinȱ oderȱ nicht.ȱ Sieȱ könnenȱ mitȱ einemȱ speziellenȱ Zeichenȱ (z.B.ȱ „\0“ȱ beiȱ C/C++)ȱ abgeschlossenȱ werdenȱ usw.ȱ Arraysȱ könnenȱ ebenfallsȱ ganzȱ unterschiedlichȱ verwaltetȱ werden.ȱ Schließlichȱ könnenȱ Referenzenȱ bzw.ȱ Zeigerȱ nichtȱ sinnvollȱ anȱ eineȱ Partneranwendungȱ übertragenȱ werden,ȱ daȱ esȱ sichȱ hierȱ umȱ AdressenȱimȱlokalenȱAdressraumȱhandelt.ȱ Esȱ kommtȱ sogarȱ vor,ȱ dassȱ Programmiersprachenȱ aufȱ verschiedenenȱ ZielplattforȬ menȱ unterschiedlichȱ implementiertȱ sindȱ undȱ dieȱ Laufzeitsystemeȱ damitȱ nichtȱ kompatibelȱsind.ȱDiesȱwarȱbeiȱCȬImplementierungenȱdurchausȱnichtsȱUngewöhnliȬ ches.ȱHeuteȱsetzenȱsichȱfürȱmoderneȱSprachenȱwieȱJavaȱundȱC#ȱzwarȱimmerȱmehrȱ sog.ȱ virtuelleȱ Maschinenȱ durch,ȱ dieȱ nachȱ einerȱ einheitlichenȱ Spezifikationȱ impleȬ mentiertȱ werdenȱ undȱ unabhängigȱ vonȱ derȱ Plattformȱ (Hardware+Betriebssystem)ȱ einheitlicheȱ DatenȬȱ undȱ Objektformateȱ unterstützen.ȱ Unterschiedlicheȱ virtuelleȱ Maschinenȱkönnenȱaberȱebenfallsȱnichtȱohneȱweiteresȱmiteinanderȱkommunizieren.ȱȱ
ȱ
17ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ Java-Anwendung
In Java standardisierter Objektstrom
Java-Anwendung
JVM
JVM
BS 1
BS 2
HW 1
HW 2 Netzwerk
ȱ Abbildungȱ1Ȭ8:ȱJVMȬJVMȬKommunikationȱ
Eineȱ Kommunikationsverbindungȱ könnteȱ manȱ aufȱ derȱ gemeinsamenȱ TransportȬ schichtȱ TCPȱ z.B.ȱ problemlosȱ überȱ eineȱ SocketȬKommunikationȱ herstellen,ȱ allerȬ dingsȱ funktioniertȱ damitȱ dieȱ Kommunikationȱ nochȱ nicht.ȱ Inȱ denȱ einzelnenȱ SpraȬ chenȱwerdenȱnämlichȱmeistȱeigeneȱSerialisierungsmechanismen,ȱdieȱinȱJavaȱundȱC#ȱ alsȱObjektströmeȱbezeichnetȱwerden,ȱunterstützt.ȱDieseȱsorgenȱfürȱeineȱeinheitlicheȱ Datenübertragung.ȱ Diesȱ funktioniertȱ innerhalbȱ derȱ gleichenȱ Sprachumgebungȱ sogarȱ dann,ȱ wennȱ dieȱ Plattformen5ȱunterschiedlichȱ sindȱ (sieheȱ hierzuȱ Abbildungȱ 1Ȭ8ȱ undȱ Abbildungȱ 1Ȭ9).ȱ Zweiȱ JavaȬAnwendungenȱ oderȱ auchȱ zweiȱ C#Ȭ Anwendungenȱkönnenȱalsoȱproblemlosȱmiteinanderȱkommunizieren,ȱwennȱsieȱdieȱ vorhandenenȱSprachmechanismenȱnutzen.ȱȱ ȱ C#-Anwendung
In .NET standardisierter Objektstrom
C#-Anwendung
CLR
CLR
BS 1
BS 2
HW 1
HW 2 Netzwerk
ȱ Abbildungȱ1Ȭ9:ȱCLRȬCLRȬKommunikationȱ
Kommuniziertȱ aberȱ z.B.ȱ eineȱ JavaȬAnwendung,ȱ dieȱ inȱ einerȱ Javaȱ Virtualȱ Machineȱ (JVM)ȱabläuftȱmitȱeinerȱC#ȬAnwendung,ȱdieȱinȱderȱ.NETȱCommonȱLanguageȱRunȬ timeȱ(CLR)ȱabläuft,ȱsoȱmussȱmanȱsichȱbewusstȱsein,ȱdassȱdieseȱbeidenȱLaufzeitsysȬ temeȱunterschiedlicheȱTypsystemeȱaufweisen.ȱȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 5
ȱAlsȱPlattformȱbezeichnetȱmanȱgewöhnlichȱdieȱHardwareȱundȱdasȱBetriebssystem.ȱ
18 ȱ
1.4ȱȱDasȱProblemȱderȱHeterogenitätȱ Fürȱ alleȱ .NETȬSprachenȱ (C#,ȱ J#,ȱ C++,...)ȱ ȱ implementiertȱ dieȱ CLRȱ einȱ einheitlichesȱ Typsystem,ȱsoȱdassȱeinȱDatenaustauschȱsogarȱzwischenȱAnwendungen,ȱdieȱinȱunȬ terschiedlichenȱ.NETȬSprachenȱrealisiertȱwerden,ȱmöglichȱist.ȱ Dieȱ Übertragungȱ vonȱ serialisiertenȱ Datenȱ undȱ Objektenȱ sorgtȱ aberȱ nochȱ nichtȱ fürȱ allgemeineȱ Kommunikationsfähigkeit.ȱ Beideȱ Kommunikationspartnerȱ müssenȱ dieȱ gleichenȱ SerialisierungsȬȱ undȱ Deserialisierungsregelnȱ anwenden.ȱ Eineȱ JavaȬ Anwendungȱ kannȱ beispielsweiseȱ einenȱ C#ȬObjektstromȱ nichtȱ interpretierenȱ undȱ umgekehrtȱ(sieheȱAbbildungȱ1Ȭ10).ȱWennȱalsoȱeineȱJavaȬAnwendungȱmitȱeinerȱC#Ȭ Anwendungȱkommunizierenȱmuss,ȱbrauchtȱmanȱeinȱgemeinsamesȱVerständnisȱderȱ auszutauschendenȱDaten/Objekte.ȱDiesȱkönnteȱz.B.ȱeineȱEinigungȱaufȱeinenȱkleinsȬ tenȱgemeinsamenȱNenner,ȱwieȱz.B.ȱdemȱASCIIȬZeichensatzȱsein.ȱȱ AlternativȱkönnteȱmanȱsichȱeineȱZwischenschichtȱinȱFormȱeinesȱGatewaysȱvorstelȬ len,ȱdasȱeineȱTransformationȱderȱNachrichtenȱvornimmt,ȱohneȱdassȱdieȱKommuniȬ kationspartnerȱdiesȱbemerkenȱ(Abbildungȱ1Ȭ11).ȱ Dieȱ Transparenzȱ kannȱ durchȱ eineȱ Vereinheitlichungȱ derȱ Syntaxȱ erreichtȱ werden,ȱ dieȱ sowohlȱ derȱ Senderȱ alsȱ auchȱ derȱ Empfängerȱ versteht.ȱ Derȱ Vorgangȱ desȱ UmȬ wandelns,ȱalsoȱderȱTransformationȱinȱeineȱeinheitlicheȱSyntaxȱnenntȱmanȱKodierung,ȱ SerialisierungȱoderȱauchȱMarshalling.ȱDerȱumgekehrteȱVorgangȱwirdȱalsȱDekodierung,ȱ DeserialisierungȱoderȱUnmarshallingȱbezeichnet.ȱ ȱ Java-Anwendung JVM
Unterschiedliche Objektmodelle und Serialisierungsmechanismen
J#/C#/C++...Anwendung CLR
BS 1
BS 1
HW 1
HW 1 Netzwerk
ȱ Abbildungȱ1Ȭ10:ȱProblematischeȱJVMȬCLRȬKommunikationȱ
DieȱISO/OSIȱhatȱdasȱProblemȱbereitsȱinȱdenȱ80erȱJahrenȱmitȱdemȱStandardȱfürȱeineȱ einheitlicheȱTransportsyntaxȱnamensȱASN.1ȱ(AbstractȱSyntaxȱNotationȱ1)ȱundȱdenȱ dazugehörigenȱ Kodierungsregelnȱ BERȱ (Basicȱ Encodingȱ Rules)ȱ adressiert.ȱ Dieserȱ Standardȱ istȱ funktionalȱ derȱ Schichtȱ 6ȱ desȱ ISO/OSIȬReferenzmodellsȱ zugeordnet.ȱ ASN.1/BERȱ siehtȱ fürȱ jedenȱ Datentypenȱ undȱ auchȱ fürȱ komplexeȱ Strukturenȱ sog.ȱ Tagsȱ vor,ȱ dieȱ inȱ derȱ Nachrichtȱ jeweilsȱ vorȱ denȱ eigentlichenȱ Wertenȱ übertragenȱ werden.ȱAusȱASN.1ȬDatenbeschreibungenȱkannȱmanȱüberȱvonȱverschiedenenȱHerȬ stellernȱ angeboteneȱ ASN.1ȬCompilerȱ KodierungsȬȱ undȱ Dekodierungsroutinenȱ erȬ zeugen,ȱdieȱinȱdenȱKommunikationsprogrammenȱeingesetztȱwerden,ȱumȱeinheitliȬ
ȱ
19ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ cheȱDatentypenȱzuȱübertragen.ȱHeuteȱnutztȱz.B.ȱSNMPȱ(SimpleȱNetworkȱManageȬ mentȱ Protokoll)ȱ nochȱ ASN.1ȱ zurȱ Beschreibungȱ derȱ sog.ȱ Managementȱ Informationȱ Basesȱ (MIBs).ȱ Diesȱ sindȱ dieȱ Daten,ȱ dieȱ imȱ Rahmenȱ desȱ Netzwerkmanagementsȱ ausgetauschtȱwerden.ȱȱ J#/C#/C++...Anwendung
Java-Anwendung JVM
JVM/CLRGateway
CLR
BS 1
BS 3
HW 1
HW 5 Netzwerk
ȱ Abbildungȱ1Ȭ11:ȱJVMȬCLRȬKommunikationȱüberȱGatewayȱ
WieȱwirȱinȱdenȱfolgendenȱKapitelnȱnochȱsehenȱwerden,ȱbietetȱheuteȱjedeȱMiddleȬ wareȬLösungȱ ebenfallsȱ eigeneȱ Mechanismenȱ an.ȱ DaȱdieȱProblematikȱ rechtȱ einfachȱ formalisierbarȱ ist,ȱ setztȱ manȱ auchȱ dasȱ Mittelȱ derȱ Codegenerierungȱ ein.ȱ Inȱ ImpleȬ mentierungenȱ höhererȱ Kommunikationsparadigmenȱ wirdȱ dieȱ Erzeugungȱ einerȱ einheitlichenȱ Transportsyntaxȱ meistȱ überȱ dieȱ automatisierteȱ Erzeugungȱ vonȱ sog.ȱ StubsȱfürȱdieȱaktiveȱSeiteȱundȱSkeletonsȱfürȱdieȱpassiveȱSeiteȱunterstütztȱ(Abbildungȱ 1Ȭ12).ȱDiesȱsindȱProgrammteile,ȱdieȱmeistȱautomatischȱausȱeinerȱSchnittstellenspeȬ zifikationȱableitbarȱsind.ȱBeispieleȱfürȱdieseȱArtȱderȱCodegenerierungȱwerdenȱnochȱ gezeigtȱ undȱ sindȱ u.a.ȱ inȱ Sunȱ ONCȱ RPC,ȱ inȱ CORBA,ȱ RMI,ȱ .NETȱ Remotingȱ undȱ inȱ denȱverschiedenenȱWebserviceȬImplementierungenȱaufȱrechtȱähnlicheȱWeiseȱintegȬ riert.ȱ Anwendung 1
Anwendung 2
Stub
Skeleton
Laufzeitsystem 1
Laufzeitsystem 2
BS 1
BS 3
HW 1
HW 5 Netzwerk
ȱ Abbildungȱ1Ȭ12:ȱJVMȬCLRȬKommunikationȱüberȱStubȱundȱSkeletonȱ
StubȱundȱSkeletonȱvereinheitlichenȱdieȱtransportiertenȱNachrichtenȱundȱrealisierenȱ einȱ einheitlichesȱ Kommunikationsmodell.ȱ Dieȱ Transparenzȱ wirdȱ dadurchȱ unterȬ stützt.ȱ Obȱ nunȱ überȱ diesenȱ Mechanismusȱ Anwendungen,ȱ dieȱ inȱ verschiedenenȱ
20 ȱ
1.5ȱȱSpezielleȱProblemeȱverteilterȱInformationssystemeȱ Sprachenȱentwickeltȱwurden,ȱmiteinanderȱkommunizierenȱkönnen,ȱhängtȱvonȱderȱ Unabhängigkeitȱ desȱ zugrundeȱ liegendenȱ Konzeptsȱ ab.ȱ Sprachabhängigeȱ MechaȬ nismenȱ sindȱ z.B.ȱ Javaȱ RMI,ȱ .NETȱ Remoting,ȱ Sunȱ ONCȱ RPC,ȱ sprachunabhängigeȱ MechanismenȱsindȱCORBAȱoderȱWSDLȬbasierteȱWebservices.ȱ FürȱdieȱKommunikationȱganzȱunterschiedlicherȱAnwendungenȱetwaȱüberȱWebserȬ vicesȱ stelltȱ sichȱ immerȱ mehrȱ heraus,ȱ dassȱ sichȱ XMLȬbasierteȱ Sprachenȱ sehrȱ gutȱ eignen.ȱ Wieȱ wirȱ nochȱ sehenȱ werden,ȱ gibtȱ esȱ fürȱ Webservicesȱ bereitsȱ einenȱ anerȬ kanntenȱStandardȱzurȱBeschreibungȱvonȱKommunikationsdiensten,ȱderȱmitȱWSDLȱ (WebȱServiceȱDescriptionȱLanguage,ȱsieheȱWWWȬ010)ȱbezeichnetȱwird.ȱ
1.5 Spezielle Probleme verteilter Informationssysteme InȱdiesemȱAbschnittȱgehenȱwirȱaufȱeinigeȱwichtigeȱProblemstellungenȱspeziellȱvonȱ verteiltenȱ betrieblichenȱ Informationssystemenȱ ein.ȱ Hierzuȱ gehörenȱ dieȱ persistenteȱ DatenhaltungȱinȱverteilterȱUmgebung,ȱdieȱFehleranfälligkeit,ȱdieȱsichȱaufgrundȱderȱ Verteilungȱ vonȱ Softwarekomponentenȱ ergibtȱ sowieȱ dieȱ Gewährleistungȱ derȱ fürȱ betrieblicheȱ Systemeȱ soȱ wichtigenȱ Transaktionsicherheitȱ beiȱ einerȱ Verteilungȱ derȱ Systeme.ȱ
1.5.1
Persistente Datenhaltung in verteilter Umgebung
Unterȱ demȱ Begriffȱ „persistenteȱ Datenhaltung“ȱ verstehtȱ manȱ dieȱ Speicherungȱ vonȱ Daten,ȱ dieȱ inȱ einemȱ Anwendungssystemȱ überȱ eineȱ Sitzungȱ hinwegȱ benötigtȱ werȬ den.ȱ Persistenteȱ Datenȱ sindȱ alsoȱ typischerweiseȱ alleȱ Daten,ȱ dieȱ manȱ heuteȱ inȱ DaȬ tenbankenȱoderȱinȱsonstigenȱexternenȱMedienȱablegt.ȱKlassischȱverwendetȱmanȱfürȱ größereȱ Datenbeständeȱ relationaleȱ Datenbanken.ȱ Manȱ kannȱ sichȱ heuteȱ keineȱ gröȬ ßereȱAnwendungȱimȱbetrieblichenȱUmfeldȱohneȱDatenbankenȱvorstellen.ȱDiesȱtrifftȱ auchȱaufȱverteilteȱAnwendungssystemeȱimȱbetrieblichenȱUmfeldȱzu.ȱ Wieȱwirȱnochȱsehenȱwerden,ȱgibtȱesȱfürȱverteilteȱSystemeȱwieȱauchȱfürȱlokalȱablauȬ fendeȱ Anwendungssystemeȱ verschiedeneȱ Möglichkeiten,ȱ wieȱ manȱ aufȱ persistenteȱ Datenȱzugreift.ȱGrößereȱAnwendungenȱkapselnȱüblicherweiseȱdenȱZugriffȱaufȱdieȱ Datenbank(en)ȱinȱeinerȱZugriffsschicht.ȱȱ SeitȱesȱobjektorientierteȱSprachenȱgibt,ȱbestehtȱdasȱProblemȱdesȱImpedanceȬMismatch.ȱ ObjekteȱmüssenȱaufȱTabellenȱinȱrelationalenȱDatenbankenȱabgebildetȱwerdenȱundȱ umgekehrt.ȱ Fürȱ dieseȱ Aufgabeȱ wurdenȱ sog.ȱ ObjectȬRelationalȬMapperȱ (O/RȬ Mapper,ȱORM)ȱentwickelt,ȱdieȱinȱeigenenȱWerkzeugenȱbzw.ȱProduktenȱoderȱauchȱ gemeinsamȱmitȱBasisproduktenȱfürȱdieȱverteilteȱAnwendungsentwicklungȱverfügȬ barȱsind.ȱDieseȱO/RȬMapperȱermöglichenȱesȱz.B.ȱausȱObjektklassenȱundȱderenȱBeȬ ziehungenȱautomatisiertȱTabellenstrukturenȱundȱRelationenȱzuȱerzeugen.ȱAuchȱdieȱ FormulierungȱvonȱZugriffsoperationenȱwieȱQueriesȱausȱdemȱOOȬCodingȱherausȱistȱ möglich.ȱ Hierȱ mussȱ allerdingsȱ erwähntȱ werden,ȱ dassȱ dieȱ Funktionalitätȱ vonȱ SQLȱ
ȱ
21ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ imȱ Prinzipȱ nurȱ inȱ eigenenȱ Sprachenȱ nachgebautȱ wird.ȱ Beispieleȱ fürȱ derartigeȱ AnȬ sätzeȱsind:ȱ – JDOȱ (Javaȱ Dataȱ Objects)ȱ istȱ einȱ Ansatzȱ ausȱ demȱ Javaȱ Communityȱ Processȱ (JSP)ȱundȱgiltȱalsȱeinȱJavaȬStandardȱfürȱdieseȱAufgabe.ȱJDOȱistȱeinȱsehrȱbreiȬ terȱ Ansatz,ȱ derȱ nichtȱ unbedingtȱ relationaleȱ Datenbankenȱ voraussetzt,ȱ sonȬ dernȱauchȱobjektorientierteȱDatenbankenȱundȱXMLȬSpeicherungȱunterstützt.ȱ – Einenȱ neuerenȱ Standardisierungsversuchȱ derȱ JavaȬGemeindeȱ stelltȱ dieȱ Javaȱ PersistenceȱAPIȱ (JPA)ȱ dar,ȱ dieȱ alsȱ eigeneȱ APIȱ vorliegtȱ undȱ auchȱ inȱ neuerenȱ EJBȬVersionenȱverwendetȱwirdȱ(WWWȬ003).ȱ – Hibernateȱ istȱ ebenfallsȱ eineȱ Lösungȱ ausȱ demȱ JavaȬOpenȬSourceȬUmfeld,ȱ dieȱ sichȱmehrȱundȱmehrȱzumȱDefaktoȬStandardȱentwickeltȱ(Beegerȱ2006).ȱHiberȬ nateȱwirdȱauchȱimȱApplicationȬServerȱJBossȱeingesetzt.ȱ – TopLinkȱistȱeinȱkommerziellesȱProduktȱderȱFirmaȱOracle.ȱ DieȱWichtigkeitȱdesȱDatenbankzugriffsȱwurdeȱvonȱdenȱStandardisierungsgremienȱ undȱ Herstellernȱ erkannt.ȱ Beispielsweiseȱ bietetȱ auchȱ CORBAȱ eineȱ PersistencyȬ SpezifikationȱfürȱdieseȱAufgabe.ȱAllerdingsȱwurdeȱsieȱnieȱpraktischȱrelevant.ȱ WirȱwerdenȱimȱRahmenȱderȱArchitekturdiskussionȱimȱWeiterenȱimmerȱwiederȱaufȱ denȱDatenbankzugriffȱzuȱsprechenȱkommen.ȱ
1.5.2
Fehleranfälligkeit verteilter Kommunikation
InȱlokalenȱSystemenȱwirdȱeinȱAufrufȱeinerȱMethodeȱoderȱProzedurȱimȱlokalenȱAdȬ ressraumȱeinesȱProzessesȱdurchgeführt.ȱSiehtȱmanȱvonȱSystemȬȱoderȱProgrammabȬ stürzenȱ währendȱ derȱAusführungȱ ab,ȱ erfolgtȱdieȱAusführungȱ genauȱeinmal.ȱ Manȱ sprichtȱhierȱvonȱeinerȱAufrufsemantik,ȱdieȱalsȱExactlyȬOnceȱbezeichnetȱwird.ȱDieseȱ Eigenschaftȱ möchteȱ manȱ auchȱ gerneȱ inȱ einerȱ verteiltenȱ Umgebungȱ erreichen.ȱ Beiȱ derȱKommunikationȱinȱhöherenȱSchichtenȱgibtȱesȱaber,ȱtrotzȱgesicherterȱTransportȬ protokolle,ȱvielȱmehrȱFehlerursachenȱalsȱinȱlokalenȱUmgebungen.ȱȱ InȱmanchenȱSituationenȱistȱesȱschwierig,ȱfestzustellen,ȱobȱeineȱAnfrageȱschonȱausȬ geführtȱwurdeȱoderȱnicht.ȱDiesȱgehtȱweitȱüberȱdieȱSicherstellungȱderȱKommunikaȬ tionȱhinaus.ȱEsȱgehtȱdarum,ȱobȱaufgrundȱeinerȱNachrichtȱ(Auftrag,ȱRequest)ȱschonȱ eineȱ Abarbeitungslogikȱ durchlaufenȱ wurde.ȱ Nebenȱ denȱ klassischenȱ Fehlernȱ imȱ Netzwerkȱ kannȱ z.B.ȱ einȱ Senderȱ vorȱ demȱ Empfangȱ desȱ Ergebnissesȱ ausfallen,ȱ wasȱ zuȱ verwaistenȱ Aufträgenȱ (sog.ȱ Orphans)ȱ führt.ȱ Derȱ Empfängerȱ kannȱ währendȱ derȱ Bearbeitungȱ einesȱ Requestsȱ ausfallen,ȱ wennȱ z.B.ȱ derȱ Anwendungsprozessȱ aufȬ grundȱeinesȱProgrammfehlersȱabstürzt.ȱ Ausfälleȱ sindȱ zuȱ jederȱ Zeitȱ möglichȱ undȱ dasȱ Kommunikationssystemȱ kannȱ sichȱ hierȱjeȱnachȱRealisierungȱunterschiedlichȱverhalten.ȱWirȱgehenȱbeiȱdieserȱBetrachȬ tungȱdavonȱaus,ȱdassȱeinȱDienstnehmerȱ(oderȱauchȱClient)ȱeineȱentfernteȱOperationȱ aufruft,ȱdieȱeinȱDiensterbringerȱ(auchȱServerȱgenannt)ȱbereitstellt.ȱȱJeȱnachdem,ȱwieȱ vielȱ Aufwandȱ manȱ inȱ dieȱ Behandlungȱ vonȱ Fehlernȱ steckt,ȱ unterscheidetȱ manȱ beiȱ
22 ȱ
1.5ȱȱSpezielleȱProblemeȱverteilterȱInformationssystemeȱ einemȱ verteiltȱ ausgeführtenȱ Requestȱ verschiedeneȱ Möglichkeitenȱ derȱ FehlerbeȬ handlung.ȱEsȱgibtȱverschiedeneȱFehlerbearbeitungsmöglichkeitenȱ(Coulourisȱ2002):ȱ – Einȱ verteiltesȱ Systemȱ könnteȱ z.B.ȱ überprüfen,ȱ obȱ beimȱ Clientȱ eineȱ Antwortȱ ankommtȱundȱfallsȱdiesȱnichtȱderȱFallȱist,ȱdenȱRequestȱerneutȱsenden.ȱHierȱ sprichtȱ manȱ vonȱ Übertragungswiederholung.ȱ Diesȱ istȱ einȱ bekannterȱ ProtoȬ kollmechanismus,ȱderȱauchȱinȱniedrigerenȱKommunikationsschichtenȱeingeȬ setztȱwird.ȱȱ – Wennȱ manȱ vermeidenȱ möchte,ȱ Requestsȱ erneutȱ zuȱ übertragen,ȱ kannȱ derȱ Serverȱsoȱrealisiertȱwerden,ȱdassȱerȱDuplikateȱerkennt.ȱȱ – SchließlichȱkannȱeinȱServerȱesȱermöglichen,ȱdassȱeineȱAntwortȱfürȱeinenȱReȬ questȱgespeichertȱwird,ȱdamitȱsieȱnochȱeinmalȱanȱdenȱClientȱübertragenȱwerȬ denȱkann,ȱwennȱdieserȱdenselbenȱRequestȱerneutȱsendet.ȱȱ – EinȱverteiltesȱSystemȱkönnteȱauchȱMechanismenȱbereitstellen,ȱdieȱbeiȱAusfallȱ einerȱ beliebigenȱ Komponenteȱ zuȱ einerȱ beliebigenȱ Zeitȱ dafürȱ sorgt,ȱ dassȱ einȱ RequestȱgenauȱeinmalȱausgeführtȱwirdȱundȱDuplikateȱausgeschlossenȱsind.ȱ DiesȱistȱsicherlichȱdieȱkompliziertesteȱFormȱderȱFehlerbearbeitung.ȱ Jeȱnachdem,ȱwieȱvielȱAufwandȱmanȱinȱdieȱBehandlungȱvonȱFehlernȱsteckt,ȱsprichtȱ manȱbeiȱderȱFehlerbehandlungȱinȱverteilterȱUmgebungȱvonȱdenȱFehlersemantikenȱ Maybe,ȱAtȬLeastȬOnce,ȱAtȬMostȬOnceȱundȱExactlyȬOnce:ȱ Maybeȱ istȱ dieȱ schwächsteȱ Formȱ derȱ Fehlersemantik,ȱ inȱ derȱ keineȱ FehlerbehandȬ lungȱ stattfindet.ȱ Imȱ Fehlerfallȱ kannȱ manȱ nichtȱ feststellen,ȱ obȱ derȱ Auftragȱ ausgeȬ führtȱwurdeȱoderȱnicht.ȱȱ AtȬLeastȬOnceȱ stelltȱ sicher,ȱ dassȱ derȱAuftragȱ wenigstensȱ einmalȱausgeführtȱ wird,ȱ garantiertȱ aberȱ nicht,ȱ dassȱ erȱ genauȱ einmalȱ abgearbeitetȱ wird.ȱ Eineȱ MehrfachausȬ führungȱistȱmöglich.ȱDiesȱbedeutetȱaber,ȱdassȱeineȱAnwendung,ȱdieȱAtȬLeastȬOnceȱ nutzt,ȱ esȱ auchȱ tolerierenȱ muss,ȱ dassȱ einȱ Requestȱ ggf.ȱ mehrmalsȱ ausgeführtȱ wird.ȱ DieȱAusführungȱeinerȱerneutenȱÜberweisungsoperationȱinȱeinemȱOnlineȬBankingȬ Systemȱistȱsicherlichȱnichtȱtolerierbar.ȱ AtȬMostȬOnceȱistȱähnlichȱwieȱAtȬLeastȬOnce,ȱfiltertȱaberȱauchȱnochȱzusätzlichȱDupȬ likateȱaus.ȱAtȬMostȬOnceȱ wirdȱ heuteȱ vonȱ denȱ meistenȱ RPCȬMechanismenȱ undȱ deȬ renȱ Nachfolgernȱ erfüllt.ȱ AtȬMostȬOnceȱ hatȱ gegenüberȱ AtȬLeastȬOnceȱ Vorteile,ȱ istȱ aberȱauchȱaufwändigerȱinȱderȱImplementierung.ȱDerȱServerȱmussȱeineȱRequestlisteȱ verwaltenȱundȱbeiȱjedemȱankommendenȱRequestȱprüfen,ȱobȱfürȱihnȱschonȱeinȱEinȬ tragȱinȱderȱListeȱsteht.ȱJeȱnachdemȱsindȱdannȱdieȱentsprechendenȱAktionenȱauszuȬ führen.ȱIstȱderȱRequestȱz.B.ȱschonȱinȱderȱListeȱundȱschonȱausgeführt,ȱistȱnurȱnochȱ dieȱ Antwortȱ zuȱ übertragen.ȱ Weiterhinȱ benötigtȱ manȱ eineȱ zusätzlicheȱ ACKȬ Nachrichtȱ desȱ Clients,ȱ dieȱ bestätigt,ȱ dassȱ eineȱ Antwortȱ angekommenȱ ist.ȱ Beiȱ SysȬ temausfällenȱgibtȱesȱauchȱbeiȱAtȬMostȬOnceȱkeineȱGarantie,ȱalsoȱAtȬMostȬOnceȱkannȱ dannȱggf.ȱnichtȱeingehaltenȱwerden.ȱ ExactlyȬOnceȱbedeutet,ȱdassȱeinȱRequest,ȱkommeȱwasȱwolleȱ(auchȱbeiȱeinemȱSysȬ temausfall),ȱ genauȱ einmalȱ ausgeführtȱ wird.ȱ Wennȱ manȱ dieȱ Anforderungȱ genauȱ
ȱ
23ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ betrachtet,ȱ istȱ sieȱ sogarȱ nochȱ strengerȱ alsȱ dieȱ Anforderung,ȱ dieȱ anȱ lokaleȱ Aufrufeȱ gestelltȱ wird,ȱ daȱ imȱ lokalenȱ Umfeldȱ auchȱ nichtȱ ohneȱ weiteresȱ garantiertȱ werdenȱ kann,ȱdassȱdieȱAusführungȱeinerȱMethodeȱnichtȱdurchȱeinenȱSystemausfallȱunterȬ brochenȱ werdenȱ kann.ȱ Willȱ manȱ ExactlyȬOnceȱ vollständigȱ erfüllen,ȱ erfordertȱ diesȱ fürȱ dieȱ Behandlungȱ vonȱ Systemausfällenȱ ausgefeilteȱ RecoveryȬMechanismen,ȱ einȱ konsistentesȱ Zurücksetzenȱ undȱ damitȱ dieȱ Verwaltungȱ vonȱ WiederaufsetzȬ informationenȱüberȱLoggingȬMechanismen.ȱDieseȱMechanismenȱsindȱinȱverteiltenȱ Transaktionssystemenȱ undȱ Datenbankmanagementsystemenȱ zuȱ finden.ȱ ExactlyȬ OnceȱkannȱalsoȱnurȱdurchȱkomplexeȱTransaktionsmechanismenȱ(AllesȬoderȬnichtsȬ Regel)ȱgewährleistetȱwerden.ȱFürȱdieȱherkömmlicheȱKommunikationȱistȱeineȱUmȬ setzungȱdieserȱFehlersemantikȱzuȱaufwändig.ȱ Verschiedeneȱ Beispielsituationenȱ sollenȱ dieȱ Problemstellungȱ nochmalsȱ verdeutliȬ chen.ȱEsȱkannȱu.a.ȱpassieren,ȱdassȱ – – – –
einȱRequestȱverlorenȱgehtȱ dasȱErgebnisȱdesȱServersȱverlorenȱgehtȱ derȱServerȱwährendȱderȱAusführungȱdesȱRequestsȱabstürztȱ derȱServerȱfürȱdieȱBearbeitungȱdesȱRequestsȱzuȱlangeȱbraucht.ȱ
Inȱ Abbildungȱ 1Ȭ13ȱ istȱ anȱ demȱ Fehlerszenarioȱ „Ergebnisȱ desȱ Serversȱ gehtȱ verloȬ ren“ȱdargestellt,ȱwasȱdieseȱFehlersituationȱnachȱsichȱzieht.ȱDerȱServerȱhatȱdieȱAufȬ tragsbearbeitungȱ schonȱ ausgeführtȱ undȱ mussȱ sichȱ dasȱ merken,ȱ beiȱ ExactlyȬOnceȱ sogarȱüberȱeinenȱSystemausfallȱhinweg.ȱDerȱClientȱmussȱmitȱeinerȱerneutenȱAnfraȬ geȱreagieren,ȱderȱServerȱdarfȱaberȱdieȱAnfrageȱbeiȱAtȬMostȬOnceȱundȱExactlyȬOnceȱ nichtȱ nochȱ einmalȱ bearbeiten,ȱ sondernȱ mussȱ dasȱ temporärȱ gespeicherteȱ Ergebnisȱ anȱdenȱClientȱsenden.ȱ Client
Server
send Auftrag
receive
Wartezeit
Ergebnis Erneute Anfrage des Clients
reply
Auftragswiederholung Ergebnis
Ergebnis gespeichert
ȱ Abbildungȱ1Ȭ13:ȱBeispielsituation:ȱErgebnisȱgehtȱverlorenȱnachȱWeberȱ(1998)ȱ
Wieȱ wirȱ inȱ denȱ folgendenȱ Kapitelnȱ nochȱ sehenȱ werden,ȱ istȱ inȱ Technologienȱ wieȱ CORBAȱundȱJavaȱRMIȱmaximalȱdieȱFehlersemantikȱAtȬMostȬOnceȱrealisiert.ȱExactȬ
24 ȱ
1.5ȱȱSpezielleȱProblemeȱverteilterȱInformationssystemeȱ lyȬOnceȱ erfordertȱ spezielleȱ Mechanismen,ȱ dieȱ einenȱ Ausfallȱ überleben.ȱ Nutzbarȱ sindȱhierȱz.B.ȱTransaktionsmechanismenȱfürȱverteilteȱSysteme.ȱTransaktionsprotoȬ kolle,ȱdieȱExactlyȬOnceȱgarantierenȱsollen,ȱverwendenȱfürȱdieȱErgebniskoordinationȱ sog.ȱCommitȬȱoderȱKoordinationsprotokolleȱ(1ȬPhaseȬCommit,ȱ2ȬPhaseȬCommit,ȱ3Ȭ PhaseȬCommit).ȱ Fürȱ einenȱ Entwicklerȱ wirdȱ dieȱ Implementierungȱ derȱ FehlerbeȬ handlungȱinȱhöherenȱKommunikationsmechanismenȱwieȱRPC,ȱJavaȱRMI,ȱCORBAȱ usw.ȱ aberȱ verborgen.ȱ Erȱ merktȱ z.B.ȱ nichts,ȱ wennȱ eineȱ Antwortȱ nichtȱ rechtzeitigȱ eintrifft.ȱ Dasȱ Systemȱ sorgtȱ z.B.ȱ fürȱ eineȱ erneuteȱ Anfrageȱ beiȱ einemȱ Timerablauf.ȱ Hierȱgehtȱes,ȱwieȱobenȱbereitsȱbeschrieben,ȱumȱTransparenz.ȱEinȱRequestȱsollȱwieȱ derȱAufrufȱeinerȱlokalenȱProzedurȱbehandeltȱwerden.ȱ
1.5.3
Transaktionssicherheit in verteilten Informationssystemen
Ausȱ derȱ lokalenȱ Verarbeitungȱ inȱ Großrechnernȱ entwickelteȱ sichȱ dasȱ Konzeptȱ derȱ TransaktionenȱalsȱFehlertoleranzkonzeptȱzurȱSicherstellungȱbzw.ȱVerbesserungȱderȱ semantischenȱ Integritätȱ derȱ Datenȱ einesȱ Anwendungssystems.ȱ Dieȱ GrundüberleȬ gungȱist,ȱdassȱesȱmöglichȱseinȱmuss,ȱmehrereȱOperationenȱaufȱDatenbeständeȱganzȱ oderȱgarȱnichtȱauszuführen.ȱManȱsprichtȱhierȱvonȱAtomarität.ȱEineȱUnterbrechungȱ einerȱ Operationsfolge,ȱ dieȱ zusammengehört,ȱ könnteȱ zuȱ einerȱ Inkonsistenzȱ inȱ denȱ Datenȱführen.ȱBeispielhaftȱwerdenȱhierȱhäufigȱeineȱSollȬȱundȱeineȱHabenbuchungȱ inȱ einemȱ Buchhaltungssystemȱ aufgeführt.ȱ Beideȱ Ümsätzeȱ müssenȱ entwederȱ ganzȱ oderȱ garȱ nichtȱ ausgeführtȱ werden,ȱ sonstȱ stimmenȱ dieȱ Buchhaltungsdatenȱ nichtȱ mehr.ȱ Inȱ lokalenȱ Umgebungenȱ istȱ diesesȱ Problemȱauchȱ alsȱ SynchronisationsprobȬ lemȱbekanntȱundȱwirȱnutzenȱzurȱLösungȱSemaphore,ȱMonitore,ȱSperrenȱundȱderȬ gleichen.ȱ Willȱ manȱ dieȱ AllesȬoderȬNichtsȬSemantikȱ vollständigȱ implementieren,ȱ benötigtȱ manȱeinȱSystem,ȱdasȱdenȱStatusȱderȱBearbeitungȱauchȱimȱFehlerfallȱrekonstruierenȱ kann,ȱumȱeinȱWiederaufsetzenȱbeiȱeinemȱNeustartȱzuȱermöglichen.ȱDiesesȱSystemȱ bezeichnetȱmanȱauchȱalsȱTransaktionssystem.ȱEsȱmussȱMechanismenȱbereitstellen,ȱ dieȱesȱermöglichen,ȱjedeȱZustandsänderungȱaufȱeinemȱausfallsicherenȱSpeicherȱzuȱ protokollieren.ȱDerȱEntwicklerȱeinerȱTransaktionsanwendungȱmussȱMöglichkeitenȱ haben,ȱ inȱ seinemȱ Programmȱ dieȱ Grenzenȱ vonȱ Transaktionenȱ anzugebenȱ (BeginȬ Transaction,ȱ Commit)ȱ oderȱ ggf.ȱ auchȱ selbstȱ einȱ Zurücksetzenȱ einerȱ Transaktionȱ (Rollback)ȱ zuȱ initiieren.ȱ Diesȱ allesȱ selbstȱ zuȱ programmierenȱ wäreȱ zuȱ aufwändig.ȱ TransaktionssystemeȱsorgenȱfürȱdieȱnotwendigenȱBasismechanismen.ȱ Dasȱ Transaktionskonzeptȱ stammtȱ ausȱ derȱ Weltȱ derȱ Datenbanken.ȱ DatenbanksysȬ temeȱ unterstützenȱ diesesȱ Konzeptȱ schonȱ lange,ȱ dortȱ istȱ esȱ heuteȱ eineȱ SelbstverȬ ständlichkeit.ȱ Keineȱ etwasȱ komplexereȱ Anwendung,ȱ dieȱ eineȱ Datenbankȱ benutzt,ȱ kommtȱohneȱTransaktionenȱaus.ȱȱ Seitȱlangemȱversuchtȱmanȱauch,ȱdasȱTransaktionskonzeptȱinȱdieȱWeltȱderȱverteiltenȱ Systemeȱzuȱtransferieren.ȱWieȱbereitsȱdiskutiert,ȱkannȱmanȱz.B.ȱfürȱdieȱImplemenȬ tierungȱ einerȱ ExactlyȬOnceȬFehlersemantikȱ fürȱ einenȱ RemoteȬProcedureȬCallȱ dasȱ Transaktionskonzeptȱ ebenfallsȱ sehrȱ gutȱ nutzen,ȱ obwohlȱ esȱ hierȱ nurȱ umȱ dieȱ AusȬ
ȱ
25ȱ
1ȱȱEinführungȱinȱverteilteȱSystemeȱ führungȱ einerȱ Einzeloperationȱ geht.ȱ Wennȱ manȱ aberȱ ausfallsicherȱ seinȱ möchte,ȱ benötigtȱmanȱWiederanlaufmechanismenȱundȱdieseȱsindȱinȱTransaktionssystemenȱ implementiert.ȱ Esȱ stelltȱ sichȱ dieȱ Frage,ȱ obȱ dasȱ Transaktionskonzeptȱ fürȱ dieȱ Kommunikationȱ inȱ verteiltenȱAnwendungenȱgenauȱsoȱsinnvollȱistȱwieȱinȱlokalerȱUmgebungȱundȱwelȬ cheȱzusätzlichenȱMechanismenȱmanȱbenötigt,ȱumȱeineȱTransaktionȱüberȱRechnerȬ grenzenȱ hinwegȱ zuȱ realisieren.ȱ Eineȱ andereȱ Frageȱ beschäftigtȱ sichȱ grundsätzlichȱ mitȱ demȱ Sinnȱ vonȱ Transaktionenȱ inȱ verteiltenȱ Umgebungenȱ undȱ versucht,ȱ seineȱ GrenzenȱfürȱpraktischȱnutzbareȱAnwendungenȱzuȱermitteln.ȱWirȱwerdenȱinȱdiesemȱ einführendenȱ Kapitelȱ nichtȱ weiterȱ aufȱ dieseȱ Fragenȱ eingehen,ȱ sondernȱ sieȱ inȱ denȱ späterenȱKapitelnȱimmerȱwiederȱaufgreifen.ȱȱ
1.6 Übungsaufgaben 1.
Versuchenȱ Sieȱ eineȱ Definitionȱ fürȱ einȱ verteiltesȱ Informationssystemȱ mitȱ eigeȬ nenȱWorten!ȱ 2. Nennenȱ Sieȱ dreiȱ Gründeȱ fürȱ dieȱ Verteilungȱ einesȱ betrieblichenȱ InformationsȬ systemsȱundȱerläuternȱSieȱdiese!ȱ 3. WelcheȱArtenȱderȱHeterogentätȱwurdenȱidentifiziert?ȱ 4. WelcheȱFehlersituationenȱmussȱeineȱAtȬMostȬOnceȬImplementierungȱfürȱeinenȱ entferntenȱ Aufrufȱzusätzlichȱ zuȱ AtȬLeastȬOnceȱ implementierenȱundȱ wieȱkannȱ dieȱImplementierungȱerfolgen?ȱ 5. Wirdȱ inȱ lokalenȱ Methodenaufrufenȱ innerhalbȱ einesȱ Prozessesȱ eineȱ ExactlyȬ OnceȬFehlersemantikȱgarantiert?ȱ 6. Istȱesȱsinnvoll,ȱdassȱeineȱJavaȬAnwendungȱundȱeineȱC#ȬAnwendungȱohneȱweiȬ tereȱMaßnahmenȱüberȱeineȱKommunikationsschnittstelleȱObjekteȱaustauschen?ȱ BegründenȱSieȱIhreȱEntscheidung!ȱ 7. WieȱlöstȱJavaȱdasȱProblemȱderȱHeterogenitätȱinȱderȱreinenȱJavaȬWelt?ȱ 8. WasȱistȱeinȱBigȬEndianȬȱimȱUnterschiedȱzuȱeinemȱLittleȬEndianȬFormat?ȱ 9. WozuȱbrauchtȱmanȱinȱverteiltenȱSystemenȱeineȱsymbolischeȱAdressierungȱderȱ verteiltenȱBausteineȱundȱwelcheȱLösungȱgibtȱesȱhierfür?ȱ 10. WozuȱbrauchtȱmanȱObjectȬRelationalȬMapper?ȱ 11. Erläuternȱ Sieȱ anhandȱ einesȱ Beispiels,ȱ wieȱ eineȱ Verteilungȱ vonȱ AnwendungsȬ bausteinenȱ dazuȱ beitragenȱ kann,ȱ dassȱ einȱ Anwendungssystemȱ ausfallsichererȱ wird!ȱ ȱ
26 ȱ
2 Konzepte und Modelle verteilter Kommunikation Dieȱ Entwicklungȱ vonȱ Kommunikationsanwendungenȱ istȱ inȱ denȱ letztenȱ Jahrenȱ aufgrundȱneuerȱTechnologienȱimmerȱkomfortablerȱgeworden.ȱVorȱnichtȱallzuȱlanȬ gerȱZeitȱmussteȱmanȱsichȱbeiȱderȱProgrammierungȱnochȱmitȱallenȱAspektenȱ(auchȱ derȱ niedrigenȱ Schichten)ȱ derȱ Kommunikationȱ befassen.ȱ Heuteȱ gibtȱ esȱ ProgramȬ miermodelle,ȱ dieȱ diesȱ wesentlichȱ erleichternȱ undȱ manȱ setztȱ mindestensȱ aufȱ eineȱ vernünftigeȱ Transportzugriffsschichtȱ auf.ȱ Fürȱ dieȱ Entwicklungȱ vonȱ verteiltenȱ AnȬ wendungenȱkannȱmanȱalsoȱmeistensȱeinenȱfunktionierendenȱTransportdienstȱnutȬ zen.ȱ Eineȱ Methodeȱ derȱ Programmierungȱ basiertȱ aufȱ derȱ SocketȬSchnittstelle.ȱ Diesȱ istȱeineȱTransportzugriffsschnittstelle,ȱdieȱinȱmehrerenȱSprachenȱimplementiertȱistȱ undȱ ausȱ derȱ UnixȬWeltȱ kommt.ȱ Moderneȱ Sprachenȱ wieȱ Javaȱ undȱ C#ȱ stellenȱ eineȱ komfortableȱ Nutzungsmöglichkeitȱ überȱ vordefinierteȱ Packagesȱ (Java)ȱ oderȱ NaȬ mespacesȱ(C#)ȱbereit.ȱSocketsȱsindȱzwarȱdieȱBasisȱfürȱalleȱimȱInternetȱvorhandenenȱ höherenȱ Programmiermodelle,ȱ jedochȱ istȱ dieȱ Programmierungȱ verteilterȱ AnwenȬ dungenȱ direktȱ überȱ dieȱ SocketsȬSchnittstelleȱ relativȱ aufwändig.ȱ Wirȱ beschäftigenȱ unsȱinȱdiesemȱBuchȱmitȱkomfortablerenȱMechanismen.ȱWeiterȱfortgeschrittenȱsindȱ KonzepteȱwieȱRPCȱ(RemoteȱProcedureȱCall)ȱundȱnochȱmodernerȱsindȱobjektorienȬ tierteȱKommunikationsmechanismenȱwieȱRMIȱ(JavaȬWelt),ȱ.NETȱRemotingȱ(MicroȬ soft)ȱoderȱCORBAȱ(unabhängigerȱStandard).ȱGanzȱaktuellȱsindȱkomponentenorienȬ tierteȱ Kommunikationsparadigmenȱ wieȱ EJBȱ (Enterpriseȱ Javaȱ Beans),ȱ aberȱ auchȱ MessageȬorientierteȱ Systemeȱ sindȱ heuteȱ weitȱ verbreitet.ȱ Moderneȱ KommunikatiȬ onsmechanismenȱwerdenȱheuteȱvorwiegendȱvonȱMiddlewareȬSystemenȱangeboten,ȱ dieȱauchȱalsȱApplicationȬServerȱbezeichnetȱwerden.ȱ DieȱArtȱundȱWeise,ȱwieȱmanȱeineȱverteilteȱAnwendungȱprogrammiert,ȱhängtȱvonȱ denȱ Anforderungenȱ ab.ȱ Dieȱ meistenȱ verteiltenȱ Anwendungenȱ stützenȱ sichȱ heuteȱ aufȱdasȱClientȬServerȬModell,ȱinȱdemȱeinȱServerprozessȱoderȱggf.ȱmehrereȱServerȬ prozesseȱ aufȱ Requestsȱ vonȱ Clientsȱ wartenȱ undȱ dieseȱ beantworten.ȱ Inȱ diesemȱ Fallȱ gehtȱdieȱKommunikationȱimmerȱvomȱClientȱaus.ȱAberȱauchȱandereȱKommunikatiȬ onsparadigmenȱ sindȱ häufigȱ anzutreffen.ȱ ȱ Einȱ anderesȱ Modellȱ istȱ dieȱ sog.ȱ PeerȬtoȬ PeerȬKommunikation,ȱinȱderȱzweiȱAnwendungsprozesseȱȱgleichberechtigtȱmiteinȬ anderȱ kommunizieren.ȱ Beispielsweiseȱ benötigtȱ manȱ inȱ AutomatisierungsanwenȬ dungenȱmeistȱeineȱgleichberechtigteȱKommunikation,ȱinȱderȱjederȱPartnerȱzuȱjederȱ Zeitȱ eineȱ Nachrichtȱ (oftȱ Telegramm),ȱ sendenȱ kann,ȱwennȱ einȱ bestimmtesȱ Ereignisȱ (wieȱz.B.ȱ„eineȱPaletteȱistȱanȱeinemȱbestimmtenȱMeldepunktȱzumȱEinlagernȱinȱeinȱ Hochregalȱ bereit“)ȱ eintritt.ȱ Weiterführendeȱ Kommunikationsmechanismenȱ befasȬ senȱsichȱmitȱgesichertenȱMessageȬQueues,ȱtransaktionsgesicherterȱKommunikationȱ mehrererȱObjekteȱusw.ȱ
ȱ
27
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ Inȱ diesemȱ etwasȱ umfangreicherenȱ Kapitelȱ wirdȱ eineȱ Einführungȱ inȱ typischeȱ SoftȬ warekonzepteȱ undȱ Implementierungsmöglichkeitenȱ verteilterȱ AnwendungssysteȬ meȱ gegeben.ȱ Wirȱ beginnenȱ mitȱ demȱ ClientȬServerȬModellȱ undȱ diskutierenȱ anȬ schließendȱ Varianten,ȱ mitȱ denenȱ sichȱ dasȱ ClientȬServerȬModellȱ implementierenȱ lässt.ȱ Imȱ Blickwinkelȱ stehenȱ verteilteȱ Prozeduraufrufe,ȱ verteilteȱ Objekte,ȱ verteilteȱ Komponentenȱ undȱ MessageȬPassingȬSysteme.ȱ Dieȱ eingeführtenȱ Modelleȱ werdenȱ anhandȱvonȱkonkretenȱTechnologieȬBeispielenȱvertieft.ȱ
Zielsetzung des Kapitels DerȱLeserȱsollȱinȱdiesemȱKapitelȱeinenȱÜberblickȱüberȱgängigeȱKonzepteȱundȱMoȬ delleȱfürȱdieȱverteilteȱKommunikationȱerhaltenȱundȱeinȱgrundlegendesȱVerständnisȱ darüberȱ erwerben,ȱ wieȱ manȱ Technologienȱ fürȱ verteilte,ȱ betrieblicheȱ InformationsȬ systemeȱeinsetzt.ȱ
Wichtige Begriffe Synchroneȱ undȱ asynchroneȱ Kommunikation,ȱ zustandsloseȱ undȱ zustandsbehafteteȱ Server,ȱ meldungsȬȱ undȱ auftragsbezogeneȱ Kommunikation,ȱ ClientȬServerȬModell,ȱ Trader,ȱVerteilteȱProzeduren,ȱVerteilteȱObjekte,ȱVerteilteȱKomponenten,ȱMessageȬ Passing,ȱ Nachrichtenwarteschlangensystem,ȱ CORBA,ȱ EJB,ȱ RMI,ȱ .NETȱ Remoting,ȱ RPC,ȱSunȱONC.ȱ
2.1 Client-Server-Modell Dasȱ ClientȬServerȬModellȱ istȱ einesȱ derȱ wichtigstenȱ Softwaremodelleȱ fürȱ verteilteȱ Anwendungenȱ undȱ sollȱ etwasȱ ausführlicherȱ dargestelltȱ werden.ȱ ImplementieȬ rungsüberlegungenȱ sollenȱ ebenfallsȱ betrachtetȱ werden.ȱ Dasȱ ClientȬServerȬModellȱ wirdȱ gelegentlichȱ alsȱ Hardwaremodellȱ dargestellt:ȱ Aufȱ derȱ Clientseiteȱ werdenȱ kleinereȱ Rechnerȱ eingesetzt,ȱ aufȱ derȱ Serverseiteȱ meistȱ größereȱ Serverrechner.ȱ TrotzdemȱistȱdasȱModellȱinȱersterȱLinieȱeinȱSoftwaremodell.ȱ Imȱ ClientȬServerȬModellȱ gibtȱ esȱ zweiȱ verschiedeneȱ Bausteintypen,ȱ Serverȱ undȱ Clients,ȱwobeiȱeinȱServerȱwiederumȱClientȱeinesȱanderenȱServersȱseinȱkann.ȱClientȱ undȱ Serverȱ kommunizierenȱ überȱ einȱ RequestȬ/ResponseȬVerhalten.ȱ Derȱ Serverȱ bietetȱ Diensteȱ an,ȱ dieȱ derȱ Clientȱ nutzt.ȱ Hierzuȱ sendetȱ derȱ Clientȱ eineȱ Nachricht,ȱ einenȱ sog.ȱ Request,ȱ anȱ denȱ Server.ȱ Dieserȱ bearbeitetȱ denȱ Requestȱ undȱ sendetȱ dasȱ Ergebnisȱzurück.ȱInȱAbbildungȱ2Ȭ1ȱ istȱdieseȱArtȱderȱKommunikationȱskizziert,ȱwoȬ beiȱ einȱ Clientȱ einenȱ Dienstȱ einesȱ beliebigenȱ Anwendungsserversȱ aufruft.ȱ Dieserȱ nutztȱ zurȱ Bearbeitungȱ desȱ Requestsȱ wiederumȱ einenȱ Datenbankserver,ȱ umȱ beȬ stimmteȱDatenȱanzufordernȱundȱsendetȱdeshalbȱeinenȱRequestȱanȱdiesen.ȱDerȱApȬ plikationsserverȱistȱalsoȱinȱeinerȱDoppelrolle.ȱAlleȱRequestsȱwerdenȱinȱdiesemȱBeiȬ spielȱ synchronȱ undȱ blockierendȱ bearbeitet.ȱ Derȱ Aufruferȱ wartetȱ aufȱ dieȱ Antwort.ȱ Wieȱwirȱnochȱsehenȱwerden,ȱgibtȱesȱauchȱandereȱMöglichkeiten.ȱ
28 ȱ
2.1ȱȱClientȬServerȬModellȱ Imȱ Bildȱ wirdȱ deutlich,ȱ dassȱ esȱ sichȱ umȱ eineȱ dreischichtigeȱ Architekturȱ handelt.ȱ Hierȱsind,ȱwieȱwirȱinȱKapitelȱ5ȱnochȱsehenȱwerden,ȱverschiedeneȱAnsätzeȱdenkbarȱ (2Ȭ,ȱ3Ȭ,ȱnȬschichtigeȱArchitekturen).ȱInȱgrößerenȱApplikationenȱsindȱdreiȱoderȱmehrȱ Schichtenȱüblich.ȱ DieȱvomȱServerȱbereitgestelltenȱFunktionenȱwerdenȱauchȱalsȱServicesȱoderȱDiensteȱ bezeichnet.ȱAuchȱdasȱISO/OSIȬModellȱverwendetȱdenȱDienstbegriff.ȱDieȱBeschreiȬ bungȱderȱDienstschnittstelleȱrepräsentiertȱeinenȱVertragȱzwischenȱDiensterbringerȱ (=ȱServer)ȱundȱDienstnutzerȱ(=ȱClient).ȱ Client evtl. mit Benutzeroberfläche (Darstellung)
Auf Ergebnis warten
Request
Ergebnis zurückgeben Auf Daten warten
Applikationsserver Daten anfordern
Daten zurückgeben
Datenbankserver Zeit
Abbildungȱ2Ȭ1:ȱBeispielȱeinerȱClientȬServerȬKommunikationȱnachȱ(Tanenbaumȱ2003)ȱ
DerȱDienstbegriffȱspieltȱinȱvielenȱverteiltenȱAnwendungenȱeineȱzentraleȱRolleȱundȱ istȱ neuerdingsȱ überȱ denȱ Begriffȱ SOAȱ (Serviceȱ Orientedȱ Architecture)ȱ imȱ Rahmenȱ vonȱWebservicesȱwiederȱsehrȱaktuellȱgeworden.ȱ
2.1.1
Kommunikations- und Interaktionsformen
Beimȱ Nachrichtenaustauschȱ unterscheidetȱ manȱ nachȱ (Weberȱ 1998)ȱ grundsätzlichȱ zwischenȱ synchronerȱ undȱ asynchronerȱ Kommunikation.ȱ Synchronȱ ȱ bedeutetȱ imȱ ZuȬ sammenhangȱmitȱderȱProgrammierungȱvonȱverteiltenȱAnwendungenȱeineȱblockieȬ rendeȱ Kommunikation,ȱ d.h.ȱ derȱ Senderȱ wartetȱ solange,ȱ bisȱ eineȱ Methode,ȱ dieȱ oftȱ denȱNamenȱsendȱ(oderȱsoȱähnlich)ȱhat,ȱmitȱeinemȱErgebnisȱzurückkehrtȱundȱkannȱ inȱ dieserȱ Wartezeitȱ nichtsȱ tun.ȱ Asynchronȱ bedeutet,ȱ dassȱ derȱ Senderȱ nachȱ demȱ AbsendenȱderȱNachrichtȱmitȱHilfeȱeinerȱMethodeȱsendȱnichtȱblockiertȱundȱbisȱzumȱ Eintreffenȱ einesȱ Ergebnissesȱ andereȱ Aufgabenȱ erledigenȱ kann.ȱ Dieȱ Antwortenȱ müssenȱdannȱirgendwieȱeingesammeltȱwerden.ȱBeiȱderȱasynchronenȱKommunikaȬ tion,ȱhatȱmanȱdenȱVorteilȱderȱzeitlichenȱEntkoppelungȱvonȱSenderȱundȱEmpfänger.ȱ DamitȱsindȱauchȱeineȱbessereȱParallelarbeitȱsowieȱeineȱereignisgesteuerteȱKommuȬ nikationȱmöglich.ȱVonȱNachteilȱist,ȱdassȱeineȱZwischenpufferungȱderȱNachrichtenȱ
ȱ
29
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ notwendigȱist.ȱWennȱderȱPufferȱvollȱwird,ȱdannȱführtȱdiesȱtrotzdemȱzumȱBlockieȬ ren,ȱumȱeineȱgesicherteȱÜbertragungȱzuȱgewährleisten.ȱ Weiterhinȱunterscheidetȱmanȱnachȱ(Weberȱ1998)ȱgrundsätzlichȱzwischenȱmeldungsȬ orientierterȱ undȱ auftragsorientierterȱ Kommunikation.ȱ Währendȱ dieȱ meldungsorienȬ tierteȱKommunikationȱeineȱEinwegnachrichtȱohneȱAntwortȱist,ȱsprichtȱmanȱbeiȱderȱ auftragsorientiertenȱ Kommunikationȱ vonȱ einenȱ Request/ResponseȬMechanismus,ȱ beiȱdemȱderȱSenderȱeinȱErgebnisȱvomȱEmpfängerȱerhältȱ(entfernterȱDienstaufruf).ȱ Synchroneȱ undȱ asynchroneȱ Kommunikationȱ lässtȱ sichȱ mitȱ meldungsȬȱ undȱ aufȬ tragsorientierterȱKommunikationȱjeweilsȱkombinieren.ȱ Synchrone Kommunikation
Request Client
Server Warte auf Reply
Zurückgestellte synchrone Kommunikation
Reply
Request Client
Server Arbeite weiter Überprüfe periodisch das Vorliegen des Reply
Reply
Request Asynchrone Kommunikation
Client
Server Registriere Callback Arbeite weiter
Ein-WegKommunikation One-Way
Rufe registrierte Funktion oder Event auf
Request Client
Server Arbeite weiter Rückantwort wird nicht benötigt
Abbildungȱ2Ȭ2:ȱInteraktionsformenȱnachȱ(Bengelȱ2004)ȱ
AuchȱdieȱArtȱderȱInteraktionȱkannȱvariieren.ȱȱStandardmäßigȱwirdȱinȱImplementieȬ rungenȱdesȱClientȬServerȬModellsȱdieȱsynchroneȱKommunikationȱverwendet.ȱEsȱistȱ aberȱ auchȱ möglich,ȱ dassȱ einȱ Requestȱ unidirektionalȱ (OneȬWay,ȱ EinȬWegȬ Kommunikation)ȱ bearbeitetȱ wird,ȱ wennȱ keineȱ Antwortȱ erforderlichȱ ist.ȱ ȱ Esȱ kannȱ auchȱ sein,ȱ dassȱ derȱ Clientȱ nichtȱ synchron,ȱ sondernȱ asynchronȱ aufȱ dasȱ Ergebnisȱ wartetȱundȱderȱServerȱdenȱClientȱinformiert,ȱwennȱerȱdasȱErgebnisȱbearbeitetȱhat.ȱȱ BeiȱderȱasynchronenȱInteraktionȱgibtȱesȱwiederumȱdieȱMöglichkeit,ȱdassȱderȱClientȱ vonȱZeitȱzuȱZeitȱnachfragtȱ(polling),ȱobȱdieȱAntwortȱschonȱdaȱist,ȱoderȱderȱClientȱ stelltȱeineȱCallbackȬRoutineȱbereit,ȱdieȱ(z.B.ȱvonȱeinerȱMiddleware)ȱdannȱaufgeruȬ
30 ȱ
2.1ȱȱClientȬServerȬModellȱ fenȱ wird,ȱ wennȱ dieȱAntwortȱ aufȱ derȱ Clientseiteȱangekommenȱ ist.ȱ Dieȱ verschiedeȬ nenȱ Artenȱ derȱ Interaktionȱ sindȱ inȱ Abbildungȱ 2Ȭ2ȱ dargestelltȱ (sieheȱ auchȱ Bengelȱ 2004).ȱ
2.1.2
Implementierungskonzepte für das Client-Server-Computing
ClientȬServerȬSystemeȱ bzw.ȱ dieȱ zugrundeliegendenȱ Basissysteme,ȱ dieȱ meistȱ alsȱ Middlewareȱrealisiertȱwerden,ȱkönnenȱanhandȱverschiedenerȱkonzeptionellerȱFraȬ gestellungenȱnäherȱbeleuchtetȱundȱmiteinanderȱverglichenȱwerden.ȱDieȱfolgendenȱ gundlegendenȱKonzeptfragenȱsollenȱherangezogenȱwerden:ȱ 1. 2. 3. 4. 5. 6.
WasȱsindȱdieȱwesentlichenȱArchitekturkonzepte?ȱ WelcheȱKonzepteȱderȱZustandsverwaltungȱwerdenȱunterstützt?ȱ WieȱwerdenȱDienstschnittstellenȱvonȱServernȱbeschrieben?ȱ WieȱwerdenȱParameterȱundȱReturnwerteȱbeiȱDienstaufrufenȱübergeben?ȱ WieȱwirdȱdasȱMarshallingȱundȱUnmarshallingȱdurchgeführt?ȱ Welcheȱ Kommunikationsmechanismenȱ (synchron,ȱ asynchron,ȱ FehlersemanȬ tik)ȱundȱwelcheȱMechanismenȱzurȱAdressierungȱvonȱDienstenȱ(NamingȬSerȬ vice)ȱwerdenȱbereitgestellt?ȱ 7. WieȱwirdȱdasȱverteilteȱGarbageȬCollectionȱausgeführt?ȱ 8. Welcheȱ Nebenläufigkeitsunterstützungȱ wirdȱ imȱ Serverȱ zurȱ Verfügungȱ geȬ stellt?ȱ 9. WelchenȱLebenszyklusȱdurchlaufenȱServer?ȱ 10. Welcheȱ Basisdiensteȱ werdenȱ vonȱ einerȱ ClientȬServerȬBasislösungȱ nochȱ beȬ reitgestellt?ȱ 11. Welcheȱ sonstigenȱ konzeptionellenȱ Unterscheidungsmerkmaleȱ gibtȱ esȱ (speȬ zielleȱ Mechanismen,ȱ Möglichkeitenȱ derȱ Skalierbarkeit,ȱ Erhöhungȱ derȱ VerȬ fügbarkeit,…)?ȱ Wirȱ ziehenȱ dieseȱ Fragestellungenȱ fürȱ dieȱ weitereȱ Betrachtungȱ derȱ verschiedenenȱ LösungsansätzeȱinsbesondersȱbeiȱdenȱFallbeispielenȱzuȱVergleichszweckenȱheran.ȱ DaȱdieȱTerminologieȱinȱderȱLiteraturȱuneinheitlichȱist,ȱsollenȱzunächstȱfürȱdieȱweiȬ tereȱBetrachtungȱeinigeȱDefinitionenȱfestgelegtȱwerden.ȱWirȱunterscheidenȱinȱunseȬ rerȱModellbetrachtungȱzwischenȱeinemȱServer,ȱeinemȱServerbaustein,ȱeinemȱServiȬ ceȱ(Dienst)ȱundȱeinerȱServermethodeȬȱbzw.ȱȬprozedurȱ(manchmalȱauchȱalsȱDienstȬ primitiveȱbezeichnet):ȱ – Einȱ Serverȱ stelltȱ eineȱ Ablaufumgebungȱ fürȱ einenȱ oderȱ mehrereȱ ServerbauȬ steineȱbereit.ȱȱ – EinȱServerbausteinȱistȱeinȱObjektȱoderȱeinȱModulȱ(jeȱnachȱverwendeterȱProȬ grammiertechnik),ȱ dasȱ zumȱ Ablaufzeitpunktȱ instanziiertȱundȱ beiȱ Bedarfȱ eiȬ nemȱ Clientȱ fürȱ dieȱ Abarbeitungȱ einerȱ Anforderungȱ (einesȱ Requests)ȱ zugeȬ ordnetȱwird.ȱȱ
ȱ
31
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ – Einȱ Serviceȱ oderȱ Dienstȱ wirdȱ durchȱ einenȱ Serverbausteinȱ bereitgestelltȱ undȱ enthältȱeinȱoderȱmehrereȱServermethodenȱoderȱServerprozeduren.ȱ – Eineȱ Servermethodeȱ oderȱ eineȱ Serverprozedurȱ istȱ Bestandteilȱ einesȱ Service,ȱ denȱ einȱ Clientȱ durchȱ dasȱ Sendenȱ einesȱ entsprechendenȱ Requestsȱ nutzenȱ kann.ȱEinȱServerbausteinȱstelltȱeineȱoderȱmehrereȱMethodenȱbzw.ȱProzeduȬ renȱ inȱ einemȱ oderȱ mehrerenȱ Dienstenȱ bereit.ȱ Vereinfachendȱ sprechenȱ wirȱ auchȱschonȱvonȱeinemȱDienst,ȱwennȱesȱsichȱauchȱnurȱumȱeineȱServermethoȬ deȱoderȱProzedur,ȱdieȱeinȱServerbausteinȱbereitstellt,ȱhandelt.ȱ DieȱBeziehungenȱzwischenȱdenȱModellkomponentenȱsindȱinȱAbbildungȱ2Ȭ3ȱdargeȬ stellt.ȱ Wirȱ gehenȱ etwasȱ vereinfachtȱ davonȱ aus,ȱ dassȱ einȱ Serverbausteinȱ nurȱ inȱ eiȬ nemȱ Serverȱ abläuftȱ undȱ einȱ Serviceȱ nurȱ vonȱ einemȱ Serverbausteinȱ bereitgestelltȱ wird.ȱ Inȱ derȱ Praxisȱ sind,ȱ insbesondereȱ ausȱ Skalierungsgründenȱ auchȱ andereȱ ZuȬ ordnungenȱüblich.ȱEinȱClientȱkannȱbeliebigȱvieleȱServermethodenȱnutzenȱundȱdieȬ seȱstehenȱ–ȱimȱallgemeinenȱFallȱ–ȱauchȱbeliebigȱvielenȱClientsȱzurȱVerfügung.ȱȱ Server Client wird von konkreter Serverbaustein-Instanz bedient
Client
(0,*) (0,*)
(1,*)
(1,1) Stellt Ablaufumgebung bereit für (1,*)
Serverbaustein (1,1)
nutzt
stellt bereit (1,*)
(1,*)
Servermethode
(1,*) (1,1)
Service
ȱ
Abbildungȱ2Ȭ3:ȱBeziehungenȱzwischenȱdenȱModellkomponentenȱ
ManȱkannȱauchȱnochȱzwischenȱeinemȱServerȱundȱseinerȱkonkretenȱInstanzierung,ȱ sowieȱ zwischenȱ einemȱ Serverbausteinȱ undȱ seinerȱ konkretenȱ Instanzierungȱ unterȬ scheiden.ȱ Zurȱ Laufzeitȱ sindȱ natürlichȱ nurȱ konkreteȱ Ausprägungenȱ imȱ Spiel.ȱ Zurȱ LaufzeitȱwirdȱauchȱeineȱBeziehungȱzwischenȱeinerȱkonkretenȱInstanzȱeinesȱServerȬ bausteinsȱundȱeinerȱkonkretenȱInstanzȱeinesȱClientsȱhergestellt.ȱDiesȱistȱinȱunseremȱ statischenȱ Modellȱ nurȱ angedeutet,ȱ wobeiȱ einȱ Clientȱ beliebigȱ vieleȱ ServerbausteinȬ Instanzenȱ nutzenȱ undȱ eineȱ Serverbausteininstanzȱ auchȱ mehrereȱ Clientsȱ bedienenȱ kann.ȱ Wirȱ unterscheidenȱ beiȱ Dienstenȱ zwischenȱ zustandsinvariantenȱ undȱ zustandsänȬ derndenȱDiensten.ȱZustandsinvarianteȱDiensteȱliefernȱnurȱDaten,ȱwieȱbeispielsweiȬ seȱeinȱWebserverȱmitȱreinȱstatischenȱHTMLȬSeiten.ȱDieseȱArtenȱvonȱDienstenȱsindȱ relativȱ unkritischȱ undȱ leichtȱ zuȱ pflegen.ȱ Manȱ kannȱ dieȱ Dienstaufrufeȱ beliebigȱ oftȱ
32 ȱ
2.1ȱȱClientȬServerȬModellȱ wiederholenȱohneȱdassȱsichȱetwasȱändert.ȱManȱnenntȱdieseȱDiensteȱauchȱidempoȬ tent.ȱ Beiȱ zustandsänderndenȱ Dienstenȱ kannȱ einȱ Requestȱ auchȱ zuȱ einerȱ VerändeȬ rungȱeinesȱZustandsȱführen.ȱBeispieleȱhierfürȱsindȱdieȱmeistenȱServerȱvonȱkompleȬ xerenȱAnwendungenȱmitȱDatenbanken.ȱBeiȱeinemȱRequestȱkannȱhierȱderȱInhaltȱderȱ Datenbankȱ geändertȱ oderȱ erweitertȱ werden.ȱ Auchȱ dieȱ Reihenfolgeȱ derȱ AbarbeiȬ tungȱ spieltȱ beiȱ zustandsänderndenȱ Servernȱ eineȱ Rolle.ȱ Einȱ Serverbausteinȱ kannȱ sowohlȱzustandsinvarianteȱalsȱauchȱzustandsänderndeȱDiensteȱanbieten.ȱȱ ImȱWeiterenȱverwendenȱwirȱdenȱBegriffȱServerȱvereinfachendȱauchȱfürȱeinenȱSerȬ verbausteinȱundȱauchȱfürȱeineȱServerbausteinȬInstanz,ȱwennȱderȱKontextȱeindeutigȱ ist.ȱ EinȱServerȱempfängtȱdieȱClientȬRequestsȱundȱleitetȱdieseȱzurȱVerarbeitungȱanȱdenȱ entsprechendenȱServerbaustein.ȱEinȱServerȱistȱseinerseitsȱinȱeineȱAblaufumgebungȱ innerhalbȱ einesȱ Betriebssystemsȱ eingebettet.ȱ Eineȱ konkreteȱ Realisierungȱ undȱ EinȬ bettungȱinȱeineȱBetriebssystemumgebungȱsiehtȱbeispielsweiseȱsoȱwieȱinȱAbbildungȱ 2Ȭ4ȱskizziertȱaus.ȱ Serverbetriebssystem Server
Client
Serverbaustein
Serverbaustein Serverbaustein
ȱ Abbildungȱ2Ȭ4:ȱServer,ȱServerbausteineȱundȱServermethodenȱ
Architektur Dieȱ Architekturkonzepteȱ derȱ verschiedenenȱ Lösungenȱ sindȱ anȱ manchenȱ Stellenȱ sehrȱähnlich.ȱSoȱwirdȱdasȱKonzeptȱdesȱClientȬStubsȱundȱdesȱServerȬSkeletonsȱprakȬ tischȱüberallȱverwendet.ȱAberȱanȱeinigenȱStellenȱgibtȱesȱauchȱgrößereȱUnterschiedeȱ inȱ derȱ Architektur.ȱ Dieȱ wesentlichenȱ Merkmaleȱ derȱ Architekturkonzepteȱ einigerȱ ClientȬServerȬLösungenȱ sollenȱ beiȱ dieserȱ Fragestellungȱ anhandȱ vonȱ konkretenȱ Fallbeispielenȱerörtertȱwerden.ȱ
Zustandsverwaltung Beiȱ statefulȱ Servernȱ (alsoȱ Serverbausteinen)ȱ merktȱ sichȱ dieȱ Serverseiteȱ inȱ einemȱ Gedächtnis,ȱalsoȱeinerȱspeziellenȱDatenstrukturȱoderȱeinemȱObjektȱeinenȱKonversaȬ tionsȬȱoderȱSessionkontextȱüberȱeinenȱRequestȱhinweg.ȱEinȱstatelessȱServerȱvergisstȱ
ȱ
33
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ nachȱ einemȱ Requestȱ dieȱ gesamteȱ Bearbeitungȱ undȱ kannȱ beimȱ nächstenȱ Requestȱ nichtȱdaraufȱaufsetzen.ȱ Unterȱ einemȱ Singletonȱ verstehtȱ manȱ imȱ Softwareȱ Engineeringȱ einȱ speziellesȱ SoftȬ wareȬPattern.ȱEsȱverhindert,ȱdassȱmehrȱalsȱeineȱObjektinstanzȱeinerȱKlasseȱerzeugtȱ wird.ȱWennȱeinȱServerȱentwickeltȱwerdenȱmuss,ȱderȱfürȱmehrereȱClientsȱDatenȱimȱ Hauptspeicherȱ(z.B.ȱeinȱSoftwareȬCache)ȱverwaltet,ȱdannȱeignetȱsichȱeinȱSingleton.ȱ Derȱ Begriffȱ sagtȱ nochȱ nichtsȱ überȱ dieȱ Nebenläufigkeitȱ derȱ Zugriffeȱ aus.ȱ Greifenȱ mehrereȱClientsȱnebenläufigȱaufȱeinȱSingleton,ȱmussȱdiesesȱthreadȬsafeȱimplemenȬ tiertȱsein.ȱ ȱ
Client (zustandsbehaftet)
Client (zustandsbehaftet)
Jeder Client-Request wird von eigener Serverbaustein-Instanz abgearbeitet, aber Serverseite merkt sich nach Abarbeitung nichts
Jeder Client wird von eigener Serverbaustein-Instanz dediziert bedient, mehrere Requests werden in einer Session bedient
Server (zustandslos)
Server (zustandsbehaftet)
Client (zustandsbehaftet)
...
Alle Clients werden von einer ServerbausteinInstanz (Singleton) bedient, Singleton verwaltet gemeinsamen Zustand für alle Clients
Server (Singleton)
Client (zustandsbehaftet)
ȱ Abbildungȱ2Ȭ5:ȱClientȬServerȬBeziehungenȱunterȱBerücksichtigungȱdesȱZustandsȱ
InȱAbbildungȱ2Ȭ5ȱsindȱdieȱdreiȱVariantenȱdargestellt.ȱZustandsloseȱServerȱsindȱimȱ VergleichȱzuȱzustansbehaftetenȱServernȱvonȱNaturȱausȱrobusterȱundȱkönnenȱnachȱ einemȱ Ausfallȱ einfachȱ wiederaufsetzen.ȱ Zustandsbehafteteȱ Serverȱsindȱ wesentlichȱ komplizierterȱ undȱ auchȱ beiȱ einemȱ Fehlerfallȱ schwererȱ wiederȱ aufzusetzen.ȱ Einȱ Recoveryȱ desȱ Gedächtnissesȱ funktioniertȱ nur,ȱ wennȱ manȱ alleȱ ZustandsverändeȬ rungenȱ undȱ denȱ aktuellenȱ Zustandȱ persistentȱ speichert.ȱ Beiȱ einemȱ Serverausfallȱ sindȱ daherȱ meistȱ dieȱ Verbindungenȱ zuȱ denȱ Clientsȱ wegȱ undȱ dieȱ Clientsȱ kennenȱ ihrenȱZustandȱimȱServerȱnicht.ȱBeiȱeinemȱClientȬAusfallȱweißȱderȱServerȱnicht,ȱwieȱ langeȱerȱdenȱZustandȱdesȱabgestürztenȱClientsȱaufhebenȱsollȱundȱobȱerȱjemalsȱwieȬ derȱaktivȱwird.ȱWannȱkannȱerȱdieȱZustandsinformationenȱvernichten,ȱalsoȱGarbaȬ geȬCollectionȱbetreiben?ȱNetzwerkproblemeȱverursachenȱähnlicheȱSituationen.ȱDerȱ
34 ȱ
2.1ȱȱClientȬServerȬModellȱ Serverȱkannȱsichȱinȱ diesemȱ Fallȱ mitȱ einerȱ Timerüberwachungȱ behelfen.ȱ EinȱSessiȬ onzustandȱwirdȱdannȱwieȱz.B.ȱinȱWebanwendungenȱ(sieheȱWWWȬ007)ȱnachȱeinerȱ vorgegebenenȱZeitȱverworfen.ȱ ImȱÜbrigenȱmussȱbeiȱzustandsbehaftetenȱServernȱauchȱderȱClientȱüberȱdenȱaktuelȬ lenȱZustandȱderȱVerarbeitungȱBescheidȱwissen.ȱMeistȱwirdȱvomȱServerȱbeiȱBeginnȱ einerȱKonversationȱeineȱSessionȬIdȱerzeugtȱundȱdemȱClientȱmitȱderȱAntwortȱüberȬ geben.ȱ Dieseȱ sendetȱ derȱ Clientȱ beiȱ jederȱ erneutenȱ Anfrageȱ innerhalbȱ derselbenȱ Konversationȱ imȱ Requestȱ mit.ȱ Überȱ einenȱ solchenȱ Mechanismusȱ kannȱ sichȱ derȱ Clientȱ auchȱ SessionȬInformationenȱ dauerhaftȱ gewissermaßenȱ alsȱ Profilȱ speichernȱ (vgl.ȱhierzuȱCookiesȱinȱWebȬBrowsern)ȱundȱdieseȱbeiȱeinerȱspäterenȱKonversationȱ gleichȱwiederȱimȱRequestȱmitsenden.ȱ AlsȱEmpfehlungȱgilt,ȱdassȱmanȱalsȱArchitektȱeinerȱverteiltenȱAnwendungȱsoȱlangeȱ wieȱmöglichȱmitȱzustandslosenȱServernȱauskommenȱsollte.ȱDiesȱgehtȱinȱvielenȱFälȬ len,ȱwasȱeinȱklassischesȱBeispielȱverdeutlichenȱsoll:ȱ Beispiel:ȱ Wennȱ manȱ eineȱ großeȱ Anzahlȱ vonȱ Objektenȱ bzw.ȱ Datensätzenȱ (z.Bȱ >ȱ 1000)ȱdesȱselbenȱTypsȱüberȱeinenȱRequestȱlesenȱmöchte,ȱweilȱderȱClientȱdieseȱzurȱ Bearbeitungȱbenötigt,ȱistȱesȱmeistȱnichtȱsehrȱeffizient,ȱdiesȱinȱeinemȱAufrufȱzuȱerleȬ digen.ȱ Aufȱ derȱ Serverseiteȱ wirdȱ beiȱ Einsatzȱ einerȱ Datenbankȱ inȱ derȱ zugehörigenȱ Requestbearbeitungȱ eineȱ Selektionȱ abgesetztȱ (selectȱ *ȱ fromȱ ...ȱ whereȱ ...),ȱ dieȱ dieseȱ Datenȱbesorgenȱsoll.ȱNehmenȱwirȱan,ȱesȱwärenȱ5000ȱSätzeȱ(z.B.ȱalleȱAufträgeȱeinerȱ Auftragsbearbeitung),ȱdieȱinȱderȱErgebnismengeȱsind.ȱEineȱSQLȬDatenbankȱwürdeȱ hierzuȱ einenȱ Cursorȱ anlegen,ȱ derȱ dieȱ aktuelleȱ Lesepositionȱ inȱ derȱ Ergebnismengeȱ markiert.ȱManȱkönnteȱimȱDesignȱnunȱentscheiden,ȱdemȱClientȱfolgendeȱzweiȱOpeȬ rationenȱbereitzustellen:ȱ findData(...) findNextData(...)
MitȱfindDataȱwirdȱdieȱSucheȱdurchgeführtȱbzw.ȱneuȱinitiiertȱundȱdieȱerstenȱnȱSätzeȱ werdenȱalsȱErgebnisȱzurückgegeben.ȱMitȱfindNextDataȱwerdenȱdieȱnächstenȱnȱSätzeȱ anȱdenȱClientȱgeliefert.ȱDieȱBereitstellungȱdieserȱOperationenȱkönnteȱimȱServerȱnurȱ implementiertȱ werden,ȱ wennȱ derȱ aktuelleȱ Lesezeigerȱ (Cursor)ȱ fürȱ jedenȱ Clientȱ inȱ einemȱSessionkontextȱverwaltetȱwird.ȱInȱdiesemȱFallȱhabenȱwirȱeinenȱstatefulȱServer.ȱ GarbageȬCollectionȬProblemeȱ zurȱ Beseitigungȱ derȱ gespeichertenȱ Daten,ȱ fürȱ denȱ Fall,ȱdassȱderȱClientȱsichȱnichtȱmehrȱmeldet,ȱmüsstenȱzusätzlichȱbehandeltȱwerden.ȱ ManȱkönnteȱdasȱProblemȱaberȱauchȱzustandslosȱlösen,ȱindemȱmanȱeineȱOperationȱ findDataȱmitȱeinemȱzusätzlichenȱParameterȱversieht,ȱderȱdenȱSchlüsselȱdesȱzuletztȱ gelesenenȱ Satzesȱ enthält.ȱ Inȱ diesemȱ Fallȱ hätteȱ derȱ Serverȱ beiȱ Ankunftȱ einesȱ ReȬ questsȱ immerȱ dieȱ vollständigeȱ Information,ȱ umȱ eineȱ neueȱ Selektionȱ anzustoßenȱ undȱ müssteȱ sichȱ keineȱ Zustandsinformationȱ speichern.ȱ Sollteȱ dieȱ Leistungȱ aufȬ grundȱ derȱ mehrfachenȱ Zugriffeȱ aufȱ dieȱ Datenhaltungȱ nichtȱ ausreichen,ȱ könnteȱ manȱsichȱnochȱzusätzlichȱdenȱEinsatzȱvonȱCachingȬMechanismenȱüberlegen.ȱ
ȱ
35
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ Diesȱgehtȱnatürlichȱnichtȱimmer.ȱEinȱWebȬbasiertesȱShopsystemȱbenötigtȱzumȱBeiȬ spielȱdenȱZustandȱeinesȱWarenkorbsȱundȱdieȱwenigstenȱWebshopsȱsendenȱimmerȱ dieȱ gesamteȱ Zustandsinformationȱ überȱ dieȱ entprechendenȱ Requests.ȱ Dieȱ meistenȱ führenȱeinȱGedächtnisȱ(Konversationszustand)ȱfürȱjedenȱClient.ȱÄhnlichesȱgiltȱfürȱ eineȱRemoteȬLoginȬSessionȱ(sieheȱTelnet)ȱundȱfürȱsicherheitsrelevanteȱZustandsinȬ formationen.ȱGenerellȱkannȱmanȱfesthalten,ȱdassȱalleȱAnwendungen,ȱdieȱeineȱkonȬ tinuierlicheȱ Konversationȱ benötigen,ȱ auchȱ ClientȬbezogeneȱ Sessioninformationȱ imȱ Serverȱverwaltenȱmüssen.ȱOftmalsȱistȱeinȱAbbruchȱeinerȱSession,ȱwieȱz.B.ȱbeiȱeinerȱ TelnetȬSession,ȱaberȱauchȱnichtȱsoȱproblematisch,ȱdaȱsieȱeinfachȱwiederȱaufgesetztȱ werdenȱkann.ȱ
Dienstschnittstellen Einȱ verteilterȱ Softwarebausteinȱ wirdȱ überȱ seineȱ Schnittstellenȱ angesprochen.ȱ Esȱ mussȱ alsoȱ einenȱ Mechanismusȱ geben,ȱ mitȱ demȱ eineȱ Dienstschnittstelleȱ einesȱ SerȬ verbausteinsȱbeschriebenȱwerdenȱkann.ȱȱ GenerellȱunterscheidetȱmanȱzweiȱVariantenȱderȱSchnittstellenbeschreibung:ȱ – Dieȱ Schnittstellenbeschreibungȱ istȱ eingebettetȱ inȱ dieȱ Hostsprache.ȱ Konkreteȱ Beispieleȱ hierfürȱ sindȱ dieȱ Implementierungenȱ vonȱ JavaȬRMIȱ undȱ .NETȱ ReȬ moting.ȱ – DieȱDefinitionȱderȱSchnittstellenȱerfolgtȱüberȱeineȱeigeneȱDefinitionssprache.ȱ BeispielȱhierfürȱistȱdieȱCORBAȱIDLȱ(InterfaceȱDefinitionȱLanguage).ȱ Jedeȱ Methodeȱ bzw.ȱ Prozedurȱ istȱ mitȱ ihrenȱ EinȬȱ undȱ Ausgabeparametern,ȱ ihremȱ Rückgabewertȱ undȱ evtl.ȱ denȱ Exceptionsȱ (Ausnahmen),ȱ dieȱ beimȱ Aufrufȱ auftretenȱ können,ȱ zuȱ beschreiben.ȱ Wirȱ werdenȱ dieȱ einzelnenȱ Lösungsalternativenȱ nochȱ anȬ handȱvonȱBeispielenȱnäherȱbetrachten.ȱ
Parameterübergabe BeiȱverteiltenȱAufrufenȱwerden,ȱähnlichȱwieȱbeiȱlokalenȱAufrufen,ȱvomȱClientȱPaȬ rameterȱanȱdenȱServerȱübergebenȱundȱderȱServerȱkannȱRückgabewerteȱzurücklieȬ fern.ȱAusȱSichtȱdesȱAnwendungsprogrammierersȱsiehtȱdiesȱwieȱbeiȱeinemȱlokalenȱ Prozeduraufrufȱaus,ȱallerdingsȱkannȱeineȱParameterübergabeȱnichtȱüberȱdenȱlokaȬ lenȱStackȱerfolgen.ȱClientȱundȱServerȱlaufenȱschließlichȱmeistensȱinȱeigenenȱAdressȬ räumenȱundȱsogarȱaufȱ unterschiedlichenȱ Rechnersystemen,ȱ möglicherweiseȱsogarȱ inȱunterschiedlichenȱBetriebssystemtypenȱab.ȱ Beiȱ derȱ Übergabeȱ vonȱ Parameternȱ unterscheidetȱ manȱ mehrereȱ CallȬSemantiken,ȱ dieȱinȱderȱLiteraturȱteilweiseȱauchȱunterschiedlichȱbenanntȱwerden:ȱ – CallȬbyȬvalue:ȱInȱdiesemȱFallȱwirdȱeinȱParameterȱalsȱWertȱübermittelt.ȱDiesȱistȱ dieȱeinfachsteȱParameterübergabeȬVarianteȱundȱwirdȱbeiȱverteiltenȱAufrufenȱ auchȱalsȱCallȬbyȬcopyȱbezeichnet.ȱEsȱwirdȱeineȱKopieȱdesȱParametersȱübertraȬ gen.ȱÄnderungenȱimȱServerȱhabenȱkeineȱAuswirkungenȱaufȱdenȱClient.ȱ
36 ȱ
2.1ȱȱClientȬServerȬModellȱ – CallȬbyȬreference:ȱ Beiȱ dieserȱ Varianteȱ wirdȱ eineȱ Referenzȱ aufȱ eineȱ Variableȱ übertragen.ȱAlleȱÄnderungenȱdesȱServersȱsindȱdannȱsofortȱimȱClientȱsichtbar.ȱ DiesȱistȱbeiȱverteiltenȱAufrufenȱetwasȱkomplizierterȱalsȱbeiȱlokalenȱAufrufen.ȱ Währendȱ beiȱ lokalenȱ Aufrufenȱ einfachȱ eineȱ Adresseȱ derȱ Speicherzelle,ȱ inȱ welcherȱderȱWertȱderȱVariablenȱliegt,ȱübergebenȱwird,ȱkannȱeinȱServer,ȱderȱ inȱeinemȱanderenȱAdressraumȱundȱevtl.ȱsogarȱinȱeinerȱanderenȱProzessorarȬ chitekturȱ abläuft,ȱ nichtsȱ mitȱ einerȱ lokalenȱ Referenzȱ einesȱ entferntenȱ Clientsȱ anfangen.ȱ Referenzenȱ sindȱ imȱ verteiltenȱ Umfeldȱ alsoȱ etwasȱ komplexereȱ VerweiseȱaufȱentfernteȱVariablen,ȱdieȱalsȱAdressbestandteileȱauchȱInformatiȬ onenȱüberȱdasȱRechnersystemȱundȱdenȱProzess,ȱinȱdemȱdieȱVariableȱzuȱfinȬ denȱist,ȱenthalten.ȱClientȱundȱServerȱbrauchenȱalsoȱeineȱVereinbarungȱüberȱ dasȱ genaueȱ Formatȱ einerȱ RemoteȬReferenz.ȱ Wieȱ wirȱ nochȱ sehenȱ werden,ȱ wirdȱbeiȱJavaȬRMIȱCallȬbyȬreferenceȱfürȱRemoteȬObjekteȱundȱbeiȱCORBAȱfürȱ IORsȱ(InteroperableȱObjectȱReferences)ȱeingesetzt.ȱ – CallȬbyȬcopy/copyȬbackȱ ȱ (Synonyme:ȱ CallȬbyȬcopyȬrestore,ȱ CallȬbyȬvalueȬresult):ȱ ImȱUnterschiedȱzuȱcallȬbyȬreferenceȱwirdȱhierȱnichtȱdirektȱaufȱderȱOriginalȬ variableȱgearbeitet.ȱDerȱServerȱarbeitetȱmitȱeinerȱKopieȱdesȱParameters,ȱderȱ nachȱderȱBearbeitungȱanȱdieȱAdresse,ȱaufȱwelcheȱdieȱReferenzȱverweist,ȱzuȬ rückkopiertȱ wird.ȱ Dieȱ Parameterȱ werdenȱ vorȱ demȱ Versendenȱ alsoȱ kopiert.ȱ Damitȱ werdenȱ Änderungenȱ beimȱ Kommunikationspartnerȱ erstȱ nachȱ BeenȬ digungȱdesȱAufrufsȱsichtbar.ȱ Inȱ verteiltenȱ Umgebungenȱ sprichtȱ manȱ meistȱ vonȱ CallȬbyȬcopyȱ undȱ meintȱ damitȱ semantischȱ CallȬbyȬvalue.ȱ Dieȱ Realisierungȱ vonȱ CallȬbyȬreferenceȱ istȱ inȱ verteiltenȱ Systemenȱ auchȱ schwierigȱ undȱ wirdȱ daherȱ durchȱ vonȱ CallȬbyȬcopy/copyȬbackȱ simuȬ liert.ȱ Wirȱ verwendenȱ aberȱ vereinfachendȱ auchȱ hierȱ dieȱ Bezeichnungȱ CallȬbyȬ reference.ȱWirȱwerdenȱbeiȱderȱweiterenȱBetrachtungȱderȱverschiedenenȱModelleȱderȱ KommunikationȱnochȱaufȱdieȱjeweiligȱunterstütztenȱCallȬSemantikenȱeingehen.ȱ
Marshalling und Unmarshalling Wieȱ bereitsȱ inȱ denȱ einführendenȱ Kapitelnȱ erläutert,ȱ müssenȱ Datenȱ bzw.ȱ Objekte,ȱ dieȱzwischenȱzweiȱverteiltenȱBausteinenȱausgetauschtȱwerden,ȱinȱeineȱunabhängigeȱ Transfersyntaxȱ gebrachtȱ werden.ȱ Gemäßȱ ISO/OSIȬReferenzmodellȱ istȱ diesȱ eineȱ AufgabeȱderȱSchichtȱ6.ȱManȱsprichtȱimȱClientȬServerȬUmfeldȱauchȱvonȱMarshallingȱ (Serialisierung)ȱ undȱ Unmarshallingȱ (auchȱ Demarshallingȱ oderȱ Deserialisierung).ȱ EsȱgibtȱgrundsätzlichȱzweiȱVariantenȱvonȱTransfersyntaxen:ȱ – TagȬbasierteȱTransfersyntaxȱwieȱz.B.ȱASN.1.ȱHierȱwirdȱjedesȱObjektȱbzw.ȱDaȬ tumȱ mitȱ einemȱ vorangestelltenȱ Tagȱ beschrieben.ȱ Dieȱ Informationȱ wirdȱ inȱ Formȱvonȱ(Tag,ȱValue)ȬPaarenȱübermittelt.ȱInȱderȱRegelȱwirdȱauchȱdieȱLängeȱ desȱ Datumsȱ übermittelt.ȱ Manȱ sprichtȱ dannȱ vonȱ TLVȬKodierungȱ (Type,ȱ Length,ȱValue).ȱ – TagȬfreieȱ Transfersyntaxȱwieȱ beiȱ SunȱONCȱ (XDR)ȱoderȱ CORBAȱ NDRȱ (NetȬ workȱDataȱRepresentation):ȱHierȱwirdȱdieȱBeschreibungȱderȱDatenȱaufgrundȱ
ȱ
37
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ derȱStellungȱinȱderȱNachrichtȱfestgelegt.ȱDerȱAufbauȱderȱDatenstrukturenȱistȱ demȱSenderȱundȱdemȱEmpfängerȱbekannt.ȱ AufȱBasisȱderȱBeschreibungȱinȱderȱjeweiligenȱTransfersyntaxȱkannȱeine,ȱmeistȱauȬ tomatisierte,ȱ Erzeugungȱ vonȱ MarshallingȬȱ undȱ UnmarshallingȬRoutinenȱ durchgeȬ führtȱwerden.ȱDieseȱRoutinenȱwerdenȱfürȱdieȱLaufzeitȱzurȱAbbildungȱderȱlokalenȱ Syntaxȱ inȱ dieȱ Transfersyntaxȱ undȱ umgekehrtȱ benutzt.ȱ Beiȱ Nutzungȱ derȱ TransferȬ syntaxȱ ASN.1ȱ sindȱ dieȱ entsprechendenȱ Kodierungsregelnȱ inȱ denȱ sog.ȱ Basicȱ EncoȬ dingȱRulesȱ(BER)ȱdesȱentsprechendenȱISOȬStandardsȱITUȬT1ȱX.690ȱspezifiziert.ȱ
Adressierung und Kommunikation Fürȱ dieȱ Kommunikationȱ zwischenȱ Clientȱ undȱ Serverȱ istȱ eineȱ geeigneteȱ AdressieȬ rungsmöglichkeitȱ undȱ einȱ Kommunikationsprotokollȱ erforderlich.ȱ Eineȱ komfortableȱ AdressierungȱbenötigtȱeinenȱAdressauflösungsmechanismus,ȱderȱalsȱNamingȬȱoderȱ DirectoryȬServiceȱ bezeichnetȱ wird.ȱ Nachȱ derȱ Bestimmungȱ derȱ Serveradresseȱ überȱ einenȱ NamingȬServiceȱ mussȱ einȱ sog.ȱ Bindingȱ stattfinden,ȱ inȱ demȱ derȱ Clientȱ eineȱ Verbindungskontextȱ zuȱ einemȱ Serverȱ aufbaut.ȱ Dieseȱ Aspekteȱ sollenȱ hierȱ allgemeinȱ erläutertȱwerden:ȱ Namensauflösungȱ undȱ NamingȬ/DirectoryȬService:ȱ Clientsȱ müssenȱ dieȱ DienstȬ implementierungenȱimȱNetzwerkȱfindenȱkönnen.ȱEsȱmussȱalsoȱeinenȱMechanismusȱ geben,ȱ derȱ dasȱ Auffindenȱ vonȱ entferntenȱ Serverbausteinenȱ bzw.ȱ Dienstenȱ unterȬ stützt,ȱ ohneȱ komplizierteȱ Adressierungsinformationenȱ überȱ denȱ gesamtenȱ ProtoȬ kollstackȱkennenȱzuȱmüssen.ȱBetrachtetȱmanȱz.B.ȱdieȱTCP/IPȬProtokollfamilie,ȱsoȱistȱ einȱ Anwendungsprozessȱ letztendlichȱ überȱ eineȱ Transportadresseȱ bestehendȱ ausȱ einerȱ IPȬAdresseȱ undȱ einemȱ TCPȬȱ oderȱ UDPȬPortȱ adressierbar.ȱ Möchteȱ manȱ einȱ Objektȱ oderȱ eineȱ Prozedurȱ adressieren,ȱ benötigtȱ manȱ nebenȱ derȱ IPȬAdresseȱ undȱ demȱ Portȱ nochȱ weitereȱ Informationenȱ wieȱ z.B.ȱ eineȱ Objektidentifikation.ȱ Hinzuȱ kommt,ȱ dassȱ Adressenȱ sichȱ auchȱ beiȱ einerȱ Neukonfigurationȱ verändernȱ können.ȱ Damitȱ manȱ dieseȱ eherȱ kryptischenȱ Adressenȱ nichtȱ imȱ Programmcodeȱ verankernȱ muss,ȱgibtȱesȱinȱdenȱjeweiligenȱModellenȱBasisdienste,ȱdieȱeineȱsymbolischeȱAdresȬ sierungȱ erleichtern.ȱ Dieseȱ Diensteȱ werdenȱ auchȱ alsȱ NamingȬȱ oderȱ DirectoryȬ Servicesȱbezeichnet.ȱWirȱwollenȱhierȱnurȱdieȱGrundlagenȱvonȱNamingȬȱundȱDirecȬ toryȬServicesȱvorstellen.ȱKonkreteȱImplementierungenȱsindȱz.B.ȱderȱPortmapperȱinȱ Sunȱ RPC,ȱ derȱ CORBAȬNamingȬService,ȱ JNDIȬImplementierungenȱ imȱ JavaȬJEEȬ UmfeldȱoderȱrmiregistryȱbeiȱJavaȱRMI.ȱSieȱwerdenȱweiterȱuntenȱinȱdenȱFallbeispieȬ lenȱbetrachtet.ȱ Inȱ Abgrenzungȱ zuȱ Datenbankenȱ sindȱ DirectoryȬServicesȱ (Verzeichnisdienste)ȱ fürȱ einfache,ȱ hierarchischȱ geordneteȱ Informationenȱ prädestiniert.ȱ DirectoryȬServicesȱ dienenȱheuteȱdazu,ȱsymbolische,ȱeinfachȱverständlicheȱNamenȱfürȱbestimmteȱEntiȬ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 1
ȱ
ITUȬTȱ istȱ derȱ TelekomȬSektorȱ derȱ Internationalȱ Telekommunicationȱ Unionȱ (ITU)ȱ undȱ lösteȱ1993ȱdieȱCCITTȱab.ȱDieȱITUȬTȱdientȱderȱStandardisierungȱimȱTelekomȬUmfeld.ȱ
38 ȱ
2.1ȱȱClientȬServerȬModellȱ tätstypenȱwieȱRechneradressen,ȱAdressenȱverteilterȱObjekte,ȱBenutzerȱundȱRollen,ȱ Telefonnummernȱ usw.ȱ bereitzustellen.ȱ Derȱ Zugriffȱ istȱ überwiegendȱ lesendȱ mitȱ einfachenȱ Abfragenȱ undȱ ohneȱ Transaktionenȱ gedacht.ȱ Genauȱ genommenȱ gibtȱ esȱ einenȱ Unterschiedȱ zwischenȱ NamingȬȱ undȱ DirectoryȬService.ȱ Letztererȱ bietetȱ insȬ besondereȱbeiȱderȱSucheȱnachȱEinträgenȱmehrȱMöglichkeiten.ȱ Inȱ einemȱ Verzeichnisdienstȱ gibtȱ esȱ eineȱ definierteȱ Regelung,ȱ welcheȱ Namenȱ dieȱ Objekteȱ imȱ Verzeichnisȱ erhalten.ȱ Esȱ gibtȱ sog.ȱ atomareȱ Namenȱ undȱ zusammengeȬ setzteȱ bzw.ȱ vollqualifizierendeȱ Namen.ȱ Jedemȱ Objektȱ könnenȱ Attributeȱ (NameȬ ValueȬPairs)ȱ zugeordnetȱ werden,ȱ dieȱ auchȱ ausgelesenȱ werdenȱ könnenȱ undȱ manȱ kannȱdieȱSucheȱauchȱüberȱAttributinhalteȱfiltern.ȱ FolgendeȱNamingȬȱundȱDirectoryȬServicesȱsindȱheuteȱu.a.ȱimȱEinsatz:ȱ – InȱDNSȱwerdenȱz.B.ȱRechneradressen,ȱEȬMailadressenȱsowieȱweitereȱEntitäȬ tenȱ global,ȱ alsoȱ organisationsübergreifendȱ verwaltet.ȱ Inȱ DNSȱ istȱ z.B.ȱ derȱ Hostnameȱ einȱ atomarerȱ Name.ȱ Innerhalbȱ derȱ DNSȬHierarchyȱ hatȱ einȱ Hostȱ einenȱzusammengesetztenȱNamen,ȱderȱausȱallenȱBestandteilenȱdesȱPfadsȱvonȱ derȱ Wurzelȱ desȱ DNSȬBaumesȱ bisȱ zumȱ eigentlichenȱ Hostnamenȱ bestehtȱ (Mandlȱ2007b).ȱ – NISȱ bzw.ȱ NIS+ȱ istȱ einȱ weitererȱ Namensdienst,ȱ überȱ denȱ manȱ BenutzerkenȬ nungenȱundȱauchȱRechneradressenȱinnerhalbȱvonȱOrganisationenȱverwaltet.ȱ BeidesȱsindȱStandardsȱderȱInternetȬGemeinde.ȱ – Filesystemeȱ inȱ Betriebssystemenȱ wieȱ Unixȱ oderȱ Windowsȱ verfügenȱ auchȱ meistensȱüberȱeineȱhierarchischeȱAnordnungȱderȱNamenȱundȱüberȱeinenȱinȬ tegriertenȱNamingȬService.ȱȱ – Einȱ internationalȱ seitȱ 1988ȱ genormterȱ Standardȱ bzw.ȱ eineȱ Empfehlungȱ fürȱ VerzeichnisdiensteȱistȱX.500ȱderȱITUȬT.ȱX.500ȱwurdeȱalsȱISOȱStandardȱ9594ȱ übernommenȱundȱlegtȱfest,ȱdassȱfürȱdieȱKommunikationȱzwischenȱdemȱVerȬ zeichnisȬClientȱ undȱ demȱ VerzeichnisȬServerȱ dasȱ Directoryȱ Accessȱ Protocolȱ (DAP)ȱ verwendetȱ wird.ȱ Alsȱ einȱ Protokollȱ derȱ Anwendungsschichtȱ benötigtȱ DAPȱdenȱgesamtenȱOSIȬProtokollȬStack,ȱumȱzuȱfunktionieren.ȱDaȱdiesȱsehrȱ aufwändigȱinȱderȱImplementierungȱist,ȱwurdeȱeinȱ„leichtgewichtigeres“ȱProȬ tokollȱ namensȱ LDAPȱ (Lightweightȱ Directoryȱ Accessȱ Protocol)ȱ fürȱ denȱ ZugriffȱaufȱeinenȱX.500ȬServiceȬProviderȱentwickelt.ȱ Initialerȱ Kontextȱ undȱ Bootstrapping:ȱ Umȱ denȱ Verzeichnisdienstȱ imȱ Netzȱ zuȱ finȬ den,ȱbenötigtȱmanȱeinenȱsog.ȱinitialenȱKontextȱ(initialȱcontext),ȱderȱdieȱAdresseȱdesȱ Verzeichnisdienstesȱ darstellt.ȱ Dieserȱ wirdȱ typischerweiseȱ überȱ einenȱ speziellenȱ BootstrappingȬMechanismusȱ besorgt.ȱ Derȱ initialeȱ Kontextȱ istȱ derȱ Einstiegspunktȱ fürȱdieȱAusführungȱvonȱOperationenȱinȱeinemȱVerzeichnisdienst.ȱAnzumerkenȱistȱ hierȱ allerdings,ȱ dassȱ derzeitȱ vieleȱ Lösungenȱ entwederȱ technologieȬȱ oderȱ sogarȱ herstellerabhängigȱ sind.ȱ Diesȱ machtȱ denȱ Anwendungscodeȱ abhängig.ȱ Derȱ sog.ȱ LookupȬCodeȱzumȱAuflösenȱvonȱsymbolischenȱAdressenȱinȱtatsächlicheȱAdressenȱ
ȱ
39
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ vonȱObjektenȱbzw.ȱProzedurenȱistȱdamitȱnichtȱsoȱeinfachȱaufȱandereȱTechnologienȱ oderȱProdukteȱportierbar.ȱ Bindingȱ undȱ Kontext:ȱEineȱwichtigeȱFrageȱist,ȱwieȱeinȱClientȱeinenȱServerȱfindenȱ undȱ mitȱ diesemȱ eineȱ Verbindungȱ eingehenȱ kann.ȱ Dieserȱ Vorgangȱ wirdȱ auchȱ alsȱ Bindingȱ(Binden)ȱbezeichnet.ȱÜblicherweiseȱregistriertȱsichȱeinȱServerȱbeimȱStartȱbeiȱ einemȱVerzeichnisdienstȱ(DirectoryȬService)ȱundȱeinȱClientȱfindetȱdieȱAdresseȱdesȱ ServersȱüberȱeineȱAnfrageȱanȱdasȱDirectory.ȱȱ WährendȱdesȱBindingsȱwirdȱeinȱKontextȱfestgelegt.ȱEinȱKontextȱistȱdefiniertȱdurchȱ eineȱ Mengeȱ vonȱ Zuordnungenȱ vonȱ Namenȱ zuȱ VerzeichnisȬObjekten.ȱ Einȱ Kontextȱ ermöglichtȱdieȱAuflösungȱvonȱNamenȱzuȱAdressinformationen.ȱEinȱServerbaustein,ȱ derȱ einȱ Objektȱ ȱ bzw.ȱ eineȱ Prozedurȱ imȱ Netzwerkȱ bekanntȱ machenȱ möchte,ȱ kannȱ diesȱ überȱ eineȱ bindȬOperationȱ erledigen.ȱ Dabeiȱ wirdȱ einȱ Kontextȱ erzeugt.ȱ Dieserȱ Kontextȱ kannȱ dannȱ vonȱ einemȱ Clientȱ zurȱ Adressauflösungȱ überȱ eineȱ lookupȬ Operationȱ genutztȱ werden.ȱ Manȱ unterscheidetȱ zwischenȱ statischemȱ undȱ dynamiȬ schemȱBinding:ȱ – BeimȱstatischenȱBindingȱgibtȱderȱClientȱdieȱServeradresseȱdirektȱanȱundȱdasȱ BindenȱerfolgtȱzumȱÜbersetzungszeitpunktȱdesȱClients.ȱ – Beimȱ dynamischenȱ Bindingȱ wirdȱ dieȱ Adresseȱ desȱ Serversȱ zurȱ Laufzeitȱ z.B.ȱ überȱ einenȱ Broadcastȱ oderȱ eineȱ sog.ȱ BrokerȬInstanz,ȱ dieȱ dieȱ Serveradressenȱ verwaltet,ȱermittelt.ȱ Kommunikationsprotokoll:ȱWasȱdieȱKommunikationȱzwischenȱClientȱundȱServerȱ anbelangt,ȱsoȱistȱeinȱentsprechendesȱKommunikationsprotokollȱerforderlich,ȱdasȱinȱ derȱRegelȱüberȱTCPȱoderȱUDPȱ(Mandlȱ2008a)ȱliegt.ȱDerȱVerbindungsaufbauȱmussȱ imȱ Clientȱ undȱ imȱ Serverȱ explizitȱ programmiertȱ werden.ȱ Vorȱ demȱ Sendenȱ einerȱ Nachrichtȱ mussȱ dieȱ Nachrichtȱ zusammengestelltȱ undȱ soȱ aufbereitetȱ (serialisiert)ȱ werden,ȱ dassȱ derȱ Serverȱ sieȱ interpretierenȱ kann.ȱ Derȱ Serverȱ empfängtȱ dieȱ NachȬ richtȱundȱdeserialisiertȱsie.ȱNachȱderȱBearbeitungȱdesȱRequestsȱsendetȱerȱeineȱAntȬ wortȱ (ResponseȬNachricht),ȱ dieȱ derȱ Clientȱ empfängtȱ undȱ ebenfallsȱ deserialisiert.ȱȱ WennȱeinȱServerȱvieleȱClientsȱbedienenȱmuss,ȱmussȱderȱServerprogrammiererȱdiesȱ ebenfallsȱ„vonȱHand“ȱausprogrammieren.ȱȱ Wirȱ betrachtenȱ inȱ diesemȱ Kapitelȱ höherwertigereȱ Kommunikationsmechanismen,ȱ dieȱ demȱ Anwendungsprogrammiererȱ dieȱ Entwicklungȱ eigenerȱ KommunikationsȬ protokolleȱabnehmen.ȱGrundideeȱinȱallenȱbetrachtetenȱBasissystemenȱist,ȱdassȱeinȱ ClientȱdenȱDienstȱeinesȱServersȱsoȱanfordert,ȱalsȱobȱesȱsichȱumȱeinenȱlokalenȱProȬ zedurȬȱoderȱMethodenaufrufȱhandelnȱwürde.ȱFürȱdenȱClientȱbleibtȱdieȱKommuniȬ kationȱ überȱ dasȱ Netzȱ weitgehendȱ transparent,ȱ derȱ Anwendungsprogrammiererȱ schreibtȱalsoȱinȱseinȱProgrammȱeinenȱProzedurȬȱoderȱMethodenaufrufȱundȱdieserȱ wirdȱaufȱeinenȱverteiltenȱAufrufȱumgesetzt.ȱȱ Dieȱ erforderlichenȱ Kommunikationsmechanismenȱ werdenȱ durchȱ eineȱ SoftwareȬ schichtȱ verborgen,ȱ dieȱ auchȱ alsȱ KommunikationsȬMiddlewareȱ bezeichnetȱ wird.ȱ Dieȱ folgendenȱProtokollmechanismenȱsindȱbereitzustellen:ȱ
40 ȱ
2.1ȱȱClientȬServerȬModellȱ – Derȱ Funktionsaufrufȱ mussȱ inȱ eineȱ Nachrichtȱ serialisiertȱ (Marshalling)ȱ werȬ den.ȱ – DieȱNachrichtȱmussȱsicherȱübertragenȱwerden.ȱHierzuȱgehörtȱdasȱAussortieȬ renȱ vonȱ Duplikatenȱ (Duplikatfilterung),ȱ dasȱ Wiederholenȱ vonȱ Nachrichtenȱ beiȱNachrichtenverlustȱundȱdieȱFehlerbehandlungȱanhandȱeinerȱvorgegebeȬ nenȱFehlersemantikȱ(atȬleastȬonce,...).ȱ – Imȱ entferntenȱ Rechnerȱ mussȱ dieȱNachrichtȱ entpacktȱ undȱ deserialisiertȱ werȬ denȱ(Unmarshalling)ȱundȱdieȱadressierteȱProzedurȱistȱaufzurufen.ȱ – Dieȱ Ergebnisseȱ desȱ Prozeduraufrufsȱ müssenȱ zumȱ Aufruferȱ zurückgesendetȱ werden,ȱwobeiȱebenfallsȱeineȱNachrichtȱerzeugtȱwerdenȱmuss.ȱ – AufȱderȱaufrufendenȱSeiteȱwirdȱdasȱErgebnisȱausȱderȱNachrichtȱgenommenȱ undȱschließlichȱanȱdieȱAufrufstelleȱtransportiert,ȱalsȱobȱdasȱganzeȱlokalȱausȬ geführtȱwordenȱwäre.ȱ – EinȱverteilterȱGarbageȬCollectionȬMechanismusȱundȱeinȱverteiltesȱExceptionȬ Handlingȱsindȱbereitzustellen.ȱ Dieȱ Kommunikationsprotokolleȱ fürȱ dieȱ ClientȬServerȬKommunikationȱ sindȱ meistȱ synchron,ȱ d.hȱ derȱ Clientȱ wartetȱ aufȱ dasȱ Ergebnisȱ desȱ Servers.ȱ Aberȱ auchȱ andereȱ Variantenȱ sindȱ möglich.ȱ Dasȱ Kommunikationsprotokollȱ mussȱ ausȱ Sichtȱ desȱ AnȬ wendungsprogrammieresȱeinigeȱDetailsȱverbergenȱundȱeineȱgesicherteȱKommuniȬ kationȱermöglichen.ȱDerȱtypischeȱInhaltȱeinesȱRequestsȱenthältȱz.BȱeinenȱNachrichȬ tentypenȱ(z.B.ȱ0=Request,ȱ1=Reply),ȱeineȱRequestȬIdȱalsȱFolgenummerȱ(aufsteigenȬ deȱ Zahl),ȱ eineȱ Adresseȱ desȱ Serverbausteins,ȱ dieȱ Identifikationȱ derȱ zuȱ rufendenȱ Methodeȱbzw.ȱProzedurȱsowieȱArgumenteȱfürȱdenȱAufruf.ȱ
Garbage-Collection Inȱ objektorientiertenȱ Sprachenȱ wieȱ C#ȱ undȱ Javaȱ istȱ bekanntlichȱ einȱ automatischerȱ GarbageȬCollectionȬMechanismusȱ bereitsȱ inȱ derȱ Spracheȱ verfügbar.ȱ Dasȱ LaufzeitȬ systemȱerkennt,ȱobȱeinȱObjektȱnochȱbenötigtȱwirdȱoderȱnicht.ȱImȱletzterenȱFallȱwirdȱ esȱausȱdemȱHeapȱentfernt.ȱInȱderȱlokalenȱLaufzeitumgebungȱeinerȱSpracheȱistȱGarȬ bageȬCollectionȱzwarȱperformanceȬkritisch,ȱaberȱrelativȱeinfachȱzuȱimplementieren.ȱ EsȱmussȱvonȱZeitȱzuȱZeitȱuntersuchtȱwerden,ȱobȱesȱObjekteȱgibt,ȱaufȱdieȱkeineȱObȬ jektreferenzȱimȱlokalenȱAdressraumȱmehrȱverweist.ȱIstȱdiesȱderȱFall,ȱkannȱdasȱObȬ jektȱeliminiertȱwerden.ȱ BeiȱeinemȱentferntenȱObjekt,ȱaufȱdasȱmehrereȱandereȱObjekteȱreferenzieren,ȱistȱdiesȱ nunȱnichtȱsoȱohneȱweiteresȱmöglich.ȱEigentlichȱkannȱnurȱderȱServer,ȱderȱesȱverwalȬ tet,ȱ entscheiden,ȱ obȱ esȱ nochȱ benötigtȱ wirdȱ oderȱ nicht.ȱ Einȱ verteilterȱ GarbageȬ CollectionȬMechanismusȱ sollȱ erkennen,ȱ wennȱ einȱ verteiltesȱ Objektȱ nichtȱ mehrȱbeȬ nötigtȱwirdȱundȱesȱdannȱfreigeben.ȱSolangeȱdasȱObjektȱaberȱnochȱvonȱmindestensȱ einemȱ anderenȱ Objektȱ benutztȱ wird,ȱ darfȱ esȱ nichtȱ gelöschtȱ werden.ȱ Dasȱ verteilteȱ GarbageȬCollectionȱ arbeitetȱ sinnvollerweiseȱ mitȱ demȱ lokalenȱ GarbageȬCollectionȬ MechanismusȱderȱjeweiligenȱSpracheȱ(sofernȱvorhanden)ȱzusammen.ȱ
ȱ
41
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ EineȱVarianteȱzurȱLösungȱdesȱProblemsȱbasiertȱaufȱeinemȱeinfachenȱZählermechaȬ nismus,ȱ derȱ auchȱ alsȱ verteilterȱ ReferenceȬCountingȬAlgorithmusȱ bezeichnetȱ wird.ȱ Jederȱ Serverprozessȱ verwaltetȱ hierzuȱ eineȱ Listeȱ allerȱ Clientprozesseȱ bzw.ȱ Proxies,ȱ dieȱentfernteȱObjektreferenzenȱaufȱseineȱObjekteȱnutzen.ȱGenerellȱistȱesȱzweckmäȬ ßig,ȱ beimȱ verteiltenȱ ReferenceȬCountingȱ zumȱ Zeitpunktȱ derȱ Erstellungȱ einerȱ neuenȱ ReferenzȱaufȱeinȱObjektȱundȱzumȱZeitpunktȱdesȱLöschensȱeinesȱVerweisesȱaufȱeinȱ Objektȱ vomȱ Nutzerȱ (Client)ȱ eineȱ Nachrichtȱ anȱ denȱ entferntenȱ Objektserverȱ zuȱ versenden.ȱ Derȱ Serverȱ kannȱ dannȱ denȱ zugehörigenȱ Referenzzählerȱ entsprechendȱ inkrementierenȱ bzw.ȱ dekrementieren.ȱ Esȱ istȱ einȱ Protokollȱ notwendig,ȱ dasȱ zumȱ Austauschȱ dieserȱ Informationenȱ dient.ȱ Dasȱ Protokollȱ istȱ inȱ (Coulourisȱ 2003)ȱ wieȱ folgtȱskizziert:ȱ – Wennȱ einȱ Clientȱ eineȱ neueȱ Objektreferenzȱ einesȱ entferntenȱ Objektsȱ erhält,ȱ ruftȱesȱeineȱbereitgestellteȱMethodeȱAddRef(Object)ȱimȱServerȱauf,ȱdamitȱderȱ ServerȱdiesenȱClientȱinȱderȱListeȱderȱReferenzierendenȱvermerkenȱkann.ȱImȱ ClientȱwirdȱeinȱProxyȱangelegt.ȱ – WennȱderȱClientȱüberȱdasȱlokaleȱGarbageȬCollectionȱdenȱProxyȱfreigibt,ȱwirdȱ dieȱ serverseitigeȱ Methodeȱ RemoveRef(Object)ȱ aufgerufen.ȱ Wennȱ inȱ derȱ RefeȬ renzlisteȱzumȱObjektȱkeineȱweiterenȱentferntenȱProxiesȱmehrȱenthaltenȱsind,ȱ kannȱ derȱ Serverprozessȱ bzw.ȱ derȱ lokaleȱ GarbageȬCollectorȱ desȱ ServersysȬ temsȱdasȱObjektȱfreigegeben.ȱȱ Wieȱ manȱ sieht,ȱ sindȱ zurȱ Realisierungȱ einesȱ verteiltenȱ GarbageȬCollectionȱ weitereȱ Methodenaufrufeȱerforderlich,ȱdieȱamȱbestenȱüberȱNachrichtenȱangestoßenȱwerdenȱ müssen.ȱIstȱkeinȱeigenerȱGarbageȬCollectorȱimȱlokalenȱSystem,ȱsoȱkannȱdasȱFreigeȬ benȱ einesȱ ProxyȬObjektsȱ (inȱ C++ȱ z.B.ȱ überȱ dieȱ deleteȬMethode)ȱ dasȱ Ereignisȱ zumȱ AufrufȱderȱMethodeȱRemoveRef(Object)ȱsein.ȱȱ Client 1
Client 2
Objektserver ...
bind (Objektreferenz anfordern) Proxy wird lokal erzeugt Proxy wird lokal freigegeben
Temp. Eintrag in Referenzliste
removeRef(Object) Objekt nicht löschen
addRef(Object) Temp. Eintrag umwandeln
Abbildungȱ2Ȭ6:ȱMöglichesȱFehlerszenarioȱbeimȱverteiltenȱGarbageȬCollectionȱ
42 ȱ
2.1ȱȱClientȬServerȬModellȱ Netzwerkfehlerȱ könnenȱ dazuȱ führen,ȱ dassȱ Nachrichtenȱ verlorenȱ gehenȱ oderȱ dieȱ Reihenfolgeȱ derȱ AddȬȱ bzw.ȱ RemoveȬNachrichtenȱ vertauschtȱ wird.ȱ Esȱ kannȱ vorȬ kommen,ȱ dassȱ eineȱ RemoveȬNachrichtȱ einesȱ Clientsȱ fälschlicherweiseȱ vorȱ einerȱ AddȬAnweisungȱeinesȱanderenȱClientsȱankommt.ȱ Problemeȱ kannȱ esȱ geben,ȱ wennȱ einȱ Clientȱ geradeȱ dasȱ letzteȱ RemoveRef(Object)ȱ fürȱ einȱObjektȱabgesetztȱhatȱundȱzurȱselbenȱZeitȱeinȱneuȱreferenzierenderȱClientȱeinenȱ AddRef(Object)ȱaufruft.ȱDerȱServerȱkönnteȱnunȱdasȱObjektȱlöschen.ȱDaȱaberȱgeradeȱ eineȱAnforderungȱderȱObjektreferenzȱ(bindȬAufruf)ȱdurchȱdenȱzweitenȱClientȱläuftȱ undȱ derȱServerȱ dieseȱ kennt,ȱ kannȱ erȱ denȱ Aufrufȱ desȱ neuenȱ Clientsȱabwartenȱ undȱ dasȱObjektȱnichtȱlöschen.ȱDasȱSequenzdiagrammȱinȱAbbildungȱ2Ȭ6ȱsollȱdieseȱSituaȬ tionȱverdeutlichen.ȱ EinȱweitererȱMechanismus,ȱderȱnebenȱReferenceȬCountingȱinȱverteiltenȱSystemenȱfürȱ dasȱGarbageȬCollectionȱeingesetztȱwird,ȱsindȱLeases.ȱServerȱgebenȱhierȱdieȱReferenzȱ nurȱ eineȱ begrenzteȱ Zeitȱ anȱ einenȱ Clientȱ frei.ȱ Meldetȱ sichȱ derȱ Clientȱ längereȱ Zeitȱ nichtȱbeimȱServer,ȱkannȱdieserȱdieȱReferenzȱlöschen.ȱDerȱClientȱmussȱdannȱinȱderȱ Regelȱdafürȱsorgen,ȱdassȱseinȱLeaseȱzyklischȱverlängertȱwird,ȱindemȱerȱdemȱServerȱ eineȱNachrichtȱsendet.ȱDamitȱerreichtȱman,ȱdassȱObjekteȱimȱServerȱauchȱdannȱfreiȬ gegebenȱwerden,ȱwennȱsichȱeinȱClientȱnichtȱmehrȱmeldet.ȱ
Nebenläufigkeit Manȱ unterscheidetȱ hierȱ zwischenȱ Servern,ȱ welcheȱ dieȱ nebenläufigeȱ Bearbeitungȱ mehrererȱ ClientȬRequestsȱ erlauben,ȱ undȱ solchen,ȱ dieȱ dieȱ Requestsȱ seriellȱ abarbeiȬ ten.ȱ Erstereȱ nenntȱ manȱ auchȱ paralleleȱ Server,ȱ letztereȱ iterativeȱ Server.ȱ Inȱ heutigenȱ ImplementierungenȱfindetȱmanȱausȱLeistungsgründenȱkaumȱmehrȱiterativeȱServerȱ fürȱClientȬServerȬAnwendungen.ȱ Beiȱ parallelenȱ Servernȱistȱimplementierungstechnischȱ einȱ sog.ȱDispatcherȱ erforderȬ lich.ȱEinȱDispatcherȱistȱeinȱSoftwarebaustein,ȱderȱimȱServerȱfürȱdieȱVerteilungȱderȱ Requestsȱanȱsog.ȱWorkerȬThreadsȱoderȱȬProzesseȱzuständigȱist.ȱThreadsȱoderȱProȬ zesseȱkönnenȱimȱVorfeldȱderȱBearbeitung,ȱetwaȱbeimȱSystemstart,ȱerzeugtȱundȱinȱ einemȱPoolȱverwaltetȱwerden.ȱ Serverinstanz Request Dispatcher
T1
T2
T5
…
T3
T4 Tn
Threadpool
ȱ Abbildungȱ2Ȭ7:ȱRequestȬDispatchingȱ
DerȱDispatcherȱanalysiertȱdieȱAnfrageȱundȱleitetȱdieseȱdannȱanȱeinenȱfreienȱWorȬ kerȬThreadȱweiter.ȱDerȱWorkerȬThreadȱführtȱdieȱAnfrageȱunabhängigȱvomȱDispatȬ
ȱ
43
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ cherȱ aus,ȱ währendȱ letztererȱ bereitsȱ aufȱ denȱ nächstenȱ Requestȱ wartet.ȱ Wennȱ derȱ WorkerȬThreadȱfertigȱist,ȱbeendetȱerȱsichȱoderȱlegtȱsichȱselbstständigȱwiederȱinȱdenȱ Threadpoolȱ(sieheȱAbbildungȱ2Ȭ7).ȱ DurchȱEinsatzȱvonȱThreadsȱistȱesȱmöglich,ȱdassȱjederȱRequestȱfürȱsichȱsequentiellȱ abgearbeitetȱwerdenȱkann.ȱDieȱProgrammierungȱistȱrelativȱüberschaubarȱundȱmanȱ kannȱblockierendeȱsendȬȱundȱreceiveȬOperationenȱdesȱjeweiligenȱTransportsystemsȱ bzw.ȱ derȱ Middlewareȱ verwenden.ȱ Fallsȱ esȱ keineȱ ThreadȬImplementierungȱ imȱ BeȬ triebssystemȱgibt,ȱmussȱdieȱParallelitätȱsimuliertȱwerden.ȱDiesȱkannȱüberȱdieȱImpȬ lementierungȱ einesȱ Zustandsautomatenȱ inȱ einemȱ Prozessȱ erfolgen.ȱ Daȱ dannȱ vieleȱ Netzwerkereignisseȱ innerhalbȱ einesȱ Prozessesȱ auftretenȱ können,ȱ darfȱ derȱ Prozessȱ anȱkeinerȱStelleȱblockierenȱundȱmussȱsoȱprogrammiertȱwerden,ȱdassȱerȱnachȱgetaȬ nerȱArbeitȱsofortȱwiederȱanȱeinemȱzentralenȱEreigniswartepunktȱaufȱankommendeȱ Requestsȱ wartet.ȱ Esȱ dürfenȱ auchȱ keineȱ blockierendenȱ sendȬȱ undȱ receiveȬAufrufeȱ benutztȱwerden.ȱDerȱinetdȬProzessȱinȱUnixȬSystemenȱistȱeinȱBeispielȱfürȱdieseȱVorȬ gehensweise.ȱ Eineȱ andereȱ Variante,ȱ dieȱ inȱ Unixȱ häufigȱ vorzufindenȱ war,ȱ istȱ dasȱ Startenȱ einesȱ eigenenȱ Prozessesȱ fürȱ jedenȱ Request.ȱ Einȱ Prozessȱ arbeitetȱ inȱ diesemȱ Modellȱ alsȱ Dispatcherȱ undȱ wartetȱ aufȱ ankommendeȱ Requests.ȱ Sobaldȱ einȱ Requestȱ eintrifftȱ erzeugtȱ erȱ einenȱ neuenȱ Arbeitsprozessȱ undȱ übergibtȱ diesemȱ dieȱ Bearbeitung.ȱ Erȱ gehtȱ schnellstmöglichȱ wiederȱ inȱ einenȱ Wartezustand,ȱ umȱ denȱ nächstenȱ Requestȱ annehmenȱ zuȱ können.ȱ Beiȱ hoherȱ Lastȱ istȱ dieȱ Prozessgenerierungȱ allerdingsȱ probȬ lematischȱfürȱdieȱLeistungȱdesȱSystems.ȱ Inȱ modernerenȱ MiddlewareȬImplementierungenȱ wirdȱ dasȱ Threadhandlingȱ meistȱ durchȱdieȱMiddlewareȱversteckt,ȱwasȱbedeutet,ȱdassȱderȱProgrammiererȱdamitȱgarȱ nichtsȱ zuȱ tunȱ hat.ȱ Erȱ mussȱ alsoȱ serverseitigȱ „nur“ȱ seineȱ RequestȬBearbeitungȱ seȬ quentiellȱprogrammieren.ȱ
Lebenszyklus von Serverbausteinen EinȱServerbausteinȱwirdȱzurȱLaufzeitȱvonȱeinemȱServerȱinstanziiertȱundȱdurchläuft,ȱ jeȱ nachȱ Bausteintypȱ undȱ Implementierungȱ verschiedeneȱ Zustände.ȱ Auchȱ hierȱ istȱ dieȱ Terminologieȱ beiȱ denȱ einzelnenȱ Lösungsansätzenȱ sehrȱ uneinheitlich.ȱ Daherȱ werdenȱwirȱfürȱunsereȱZweckeȱeinȱvereinfachtes,ȱallgemeinesȱModellȱalsȱGrundlaȬ geȱ fürȱ dieȱ weitereȱ Diskussionȱ verwenden.ȱ Einȱ Serverbausteinȱ kannȱ inȱ unseremȱ ModellȱimȱEinzelnenȱfolgendeȱZuständeȱeinnehmen:ȱ – Instanziiert:ȱ Dieȱ Instanzȱ einesȱ Serverbausteinsȱ wurdeȱ erzeugt,ȱ istȱ aberȱ nochȱ keinemȱClientȱzugeordnet.ȱ – Deinstanziiert:ȱ Dieȱ Instanzȱwurdeȱzerstörtȱ (Endzustand)ȱ undȱistȱ daherȱ nichtȱ mehrȱverfügbar.ȱ – Aktiviert:ȱEineȱInstanzȱdesȱȱServerbausteinsȱistȱeinemȱClientȱzugeordnet.ȱ ȱ ȱ
44 ȱ
2.1ȱȱClientȬServerȬModellȱ – Passiviert:ȱDieȱInstanzȱistȱdemȱClientȱentzogenȱundȱjeȱnachȱImplementierungȱ ausgelagertȱ (aufȱ einenȱ Sekundärspeicher),ȱ etwaȱ umȱ Ressourcenȱ freiȱ zuȱ maȬ chen.ȱ InȱAbbildungȱ2Ȭ8ȱsindȱdieȱZustandsübergängeȱdargestellt.ȱ Instanzierung
instanziert
Aktivierung
Zerstören
deinstanziert
aktiviert
n öre rst Ze Passivieren
Aktivierung
passiviert
ȱ Abbildungȱ2Ȭ8:ȱZustandsdiagrammȱfürȱeineȱServerbausteinȬInstanzȱ
Derȱ Lebenszyklusȱ einerȱ ServerbausteinȬInstanzȱ wirdȱ durchȱ eineȱ Instanzierungȱ begonnen.ȱ Dieȱ Instanzierungȱ kannȱ durchȱ denȱ Serverȱ bzw.ȱ dessenȱ Infrastrukturȱ selbstȱ gesteuertȱ oderȱ aberȱ durchȱ denȱ Clientȱ angestoßenȱ werden.ȱ Serverbausteineȱ werdenȱ dannȱ meistȱ inȱ sog.ȱ Poolsȱ verwaltet.ȱ Derȱ umgekehrteȱ Vorgangȱ istȱ dieȱ DeinstanzierungȱoderȱZerstörungȱderȱInstanz,ȱdieȱmeistȱderȱServerȱeinleitet.ȱ Unterȱ einerȱ Aktivierungȱ verstehenȱ wirȱ dieȱ Zuordnungȱ einesȱ Serverbausteinsȱ zuȱ einemȱ konkretenȱ Clientȱ zumȱ Zweckeȱ derȱ Ausführungȱ einesȱ oderȱ mehrererȱ ReȬ quests.ȱ Zudemȱ werdenȱ Serverbausteineȱ ggf.ȱ passiviertȱ ȱ (Passivierung)ȱ wennȱ derȱ ServerȱknappȱanȱRessourcenȱistȱoderȱauchȱausȱanderenȱImplementierungsgründen.ȱ Beiȱ derȱ Aktivierungȱ unterscheidetȱ manȱ Serveraktivierungȱ undȱ Clientaktivierung.ȱ Weiterhinȱ kannȱ einȱ Serverbausteinȱ einemȱ Clientȱ nurȱ fürȱ einenȱ Requestȱ (Singlecallȱ oderȱ PerȬRequestȬServer)ȱ oderȱ fürȱ vieleȱ Requestsȱ zugeordnetȱ werden.ȱ Beimȱ PerȬ RequestȬServerȱ erfolgtȱ fürȱ dieȱ Bearbeitungȱ einesȱ Requestsȱ eineȱ Aktivierungȱ undȱ nachȱAbarbeitungȱdesȱRequestsȱeineȱPassivierung.ȱ Eineȱ erneuteȱ Aktivierungȱ nachȱ einerȱ Passivierungȱ istȱ dannȱ durchzuführen,ȱ wennȱ dieȱInstanzȱwiederȱbenötigtȱwird.ȱInȱkonkretenȱImplementierungenȱ(sieheȱz.B.ȱEJBȱ statefulȱSessionȱBeans)ȱkannȱdieȱInstanzȱbeiȱeinerȱerneutenȱAktivierungȱeinemȱanȬ derenȱClientȱzugeordnetȱwerden.ȱWichtigȱist,ȱdassȱdieȱneueȱInstanzȱdenȱaktuellenȱ Konversationszustandȱ derȱ Kommunikationȱ zwischenȱ demȱ konkretenȱ Clientȱ undȱ demȱServerȱbereitstellt.ȱȱ Serverbausteine,ȱ dieȱ bereitsȱ zumȱ Startzeitpunktȱ desȱ Serversȱ erzeugtȱ werdenȱ undȱ solangeȱ leben,ȱ bisȱ dieserȱ wiederȱ beendetȱ wird,ȱ werdenȱ auchȱ alsȱ Persistentȱ Serverȱ bezeichnet.ȱ AktivierungȱundȱPassivierungȱhängenȱvorȱallemȱvonȱderȱArtȱderȱZustandsverwalȬ tungȱ ab.ȱ Statelessȱ Serverȱ werdenȱ inȱ derȱ Regelȱ nurȱ fürȱ einenȱ Requestȱ (Singlecall)ȱ aktiviert,ȱ statefulȱ Serverȱ dagegenȱ fürȱ dieȱ Dauerȱ derȱ Konversation.ȱ Wirdȱ währendȱ
ȱ
45
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ derȱ Konversationȱ längereȱ Zeitȱ nichtȱ kommuniziert,ȱ kannȱ eineȱ Passivierungȱ erfolȬ gen.ȱ
Basisdienste Nebenȱ denȱ genanntenȱ Kriterienȱ unterscheidetȱ manȱ ClientȬServerȬSystemeȱ auchȱ anhandȱ derȱ bereitgestelltenȱ Basisdienste.ȱ Alleȱ Basissystemeȱ (auchȱ MiddlewareȬ systemeȱgenannt)ȱverfügenȱüberȱdenȱbereitsȱerwähntenȱNamensȬȱundȱVerzeichnisȬ dienst.ȱWeitereȱwichtigeȱDienste,ȱdieȱinsbesondereȱbeiȱbetrieblichenȱInformationsȬ systemenȱ eineȱ großeȱ Rolleȱ spielen,ȱ sindȱ Persistenzdiensteȱ fürȱ denȱ Zugriffȱ aufȱ exȬ terneȱ Daten,ȱ Sicherheitsdiensteȱ undȱ Transaktionsdienste.ȱ Hierȱ unterscheidenȱ sichȱ dieȱverschiedenenȱLösungsalternativen,ȱdieȱwirȱnochȱbetrachtenȱwerden,ȱerheblich.ȱ
Sonstige Unterscheidungsmerkmale Schließlichȱ sollenȱ nochȱ ganzȱ spezielleȱ Eigenheitenȱ vonȱ Basissystemenȱ betrachtetȱ werden.ȱInteressantȱsindȱauchȱMechanismenȱfürȱdieȱUnterstützungȱderȱSkalierbarȬ keitȱvonȱSystemenȱsowieȱMöglichkeiten,ȱdieȱVerfügbarkeitȱvonȱSystemenȱzuȱerhöȬ hen.ȱWeiterhinȱsindȱdieȱKomplexitätȱderȱNutzungȱundȱauchȱeineȱEinschätzungȱderȱ heutigenȱNutzungȱfürȱdieȱAuswahlȱvonȱBasissystemenȱinteressant.ȱ
2.1.3
Serveroptimierung durch Caching
Beiȱ umfangreichenȱ ClientȬServerȬAnwendungenȱ istȱ esȱ durchausȱ möglich,ȱ dassȱ mehrȱ alsȱ Hundertȱ oderȱ sogarȱ einȱ paarȱ Tausendȱ Clientsȱ aufȱ einenȱ oderȱ mehrereȱ Serverȱ zugreifen.ȱ Meistȱ sindȱ serverseitigȱ Datenbankenȱ imȱ Einsatz,ȱ beiȱ denenȱ einȱ ständigerȱZugriffȱdurchȱnebenläufigeȱRequestsȱzuȱeinerȱenormenȱBelastungȱführenȱ kann.ȱȱ Derȱ Architektȱ einerȱ verteiltenȱ Anwendungȱ mussȱ hierȱ aufȱ dieȱ Leistungsfähigkeitȱ achtenȱundȱmöglichstȱZugriffeȱsowohlȱvomȱClientȱzuȱdenȱAnwendungsservernȱalsȱ auchȱvonȱdiesenȱzuȱdenȱDatenhaltungsservernȱvermeiden.ȱEineȱOptimierungsvariȬ anteȱistȱCaching.ȱCachingȱkannȱimȱServerȱerfolgenȱundȱzwarȱfürȱDaten,ȱdieȱsonstȱ vomȱDatenhaltungsserverȱbesorgtȱwerdenȱmüssten.ȱInȱdiesemȱFallȱkönnenȱClientȬ Requestsȱevtl.ȱohneȱZugriffȱaufȱdenȱDatenhaltungsserverȱbefriedigtȱwerden,ȱwennȱ dieȱgewünschtenȱDatenȱbereitsȱimȱCacheȱliegen.ȱDiesȱbringtȱbeiȱlesendemȱZugriffȱ Leistungsverbesserungen.ȱ Genausoȱ kannȱ manȱ imȱ Clientȱ Kopienȱ vonȱ bereitsȱ geleȬ senenȱ Datenȱ ebenfallsȱ inȱ einemȱ Cacheȱ verwalten.ȱ Benötigtȱ einȱ Clientȱ Daten,ȱ dieȱ schonȱ imȱ ClientȬCacheȱ gelagertȱ sind,ȱ spartȱ erȱ sichȱ denȱ Zugriffȱ überȱ dasȱ Netzȱ aufȱ denȱServer.ȱSinnvollerweiseȱwirdȱeinȱCacheȱimȱHauptspeicherȱverwaltet,ȱimȱClientȱ wäreȱ auchȱ nochȱ eineȱ verfügbareȱ Festplatteȱ nutzbar,ȱ wasȱ beiȱ sog.ȱ disklessȱ Clientsȱ nichtȱfunktioniert.ȱWebȬBrowserȱverfügenȱz.B.ȱüberȱeinenȱkonfigurierbarenȱCache.ȱ ZweiȱProblemeȱsindȱbeimȱCachingȱzuȱbedenken:ȱ
46 ȱ
2.1ȱȱClientȬServerȬModellȱ – ZumȱeinenȱistȱderȱHauptspeicherȱbegrenzt,ȱmanȱmussȱsichȱalsoȱbeimȱDesignȱ überlegen,ȱwelcheȱDatenȱmanȱimȱCacheȱhält.ȱEinȱErsetzungsalgorithmusȱwieȱ z.B.ȱLRUȱ(LeastȱRecentlyȱUsed)ȱmussȱimplementiertȱwerden.ȱ – Zumȱ anderenȱ kannȱ esȱ zuȱ Inkonsistenzenȱ kommen,ȱ wennȱ dieȱ imȱ Cacheȱ beȬ findlichenȱ Datenȱ anȱ Aktualitätȱ verlieren.ȱ Diesȱ kommtȱ vor,ȱ wennȱ andereȱ ClientsȱoderȱSystembausteineȱderȱAnwendungȱdieȱDatenȱimȱServerȱbzw.ȱinȱ derȱ Datenhaltungȱ verändern.ȱ Imȱ Serverȱ trittȱ diesesȱ Problemȱ nichtȱ beiȱ zuȬ standsinvarianten,ȱwohlȱaberȱbeiȱzustandsbehaftetenȱServernȱauf.ȱ Eineȱ komplexeȱ Lösungȱ fürȱ dasȱ Problemȱ ist,ȱ dassȱ manȱ z.B.ȱ einenȱ WriteȬThroughȬ Algorithmusȱimplementiert,ȱbeiȱdemȱÄnderungenȱ„gecachter“ȱDatenȱsofortȱanȱdenȱ Anwendungsserverȱ bzw.ȱ denȱ Datenhaltungsserverȱ weitergereichtȱ undȱ dannȱ anȱ alleȱ Cachesȱ propagiertȱ werden.ȱ Eineȱ vollständigeȱ Konsistenzȱ istȱ allerdingsȱ auchȱ hierȱschwerȱzuȱerreichen,ȱweshalbȱderȱAufwandȱnichtȱgerechtfertigtȱerscheint.ȱ AlsȱpraktischeȱEmpfehlungȱfürȱdieȱRealisierungȱvonȱClientȬServerȬAnwendungenȱ mitȱ Cachesȱ kannȱ gelten,ȱ dassȱ manȱ vorwiegendȱ Datenȱ inȱ denȱ Cacheȱ legt,ȱ dieȱ sichȱ nieȱoderȱsehrȱseltenȱändern.ȱSolltenȱSieȱsichȱaberȱdochȱändern,ȱsoȱdürfenȱdieȱÄndeȬ rungenȱkeineȱernstȱzuȱnehmendenȱKonsistenzproblemeȱverursachen.ȱȱ
2.1.4
Erweiterungen des Client-Server-Modells
Nachȱ (Bengelȱ 2004)ȱ unterscheidetȱ manȱ einigeȱ Variantenȱ undȱ Erweiterungenȱ desȱ ClientȬServerȬModells,ȱdieȱvorȱallemȱImplementierungsaspekteȱbeleuchten.ȱHierzuȱ gehörenȱderȱProxyȬServer,ȱderȱBroker,ȱderȱTrader,ȱderȱBalancerȱundȱderȱAgent:ȱ ProxyȬServer:ȱ ProxyȬServerȱ sindȱ Stellvertreter,ȱ dieȱ zwischenȱ denȱ Clientsȱ undȱ denȱ Servernȱliegen.ȱ EinȱProxyȱkannȱStellvertreterȱ fürȱ vieleȱ Serverȱseinȱ undȱ kannȱauchȱ vieleȱClientsȱbedienen.ȱClientsȱsendenȱihreȱRequestsȱanȱdenȱProxy,ȱderȱdieseȱevtl.ȱ direktȱ überȱ zusätzlicheȱ Logikȱ bearbeitenȱ kannȱ oderȱ dieȱ Anfrageȱ anȱ einenȱ oderȱ mehrereȱ Serverȱ weiterleitet.ȱ Mitȱ diesemȱ Modellȱ könnenȱ mehrereȱ Vorteileȱ erreichtȱ werden.ȱSoȱsindȱz.B.ȱClientȬAnwendungenȱeinfacherȱzuȱprogrammierenȱundȱhabenȱ nurȱeineȱVerbindungȱzuȱeinemȱProxyȬServerȱzuȱunterhalten.ȱDerȱProxyȬServerȱimȱ lokalenȱNetzȱkannȱmitȱzusätzlicherȱFunktionalitätȱausgestattetȱsein.ȱBeispielsweiseȱ kannȱ erȱ fürȱ alleȱ Clientsȱ einenȱ gemeinsamenȱ Cacheȱ verwaltenȱ undȱ manȱ spartȱ sichȱ denȱ möglicherweiseȱ aufwändigenȱ Zugriffȱ aufȱ entfernteȱ Server.ȱ ProxyȬServerȱ dieȬ nenȱalsoȱderȱLeistungsoptimierung.ȱWeiterhinȱkannȱimȱProxyȱauchȱFunktionalitätȱ etwaȱ fürȱ Loggingȱ undȱ Sicherheitȱ hinterlegtȱ werden.ȱ Typischerȱ Einsatzfallȱ einesȱ ProxyȬServersȱistȱdasȱWWW.ȱProxyȬWebserverȱspeichernȱlokalȱKopienȱvonȱbereitsȱ gelesenenȱHTMLȬSeitenȱinȱihremȱCacheȱundȱstellenȱsieȱallenȱWebȬClientsȱfürȱweiȬ tereȱ Zugriffeȱ zurȱ Verfügung.ȱ Beiȱ diesenȱ ProxyȬServernȱ gibtȱ esȱ natürlichȱ auchȱ Schwierigkeiten.ȱ Beispielsweiseȱ dürfenȱ dynamischȱ vonȱ Webanwendungenȱ aufgeȬ bauteȱ Webseitenȱ nichtȱ „gecachet“ȱ werden,ȱ daȱ sieȱ beimȱ nächstenȱ Zugriffȱ evtl.ȱ anȬ dersȱaussehen.ȱSinnvollȱistȱCachingȱhierȱfürȱstatischeȱSeiten.ȱDynamischeȱWebanȬ wendungenȱschaltenȱ dasȱCachingȱfürȱihreȱ HTMLȬSeitenȱ aus,ȱ wasȱ überȱ eineȱ ParaȬ
ȱ
47
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ metrisierungsmöglicheitȱimȱverwendetenȱHTTPȬProtokollȱmöglichȱist.ȱVerantwortȬ lichȱsindȱdafürȱdieȱAnwendungsprogrammierer.ȱ Broker:ȱEinȱ Brokerȱ verwaltetȱ dieȱ Informationenȱ überȱ dieȱ richtigenȱ Serveradressenȱ undȱkannȱalsȱVermittlerȱ(daherȱderȱNameȱBroker)ȱauftreten.ȱHierfürȱmussȱerȱeineȱ eigeneȱDatenbasisȱpflegen.ȱBeiȱZwischenschaltenȱeinesȱBrokersȱmüssenȱdieȱClientsȱ nichtȱ mehrȱ wissen,ȱ woȱ dieȱ benötigtenȱ Serverȱ laufen.ȱ Brokerȱ tragenȱ damitȱ zurȱ Ortstransparenzȱbei.ȱAberȱauchȱzurȱMigrationstransparenzȱkannȱeinȱBrokerȱbeitraȬ gen.ȱ Sollteȱ einȱ Serverȱ ausȱ irgendeinemȱ Grundȱ dasȱ Rechnersystemȱ wechselnȱ müsȬ sen,ȱ kannȱ diesȱ inȱ derȱ Datenbasisȱ desȱ Brokersȱ verändertȱ ȱ werdenȱ undȱ dieȱ Clientsȱ merkenȱ nichtsȱ davon. 2ȱZusätzlichȱ istȱ auchȱ einȱ mehrfachesȱ Startenȱ einesȱ Serversȱ möglich,ȱsofernȱderȱBrokerȱeineȱgewisseȱLogikȱzurȱVerteilungȱderȱRequestsȱunterȬ stützt.ȱEinȱClientȱmussȱdannȱgarȱnichtȱwissen,ȱwieȱvieleȱServerinstanzenȱaktivȱsindȱ (Replikationstransparenz).ȱ Trader:ȱ Einȱ Traderȱ dientȱ derȱ Auswahlȱ einesȱ Serversȱ nachȱ einemȱ bestimmtenȱ ReȬ gelwerkȱ ausȱ einerȱ Mengeȱ vonȱ Servern,ȱ dieȱ jeweilsȱ denȱ gleichenȱ Dienstȱ anbieten,ȱ aberȱ mitȱ unterschiedlichenȱ Eigenschaftenȱ (z.B.ȱ Qualitätsunterschiede).ȱ Dieȱ Logikȱ derȱAuswahlȱ mussȱdannȱnichtȱ imȱ Clientȱ programmiertȱ werden,ȱsondernȱ kannȱ eiȬ nerȱ dediziertenȱ Instanz,ȱ demȱ Trader,ȱ überlassenȱ werden.ȱ Dasȱ TraderȬModellȱ entȬ sprichtȱ imȱ Wesentlichenȱ demȱ BrokerȬModellȱ mitȱ einemȱ Unterschied.ȱ Derȱ Traderȱ hatȱ zusätzlichȱ dieȱ Aufgabe,ȱ einenȱ geeignetenȱ Serviceȱ auszuwählen.ȱ Hierzuȱ benöȬ tigtȱerȱvomȱClientȱInformationenȱüberȱdenȱgewünschtenȱServiceȱundȱdessenȱChaȬ rakteristik.ȱEsȱkannȱnatürlichȱaufȱGrundȱdesȱzentralenȱAnsatzesȱauchȱhierȱzuȱeinemȱ Flaschenhalsȱkommen,ȱderȱentsprechendȱberücksichtigtȱwerdenȱmuss.ȱ Balancer:ȱ Leistungsaspekteȱ sprechenȱ inȱ ClientȬServerȬAnwendungenȱ oftȱ dafür,ȱ eineȱweitereȱserverseitigeȱTechnik,ȱdenȱsog.ȱBalancerȱzuȱverwenden.ȱInȱdiesemȱFallȱ werdenȱServerȱrepliziertȱundȱderȱBalancerȱverteiltȱgemäßȱeinerȱgeeignetenȱStrateȬ gieȱ dieȱ Requestsȱ aufȱ dieȱ Serverinstanzen.ȱ Eineȱ einfacheȱ Strategieȱ istȱ z.B.ȱ dasȱ ausȱ demȱ Prozessschedulingȱ inȱBetriebssystemenȱ bekannteȱRoundȬRobinȬVerfahren,ȱ inȱ demȱ dieȱ Serverȱ derȱ Reiheȱ nachȱ zugeordnetȱ werden.ȱ Aberȱ auchȱ dieȱ Nutzungȱ beȬ stimmterȱMetrikenȱwieȱdieȱaktuelleȱNetzbelastung,ȱdieȱBandbreiteȱdesȱNetzwerkȬ zugangs,ȱdieȱRechnerausstattungȱderȱServerrechnerȱusw.ȱsindȱmöglich.ȱDerȱBalanȬ cerȱ sollȱ fürȱ eineȱ möglichstȱ guteȱ Auslastungȱ imȱ Sinneȱ derȱ vorgegebenenȱ Strategieȱ sorgen.ȱȱ EineȱMischungȱvonȱBrokerȬ,ȱTraderȬȱundȱBalancerȬFunktionalitätȱistȱauchȱmöglichȱ undȱ natürlichȱ kannȱ einȱ Balancerȱauchȱzumȱ Engpassȱ werden.ȱ Balancerȱ findetȱmanȱ inȱvielenȱMiddlewareȬImplementierungenȱundȱheuteȱauchȱzunehmendȱimȱWebȱzurȱ UnterstützungȱstarkȱfrequentierterȱWebsites.ȱȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 2
ȱ
DieȱClientsȱbemerkenȱesȱnatürlich,ȱwennȱdurchȱeineȱMigrationȱeinesȱServersȱeinȱRequestȱ unterbrochenȱwird.ȱ
48 ȱ
2.1ȱȱClientȬServerȬModellȱ GroßeȱWebanwendungenȱwerdenȱmeistȱdurchȱmehrereȱWebserverȱbedient,ȱdenenȱ einȱBalancerȱ(manchmalȱauchȱDispatcherȱgenannt)ȱvorgeschaltetȱist.ȱDiesȱkannȱz.B.ȱ einȱ speziellerȱ HardwareȬBalancerȱ sein,ȱ alsoȱ einȱ Webserverȱ mitȱ dedizierterȱ HardȬ wareȱ (sieheȱ Abbildungȱ 2Ȭ9),ȱ derȱ aufȱ dieȱ zugeordnetenȱ Webserverȱ z.B.ȱ überȱ eineȱ RoundȬRobinȬStrategieȱ verteilt.ȱ Intelligentereȱ Verfahrenȱ beziehenȱ bestimmteȱ MetȬ rikenȱ wieȱ dieȱ aktuelleȱ Serverauslastung,ȱ dieȱ Größeȱ derȱ Serverrechner,ȱ dieȱ AntȬ wortzeitȱdesȱServersȱȱusw.ȱmitȱein.ȱȱ Balancer verteilt eingehende HTTP-Requests
Replizierte Webserver, die alle dieselben Webseiten erzeugen können WebContent
Balancer
Requests werden nach der Round-RobinMethode behandelt
HTTP-Request
Internet
ȱ Abbildungȱ2Ȭ9:ȱBalancerȬEinsatzȱimȱWebȱ
EineȱandereȱVariante,ȱdieȱinȱdiesemȱZusammenhangȱverwendetȱwird,ȱistȱdasȱDNSȬ basierteȱ RoundȬRobinȬVerfahren,ȱ dasȱ MehrfachȬDNSȬEinträgeȱ fürȱ dieselbeȱ IPȬ Adresseȱnutzt.ȱMehrereȱWebserverrechnerȱbekommenȱdieȱgleicheȱIPȬAdresseȱundȱ dieȱZuteilungȱeinesȱRequestsȱerfolgtȱdynamischȱdurchȱdenȱDomainȱNameȱService.ȱ DNSȱübergibtȱbeiȱjederȱAnfrageȱzurȱAuflösungȱeinesȱHostnamensȱdieȱnächsteȱIPȬ Adresseȱ inȱ derȱ konfiguriertenȱ Adresslisteȱ zurückȱ undȱ fängtȱ amȱ Endeȱ derȱ Listeȱ wiederȱ amȱ Anfangȱ an.ȱ Nachteiligȱ anȱ diesemȱ Verfahrenȱ ist,ȱ dassȱ dieȱ DNSȬServerȱ nichtsȱüberȱdenȱAusfallȱeinesȱServersȱerfahrenȱundȱdiesemȱtrotzdemȱeinenȱRequestȱ zuordnen.ȱ Diesesȱ Verfahrenȱ wirdȱ eherȱ fürȱ statischeȱ Webseitenȱ verwendetȱ undȱ wirdȱauchȱalsȱLoadȱSharingȱaufȱBasisȱvonȱDNSȱbezeichnet.ȱȱ Agent:ȱSchließlichȱ sollȱ nochȱ dasȱ Konzeptȱ desȱ Agentenȱ erwähntȱ werden.ȱ Agentenȱ sindȱz.B.ȱsinnvoll,ȱwennȱmanȱeineȱkomplexeȱServiceleistungȱabwickelnȱmöchte,ȱdieȱ mehrereȱServerȱbeansprucht.ȱUmȱdenȱClientȱzuȱentlastenȱkannȱmanȱeinenȱAgentenȱ vorschalten,ȱderȱdenȱkomplexenȱRequestȱentgegennimmtȱundȱihnȱüberȱdieȱKontakȬ tierungȱ mehrererȱ Serverȱ beantwortet.ȱ Dieȱ Ausführungȱ derȱ Requestsȱ durchȱ denȱ Agentenȱkannȱiterativȱ(nacheinander)ȱoderȱparallelȱerfolgen.ȱDerȱClientȱwirdȱdurchȱ einenȱ Agentenȱ starkȱ entlastetȱ undȱ mussȱ keineȱ Kenntnisseȱ überȱ dieȱ Serverȱ haben.ȱ
ȱ
49
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ Dasȱ DNSȱ istȱ z.B.ȱ eineȱ typischeȱ ClientȬServerȬAnwendungȱ mitȱ AgentenȬFunktioȬ nalität,ȱ daȱ derȱ zuständigeȱ DNSȬServerȱ weitereȱ DNSȬServerȱ kontaktiert,ȱ umȱ dieȱ entsprechendeȱ Adressumsetzungȱ durchzuführenȱ (Mandlȱ 2008b).ȱ Eineȱ andereȱ AnȬ wendungȱ vonȱ Agentenȱ istȱ inȱ SNMPȱ (Simpleȱ Networkȱ Managementȱ Protocol)ȱ zuȱ finden.ȱ Hierȱ werdenȱ SNMPȬRequestsȱ vomȱ SNMPȬClientȱ abgesetztȱ undȱ anȱ einenȱ Agentenȱ inȱ einemȱ Rechnersystemȱ oderȱ einȱ sonstigesȱ Gerätȱ gesendet.ȱ Derȱ Agentȱ wickeltȱdenȱRequestȱimȱZielsystemȱabȱundȱmeldetȱdasȱErgebnisȱzurück.ȱAuchȱimȱ Internetȱ werdenȱ intelligenteȱ Agentenȱ z.B.ȱ fürȱ dieȱ Ermittlungȱ einerȱ bestimmtenȱ Informationȱ(Reiseplanung)ȱimmerȱinteressanter.ȱ
2.2 Verteilte Prozeduraufrufe 2.2.1
Grundlegendes Modell
Verteilteȱ Prozeduraufrufe,ȱ üblicherweiseȱ auchȱ Remoteȱ Procedureȱ Callȱ (RPC)ȱ geȬ nannt,ȱ sindȱ eineȱ derȱ ältestenȱ Implementierungenȱ desȱ ClientȬServerȬModells.ȱ Derȱ AblaufȱeinesȱRPCȬAufrufsȱistȱinȱAbbildungȱ2Ȭ10ȱschematischȱdargestellt.ȱImȱClientȬ rechnerȱ sindȱ dasȱ eigentlicheȱ Anwendungsprogrammȱ undȱ einigeȱ MiddlewareȬ Komponentenȱ vorhanden.ȱ Zurȱ Middlewareȱ gehörenȱ einȱ sog.ȱ ClientȬStubȱ undȱ eineȱ Kommunikationskomponente.ȱImȱServerȱsindȱebenfallsȱalsȱBestandteilȱderȱMiddlewaȬ reȱeineȱentsprechendeȱKommunikationskomponenteȱsowieȱeinȱServerȬStubȱvorhanȬ den.ȱ Schließlichȱ istȱ aufȱ derȱ Serverseiteȱ dasȱ Codingȱ derȱ Anwendungslogikȱ fürȱ dieȱ entfernteȱProzedurȱimplementiert.ȱ Inȱ derȱ Abbildungȱ istȱ zuȱ erkennen,ȱ dassȱ dasȱ clientseitigeȱ Anwendungsprogrammȱ einenȱProzeduraufrufȱzunächstȱlokalȱanȱdenȱClientȬStubȱübergibtȱundȱdieserȱüberȱ dieȱKommunikationskomponente,ȱdieȱeinȱinternesȱProtokollȱbenutzt,ȱmitȱdemȱSerȬ verȱ kommuniziert.ȱ Derȱ Clientȱ istȱ blockiertȱ bisȱ dieȱ Antwortȱ desȱ Serversȱ ankommt.ȱ EsȱhandeltȱsichȱvonȱderȱKommunikationsformȱherȱumȱeinenȱsynchronen,ȱentfernȬ tenȱ Dienstaufrufȱ (auftragsbezogen).ȱ Beiȱ einigenȱ RPCȬImplementierungenȱ istȱ auchȱ einȱasynchronerȱDienstaufrufȱmöglich.ȱInȱdiesemȱFallȱmussȱderȱClientȱnachfragenȱ können,ȱobȱderȱDienstaufrufȱschonȱausgeführtȱist.ȱ
50 ȱ
2.2ȱȱVerteilteȱProzeduraufrufeȱ Clientrechner
Serverrechner
Anw.programm
ClientStub
Prozeduraufruf
Aufrufkodierung
Komm.komponente Aufrufübertragung
Netz
Komm.Komponente
ServerStub
Aufrufempfang
Aufrufdekodierung
Prozedur Prozeduraufruf
Warten Abarb.
Ergebnisrückgabe
Ergebnisdekodierung
Ergebnisempfang
Ergebnisübertragung
Ergebniskodierung
Ergebnisrückgabe
ȱ
Abbildungȱ2Ȭ10:ȱSchematischerȱAblaufȱeinesȱRemoteȱProcedureȱCallsȱnachȱ(Schillȱ2007)ȱ
ClientȬȱundȱServerȬStubȱübernehmenȱdieȱAufbereitungȱderȱzuȱübermittelndenȱPaȬ rameterȱ undȱ Returnwerte.ȱ Wieȱ bereitsȱ besprochen,ȱ nenntȱ manȱ diesenȱ Vorgangȱ auchȱ Marshallingȱbzw.ȱUnmarshallingȱ oderȱ etwasȱ verwirrendȱ Kodierungȱbzw.ȱDekoȬ dierungȱ oderȱ auchȱ Serialisierungȱ bzw.ȱ Deserialisierung.ȱ Alleȱ Objekte,ȱ dieȱ mitȱ demȱ Requestȱbzw.ȱdemȱErgebnisȱalsȱParameterȱoderȱalsȱReturnwertȱübertragenȱwerden,ȱ werdenȱaufȱeineȱunabhängigeȱTransfersyntaxȱabgebildet,ȱdieȱdannȱaufȱderȱGegenȬ seiteȱwiederȱinȱeineȱdortȱverständlicheȱlokaleȱSyntaxȱgebrachtȱwird.ȱ InȱAbbildungȱ2Ȭ11ȱistȱdargestellt,ȱwasȱinȱdenȱeinzelnenȱRechnersystemenȱallesȱabȬ laufenȱmuss,ȱwährendȱderȱRPCȬAufrufȱbearbeitetȱwird.ȱVielesȱläuftȱimȱKernelȱab,ȱ daȱjaȱauchȱdasȱTransportsystemȱmeistȱeinȱBestandteilȱdesȱBetriebssystemsȱist.ȱInteȬ ressantȱistȱauch,ȱdassȱderȱAufrufȱinȱderȱRegelȱüberȱeinenȱSystemcallȱzuȱeinemȱKonȬ textwechselȱführtȱ(Mandlȱ2008a).ȱDazuȱmussȱvomȱUsermodusȱinȱdenȱKernelmodusȱ gewechseltȱ werden.ȱ Imȱ Kernelȱ wirdȱ dieȱ Nachrichtȱ überȱ dasȱ Netzwerkȱ gesendetȱ undȱ aufȱ dieȱ Antwortȱ gewartet.ȱ Damitȱ wirdȱ dannȱ auchȱ derȱ aktuelleȱ Prozessȱ susȬ pendiert.ȱErȱmussȱwarten,ȱbisȱdasȱErgebnisȱvomȱServerȱempfangenȱwird.ȱBisȱdahinȱ kannȱderȱDispatcherȱdesȱBetriebssystemsȱeinenȱanderenȱProzessȱoderȱThreadȱaktiȬ vieren.ȱWennȱdasȱErgebnisȱankommt,ȱwirdȱderȱanforderndeȱProzessȱerstȱwiederȱinȱ denȱZustandȱ„ready“ȱgesetzt.ȱ
ȱ
51
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ Serverrechner
Clientrechner Stubprozedur rufen Nachrichtenpuffer vorbereiten Parameter in Puffer schreiben Header einfüllen Kernaufruf Kontextwechsel in den Kern Nachricht in den Kern kopieren Zieladresse bestimmen Adresse in Header packen Netzwerkschnittstelle aktivieren Timer starten
Client/Server
Stubs
BS-Kern
Prozedur ausführen Server aufrufen Parameter auf den Stack legen Parameter extrahieren
Kontextwechsel zum Serverstub Nachricht an Serverstub übergeben Wartet Serverstub? Welcher Stub ist gemeint? Paketgültigkeit prüfen Prozessinterrupt
ȱ Abbildungȱ2Ȭ11:ȱAblaufȱeinesȱRPCȬAufrufsȱnachȱ(Weberȱ1998)ȱ
Beiȱ RPCȱ wirdȱ derȱ fürȱ dasȱ Bindenȱ verantwortlicheȱ Softwarebausteinȱ ebenfallsȱ alsȱ Binderȱbezeichnet.ȱDerȱServerȱmussȱsichȱbeimȱStartȱbeiȱdiesemȱregistrierenȱundȱvorȱ demȱBeendenȱabmelden.ȱHierzuȱsindȱspezielleȱNachrichtenȱbzw.ȱFunktionsaufrufeȱ definiert.ȱȱ WirȱwerdenȱnunȱdasȱKonzeptȱdesȱRPCȱanhandȱderȱRPCȬImplementierungȱvonȱSunȱ (ONCȱRPC)ȱnochȱnäherȱbeleuten.ȱ
2.2.2
Fallbeispiel ONC RPC von Sun
Esȱ gibtȱ einigeȱ praxisrelevanteȱ RPCȬImplementierungen.ȱ Dieȱ bekanntesteȱ istȱ Sunȱ RPCȱbzw.ȱONCȱRPC.ȱONCȱstehtȱfürȱOpenȱNetworkȱComputing,ȱeineȱverteilteȱArȬ chitekturȱvonȱSunȱMicrosystems.ȱAuchȱdasȱheuteȱnichtȱmehrȱsoȱbedeutendeȱDCEȱ RPC3ȱtrugȱzurȱ Weiterentwicklungȱ vonȱRPCȱ bei.ȱ Wirȱwollenȱ nunȱeineȱ Einordnungȱ vonȱONCȱRPCȱanhandȱunsererȱKriterienlisteȱvornehmen:ȱ
Architektur Abbildungȱ 2Ȭ12ȱ zeigtȱ dieȱ Architekturȱ einerȱ ClientȬServerȬAnwendung,ȱ dieȱ ONCȱ RPCȱ nutzt.ȱ Aufsetzendȱ aufȱ demȱ Transportsystemȱ (TCPȱ oderȱ UDP)ȱ istȱ einȱ RPCȬ Protokollȱdefiniert,ȱdasȱfürȱdieȱNachrichtenübertragungȱzuständigȱist.ȱSowohlȱderȱ ClientȱalsȱauchȱderȱServerȱmüssenȱStubȬProzedurenȱundȱMarshallingȬ/UnmarshalȬ lingȬRoutinenȱ einbinden.ȱ Einȱ Serverȱ istȱ einȱ Betriebssystemprozess,ȱ derȱ dieȱ LaufȬ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 3
ȱ
DCEȱ=ȱDistributedȱComputingȱEnvironmentȱwurdeȱvonȱderȱOpenȱSoftwareȱFoundationȱ (heuteȱOpenȱGroup)ȱalsȱherstellerunabhängigeȱLösungȱkonzipiert,ȱbevorȱCORBAȱeingeȬ führtȱwurde.ȱȱ
52 ȱ
2.2ȱȱVerteilteȱProzeduraufrufeȱ zeitumgebungȱfürȱeinenȱoderȱmehrereȱServerbausteine,ȱdieȱServicesȱrepräsentieren,ȱ bereitstellt.ȱ Dieȱ überȱ RPCȱ zugänglichenȱ Servicesȱ sindȱ inȱ Programmeȱ undȱ dieseȱ wiederumȱinȱVersionenȱorganisiert.ȱJederȱVersionȱsindȱdieȱaufrufbarenȱentferntenȱ Prozedurenȱ zugeordnet.ȱ Einȱ Serviceȱ wirdȱ alsoȱ inȱ einemȱ Serverbausteinȱ bereitgeȬ stelltȱundȱwirdȱdurchȱeinȱBündelȱvonȱProgrammen,ȱeventuellȱinȱmehrerenȱVersioȬ nen,ȱ bestehendȱ ausȱ jeweilsȱ mehrerenȱ Prozedurenȱ (sieheȱ Abbildungȱ 2Ȭ13)ȱ impleȬ mentiert.ȱȱ Server-Hauptprogramm (main) Client-Hauptprogramm (main) Marshalling und UnmarshallingRoutinen
ClientStubProzedur
Marshalling und UnmarshallingRoutinen
ServerStubProzedur
Dispatcher
RPC-Protokoll Transportsystem (TCP oder UDP)
ȱ Abbildungȱ2Ȭ12:ȱSunȬONCȬRPCȬArchitekturȱ
BeiȱSunȱRPCȱverwendetȱmanȱfürȱdieȱBeschreibungȱderȱSchnittstelleȱ(desȱDienstes)ȱ eineȱ Schnittstellensprache,ȱ kurzȱ XDRȬȱ oderȱ RPCȬSpracheȱ genannt.ȱ XDRȱ (eXternalȱ Dataȱ Representation)ȱ nutztȱ dasȱ sog.ȱ impliziteȱ Typing,ȱ d.h.ȱ nurȱ dieȱ Werteȱ werdenȱ versendet,ȱnichtȱderȱVariablentyp.ȱParameterȱwerdenȱauchȱohneȱweitereȱZusatzinȬ formationȱmitȱdemȱRPCȬRequestȱgesendet.ȱDasȱTypensystemȱderȱXDRȬSpracheȱistȱ demȱCȬTypensystemȱrelativȱähnlich.ȱ Programm 1 Version 1
Programm 2 Version 2
Prozedur 1
Prozedur 1
Prozedur 2
Prozedur 2
Prozedur n
Prozedur n
...
ȱ Abbildungȱ2Ȭ13:ȱOrganisationȱderȱServicesȱinȱSunȱONCȱRPCȱ
ONCȱ RPCȱ unterscheidetȱ zweiȱ verschiedeneȱ APIȬKomplexitätsstufen,ȱ dieȱ inȱ derȱ ONCȬLibraryȱalsȱCȬRoutinenȱbereitgestelltȱwerden.ȱDieȱersteȱStufe,ȱauchȱalsȱHighȬ LevelȬAPIȱ bezeichnet,ȱ ermöglichtȱ eineȱ weitgehendȱ automatisierteȱ Erzeugungȱ vonȱ
ȱ
53
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ CodesȱfürȱdasȱMarshalling/UnmarshallingȱundȱfürȱdieȱClientȬServerȬKommunikaȬ tion.ȱManȱkommtȱbeiȱderȱEntwicklungȱsowohlȱclientȬȱalsȱauchȱserverseitigȱmitȱnurȱ wenigenȱFunktionsaufrufenȱaus.ȱEinȱServerȱregistriertȱseineȱDiensteȱmitȱderȱFunkȬ tionȱ registerrpcȱundȱspringtȱ dannȱ mitȱ svc_runȱ inȱ dasȱ RPCȬLaufzeitsystem,ȱ dasȱ serȬ verseitigȱdieȱKontrolleȱübernimmt.ȱ WennȱmanȱspezielleȱLösungenȱentwickelnȱmöchte,ȱsoȱkannȱmanȱdiesȱdurchȱEigenȬ entwicklungȱunterȱNutzungȱderȱLowȬLevelȬAPIȱerreichen.ȱBeispieleȱfürȱAufgabenȬ stellungen,ȱdieȱmanȱmitȱderȱLowȬLevelȬAPIȱrealisierenȱkann,ȱsindȱasynchronȱausȬ zuführendeȱRemoteȬProcedureȬCallsȱsowieȱnebenläufigeȱServerbausteine.ȱ Wirȱ wollenȱ nunȱ eineȱ Einordnungȱ vonȱ ONCȱ RPCȱ anhandȱ unsererȱ Kriterienlisteȱ vornehmen:ȱ
Zustandsverwaltung Fürȱ dieȱ Zustandsverwaltungȱ gibtȱ esȱ keinerleiȱ Unterstützungȱ beiȱ ONCȱ RPC.ȱ Dieȱ Zustandsverwaltungȱ undȱ damitȱ dieȱ Programmierungȱ vonȱ zustandslosenȱ oderȱ zustandsbehaftetenȱServerbausteinenȱobliegenȱalleinȱdemȱProgrammierer.ȱ
Dienstschnittstellen AusgehendȱvonȱeinerȱSchnittstellenbeschreibungȱwerdenȱderȱClientȬȱundȱderȱSerȬ verȬStubȱsowieȱeinȱHeaderfileȱundȱXDRȬFilterȱerzeugt.ȱEbensoȱwerdenȱXDRȬFilterȱ fürȱdasȱMarshallingȬ/UnmarshallingȱderȱeigenenȱDatentypenȱgeneriert.ȱDieȱGeneȬ rierungȱerfolgtȱmitȱdemȱBasistoolȱrpcgenȱinȱdieȱZielspracheȱC.ȱ Beispielȱ„KundenobjektȱalsȱXDRȬSchnittstelle“:ȱEinȱKundenobjektȱkönnteȱinȱXDRȬ Spracheȱ wieȱ folgtȱ beschriebenȱ werden,ȱ wobeiȱ dieȱ Definitionenȱ z.B.ȱ inȱ einerȱ Dateiȱ kunde.xȱabgelegtȱwerdenȱkönnen:ȱ const MAX = 30; struct Kunde { string name; /* String mit maximaler Länge */ string vorname; int customerId; }; program KUNDENDIENSTE { /* Frei zu vergebender Programmname */ version VERSION { void createCustomer(Kunde customer); int getCustomerId(string name)=1; string getName(int customerId)=2; string getVorname(int customerId)=3; }=20000001; }=5000;
54 ȱ
2.2ȱȱVerteilteȱProzeduraufrufeȱ Wieȱmanȱsieht,ȱgibtȱesȱinȱderȱXDRȬSpracheȱkeineȱObjektklassen.ȱDieȱDatenstruktuȬ renȱundȱdieȱProzedurenȱsindȱdaherȱgetrenntȱdefiniert.ȱDieȱStrukturȱKundeȱenthältȱ dieȱDatenȱeinesȱKundenȱundȱinȱdemȱAbschnitt,ȱderȱmitȱȱprogramȱbeginnt,ȱsindȱdieȱ entferntenȱDiensteȱ(remoteȱprocedures)ȱdefiniert.ȱWieȱmanȱsieht,ȱwurdeȱeinȱDienstȱ createCustomerȱ alsȱ „Konstruktorersatz“ȱ sowieȱ einȱ weitererȱ Dienstȱ getCustomerIdȱ definiert.ȱLetztererȱdientȱfürȱdenȱZugriffȱaufȱdieȱVariableȱcustomerId.ȱȱ Beiȱ derȱ Beschreibungȱ derȱ Diensteȱ werdenȱ eineȱ ProgrammȬȱ undȱ eineȱ VersionsȬ nummerȱangegeben.ȱDieȱNotationȱhierfürȱistȱetwasȱgewöhnungsbedürftig.ȱImȱBeiȬ spielȱwerdenȱdieȱProgrammnummerȱmitȱ5000ȱundȱdieȱVersionsnummerȱmitȱ2ȱbeȬ legt.ȱDieȱProzedurenȱsindȱmitȱ1ȱbisȱ3ȱdurchnummeriert.ȱDieseȱInformationenȱwerȬ denȱmitȱentsprechendenȱRPCȬPDUsȱgesendet,ȱsoȱdassȱderȱjeweiligeȱEmpfängerȱdieȱ Nachrichtenȱ prüfenȱ kann.ȱ Jedeȱ Prozedurȱ erhältȱ zudemȱ eineȱ Prozedursignaturȱ beȬ stehendȱausȱdemȱErgebnistyp,ȱdemȱProzedurnamenȱundȱdemȱTypȱdesȱEingabepaȬ rameters.ȱ ONCȱ RPCȱ erlaubtȱ demȱ Anwendungsprogrammiererȱ Programmnummernȱ zwiȬ schenȱ 0x20000000ȱ undȱ 0x3FFFFFFF,ȱ dieȱ anderenȱ sindȱ reserviert.ȱ Überȱ dieȱ NumȬ mernȱ registriertȱ derȱ Serverȱ seineȱ Servicesȱ undȱ darüberȱ kannȱ einȱ Serviceȱ auchȱ adȬ ressiertȱ werden.ȱ Beispieleȱ fürȱ reservierteȱ Programmnummernȱ sindȱ 0x100000ȱ fürȱ denȱ Portmapperȱ (sieheȱ unten),ȱ 0x10003ȱ fürȱ NFSȱ (Networkȱ Fileȱ System),ȱ sowieȱ 0x10004ȱfürȱNISȱ(NetworkȱInformationȱService).ȱ ManȱkannȱsichȱnunȱaufȱBasisȱderȱXDRȬSpracheȱeineȱentfernteȱSchnittstelleȱfastȱbeȬ liebigerȱ Komplexitätȱ definieren.ȱ Jeȱ Prozedurȱ werdenȱ allerdingsȱ nurȱ einȱ einzigerȱ EingabeȬȱ undȱ einȱ Returnwertȱ erlaubt.ȱ Manȱ mussȱ ggf.ȱ Strukturenȱ definieren,ȱ umȱ mehrereȱ Parameterȱ unterzubringen.ȱ Dieȱ Spracheȱ unterstütztȱ u.a.ȱ Konstanten,ȱ TyȬ pendefinitionenȱ(typedefsȱwieȱinȱC),ȱStrukturen,ȱAufzählungstypenȱ(wieȱinȱC)ȱundȱ Unionsȱ(wieȱinȱC).ȱ
Parameterübergabe DieȱÜbergabeȱderȱParameterȱundȱReturnwerteȱerfolgtȱbeiȱONCȱRPCȱausschließlichȱ überȱCallȬbyȬvalue,ȱalsoȱalsȱKopienȱderȱlokalenȱParameter.ȱ
Marshalling und Unmarshalling Mitȱ demȱ Toolȱ rpcgenȱ (RPCȬCompiler)ȱ wirdȱ zumȱ einenȱ derȱ gesamteȱ MarshallingȬ/ȱ UnmarshallingȬCodeȱfürȱdenȱClientȬȱundȱfürȱdenȱServerȱsowieȱderȱClientȬȱundȱderȱ ServerȬStubȱ generiert.ȱ Weiterhinȱ werdenȱ einȱ Grundgerüstȱ fürȱ eineȱ serverseitigeȱ mainȬProzedurȱ undȱ einȱ RequestȬDispatcherȱ erzeugt.ȱ Dieȱ Codegenerierungȱ erfolgtȱȱ inȱ derȱ Spracheȱ C.ȱ Dieȱ Anwendungslogikȱ fürȱ dieȱ serverseitigenȱ Prozedurenȱ mussȱ nochȱausprogrammiertȱwerden.ȱDieȱgeneriertenȱCodeteileȱsindȱdannȱmitȱeinemȱCȬ Compilerȱ zuȱ übersetzen.ȱ Derȱ generierteȱ MarshallingȬ/UnmarshallingȬCodeȱ wirdȱ aufȱ dieȱ Standarddatentypenȱ zurückgeführt.ȱ Fürȱ jedenȱ Standarddatentypenȱ wirdȱ eineȱ Basisroutineȱ zurȱ KodierungȬȱ undȱ Dekodierungȱ bereitgestellt.ȱ Diesȱ sollȱ amȱ BeispielȱdesȱTypsȱintȱdargestelltȱwerden:ȱ
ȱ
55
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ bool_t xdr_int(xdrs, objp) XDR *xdrs; int *objp; { … }4
Dieȱ Prozedursignaturenȱ derȱ XDRȬFilterȱ sindȱ immerȱ gleichȱ aufgebaut.ȱ xdrsȱ istȱ einȱ Zeigerȱ aufȱ einenȱ offenenȱXDRȬStream,ȱ inȱ denȱ dieȱ serialisiertenȱDatenȱ geschriebenȱ werdenȱbzw.ȱausȱdemȱDatenȱdeserialisiertȱwerden.ȱobjpȱistȱebenfallsȱeinȱZeiger,ȱderȱ aufȱ einenȱ Speicherbereichȱ zeigt,ȱ inȱ demȱ einȱ IntegerȬWertȱ Platzȱ hat.ȱ Dieȱ Routineȱ wirdȱsowohlȱfürȱdieȱKodierungȱalsȱauchȱfürȱdieȱDekodierungȱverwendet.ȱImȱerstenȱ FallȱschreibtȱdieȱRoutineȱdenȱkodiertenȱWertȱanȱdenȱSpeicherbereich,ȱaufȱdenȱobjpȱ zeigt.ȱ Imȱ zweitenȱ Fallȱ wirdȱ derȱ Wertȱ anȱ dieserȱ Speicherstelleȱ erwartet.ȱ Weitereȱ XDRȬFilterfunktionenȱ sindȱ z.B.ȱ xdr_long,ȱ xdr_bool,ȱ xdr_double,ȱ xdr_enumȱ usw.ȱ Alsȱ Rückgabewertȱ wirdȱ trueȱ oderȱ falseȱ zurückgegeben,ȱ jeȱ nachdemȱ obȱ derȱ Aufrufȱ erȬ folgreichȱwarȱoderȱnicht.ȱ Beispielȱ 1:ȱ Derȱ durchȱ rpcgenȱ erzeugteȱ Codeȱ fürȱ dieȱ Kodierung/Dekodierungȱ derȱ StrukturȱKundeȱsiehtȱwieȱfolgtȱaus:ȱ #include
/* Basistypen und Definitionen der Basisfunktionen */
#include “xdr_kunde.h” bool_t xdr_Kunde(xdrs, objp) XDR *xdrs; int *objp; { if (!xdr_string(xdrs, &objp->name,30)) /* Länge ! */{ return (FALSE); } if (!xdr_string(xdrs, &objp->vorname,30)) /* Länge ! */{ return (FALSE); } if (!xdr_int(xdrs, &objp->customerId)) { return (FALSE); } return (TRUE) /* Alle Prüfungen in Ordnung! */ }
Manȱ sieht,ȱ dassȱ eineȱ Codegenerierungȱ fürȱ Filterȱ hierȱ überȱ klarȱ definierteȱ Regelnȱ ermöglichtȱ wirdȱ undȱ daherȱ auchȱ sehrȱ sinnvollȱ ist.ȱ Einȱ weiteres,ȱ einfaches,ȱ aberȱ umfassendesȱBeispielȱsollȱdieȱProblematikȱnochȱweiterȱveranschaulichen.ȱȱ Beispielȱ2:ȱAddierenȱvonȱzweiȱIntegerzahlenȱüberȱeineȱentfernteȱProzedurȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 4
ȱ
XDRȱenthältȱeinenȱeigenenȱTypenȱbool_t.ȱ
56 ȱ
2.2ȱȱVerteilteȱProzeduraufrufeȱ Derȱ Aufrufȱ einesȱ Dienstesȱ zumȱ Addierenȱ zweierȱ Integerzahlenȱ überȱ RPCȱ könnteȱ wieȱfolgtȱaussehen:ȱ result = add (request);
EineȱgeeigneteȱSchnittstellenbeschreibungȱinȱderȱXDRȬSpracheȱhätteȱdenȱDateinaȬ menȱadd.xȱundȱfolgendenȱInhalt:ȱ struct result {int x;}; struct request {int a; int b;}; program ADD_PROG { version ADD_VERS { result ADD (request) = 1; } = 1; } = 20;
Derȱ RPCȬCompilerȱ rpcgenȱ generiertȱ ausȱ derȱ Schnittstellenbeschreibungsdateiȱ (add.x)ȱ dieȱ erforderlichenȱ Dateienȱ (Headerdatei,ȱ Stub,ȱ Skeleton,ȱ usw.),ȱ dieȱ hierȱ nichtȱweiterȱerläutertȱwerdenȱsollen.ȱ
Adressierung und Kommunikation Namensauflösungȱ undȱ NamingȬ/DirectoryȬService:ȱ Sunȱ RPCȱ unterstütztȱ sowohlȱ statischesȱalsȱauchȱdynamischesȱBinden.ȱBeiȱSunȱRPCȱübernimmtȱdieȱAufgabeȱdesȱ Verzeichnisdienstesȱ bzw.ȱ Bindersȱ einȱ sog.ȱ Portmapper.ȱ Unterȱ Unixȱ heißtȱ derȱ DäȬ monȬProzessȱportmapȱoderȱrpcbind.ȱ Port 111
Client
Portmapper
Server 1
Portmapper
Server 2 Serverrechner 1
Server 3
Server 4 Serverrechner 2
Port = Dienstzugang
RPC-Protokoll Transportsystem (TCP oder UDP)
ȱ Abbildungȱ2Ȭ14:ȱPortmappperȱbeiȱSunȱONCȱRPCȱ
Jederȱ Serverrechnerȱ verfügtȱ überȱ einenȱ PortmapperȬProzess,ȱ beiȱ demȱ sichȱ jederȱ lokalȱ ablaufendeȱ Serverprozessȱ registriert.ȱ Derȱ Portmapperȱ istȱ einȱ HintergrundȬ
ȱ
57
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ prozess,ȱ derȱ anȱ einerȱ bekanntenȱ (wellȬknown)ȱ Portnummerȱ (TCPȱ undȱ UDPȱ alsȱ Transportprotokoll,ȱStandardportȱ111)ȱhorcht.ȱDieȱServerprozesseȱregistrierenȱihreȱ Serverprogrammeȱ(Serverbausteine)ȱwährendȱdesȱStartvorgangsȱ(überȱgeneriertenȱ Code)ȱ beimȱ lokalenȱ Portmapper.ȱ Abbildungȱ 2Ȭ14ȱ zeigtȱ zweiȱ Serverrechner,ȱ aufȱ denenȱjeweilsȱeinȱPortmapperȬProzessȱundȱzweiȱServiceȬProzesseȱablaufen.ȱ Kommunikation:ȱ Derȱ inȱ ONCȱ RPCȱ realisierteȱ Remoteȱ Procedureȱ Callȱ unterstütztȱ beiȱ Einsatzȱ vonȱ TCPȱ eineȱ AtȬMostȬOnceȬSemantik,ȱ beiȱ Einsatzȱ vonȱ UDPȱ dagegenȱ eineȱAtȬLeastȬOnceȬSemantik.ȱImȱFehlerfallȱsindȱalsoȱinsbesondereȱbeiȱNutzungȱvonȱ UDPȱProblemeȱ wieȱ eineȱdoppelteȱ Prozedurausführungȱ nichtȱauszuschließen,ȱ wasȱ inȱderȱSpezifikationȱderȱverteiltenȱAnwendungȱbetrachtetȱwerdenȱmuss.ȱEineȱ„AlȬ lesȬoderȬNichtsȬSemantik“ȱbzw.ȱ eineȱ ExactlyȬOnceȬSemantikȱkannȱmitȱ diesemȱMeȬ chanismusȱnichtȱrealisiertȱwerden.ȱHierzuȱbenötigtȱmanȱdasȱKonzeptȱderȱTransakȬ tionenȱ(sieheȱKapitelȱ4).ȱWeitereȱONCȬRPCȬKonzepteȱwieȱderȱsog.ȱBroadcastȬRPCȱ bzw.ȱCallbackȬRPCȱsindȱinȱderȱangegebenenȱLiteraturȱbeschrieben.ȱ BeimȱStartenȱeinesȱClientsȱermitteltȱdieserȱdenȱPortȱdesȱServerprozessesȱüberȱeineȱ AnfrageȱanȱdenȱPortmapperȱdesȱHosts,ȱaufȱdemȱderȱServerprozessȱläuft.ȱDenȱHostȱ bzw.ȱdieȱIPȬAdresseȱdesȱServerrechnersȱmussȱderȱClientȬProgrammiererȱalsoȱkenȬ nen.ȱSunȱRPCȱunterstütztȱalsoȱ(wieȱdieȱmeistenȱanderenȱImplementierungen)ȱkeineȱ vollständigeȱTransparenzȱüberȱdenȱServerȬAufenthalt.ȱDerȱServerprozessȱstelltȱdieȱ AblaufumgebungȱfürȱdieȱServerbausteineȱdar.ȱ Client ONC-Library
Client-Stub
MarshallingCode
clnt_create
Prozeduraufruf XDR-Filter Transport zum Server
ȱ Abbildungȱ2Ȭ15:ȱAblaufȱderȱKommunikationȱbeiȱSunȱONCȱRPCȱimȱClientȱ
DerȱClientȱwendetȱsichȱzunächstȱüberȱeinenȱAufrufȱderȱProzedurȱcallrpcȱoderȱüberȱ denȱLowȬLevelȬCallȱclnt_createȱanȱdenȱaufȱdemȱentsprechendenȱServerrechnerȱlauȬ fendenȱ Portmapper,ȱ wobeiȱ alsȱ Inputparameterȱ dieȱ Programmnummer,ȱ dieȱ VersiȬ onsnummerȱdesȱProgrammsȱundȱdasȱgewünschteȱTransportprotokollȱ(TCP,ȱUDP)ȱ übertragenȱ werden.ȱ Überȱ dieȱ HighȬLevelȬAPIȱ kannȱ allerdingsȱ nurȱ aufȱ Basisȱ vonȱ UDPȱ kommuniziertȱ werden.ȱ Derȱ Portmapperȱ liefertȱ demȱ Clientȱ eineȱ Referenzȱ (ClientȬHandle)ȱ aufȱ dasȱ Serverprogrammȱ zurück.ȱ Derȱ Hostnameȱ desȱ ServerrechȬ
58 ȱ
2.2ȱȱVerteilteȱProzeduraufrufeȱ nersȱ undȱ dieȱ Portnummerȱ desȱ Serviceȱ werdenȱ inȱ dasȱ ClientȬHandleȱ eingetragen.ȱ BeiȱallenȱfolgendenȱAufrufenȱgibtȱderȱClientȱdasȱClientȬHandleȱan.ȱ Einȱ Aufrufȱ einerȱ Prozedurȱ hatȱ dannȱ prinzipiellȱ denȱ inȱ Abbildungȱ 2Ȭ15ȱ undȱ Abbildungȱ 2Ȭ16ȱ dargestelltenȱ Ablauf,ȱ wobeiȱ dieȱ Bearbeitungȱ desȱ LowȬLevelȬ Aufrufsȱ clnt_createȱ sehrȱ vereinfachtȱ dargestelltȱ wird.ȱ Auchȱ hierȱ erfolgtȱ nämlich,ȱ implizitȱausȱSichtȱdesȱClients,ȱeineȱKommunikationȱmitȱdemȱServer.ȱ RPC-Dispatcher
Server-Stub
UnmarshallingCode
ServerProzedur
Vom Transportsystem
XDR-Filter
Prozeduraufruf
Erneut Marshalling...
Transport zum Client
ȱ Abbildungȱ2Ȭ16:ȱAblaufȱderȱKommunikationȱbeiȱSunȱONCȱRPCȱimȱClientȱ
Garbage-Collection InȱONCȱRPCȱsindȱkeineȱeigenenȱGarbageȬCollectionȬMechanismenȱverfügbar,ȱwasȱ aufgrundȱderȱgenutztenȱProgrammierspracheȱCȱnichtȱverwunderlichȱist.ȱDerȱProȬ grammiererȱ mussȱ inȱ Eigenregieȱ fürȱ einȱ GarbageȬCollectionȱ sorgen.ȱ Dazuȱ nutztȱ erȱ dieȱCȬFunktionȱfreeȱzumȱFreigebenȱvonȱHeapȬSpeicher.ȱ
Nebenläufigkeit Derȱ Standardmechanismusȱ ausȱ demȱ höherenȱ APIȬLevelȱ siehtȱ nurȱ iterativeȱ Serverȱ vor.ȱDurchȱdenȱAufrufȱderȱONCȬRPCȬFunktionȱsvc_runȱimȱServerȱwirdȱnachȱdemȱ Anmeldenȱ(Registrieren)ȱderȱServerbausteineȱinȱdasȱRPCȬLaufzeitsystemȱgesprunȬ gen.ȱDortȱerfolgtȱdieȱAbarbeitungȱderȱRequestsȱiterativȱinȱeinemȱProzessȱinȱderȱsog.ȱ Serverschleife.ȱDieȱRegistrierungȱderȱServerȱundȱdieȱÜbergabeȱderȱKontrolleȱanȱdasȱ LaufzeitsystemȱsollȱanhandȱdesȱfolgendenȱBeispielsȱverdeutlichtȱwerden.ȱ Beispielȱ „Serverschleifeȱ fürȱ einenȱ iterativenȱ Server“:ȱ Imȱ Beispielȱ wirdȱ derȱ obenȱ skizzierteȱ AdditionsȬServiceȱ sowohlȱ überȱ UDPȱ alsȱ auchȱ überȱ TCPȱ zugänglichȱ geȬ macht.ȱ Dasȱ Programmȱ besorgtȱ sichȱ jeweilsȱ einȱ ServiceȬHandleȱ durchȱ Aufrufȱ derȱ LowȬLevelȬFunktionȱ svcudp_createȱ bzw.ȱ svctcp_createȱ undȱ übergibtȱ dieseȱ zumȱ ReȬ gistrierenȱbeimȱFunktionsaufrufȱsvc_register.ȱDanachȱerfolgtȱderȱEintrittȱinȱdieȱSerȬ verschleifeȱundȱdamitȱzumȱiterativenȱAbarbeitenȱderȱankommendenȱRequestsȱüberȱ denȱAufrufȱderȱFunktionȱsvc_run.ȱ
ȱ
59
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ #include #include #include “add.h” static void add_prog_1 ( ); main ( ) { register SVCXPRT *transp; (void) pmap_unset (ADD_PROG, ADD_VERS); transp = svcudp_create (RPC_ANYSOCK); if (transp == NULL) { fprintf (stderr, “UDP-basierter Service kann nicht erzeugt werden!”); exit (1); } if (!svc_register (transp, ADD_PROG, ADD_VERS, add_prog_1, IPPROTO_UDP)) { fprintf (stderr, “Registrierung fehlgeschlagen!“); exit (1); }
...
transp = svctcp_create (RPC_ANYSOCK, 0, 0); if (transp == NULL) { fprintf (stderr, “TCP-basierter Service kann nicht erzeugt werden!.”); exit (1); } if (!svc_register (transp, ADD_PROG, ADD_VERS, add_prog_1, IPPROTO_TCP)) { fprintf (stderr, “Registrierung fehlgeschlagen!“); exit (1); } svc_run ( ); /* Serverschleife */ fprintf (stderr, “Zurück aus der Serverschleife”); exit (1); /* NOTREACHED */ } /* Service-Prozedur zum Addieren zweier Zahlen, nur angedeutet */ static void add_prog_1 (rqstp, transp) struct svc_req *rqstp; register SVCXPRT *transp; {
60 ȱ
2.2ȱȱVerteilteȱProzeduraufrufeȱ union { request add_1_arg; } argument; char *result; bool_t (*xdr_argument) ( ), (*xdr_result) ( ); char * (*local) ( ); switch(rqstp -> rq_proc ) { … } return; }
MöchteȱmanȱnunȱeineȱParallelisierungȱderȱAbarbeitungȱerreichen,ȱmussȱmanȱüberȱ dasȱ LowȬLevelȬAPIȱ einenȱ eigenenȱ RPCȬDispatcherȱ erzeugen.ȱ Dieserȱ Dispatcherȱ kannȱdannȱbeispielsweiseȱfürȱjedenȱRequestȱeinenȱProzessȱoderȱThreadȱstartenȱundȱ auchȱ entsprechendeȱ ProzessȬ/Threadpoolsȱ verwalten.ȱ Derȱ Dispatcherȱ kannȱ auchȱ beiȱ Aufrufȱ derȱ Funktionȱ svc_registerȱ angegebenȱ werden.ȱ Weiterführendeȱ ErläuteȬ rungenȱfindetȱmanȱinȱ(Bloomerȱ1993).ȱ
Lebenszyklus von Serverbausteinen StandardmäßigȱerfolgtȱbeiȱONCȱRPCȱdieȱInstanzierungȱeinesȱServerbausteinsȱzumȱ Startzeitpunktȱ desȱ Servers.ȱ DieȱAktivierung,ȱalsoȱ dieȱ Zuordnungȱzuȱ einemȱ Clientȱ erfolgtȱ jeweilsȱ beiȱ Ankunftȱ einesȱ Requests.ȱ Derȱ Clientȱ bautȱ seinerseitsȱ vorȱ demȱ AufrufȱeinerȱServerprozedurȱeineȱTransportverbindungȱzumȱServerȱauf.ȱDerȱAufȬ bauȱderȱTransportverbindungȱhatȱaberȱnochȱkeineȱAktivierungȱzurȱFolge.ȱErstȱderȱ konkreteȱProzeduraufrufȱführtȱzurȱAktivierung.ȱ BeispielȬClientȱ fürȱ AddȬProzedur:ȱ Imȱ folgendenȱ Beispielcodeȱ erzeugtȱ einȱ Clientȱ überȱ dieȱ LowȬLevelȬAPIȱ clnt_createȱ einenȱ ClientȬHandle.ȱ Dabeiȱ wirdȱ implizitȱ derȱ PortmapperȱzumȱAuffindenȱdesȱServersȱkontaktiertȱundȱeineȱTransportverbindungȱ (hierȱüberȱUDP)ȱmitȱdemȱServerȱhergestellt.ȱ main (argc, argv ) int argc; char *argv [ ]; { CLIENT *cl; char *server; request parameter; result *ergebnis; /* Serveradresse in 1. Parameter */ server = argv [1]; cl = clnt_create (server, ADD_PROG, ADD_VERS, “udp”); /* Falls fehlgeschlagen, entsprechend reagieren */ parameter.a = 27; parameter.b = 53; ergebnis = add_1 (¶meter, cl); printf (“Summe ist %d\n”, ergebnis -> x); }
ȱ
61
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ MöchteȱmanȱhierfürȱeineȱandereȱVorgehensweise,ȱkannȱmanȱüberȱdieȱLowȬLevelȬ APIȱ eineȱ eigeneȱ Implementierungȱ überȱ einenȱ individuellenȱ RPCȬDispatcherȱ einȬ hängen.ȱ
Basisdienste Außerȱ demȱ bereitsȱ erwähntenȱ NamingȬServiceȱ werdenȱ vonȱ ONCȱ RPCȱ nochȱ AuȬ thentifizierungdiensteȱüberȱdieȱsog.ȱAdvancedȱProgrammingȱFeaturesȱzurȱVerfügungȱ gestellt.ȱAnsonstenȱwerdenȱkeineȱweiterenȱDiensteȱbereitgestellt.ȱȱ AndereȱRPCȬVariantenȱbietenȱhierȱmehr.ȱBeispielsweiseȱstelltȱDCEȱeineȱkompletteȱ PlattformȱmitȱmehrerenȱwichtigenȱDienstenȱ(ThreadȬService,ȱSecurityȬService,ȱVerȬ teiltesȱFilesystem)ȱzurȱVerfügung.ȱDCEȱkonnteȱsichȱaberȱnurȱsehrȱbegrenztȱdurchȬ setzenȱundȱspieltȱheuteȱnurȱnochȱeineȱuntergeordneteȱRolle.ȱ
Sonstige Unterscheidungsmerkmale Möglichkeitenȱ zurȱ Skalierungȱ undȱ zurȱ Erhöhungȱ derȱ Verfügbarkeitȱ derȱ ServerȬ diensteȱsindȱbeiȱONCȱRPCȱstandardmäßigȱnichtȱvorhanden.ȱAuchȱhierȱmussȱmanȱ eigeneȱLösungen,ȱwieȱetwaȱeinenȱDispatcher,ȱderȱdieȱRequestsȱaufȱmehrereȱServerȱ verteilt,ȱselbstȱimplementieren.ȱ Dieȱ höherenȱ APIȬLevelsȱ sindȱ zwarȱ rechtȱ einfach,ȱ willȱ manȱ aberȱ mehrȱ Leistung,ȱ SkalierbarkeitȱundȱAusfallsicherheit,ȱsoȱmussȱmanȱeigeneȱLösungenȱergänzen.ȱ
2.3 Verteilte Objekte 2.3.1
Grundlegendes Modell
Inȱ derȱ Literaturȱ wirdȱ gelegentlichȱ dasȱ Attributȱ „objektorientiert“ȱ auchȱ direktȱ aufȱ verteilteȱ Objekteȱ übertragen.ȱ Wirȱ ziehenȱ denȱ ebenfallsȱ verwendetenȱ Begriffȱ „obȬ jektbasiert“ȱvor,ȱdaȱverteilteȱObjekteȱdochȱeinigeȱEinschränkungenȱinȱKaufȱnehmenȱ müssenȱundȱnichtȱalleȱMechanismenȱderȱObjektorientierungȱunterstützen.ȱȱ Einȱ objektorientiertesȱ Programmȱ kannȱ manȱ sichȱ alsȱ eineȱ Mengeȱ vonȱ miteinanderȱ kommunizierendenȱ Objektenȱ vorstellen.ȱ Objekteȱ sendenȱ sichȱ Botschaftenȱ zu,ȱ dieȱ dieȱ Ausführungȱ vonȱ Methodenȱ bewirken.ȱ Beimȱ Methodenaufrufȱ werdenȱ (wieȱ beimȱAufrufȱeinerȱProzedur)ȱParameterȱübergebenȱundȱesȱkannȱeinȱRückgabewertȱ zurückgeliefertȱwerden.ȱDieȱKommunikationȱwirdȱdabeiȱdurchȱdasȱLaufzeitsystemȱ derȱjeweiligenȱProgrammierspracheȱwieȱz.B.ȱbeiȱC++ȱoderȱdurchȱeineȱvirtuelleȱMaȬ schineȱ wieȱ beiȱ Javaȱ oderȱ denȱ .NETȬSprachenȱ (C#,...)ȱunterstützt.ȱDerȱ Aufrufȱ einerȱ Methodeȱ wirdȱ gewöhnlichȱ überȱ einenȱ Stackmechanismusȱ unterstützt.ȱ Inȱ lokalenȱ Objektimplementierungenȱ kannȱ manȱ auchȱ aufȱ Attributeȱ einesȱ Objektsȱ zugreifen,ȱ sofernȱsieȱalsȱöffentlichȱdeklariertȱsind.ȱInȱderȱRegelȱerfolgenȱdieȱZugriffeȱaberȱüberȱ dedizierteȱMethoden.ȱ Dieȱ Erzeugungȱ einesȱ lokalenȱ Objekts,ȱ alsoȱ einerȱ Objektinstanz,ȱ istȱ relativȱ einfach.ȱ ManȱdeklariertȱeineȱVariableȱvonȱdemȱentspechendenȱObjekttypȱundȱerzeugtȱsichȱ
62 ȱ
2.3ȱȱVerteilteȱObjekteȱ einȱ Objekt,ȱ dasȱ gewöhnlichȱ imȱ Heapȱ abgelegtȱ wird.ȱ Jeȱ nachȱ Programmierspracheȱ mussȱmanȱsichȱentwederȱselbstȱalsȱProgrammiererȱumȱdieȱFreigabeȱvonȱObjektenȱ kümmern,ȱwennȱmanȱdieseȱnichtȱmehrȱbenötigtȱ(sieheȱz.B.ȱinȱC++),ȱoderȱaberȱdasȱ LaufzeitsystemȱwickeltȱdieseȱAufgabeȱautomatischȱüberȱeinenȱGarbageȬCollectionȬ Mechanismusȱ abȱ(sieheȱz.B.ȱ Java,ȱ C#).ȱDerȱ Zugriffȱaufȱlokaleȱ Objekteȱ erfolgtȱüberȱ Objektreferenzen.ȱȱ Kunde name vorname customerId ... getName setName getVorname setVorname getCustomerId setCustomerId ...
ȱ
Abbildungȱ2Ȭ17:ȱEinfacheȱObjektklasseȱ
InȱJavaȱsiehtȱdieȱNutzungȱeinesȱObjektsȱeinerȱbeliebigenȱKlasseȱ(hierȱKunde,ȱsieheȱ Abbildungȱ2Ȭ17)ȱwieȱfolgtȱaus:ȱ class Kunde { private String name; private String vorname; public int customerId;5 … public Kunde(String name, String vorname, int id) { /* Konstruktorcode */ } public String getName() {…} public String getVorname() {…} … } public static void main() { Kunde customer = new Kunde(); String name = Customer.getName(); int id = Customer.customerId; }
ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ
5
NurȱzurȱDemonstrationȱvonȱZugriffenȱaufȱöffentlicheȱAttributeȱeinesȱObjekts,ȱnichtȱunȬ bedingtȱsinnvollȱimȱ„richtigenȱLeben“.ȱ
ȱ
63
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ DasȱeinfacheȱBeispielȱzeigtȱeineȱKlasseȱKundeȱundȱdieȱNutzungȱeinesȱObjektsȱdieserȱ Klasseȱ innerhalbȱ einesȱ Programms.ȱ Mitȱ derȱ Anweisungȱ ȱ newȱ wirdȱ eineȱ neueȱ ObȬ jektinstanzȱimȱHeapȱerzeugt,ȱimȱBeispielȱwirdȱeinȱAufrufȱderȱinȱKundeȱdefiniertenȱ Methodeȱ getName,ȱ aberȱ auchȱ derȱ Zugriffȱ aufȱ einȱ öffentlichesȱ Attributȱ namensȱ customerIdȱ gezeigt.ȱ Zurȱ Laufzeitȱ desȱ Programmsȱ spieltȱ sichȱ allesȱ imȱ Adressraumȱ einesȱProzessesȱab.ȱSowohlȱdasȱnutzende,ȱalsȱauchȱdasȱverwendeteȱObjektȱsindȱimȱ gleichenȱAdressraumȱundȱdasȱBetriebssystemȱmussȱbeiȱAufrufȱderȱMethodeȱledigȬ lichȱdafürȱsorgen,ȱdassȱderȱProgrammzählerȱaufȱdieȱAnfangsadresseȱderȱgerufenenȱ Methodeȱgesetztȱwird.ȱȱ Nunȱ istȱ esȱ inȱ lokalȱ ablaufenden,ȱ objektorientiertenȱ Programmenȱ relativȱ klar,ȱ wieȱ einȱObjektȱerzeugtȱundȱbenutztȱwird.ȱDerȱAufrufȱeinerȱObjektmethodeȱwirdȱimmerȱ genauȱeinmalȱausgeführtȱundȱdasȱistȱsoȱmöglich,ȱweilȱdieȱAusführungȱimȱlokalenȱ ProzesskontextȱeinfachȱdurchȱdenȱAnsprungȱdesȱMethodencodes,ȱderȱirgendwoȱimȱ ProzessȬAdressraumȱliegt,ȱerfolgenȱkann.ȱEsȱistȱkeineȱprozessübergreifendeȱKomȬ munikationȱundȱschonȱgarȱkeineȱKommunikationȱinȱeinemȱNetzwerkȱerforderlich.ȱ InȱverteiltenȱObjektsystemenȱwirdȱnunȱdiesesȱlokaleȱObjektparadigmaȱaufȱdieȱNutȬ zungȱ inȱ verteiltenȱ Anwendungenȱ erweitert.ȱ Dieȱ Anforderungȱ lautet:ȱ Einȱ Objektȱ sollȱ aufȱ einemȱ beliebigenȱ Rechnersystemȱ instanziiertȱ werdenȱ könnenȱ undȱ vonȱ eiȬ nemȱObjekt,ȱdasȱaufȱeinemȱanderenȱRechnersystemȱliegt,ȱgenutztȱwerdenȱkönnen,ȱ undȱ diesȱ möglichstȱ soȱ wieȱ imȱ lokalenȱ System.ȱ Derȱ Aufrufȱ vonȱ Methodenȱ einesȱ entferntenȱObjektsȱwirdȱauchȱalsȱRMIȱ(RemoteȱMethodȱInvocation),ȱbezeichnet.ȱ Serverrechner
Objektserver mit zwei Objekten
Objekt 2
Objekt 1 Schnittstelle
Skeleton
Skeleton
Objekadapter
Objektadapter
Verteiler
Lokales Betriebssystem Netzwerk
Methodenaufruf
ȱ
Abbildungȱ2Ȭ18:ȱPrinzipiellerȱAufbauȱeinesȱObjektserversȱnachȱTanenbaumȱ2003ȱ
64 ȱ
2.3ȱȱVerteilteȱObjekteȱ VieleȱderȱzuȱlösendenȱProblemeȱwurdenȱbereitsȱimȱprozeduralenȱRemoteȱProcedureȱ Callȱ(RPC)ȱgelöst,ȱalsoȱeinemȱMechanismus,ȱderȱesȱermöglicht,ȱeineȱentfernteȱProȬ zedurȱaufzurufen.ȱHierȱgibtȱesȱzwarȱkeineȱObjekte,ȱaberȱdieȱgrundlegendenȱProbȬ lemeȱtretenȱauchȱschonȱauf.ȱEsȱliegtȱalsoȱnahe,ȱdasȱKonzeptȱdesȱRemoteȱProcedureȱ Callsȱ aufȱ verteilteȱ Objekteȱ anzuwenden.ȱ Dasȱ Konzeptȱ derȱ verteiltenȱ Objekteȱ istȱ eineȱErweiterungȱdesȱlokalenȱObjektmodellsȱkombiniertȱmitȱdemȱRemoteȱProceduȬ reȱ Call.ȱ Entfernteȱ Objekteȱ bietenȱ ihreȱ Methodenȱ fürȱ Clientsȱ an.ȱ Clientsȱ rufenȱ dieȱ MethodenȱentfernterȱObjekteȱortstransparentȱauf,ȱsoȱalsȱobȱsieȱlokalȱablaufenȱwürȬ den.ȱ Ausȱ Implementierungssichtȱ mussȱ manȱ esȱ schaffen,ȱ Objekte,ȱ dieȱ üblicherweiseȱ inȱ Adressräumenȱ vonȱ Betriebssystemprozessenȱ inȱ Serverrechnernȱ ablaufen,ȱ ausȱ anȬ derenȱ Prozessenȱ herausȱ nutzenȱzuȱ können.ȱ Diesȱistȱaberȱauchȱ vomȱ Grundprinzipȱ herȱnichtȱvielȱandersȱalsȱderȱZugangȱaufȱeinzelneȱFunktionen.ȱEsȱwirdȱlediglichȱeinȱ anderesȱProgrammierparadigmaȱunterstützt.ȱȱ Imȱ klassischenȱ ClientȬServerȬModellȱ habenȱ wirȱ bisherȱ vonȱ Serverbausteinenȱ geȬ sprochen,ȱinȱdenenȱdieȱServicesȱbereitgestelltȱwurden.ȱDieȱverteiltenȱObjekteȱwerȬ denȱinȱsog.ȱObjektservernȱverwaltetȱundȱstellenȱüberȱdieseȱihreȱDiensteȱinȱFormȱvonȱ Methodenȱ bereit.ȱ Objektserverȱ sindȱ alsoȱ (softwaretechnisch)ȱ Server,ȱ dieȱ ClientanȬ wendungenȱ (oderȱ ClientȬObjekte)ȱ dieȱ Methodenȱ einzelnerȱ Objekteȱ (inȱ derȱ Regel)ȱ überȱeinȱNetzwerkȱzugänglichȱmachen.ȱSieȱstellenȱdieȱInfrastrukturȱfürȱdieȱverteilȬ tenȱObjekteȱ(RemoteȱObjects)ȱbereit.ȱ AnstelleȱeinesȱServersȱistȱbeiȱverteiltenȱObjektenȱeinȱObjektserverȱfürȱdieȱVerwalȬ tungȱundȱdieȱNutzungȱderȱentferntenȱObjekteȱzuständig.ȱDiesȱistȱimȱPrinzipȱauchȱ mindestensȱeinȱBetriebssystemprozess.ȱȱ InȱeinemȱServerrechnerȱankommendeȱMethodenaufrufeȱwerdenȱüberȱeinȱentspreȬ chendesȱKommunikationsprotokollȱzunächstȱanȱdenȱObjektserverȱweitergeleitet.ȱȱ Dieȱ Anatomieȱ einesȱ Objektserversȱ istȱ inȱ Abbildungȱ 2Ȭ18ȱ skizziert.ȱ Imȱ Folgendenȱ sollȱdasȱZusammenspielȱderȱKomponentenȱkurzȱbeschriebenȱwerden:ȱȱ – Einȱ Methodenaufrufȱ wirdȱ zunächstȱ vonȱ einemȱ Demultiplexerȱ (Dispatcher)ȱ entgegengenommen.ȱ Dieserȱ ermitteltȱ denȱ fürȱ dasȱ Objektȱ zuständigenȱ ObȬ jektadapter.ȱ – Derȱ Objektadapterȱ istȱ fürȱ dieȱ Aktivierungsstrategieȱ verantwortlich.ȱ Erȱ entȬ scheidet,ȱwannȱdasȱObjektȱkonkretȱerzeugtȱwirdȱundȱwieȱlangeȱesȱamȱLebenȱ bleibt.ȱ Einȱ Objektadapterȱ kannȱ mehrereȱ Objekteȱ bedienenȱ undȱ stelltȱ einenȱ ObjektȬWrapperȱdar.ȱEsȱkönnenȱauchȱmehrereȱObjektadapterȱmitȱunterschiedȬ lichenȱAktivierungsstrategienȱinȱeinemȱObjektserverȱablaufen.ȱȱ – Derȱ Objektadapterȱ ermitteltȱ adressierteȱ Objekteȱ undȱ dasȱ verantwortlicheȱ Skeletonȱanhandȱ einerȱ Objektreferenzȱundȱ leitetȱ dieȱ Anfrageȱanȱ denȱ verantȬ wortlichenȱSkeletonȱ(auchȱServerstub)ȱweiter.ȱ – DasȱSkeletonȱentpacktȱdenȱMethodenaufruf,ȱdeserialisiertȱdieȱParameterȱundȱ ruftȱschließlichȱdieȱMethodeȱdesȱadressiertenȱObjektsȱauf.ȱ
ȱ
65
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ – DasȱObjektȱbearbeitetȱdenȱMethodenaufrufȱundȱsendetȱdieȱAntwortȱüberȱdasȱ SkeletonȱundȱdenȱObjektadapterȱanȱdenȱClientȱzurück.ȱ ObjektserverȬImplementierungenȱsindȱmeistȱleistungsfähige,ȱThreadȬbasierteȱSoftȬ waresysteme,ȱdieȱauchȱThreadpoolingȱvewenden.ȱDaȱeinȱentferntesȱObjektȱfürȱdenȱ ClientȱnichtȱdirektȱimȱZugriffȱist,ȱwirdȱlokalȱbeimȱClientȱeinȱStellvertreterȬObjekt,ȱ einȱsog.ȱProxyȬObjektȱ(StellvertreterȬObjekt)ȱerzeugt.ȱDiesesȱObjektȱstelltȱgegenüberȱ demȱ Nutzerobjektȱ dieȱ Objektschnittstelleȱ bereitȱ undȱ zwarȱ so,ȱalsȱobȱ dasȱ entfernteȱ Objektȱlokalȱverfügbarȱwäre.ȱEsȱwickeltȱdieȱKommunikationȱmitȱdemȱServerobjektȱ abȱundȱliefertȱdasȱErgebnisȱdesȱMethodenaufrufsȱanȱdasȱClientȬObjektȱzurück.ȱ BevorȱaberȱeinȱProxyȬObjektȱimȱClientȱerzeugtȱwerdenȱkann,ȱmussȱeinȱsog.ȱBindingȱ erfolgen.ȱHierfürȱgeltenȱimȱWesentlichenȱdieȱgleichenȱMechanismenȱwieȱbeiȱRPC.ȱ DerȱClientȱwendetȱsichȱanȱeinenȱNamingȬȱoderȱDirectoryȬServiceȱundȱdieserȱmussȱ dasȱentfernteȱObjektȱaufgrundȱeinerȱRegistrierungȱkennenȱundȱdieȱTransportadresȬ seȱbzw.ȱdieȱsog.ȱObjektreferenzȱdesȱServerobjektsȱzurȱVerfügungȱstellen.ȱDieȱObjektȬ referenzȱistȱeinȱBezeichnerȱfürȱeinȱentferntesȱObjektȱbzw.ȱeinȱentfernterȱObjektverȬ weis,ȱ derȱ innerhalbȱ desȱ gesamtenȱ verteiltenȱ Systemsȱ Gültigkeitȱ hat.ȱ Genauerȱ geȬ sagtȱhandeltȱesȱsichȱumȱdieȱAdresseȱeinesȱObjektsȱinnerhalbȱeinesȱServerprozesses,ȱ derȱ wiederumȱ aufȱ einemȱ Rechnersystemȱ abläuft.ȱ Dieseȱ Zusammenhängeȱ sindȱ inȱ Abbildungȱ2Ȭ19ȱdargestellt.ȱ Rechner 1
O1
Stellvertreter von O2 (Proxy)
Rechner 2
3: Methodenaufruf O2
2: Adresse O2 holen
1: Registrierung von O2 NamingService
ȱ Abbildungȱ2Ȭ19:ȱKommunikationȱzwischenȱObjektenȱ
2.3.2
Fallbeispiel CORBA
ZielȱderȱObjectȱManagementȱGroupȱ(OMG),ȱeinemȱIndustriekonsortium,ȱistȱesȱu.a.,ȱ verteilteȱ objektbasierteȱ Systemeȱ zuȱ standardisierenȱ undȱ derenȱ Weiterentwicklungȱ zuȱfördern.ȱDieȱOMGȱhatȱinȱdenȱ90erȱJahrenȱeineȱArchitekturȱ(OMA,ȱObjectȱManaȬ gementȱArchitecture)ȱfürȱverteilte,ȱobjektorientierteȱAnwendungenȱentwickelt.ȱWirȱ betrachtenȱCORBAȱnunȱanhandȱunsererȱUnterscheidungskriterien.ȱ
66 ȱ
2.3ȱȱVerteilteȱObjekteȱ
Architektur Dieȱ OMAȬArchitekturȱ istȱ einȱ sehrȱ umfassenderȱ Architekturansatzȱ undȱ enthältȱ mehrereȱGrundkomponenten,ȱdieȱinȱAbbildungȱ2Ȭ20ȱskizziertȱsind:ȱ – Applicationȱ Objects:ȱ Diesȱ sindȱ dieȱ speziellenȱ verteiltenȱ Objekteȱ derȱ eigenenȱ AnwendungȱundȱnichtȱBestandteilȱderȱStandardisierung.ȱ – CORBAdomains:ȱInȱdieseȱKategorieȱvonȱServicesȱfallenȱsog.ȱvertikaleȱDienste,ȱ dieȱsichȱaufȱeineȱbestimmteȱAnwendungsdomäneȱbeziehen.ȱSieȱsindȱspeziellȱ fürȱdieseȱkonzipiert,ȱaberȱinnerhalbȱderȱDomäneȱalsȱBasisdiensteȱzuȱbetrachȬ ten.ȱ Dieȱ Beispieleȱ hierfürȱ sindȱ vielfältigȱ (Gesundheitswesen,ȱ Financial,ȱ Transport,ȱTelekommunikation,...).ȱ – CORBAservices:ȱ Diesȱ sindȱ allgemeineȱ Servicesȱ aufȱ Systemebene,ȱ dieȱ fürȱ dieȱ Anwendungsentwicklerȱbereitgestelltȱwerden.ȱȱ – ȱCORBAfacilities:ȱ Hierȱ handeltȱ esȱ sichȱ umȱ spezielle,ȱ horizontaleȱ Services,ȱ dieȱ vonȱ Anwendungsdomänenȱ unabhängigȱ sind,ȱ dieȱ aberȱ fürȱ Anwendungenȱ meistȱ benötigtȱ werden.ȱ Inȱ dieseȱ Kategorieȱ ȱ vonȱ Dienstenȱ gehörenȱ u.a.ȱ SysȬ temmanagementȬDienste,ȱ Internationalisierungsmechanismenȱ undȱ WorkȬ flowȬDienste.ȱDieȱTrennungȱzwischenȱhorizontalenȱundȱvertikalenȱDienstenȱ scheintȱetwasȱwillkürlich.ȱ – Derȱ Objectȱ Requestȱ Brokerȱ (ORB)ȱ istȱ dasȱ Kernstückȱ derȱ Architekturȱ (OMGȱ 2004).ȱ Erȱ ermöglicht,ȱ dassȱ Objekteȱ inȱ einerȱ verteiltenȱ heterogenenȱ UmgeȬ bungȱmiteinanderȱkommunizierenȱkönnen.ȱDaȱderȱORBȱalsȱwesentlicherȱBeȬ standteilȱ gilt,ȱ hatȱ sichȱ dieȱ Bezeichnungȱ CORBAȱ (Commonȱ Objectȱ Requestȱ Brokerȱ Architecture)ȱ inȱ derȱ Praxisȱ alsȱ geläufigererȱ Nameȱ derȱ Architekturȱ durchgesetzt.ȱ EinȱORBȱermöglichtȱdieȱKommunikationȱallerȱbeteiligtenȱKomponentenȱundȱderenȱ Zusammenspiel.ȱ CORBAȬImplementierungenȱ sindȱ aufȱ nahezuȱ allenȱ BetriebssysȬ temȬPlattformenȱ erhältlich.ȱ Sieȱ sindȱ auchȱ häufigȱ inȱ MiddlewareȬProduktenȱ integȬ riert.ȱ Application Objects
CORBAdomains (vertikal)
Object Request Broker
CORBAservices (allgemein)
CORBAfacilities (horizontal)
ȱ Abbildungȱ2Ȭ20:ȱObjectȱManagementȱArchitectureȱ(OMA)ȱ
ȱ
67
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ Kommunizierendeȱ Objekteȱ könnenȱ sichȱ aufȱ beliebigenȱ Rechnernȱ imȱ Netzwerkȱ befinden.ȱEinȱCORBAȬClientȱmussȱnichtȱwissen,ȱwoȱsichȱeinȱCORBAȬServerȱbefinȬ det,ȱ wieȱ einȱ Methodenaufrufȱ zuȱ ihmȱ transportiertȱ wirdȱ undȱ inȱ welcherȱ ProgramȬ mierspracheȱderȱCORBAȬServerȱimplementiertȱist.ȱ Inȱ praktischenȱ Implementierungenȱ gibtȱ esȱ einenȱ ORBȱ meistȱ imȱ AnwendungsproȬ zessȱ oderȱ alsȱ eigenständigenȱ Prozessȱ aufȱ jedemȱ Rechnerȱ (ClientȬȱ undȱ ServerrechȬ ner).ȱInȱAbbildungȱ2Ȭ21ȱsindȱdieȱverschiedenenȱVariantenȱskizziert.ȱ DieȱBausteineȱderȱCORBAȬArchitekturȱimȱClientȱundȱimȱServerȱsindȱinȱAbbildungȱ 2Ȭ22ȱskizziert.ȱDiesȱsindȱimȱEinzelnen:ȱ – – – – –
Clientȱ Stubȱ(Client)ȱoderȱDIIȱ(DynamicȱInvocationȱInterface)ȱ Objektadapterȱ(BOAȱbzw.ȱPOA)ȱ Skeletonȱ(Server)ȱoderȱDSIȱ(DynamicȱSkeletonȱInterface)ȱ Servantȱ
ORBsȱ übernehmenȱ denȱ Transportȱ einesȱ Methodenaufrufsȱ vomȱ Clientȱ zumȱ Serverȱ sowieȱ denȱ Transportȱ derȱ Ergebnisseȱ aufȱ demȱ umgekehrtenȱ Wegȱ undȱ verwendenȱ hierzuȱeinȱdefiniertesȱProtokoll,ȱdasȱallgemeinȱalsȱGIOPȱ(GeneralȱInterȬORBȬProtoȬ col)ȱbezeichnetȱist.ȱȱ Derȱ individuelleȱ Clientcodeȱ greiftȱ entwederȱ überȱ einenȱ statischȱ generiertenȱ Stubȱ oderȱ überȱ eineȱ dynamischeȱ Aufrufvarianteȱ (DII)ȱ aufȱ dieȱ entferntenȱ CORBAȬ Objekteȱ zu.ȱAufȱ derȱ Serverseiteȱ istȱ einȱ Objektadapter,ȱ derȱ dieȱ RequestsȱentgegenȬ nimmtȱundȱentwederȱanȱeinȱstatischȱgeneriertesȱSkeletonȱoderȱdynamischȱüberȱDSIȱ anȱdasȱCORBAȬObjektȱweiterleitet.ȱSkeletonȱundȱStubȱfungierenȱalsȱStellvertreterȬ Objekteȱ(ProxyȬObjekte)ȱderȱjeweiligenȱGegenseite.ȱ Serverprozess Clientprozess
ORB
ORB
Log. BUS
Rechner 1
Clientprozess
Rechner 2
Clientprozess
ORB
Rechner 3
Clientprozess
ORB
Serverprozess
Rechner 4
ȱ Abbildungȱ2Ȭ21:ȱKomponentenȱvonȱCORBAȱ
68 ȱ
2.3ȱȱVerteilteȱObjekteȱ Derȱ Unterschiedȱ zwischenȱ statischenȱ Stubsȱ bzw.ȱ Skeletonsȱ undȱ DII/DSIȱ istȱ also,ȱ dassȱmitȱersterenȱdieȱOperationenȱzurȱÜbersetzungszeitȱdefiniertȱwerden,ȱwährendȱ manȱmitȱDII/DSIȱdieȱInformationenȱfürȱeineȱOperationȱzurȱLaufzeitȱermittelnȱkann.ȱ Damitȱ stelltȱ DII/DSIȱ einenȱ generischenȱ Aufrufmechanismusȱ bereit,ȱ mitȱ demȱ einȱ ClientȱdieȱSchnittstelleȱeinesȱCORBAȬObjektsȱzurȱLaufzeitȱbesorgenȱundȱMethodenȱ davonȱaufrufenȱkann.ȱ DerȱObjektadapterȱistȱMittlerȱzwischenȱdemȱORBȱundȱderȱObjektȬImplementierung.ȱ Erȱstelltȱ eineȱSchichtȱ zwischenȱ ORBȱ undȱSkeletonȱ dar,ȱ nutztȱ dasȱImplementationȬ Repositoryȱ fürȱ Konfigurationsdaten,ȱ führtȱ dieȱ Generierungȱ vonȱ Objektreferenzenȱ ausȱundȱerledigtȱdenȱAufrufȱvonȱOperationenȱdurchȱdasȱSkeletonȱsowieȱdieȱAktiȬ vierungȱvonȱObjekten.ȱEinȱImplementationȱRepositoryȱenthältȱInformationenȱdarȬ über,ȱwoȱdieȱServerobjekteȱablaufen.ȱEsȱistȱBestandteilȱeinerȱORBȬImplementierung,ȱ aberȱnichtȱstandardisiert.ȱ EinȱCORBAȬObjektȱistȱeineȱabstrakteȱEinheitȱundȱbesitztȱeinȱInterface.ȱEsȱkannȱvomȱ ORBȱlokalisiertȱwerden.ȱDasȱInterfaceȱstelltȱOperationenȱbereit.ȱEinȱCORBAȬObjektȱ istȱ durchȱ eineȱ Objektreferenzȱ identifiziertȱ (eindeutigeȱ Identifikation).ȱ Einȱ Servantȱ istȱeineȱImplementierungȱeinesȱCORBAȬObjektsȱinȱeinerȱvonȱCORBAȱunterstütztenȱ Programmiersprache.ȱ Einȱ Servantȱ kannȱ mehrereȱ CORBAȬObjekteȱ realisieren.ȱ ReȬ questsȱdesȱClientsȱanȱeinȱCORBAȬObjektȱwerdenȱimȱServantȱbearbeitet.ȱȱ Client
Stub
Servant (CORBA-Objekt)
DSI
DII
Skeleton
Objektadapter (BOA oder POA)
GIOP Object Request Broker
Object Request Broker DII = Dynamic Invocation Interface DSI = Dynamic Skeleton Interface GIOP = General Inter-ORB Protocol ORB = Object Request Broker BOA = Basic Object Adapter POA = Portable Object Adapter
Server
ȱ
Abbildungȱ2Ȭ22:ȱCORBAȬKomponentenȱnachȱ(Bengelȱ2004)ȱ
AlsȱObjektadapterȱsindȱinȱCORBAȱderȱBasicȱObjectȱAdapterȱ(BOA)ȱundȱderȱPortableȱ ObjectȱAdapterȱ (BOA)ȱ spezifiziert.ȱ Derȱ PortableȱObjectȱAdapterȱ(POA)ȱ stelltȱ seitȱ derȱ CORBAȬVersionȱ 2.2ȱ denȱ Standardȱ (OMGȱ 2002a)ȱ darȱ undȱ istȱ eineȱ WeiterentwickȬ lungȱ desȱ einfacherenȱ BOAȬKonzepts.ȱ Einȱ POAȱ istȱ eineȱ Verwaltungseinheitȱ innerȬ halbȱdesȱServers.ȱErȱdientȱderȱlogischenȱTrennungȱvonȱCORBAȬObjektȱundȱServantȱ undȱverwaltetȱeineȱGruppeȱvonȱCORBAȬObjekten,ȱwobeiȱerȱauchȱderenȱObjektreȬ ferenzenȱ erzeugt.ȱ Einȱ POAȱ setztȱ einenȱ Requestȱ anȱ einȱ CORBAȬObjektȱ aufȱ einenȱ
ȱ
69
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ AufrufȱimȱServantȱum.ȱInnerhalbȱeinesȱServersȱ(AusführungsumgebungȱfürȱCORȬ BAȬObjekte)ȱsindȱ mehrereȱ POAȬInstanzenȱ möglich.ȱEinȱ Objektserverȱ enthältȱ minȬ destensȱ einenȱ RootPOAȱ undȱ kannȱ eineȱ ganzeȱ POAȬHierarchieȱ unterstützenȱ (sieheȱ Abbildungȱ2Ȭ23).ȱ Client
Server (computational context) ORB
Object Reference
POA
POA ObjektId ...
Servants
POA
ȱ Abbildungȱ2Ȭ23:ȱDerȱPortableȱObjectȱAdapterȱimȱORBȬKontextȱ
Zustandsverwaltung Dieȱ Zustandsverwaltungȱ kannȱ beiȱ CORBAȱ nurȱ überȱ denȱ Programmiererȱ beeinȬ flusstȱ werden.ȱ Esȱ wirdȱ nichtȱ zwischenȱ stateful,ȱ statelessȱ undȱ SingletonȬServerȬ bausteinenȱunterschieden.ȱ
Parameterübergabe Dieȱ Parameterȱ undȱ Returnwerteȱ werdenȱ inȱ CORBAȱ überȱ CallȬbyȬvalueȱ zwischenȱ ClientȱundȱServerȱausgetauscht,ȱ wennȱsieȱ auchȱlokalȱ imȱ Clientȱ beimȱ Aufrufȱ einerȱ entferntenȱ Objektmethodeȱ perȬreferenceȱ (CallȬbyȬreference)ȱ übergebenȱ werden.ȱ Dieȱ Parameterȱ bzw.ȱReturnwerteȱ werdenȱ vorȱ demȱ Versendenȱ kopiertȱ undȱ serialisiert.ȱ Manȱsprichtȱhierȱ–ȱwieȱbereitsȱweiterȱobenȱdargestelltȱȬȱauchȱvonȱCallȬbyȬcopy.ȱȱ Eineȱ Ausnahmeȱ bildenȱ Objektreferenzen,ȱ dieȱ alsȱ Parameterȱ bzw.ȱ alsȱ Returnwerteȱ übergebenȱwerden.ȱFürȱdieseȱFälleȱwirdȱCallȬbyȬreferenceȱverwendet.ȱ
Dienstschnittstellen CORBAȱistȱsprachunabhängigȱkonzipiert,ȱd.h.ȱCORBAȬObjekteȱkönnenȱinȱbeliebiȬ genȱSprachenȱimplementiertȱsein.ȱDieȱImplementierungsspracheȱeinesȱServerobjekȬ tesȱistȱfürȱdenȱClientȱtransparent,ȱd.h.ȱerȱsiehtȱnicht,ȱinȱwelcherȱSpracheȱeinȱServerȬ objektȱ implementiertȱ ist.ȱ Dieȱ ServerȬSchnittstelleȱ (Diensteȱ einesȱ CORBAȬbasiertenȱ Servers)ȱwirdȱsprachneutralȱinȱderȱInterfaceȱDefinitionȱLanguageȱ(IDL)ȱbeschrieben.ȱ
70 ȱ
2.3ȱȱVerteilteȱObjekteȱ
IDL-Datei x
interface ArticleMgrI { void createArticle(...); void deleteArticle(...); ... };
IDL-Compiler
CodeGenerierung (Java-Code)
(Java-)Client
ORBPackage
(Java-)Server
StubCode
Virtuelle Maschine
SkeletonCode
Kommunikation
Implementierung IDL-Methoden
ORBPackage
Virtuelle Maschine
ȱ Abbildungȱ2Ȭ24:ȱCodegenerierungȱausȱeinerȱIDLȬSchnittstellenbeschreibungȱ
Alleȱ CORBAȬServicesȱ verfügenȱ auchȱ überȱ eineȱ oderȱ mehrereȱ inȱ IDLȱ spezifizierteȱ Schnittstellen.ȱCORBAȱIDLȱistȱreinȱdeskriptivȱ(beschreibend).ȱManȱkannȱinȱderȱIDLȱ explizitȱ dieȱ Übergabemechanismenȱ derȱ Parameterȱ spezifizieren,ȱ d.h.ȱ CORBAȱ IDLȱ unterscheidetȱ EingabeȬ,ȱ AusgabeȬȱ undȱ Ein/AusgabeȬParameter.ȱ IDLȱ istȱ eineȱ starkȱ anȱ Cȱ angelehnteȱ Spracheȱ undȱ dientȱ nurȱ zurȱ Spezifikationȱ derȱ Schnittstelle.ȱ Dieȱ Implementierungȱ einesȱ Objektesȱ erfolgtȱ inȱ einerȱ Programmierspracheȱ wieȱ beiȬ spielsweiseȱC,ȱC++,ȱJava,ȱADAȱoderȱCOBOL.ȱ AlsȱEntwicklerȱeinerȱCORBAȬAnwendungȱdefiniertȱmanȱinȱeinemȱfrühenȱEntwickȬ lungsstadiumȱ dieȱ ServerȬSchnittstelleȱ mitȱ IDLȱ undȱ erzeugtȱ mitȱ Hilfeȱ einesȱ IDLȬ Compilersȱ denȱ StubȬȱ undȱ SkeletonȬCode.ȱ Derȱ Compilerȱ erzeugtȱ jeȱ nachȱ SprachȬ BindingȱentsprechendenȱCodeȱfürȱJava,ȱC++ȱusw.ȱInȱAbbildungȱ2Ȭ24ȱistȱdieȱGeneȬ rierungȱamȱBeispielȱeinerȱeinfachenȱIDLȬDateiȱskizziert.ȱEinȱModulȱbildetȱdieȱobersȬ teȱ Ebeneȱ einerȱ IDLȬSpezifikationȱ undȱ fasstȱ inhaltlichȱ zusammengehörendeȱ IDLȬ Definitionenȱzusammen.ȱModuleȱsindȱNamensräumeȱundȱdienenȱderȱVermeidungȱ vonȱKollisionenȱmitȱBezeichnernȱausȱanderenȱModulen.ȱInȱModulenȱkönnenȱInterȬ faces,ȱ Typdeklarationen,ȱ Konstanten,ȱ Ausnahmen,ȱ Operationen,ȱ Attributeȱ undȱ auchȱandereȱModuleȱenthaltenȱsein.ȱ Derȱ IDLȬCompilerȱ erzeugtȱ üblicherweiseȱ einenȱ herstellerspezifischenȱ Code.ȱ Fürȱ jedeȱneueȱCORBAȬEntwicklungsplattformȱistȱdieȱGenerierungȱdaherȱerneutȱauszuȬ führen.ȱ Dieȱ Kommunikationsschnittstellenȱ sindȱ aberȱ standardisiert.ȱ Einȱ Modulȱ siehtȱvomȱAufbauȱherȱgrobȱwieȱfolgtȱaus:ȱ
ȱ
71
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ module { const ... typedef ... enum... struct ... exception ... interface ... module ... }
Interfacesȱ beschreibenȱ eineȱ Mengeȱ vonȱ Operationenȱ undȱ sindȱ vererbbar,ȱ wobeiȱ Mehrfachvererbungȱmöglichȱistȱ(sieheȱȱunten).ȱInterfacesȱsindȱebenȬ fallsȱ einemȱ separatenȱ Namensraumȱ zuordenbarȱ undȱ könnenȱ Typdeklarationen,ȱ Konstanten,ȱAusnahmen,ȱOperationenȱundȱAttributeȱenthalten.ȱDerȱAufbauȱeinerȱ InterfaceȬSpezifikationȱlässtȱsichȱwieȱfolgtȱskizzieren:ȱ interface [: ] { const ... typedef ... enum... struct ... exception ... }
KonstantenȱwerdenȱwieȱinȱC++ȱangegeben:ȱȱ const short magic_number = 42;
IDLȱkenntȱmehrereȱBasisȬDatentypen,ȱdieȱzumȱTeilȱderȱSpracheȱC/C++ȱsehrȱähnlichȱ sind:ȱHierzuȱgehörenȱ(unsigned)ȱshort,ȱchar,ȱwchar,ȱ(unsigned)ȱlong,ȱfloat,ȱdouble,ȱbooȬ lean,ȱoctetȱundȱlongȱlong.ȱDerȱIDLȬTypȱcharȱistȱz.B.ȱeinȱ8ȬBitȬZeichenȱnachȱISOȱ8859.1,ȱ beiȱ wcharȱ handeltȱ esȱ sichȱ umȱ einȱ 16ȬBitȬUNICODEȬZeichen.ȱ Schließlichȱ gibtȱ esȱ inȱ derȱCORBAȬIDLȱauchȱnochȱdenȱDatentypȱany,ȱmitȱdemȱmanȱdenȱTypenȱeinesȱDaȬ tenelementsȱzunächstȱnichtȱfestlegt.ȱDieȱTypbestimmungȱwirdȱzurȱLaufzeitȱausgeȬ führt.ȱ CORBAȱunterstütztȱauch,ȱähnlichȱwieȱbeiȱdenȱSprachenȱCȱundȱC++ȱAufzählungsȬ typen.ȱDarüberȱhinausȱwerdenȱkomplexeȱStrukturenȱ(struct),ȱUnionsȱ(union),ȱArȬ raysȱundȱSequenzenȱ(sequence)ȱunterstützt.ȱStrukturenȱkönnenȱBasisȬDatentypenȱ undȱwiederumȱArrays,ȱUnionsȱundȱandereȱStrukturenȱenthalten.ȱȱ OperationenȱwerdenȱinȱIDLȱebenfallsȱähnlichȱwieȱMethodenȱinȱC++ȱnotiert.ȱZusätzȬ lichȱzuȱC++ȱmussȱfürȱjedenȱParameterȱangegebenȱwerden,ȱobȱesȱsichȱumȱeinenȱEinȬ gabeparameterȱ (in),ȱ einenȱ Ausgabeparameterȱ (out)ȱ oderȱ einenȱ EinȬ/AusgabeȬ parameterȱ(inout)ȱhandelt.ȱParameterȱundȱErgebnisseȱkönnenȱeinenȱbeliebigenȱTypȱ haben.ȱDieȱDefinitionȱeinerȱOperationȱsiehtȱz.B.ȱwieȱfolgtȱaus:ȱ void tell(in string name, in string message);
72 ȱ
2.3ȱȱVerteilteȱObjekteȱ Nebenȱ denȱ genanntenȱ Datentypenȱ undȱ Operationenȱ könnenȱ IDLȬSchnittstellenȱ auchȱbeliebigȱvieleȱAttributdeklarationenȱenthalten.ȱStandardmäßigȱkönnenȱAttribuȬ teȱ gelesenȱ undȱ geschriebenȱ werden.ȱ Dasȱ Schlüsselwortȱ readonlyȱ schränktȱ denȱ ZugriffȱaufȱeinȱAttributȱein.ȱBeispieleȱsind:ȱ attribute short customerName; readonly attribute long KontoNr;
Derȱ IDLȬGeneratorȱ erzeugtȱ fürȱ dieseȱ Attributeȱ entsprechendeȱ Methodenȱ zumȱ LeȬ senȱundȱSchreiben.ȱȱ Fürȱ dieȱ Programmierungȱ verteilterȱ Anwendungenȱ mitȱ CORBAȱ istȱ dasȱ Mappingȱ derȱIDLȬTypenȱundȱOperationenȱaufȱdieȱentsprechendeȱProgrammierspracheȱwichȬ tig.ȱHierȱsprichtȱmanȱvonȱLanguageȬBinding.ȱDieȱFormateȱderȱIDLȬBasistypenȱsindȱ inȱ derȱ CORBAȬSpezifikationȱ festgelegtȱ (OMGȱ 2004).ȱ Einȱ LanguageȬBindingȱ regeltȱ dieȱ Abbildungȱ aufȱ spezielleȱ Programmiersprachenȱ wieȱ Javaȱ oderȱ C++.ȱ Dasȱ MapȬ pingȱvonȱIDLȱaufȱeineȱSpracheȱwieȱJavaȱerfolgtȱalsoȱnachȱdefiniertenȱRegeln.ȱBeiȬ spielsweiseȱwirdȱinȱJavaȱeinȱIDLȬModulȱaufȱeinȱgleichnamigesȱJavaȬPackageȱabgeȬ bildet.ȱ Meistensȱ gibtȱ esȱ beiȱ konkretenȱ Bindingsȱ fürȱ Programmiersprachenȱ keineȱ 1:1ȬAbbildungȱ derȱ Typensysteme.ȱ Einȱ IDLȬTypȱ unsignedȱ longȱ kannȱ z.B.ȱ größereȱ Zahlenȱdarstellenȱalsȱeinȱ4ȬByteȬIntegerȱinȱJava.ȱȱ
Marshalling und Unmarshalling Fürȱ dieȱ Übertragungȱ derȱ Methodenaufrufe,ȱ Parameterȱ undȱ Returnwerteȱ wirdȱ inȱ CORBAȱ eineȱ einheitlicheȱ Transportsyntaxȱ mitȱ derȱ Bezeichnungȱ CDRȱ (Commonȱ DataȱRepresentation)ȱ verwendet.ȱ CDRȱ stelltȱ eineȱähnlicheȱ Lösungȱwieȱ ONCȱ XDRȱ bereit.ȱEinȱIDLȬCompilerȱerzeugtȱdieȱRoutinenȱfürȱdieȱSerialisierungȱundȱDeserialiȬ sierungȱ automatischȱ ausȱ derȱ IDLȬSchnittstellenbeschreibung.ȱ Zurȱ Laufzeitȱ wirdȱ währendȱ desȱ SerialisierungsȬ/Deserialisierungsvorgangsȱ eineȱ CORBA::DATA_Ȭ CONVERSIONȬAusnahmeȱgeworfen,ȱwennȱdieȱAbbildungȱeinesȱWertsȱderȱTransȬ portsyntaxȱaufȱeineȱkonkrete,ȱlokaleȱSyntaxȱnichtȱmöglichȱist.ȱ
Adressierung und Kommunikation NamensauflösungȱundȱNamingȬ/DirectoryȬService:ȱDieȱNamenȱderȱServerobjekteȱ werdenȱauchȱbeiȱCORBAȱüberȱeinenȱNamingȬServiceȱverwaltet,ȱderȱinȱCORBAȱalsȱ eigenerȱ Dienstȱ spezifiziertȱ ist.ȱ Dieȱ Referenzierungȱ vonȱ verteiltenȱ Objektenȱ geȬ schiehtȱ inȱ CORBAȱ überȱ eineȱ Objektreferenz.ȱ Manȱ mussȱ aberȱ zwischenȱ derȱ lokalȱ überȱdenȱStubȱverwendetenȱObjektreferenzȱimȱClientȱundȱderȱObjektreferenz,ȱdieȱ imȱORBȱverwaltetȱwird,ȱunterscheiden.ȱ Derȱ Clientȱ ruftȱ Methodenȱ desȱ verteiltenȱ Objektsȱ überȱ seineȱ lokaleȱ Objektreferenzȱ auf.ȱInȱderȱImplementierungȱhandeltȱesȱsichȱhierȱtypischerweiseȱumȱeinenȱPointerȱ aufȱeinȱlokalesȱObjekt,ȱderȱnichtȱzwischenȱProzessenȱausgetauschtȱwerdenȱkann.ȱȱ CORBAȬObjekteȱ müssenȱ eindeutigȱ identifizierbarȱ sein.ȱ Diesȱ geschiehtȱ überȱ eineȱ eindeutige,ȱsprachunabhängigeȱObjektreferenz.ȱDieseȱsprachunabhängigeȱDarstelȬ
ȱ
73
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ lungȱwirdȱalsȱIORȱ(InteroperableȱObjectȱReference)ȱbezeichnet.ȱInȱderȱIORȱmüssenȱ auchȱ dieȱ RechnerȬȱ undȱ dieȱ Prozessadresseȱ desȱ Objektsȱ enthaltenȱ sein.ȱ Damitȱ istȱ auchȱ dieȱ Kommunikationȱ zwischenȱ Objekten,ȱ dieȱ inȱ verschiedenenȱ CORBAȬ Implementierungenȱ ablaufen,ȱ möglich.ȱ Derȱ Aufbauȱ einerȱ IORȱ istȱ inȱ Abbildungȱ 2Ȭ25ȱ aufgezeichnet.ȱSieȱenthältȱalleȱAdressierungsinformationenȱzurȱAdressierungȱ einesȱ CORBAȬObjektsȱ ausȱ Sichtȱ desȱ Clientsȱ undȱ istȱ entsprechendȱ Abbildungȱ 2Ȭ25ȱ aufgebaut:ȱ – Dieȱ RepositoryȬIdȱ dientȱ demȱ Auffindenȱ derȱ IORȱ inȱ einemȱ InterfaceȬ Repository.ȱ Diesȱ istȱ einȱ einfachesȱ Verzeichnisȱ mitȱ Metainformationenȱ überȱ dieȱ Schnittstellenȱ vonȱ CORBAȬObjekten.ȱ Dasȱ InterfaceȬRepositoryȱ istȱ BeȬ standteilȱderȱORBȬImplementierung.ȱ – DieȱTaggedȱProfilesȱenthaltenȱdieȱkompletteȱInformationȱfürȱdieȱNutzungȱdesȱ Objekts,ȱwobeiȱfürȱjedesȱunterstützteȱProtokollȱeinȱProfilȱangelegtȱwirdȱ(derȬ zeitȱnurȱfürȱIIOP).ȱImȱBildȱistȱeinȱProfilȱfürȱeineȱIIOPȬbasierteȱIORȱskizziertȱ (IIOPȱsieheȱunten).ȱȱ – Dasȱ Feldȱ Hostadresseȱ enthältȱ entwederȱ einenȱ DNSȬHostnamenȱ oderȱ dieȱ IPȬ Adresse.ȱȱ – Dasȱ PortȬFeldȱ gibtȱ dieȱ TCPȬPortnummerȱ an,ȱ unterȱ derȱ derȱ Serverȱ aufȱ ReȬ questsȱ fürȱ diesesȱ Objektȱ horcht.ȱ Überȱ dieȱ Hostadresseȱ undȱ denȱ Portȱ wirdȱ zunächstȱderȱObjektserverȱgefunden.ȱ – Imȱ Feldȱ Objektschlüsselȱ sindȱ Informationenȱ zurȱ Adressierungȱ innerhalbȱ desȱ Objektserversȱ kodiert.ȱ Hierzuȱ gehörenȱ eineȱ POAȬIdȱ zurȱ Adressierungȱ desȱ POA,ȱeineȱObjektȬIdȱzurȱAdressierungȱdesȱkonkretenȱCORBAȬObjektsȱinnerȬ halbȱ desȱ POAȱ undȱ weitereȱ Informationen.ȱ Dieȱ Zuordnungȱ vonȱ abstraktenȱ CORBAȬObjektenȱzuȱkonkretenȱServantsȱerfolgtȱmitȱHilfeȱderȱObjektȬId.ȱȱ – ImȱKomponentenȬFeldȱsindȱweitereȱInformationenȱzumȱAufrufȱvonȱMethoȬ denȱeinesȱObjekts,ȱdieȱhierȱnichtȱweiterȱerläutertȱwerdenȱsollen.ȱ Tagged Profiles IOR
Repository-Id
Profil-Id
IIOPHostadresse Version
POA-Id
Profil
Port
Objekt-Id
...
ObjektKomponenten schlüssel
Weitere serverspezifische Informationen
ȱ Abbildungȱ2Ȭ25:ȱCORBAȬIORȱmitȱIIOPȬInformationenȱnachȱ(Tanenbaumȱ2003)ȱ
74 ȱ
2.3ȱȱVerteilteȱObjekteȱ DerȱCORBAȬNamingȬServiceȱunterstütztȱdenȱClientȱȱbeimȱAuffindenȱeinerȱObjektȬ adresse,ȱ alsoȱ derȱ entferntenȱ Objektreferenz.ȱ Namen,ȱ anȱ dieȱ manȱ Objekteȱ bindenȱ kann,ȱ sindȱ freiȱ wählbarȱ undȱ ortsunabhängig.ȱ Derȱ Implementierungsortȱ einesȱ CORBAȬObjektesȱkannȱfürȱClientsȱtransparentȱgeändertȱwerden.ȱDerȱCORBAȱNaȬ mingȬServiceȱ istȱ selbstȱ einȱ CORBAȬServerobjektȱ undȱ mussȱ alsȱ solcherȱ implemenȬ tiertȱsein.ȱInȱderȱAnwendungȱkannȱmanȱbeiȱeinerȱgeeignetenȱImplementierungȱfürȱ Ortstransparenzȱsorgen.ȱȱ DasȱBootstrappingȬProblemȱistȱauchȱinȱCORBAȱvorhanden.ȱDerȱClientȱmussȱzuerstȱ dieȱAdresseȱeinesȱNamingȬServiceȱherausfinden,ȱbevorȱerȱvonȱdiesemȱdieȱAdressenȱ derȱverteiltenȱObjekteȱermittelnȱkann.ȱFürȱdasȱinitialeȱBootstrappingȱbietetȱCORBAȱ zweiȱspezielleȱOperationen:ȱ – list_initial_references:ȱGibtȱdieȱNamenȱallerȱinitialȱverfügbarenȱDiensteȱzurückȱ ȬȱdazuȱgehörtȱauchȱderȱNamingȱService.ȱ – resolve_initial_references:ȱ Liefertȱ zuȱ einemȱ gegebenenȱ Dienstnamenȱ eineȱ IORȱ (ORBȬunabhängigeȱ Referenz)ȱ aufȱ dasȱ entsprechendeȱ CORBAȬObjekt.ȱ Fürȱ denȱNamingȬServiceȱliefertȱ dieȱMethodeȱ einenȱglobalenȱ Namenskontextȱ alsȱ Referenz.ȱ AufȱderȱClientseiteȱkannȱderȱNamenskontextȱnachȱeinerȱReferenzȱaufȱdenȱgesuchȬ tenȱDienstȱabgefragtȱwerden.ȱ Kommunikation:ȱ Derȱ ORBȱ alsȱ zentraleȱ Komponenteȱ wickeltȱ dieȱ Kommunikationȱ abȱundȱnutztȱdabeiȱeinenȱdefiniertenȱProtokollstack,ȱderȱinȱAbbildungȱ2Ȭ26ȱzuȱseȬ henȱ ist.ȱ Inȱ diesemȱ Bildȱ sindȱ auchȱ derȱ logischeȱ undȱ derȱ tatsächlicheȱ NachrichtenȬ flussȱskizziert.ȱ in-Argumente methode ()
Objektreferenz
COBRA-Objekt bzw. Servant
out-Argumente und Rückgabewert
Stub
Skeleton
Objektadapter
Naming Service
IIOP TCP IP
IIOP
ORB
TCP IP
Protokollstack
ȱ
Abbildungȱ2Ȭ26:ȱZusammenspielȱimȱÜberblickȱ
DerȱClientȬStubȱübernimmtȱdasȱMarshallingȱundȱgibtȱRequestsȱanȱdenȱORBȱweiter.ȱȱ DerȱORBȱistȱdafürȱzuständig,ȱdasȱObjekt,ȱalsoȱdenȱzugehörigenȱServant,ȱzuȱlokaliȬ sierenȱ undȱ denȱ Aufrufȱ serverseitigȱ anȱ denȱ entsprechendenȱ Objektadapterȱ weiterȬ zugeben.ȱ Derȱ Objektadapterȱ istȱ u.a.ȱ fürȱ dieȱ Aktivierungȱ desȱ CORBAȬObjektsȱ zuȬ
ȱ
75
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ ständig,ȱfallsȱesȱimȱServerȱnochȱnichtȱläuft.ȱDerȱAufrufȱwirdȱvomȱObjektadapterȱanȱ dasȱSkeletonȱweitergegeben.ȱDieȱParameterȱwerdenȱdabeiȱentpacktȱundȱdieȱeigentȬ licheȱ ObjektȬImplementierungȱ mitȱ derȱ Ausführungȱ derȱ Methodeȱ beauftragt.ȱ Dieȱ RückgabeȱderȱErgebnisseȱ(Response)ȱgeschiehtȱanalog.ȱȱ ORBsȱ kommunizierenȱ überȱ einȱ vonȱ derȱ OMGȱ definiertesȱ Protokoll,ȱ dasȱ alsȱ GIOPȱ (GeneralȱInterȬORBȱProtocol)ȱbezeichnetȱwird.ȱGIOPȱistȱdieȱallgemeine,ȱtransportȬ unabhängigeȱSpezifikationȱdesȱProtokollsȱundȱbeschreibtȱminimaleȱAnforderungenȱ anȱdasȱTransportprotokoll.ȱDasȱzugrundeliegendeȱTransportprotokollȱsollteȱzuverȬ lässigȱ undȱ verbindungsorientiertȱ seinȱ undȱ auchȱ einȱ ByteȬStreamingȬKonzeptȱ wieȱ beispielsweiseȱTCPȱunterstützen.ȱEsȱstelltȱeineȱFamilieȱvonȱProtokollen,ȱkeineȱkonȬ kreteȱ Implementierungȱ dar.ȱ Alsȱ Fehlersemantikȱ wirdȱ AtȬMostȬOnceȱ gefordert.ȱ Inȱ Abbildungȱ 2Ȭ27ȱ istȱ derȱ Ablaufȱ einesȱ synchronenȱ CORBAȬRequestsȱ mitȱ statischenȱ Stubȱ undȱ Skeletonȱ skizziert.ȱ Dieȱ Nachrichtenübertragungȱ erfolgtȱ hierȱ überȱ dieȱ bisherȱ einzigeȱ praxisrelevanteȱ GIOPȬImplementierungȱ mitȱ derȱ Bezeichnungȱ IIOPȱ (InternetȱIOP).ȱIIOPȱnutztȱTCPȱalsȱTransportprotokoll.ȱ Clientrechner
Serverrechner
Client o.m();
Stub Request
ORB
ORB
BOA/POA
Skeleton
Servant
Marshalled Request IIOP-PDU
Marshalled Response
IIOP-PDU
Marshalled Request
Marshalled Response
Marshalled Request
Marshalled Response
Unmarshalled Request Response
Request bearbeiten
Response
ȱ Abbildungȱ2Ȭ27:ȱZeitlicherȱAblaufȱeinesȱsynchronenȱCORBAȬRequestsȱ
GIOP/IIOPȱistȱeinȱeinfachesȱRequestȬ/ResponseȬProtokoll.ȱAlsȱDatenrepräsentationȱ wirdȱ CDRȱ(CommonȱDataȱRepresentation)ȱ verwendet,ȱ dasȱ demȱ XDRȱ ausȱ Sunȱ ONCȱ ähnelt.ȱ GIOP/IIOPȱ istȱ ursprünglichȱ unidirektionalȱ (halbduplexfähig)ȱ spezifiziert,ȱ aberȱ abȱ CORBAȱ V3.0ȱ gibtȱ esȱ auchȱ eineȱ bidirektionaleȱ (vollduplexfähige)ȱ GIOPȬ Variante.ȱEinȱClientȱsendetȱeinenȱRequestȱanȱdenȱServerȱundȱderȱServerȱantwortetȱ mitȱ einerȱ ResponseȬNachricht.ȱ Derȱ Clientȱ istȱ auchȱ grundsätzlichȱ fürȱ denȱ VerbinȬ dungsaufbauȱüberȱdasȱverwendeteȱTransportprotokollȱverantwortlich.ȱDerȱServerȱ darfȱdiesȱnicht.ȱ EsȱgibtȱachtȱGIOP/IIOPȬPDUsȱ(OMGȱ2004):ȱ
76 ȱ
2.3ȱȱVerteilteȱObjekteȱ – Request:ȱ Wirdȱ vomȱ Clientȱ gesendetȱ undȱ enthältȱ einenȱ Methodenaufrufȱ (ReȬ quest)ȱanȱeinȱverteiltesȱObjekt.ȱ – Reply:ȱWirdȱvomȱServerȱalsȱAntwortȱaufȱeinenȱRequestȱgesendet.ȱ – CancelRequest:ȱWirdȱvomȱClientȱgesendet,ȱumȱeinenȱRequestȱoderȱeinenȱLocaȬ teRequestȱabzubrechen.ȱDerȱClientȱwartetȱnachȱdemȱSendenȱdiesesȱNachrichȬ tentypsȱnichtȱmehrȱaufȱeinenȱReply.ȱDieȱNutzungȱvonȱCancelRequestȱbedeutetȱ allerdingsȱnicht,ȱdassȱderȱRequestȱimȱServerȱnichtȱmehrȱausgeführtȱwird.ȱ – LocateRequest:ȱDerȱClientȱsendetȱdiesenȱNachrichtentypȱanȱdasȱImplementieȬ rungsȬRepositoryȱ(alsoȱanȱdenȱentferntenȱORB),ȱumȱherauszufinden,ȱwoȱeinȱ bestimmtesȱObjektȱerreichtȱwerdenȱkann.ȱ – LocateReply:ȱDerȱServerȱsendetȱdiesenȱNachrichtentypȱalsȱAntwortȱaufȱLocaȬ teRequest.ȱDasȱImplementierungsȬRepositoryȱ(derȱentfernteȱORB)ȱantwortetȱ mitȱ diesemȱ Nachrichtentypȱ undȱ sendetȱ damitȱ Informationenȱ zumȱ Ortȱ desȱ Objekts,ȱwelchesȱgesuchtȱwurde.ȱ – CloseConnection:ȱWirdȱvomȱServerȱgesendet,ȱumȱeineȱVerbindungȱzuȱschlieȬ ßen.ȱ – MessageError:ȱWirdȱvonȱbeidenȱPartnernȱbeiȱeinemȱFehlerȱgesendet.ȱ – Fragment:ȱ Überȱ diesenȱ Nachrichtentypȱ istȱ esȱ möglich,ȱ eineȱ großeȱ IIOPȬ Nachrichtȱ inȱ einzelneȱ Fragmenteȱ zuȱ zerlegen,ȱ dieȱ beimȱ Empfängerȱ vorȱ derȱ ZustellungȱzumȱAnwendungsbausteinȱzusammengebautȱwerden.ȱ JederȱRequestȱistȱdurchȱeineȱRequestȬIdȱgekennzeichnet,ȱdieȱimȱAufruferȱeindeutigȱ istȱundȱvomȱORBȱerzeugtȱwird.ȱEineȱReplyȬPDUȱmussȱsichȱaufȱdenȱRequestȱüberȱ dieȱRückgabeȱderȱRequestȬIdȱbeziehen.ȱ Inȱ derȱ GIOP/IIOPȬSpezifikationȱ werdenȱ Protokollregelnȱ festgelegt.ȱ Beispielsweiseȱ darfȱ nurȱ derȱ Clientȱ denȱ Verbindungsaufbauȱ zuȱ einemȱ Serverȱ initiieren.ȱ Nurȱ derȱ Serverȱ initiiertȱ dagegenȱ denȱ Verbindungsabbauȱ mitȱ einerȱ CloseConnectionȬPDU,ȱ undȱ zwarȱ nurȱ dann,ȱ wennȱ erȱ alleȱ Requestsȱ bearbeitetȱ hat.ȱ Clientsȱ müssenȱ nachȱ Absetzenȱ einesȱ Requestsȱ nichtȱ aufȱ einenȱ Replyȱ wartenȱ (nichtȱ blockierend).ȱ ReȬ questsȱ dürfenȱ sichȱ überholen,ȱ dieȱ GIOP/IIOPȬInstanzenȱ verwaltetȱ dieȱ RequestȬ Reihenfolge.ȱ Einȱ offenerȱ Requestȱ kannȱ vomȱ Clientȱ mitȱ einerȱ CancelRequestȬPDUȱ abgebrochenȱ werden.ȱ Zudemȱ könnenȱ Verbindungenȱ mehrfachȱ zuȱ einerȱ Zeitȱ verȬ wendetȱundȱdamitȱmultiplexiertȱwerdenȱ(multiplexedȱConnections).ȱ Abbildungȱ2Ȭ28ȱ ȱzeigtȱdenȱNachrichtenflussȱfürȱmehrereȱRequestsȱeinesȱClientsȱanȱ einenȱCORBAȬServer.ȱHierȱwerdenȱnacheinanderȱdreiȱRequestsȱausgeführt,ȱwobeiȱ Requestȱ 2ȱ undȱ 3ȱ asynchronȱ gesendetȱ werden.ȱ Dieȱ asynchroneȱ Ausführungȱ einesȱ RequestsȱistȱvorȱallemȱimȱhierȱnichtȱweiterȱausgeführtenȱDynamicȱInvocationȱInterȬ faceȱ(DII)ȱnotwendig.ȱ
ȱ
77
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ CORBAClient
CORBAServer TCP-Verbindungsaufbau Request 1
Reply 1 Request 2 Request 3
Reply 3 Reply 2 tion Close Connec
TCP-Verbindungsabbau
ȱ Abbildungȱ2Ȭ28:ȱNachrichtenflussȱbeiȱeinerȱGIOP/IIOPȬVerbindungȱ
GIOPȬPDUsȱunterscheidenȱsichȱjeȱnachȱGIOPȬVersion.ȱImȱFolgendenȱwerdenȱeiniȬ geȱvereinfachteȱRequestȬPDUȱgezeigt.ȱImȱRequest/ReplyȬBodyȱwerdenȱdieȱParameȬ terȱ (in/inout)ȱ bzw.ȱ dieȱ Ergebnisseȱ (inout/out)ȱ übertragen.ȱ Derȱ grundsätzlicheȱ NachrichtenaufbauȱistȱinȱAbbildungȱ2Ȭ29ȱdargestellt.ȱ GIOP Message Header Request bzw. Reply Message Header Request bzw. Reply Body
ȱ Abbildungȱ2Ȭ29:ȱGIOPȬNachrichtenaufbauȱ
DieȱSpezifikationȱdesȱGIOPȬHeadersȱsowieȱdesȱRequestȬȱbzw.ȱReplyȬHeadersȱsiehtȱ inȱderȱIDLȬNotationȱwieȱfolgtȱaus:ȱ module GIOP { // GIOP-Header struct Version { octet major; octet minor; }; enum MsgType { Request, Reply, CancelRequest, LocateRequest, LocateReply, CloseConnection, MessageError, Fragment }; struct MessageHeader { char magic[4]; // enthält immer „GIOP“
78 ȱ
2.3ȱȱVerteilteȱObjekteȱ Version GIOP_version; // Version von GIOP boolean byte_order; // big oder low endian octet flags; // Kennzeichen, ob Fragmentierung zulässig,... MsgType message_type; // Typ der Nachricht unsigned long message_size; // Länge der folgenden Nachricht }; }; module GIOP { // GIOP-Request-/Reply-Header struct RequestHeader_1_1 { IOP::ServiceContextList; // Service-Daten des Clients unsigned long request_id;
//Eindeutige Request-Identifikation
boolean response_expected; // Antwort erwartet oder nicht octet reserved[3]; sequence object_key; // Adressiertes Zielobjekt string operation; // Aufzurufende Operation im Server CORBA::OctetSeq requesting_principal; // Requestor-Id }; // Nach dem Request-Header werden die Parameter in der in // IDL festgelegten Reihenfolge übertragen. };
Imȱ Feldȱ object_keyȱ istȱ derȱ obenȱ beschriebeneȱ Objektschlüsselȱ mitȱ POAȬId,ȱ ObjektȬIdȱ usw.ȱ enthalten.ȱ Jedeȱ IIOPȬNachrichtȱ enthältȱ eineȱ eindeutigeȱ RequestȬIdȱ imȱ Feldȱ request_id.ȱ
Garbage-Collection AufgrundȱderȱSprachunabhängigkeitȱistȱesȱinȱCORBAȱnichtȱmöglich,ȱeinenȱverteilȬ tenȱGarbageȬCollectionȬMechanismusȱzuȱunterstützen,ȱderȱfürȱalleȱBindingsȱfunkȬ tioniert.ȱAuchȱdasȱinȱCORBAȱdefinierteȱProtokollȱGIOPȱbzw.ȱIIOPȱsiehtȱkeineȱGarȬ bageȬCollectionȬUnterstützungȱ vor.ȱ Wennȱ alsoȱ derȱ Clientȱ eineȱ Referenzȱ aufȱ einȱ entferntesȱ Objektȱ erhält,ȱ kannȱ erȱ diesȱ nichtȱ anȱ denȱ Serverȱ kommunizieren.ȱ Dasȱ Garbageȱ Collectionȱ mussȱ alsoȱ dieȱ CORBAȬImplementierungȱ eigenständigȱ undȱ ohneȱweitereȱVorgabenȱdurchȱdieȱSpezifikationȱlösen.ȱ
Nebenläufigkeit Dieȱ Nebenläufigkeitȱ vonȱ CORBAȬImplementierungenȱ kannȱ durchȱ dieȱ Einstellungȱ vonȱ sog.ȱ Policiesȱ imȱ POAȱ beeinflusstȱ werden.ȱ Mitȱ derȱ Angabeȱ derȱ Threadȱ Policyȱ kannȱmanȱz.B.ȱfestlegen,ȱdassȱfürȱjedeȱTransaktionȱoderȱfürȱjedeȱSessionȱeinȱeigenerȱ Threadȱerzeugtȱwird.ȱFolgendeȱKonfigurationsmöglichkeitenȱsindȱu.a.ȱdenkbar:ȱ – SINGLE_THREAD_MODEL:ȱEinȱThreadȱbedientȱalleȱRequestsȱnacheinanderȱ (iterativerȱ Server).ȱ Diesȱ istȱ nurȱ beiȱ Servercode,ȱ derȱ nichtȱ threadȬsafeȱ ist,ȱ sinnvoll.ȱ
ȱ
79
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ – ORB_CTRL_MODEL:ȱ Derȱ ORBȱ erzeugtȱ fürȱ jedenȱ eingehendenȱ Requestȱ eiȬ nenȱeigenenȱThread.ȱDiesȱentsprichtȱeinemȱparallelenȱServer.ȱ Dieȱ Zuordnungȱ vonȱ CORBAȬObjektenȱ zuȱ Servantsȱ wirdȱ ebenfallsȱ überȱ POAȬ Policiesȱkontrolliert.ȱÜberȱdieȱObjectȱIdȱUniquenessȱPolicyȱkönnenȱz.B.ȱfolgendeȱEinȬ stellungenȱvorgenommenȱwerden:ȱ – UNIQUE_ID:ȱServantȱverwaltetȱnurȱeinȱCORBAȬObjektȱ – MULTIPLE_ID:ȱServantȱkannȱmehrereȱCORBAȬObjekteȱverwaltenȱ Beispiel:ȱ POAȬKonfigurierung:ȱ Dieȱ POAȬKonfigurierungȱ sollȱ anhandȱ einesȱ kleiȬ nenȱ Serverprogrammsȱ gezeigtȱ werden.ȱ Inȱ demȱ Programmȱ werdenȱ zunächstȱ einȱ ORBȱundȱanschließendȱeinȱRootȬPOAȱerzeugtȱundȱaktiviert.ȱDanachȱwirdȱeinȱeigeȬ nerȱ POAȱ mitȱ derȱ ThreadȱPolicyȱ ORB_CTRL_MODELȱ ergänzt.ȱ Schließlichȱ wirdȱ dieȱ KontrolleȱanȱdenȱORBȱübergeben.ȱ public class MyCORBAServer { public static void main (String [] Args) throws Exception { ORB orb = ORB.init (Args, null); POA rootPOA = POAHelper.narrow (orb.resolve_initial_references ("RootPOA")); rootPOA.the_POAManager ().activate (); // Policies fuer neuen POA festlegen POA myPOA = rootPOA.create_POA ("myPOA", rootPOA.the_POAManager ()); myPOA.create_thread_policy(ThreadPolicyValue.ORB_CTRL_MODEL); myPOA.the_POAManager().activate(); orb.run (); … }
Lebenszyklus von Serverbausteinen ÜberȱdieȱPOAȱLifespanȱPolicyȱkannȱeinȱObjektȱalsȱtransientȱ(lebtȱsolangeȱderȱServerȱ lebt)ȱ oderȱ persistentȱ (lebtȱ längerȱ alsȱ derȱ Server)ȱ definiertȱ werden.ȱ Damitȱ werdenȱ alsoȱPersistenzeigenschaftenȱfestgelegt.ȱ Überȱ dieȱ POAȬPolicyȱ Implicitȱ Activationȱ kannȱ dieȱ Aktivierungȱ vonȱ CORBAȬObȬ jektenȱgesteuertȱwerden.ȱFolgendeȱEinstellungenȱsindȱmöglich:ȱ – IMPLICIT_ACTIVATION:ȱImpliziteȱErzeugungȱbzw.ȱAktivierungȱdurchȱdenȱ POA.ȱ – NO_IMPLICIT_ACTIVATION:ȱ Keineȱ impliziteȱ Erzeugung,ȱ d.h.ȱ derȱ Serverȱ mussȱObjekteȱexplizitȱaktivieren.ȱDiesȱmussȱalsoȱprogrammiertȱwerden.ȱ Darüberȱ hinausȱ verfügtȱ CORBAȱ überȱ einenȱ speziellenȱ Lifecycleȱ Service,ȱ mitȱ demȱ manȱ CORBAȬObjekteȱ erzeugen,ȱ löschen,ȱ kopierenȱ undȱ verschiebenȱ kann.ȱ Überȱ diesenȱ Serviceȱ kannȱ derȱ Lebenszyklusȱ vonȱ Serverbausteinenȱ überȱ eineȱ Factoryȱ
80 ȱ
2.3ȱȱVerteilteȱObjekteȱ gesteuertȱ werden.ȱ Allerdingsȱ hatȱ dieserȱ Serviceȱ nieȱ praktischeȱ Relevanzȱ erlangtȱ undȱsollȱdaherȱauchȱnichtȱweiterȱerläutertȱwerden.ȱ
Basisdienste CORBAȱ stelltȱ mitȱ denȱ CORBAservicesȱ eineȱ Fülleȱ vonȱ Dienstspezifikationenȱ zurȱ Verfügung,ȱ dieȱ vonȱ Herstellernȱ zumȱ Teilȱ implementiertȱ werdenȱ müssen.ȱ InsgeȬ samtȱ sindȱ mehrȱ alsȱ 15ȱ dieserȱ Servicesȱ spezifiziert.ȱ Sieȱ stellenȱ Basismechanismenȱ bereit,ȱdieȱfürȱdieȱEntwicklungȱverteilterȱAnwendungenȱnotwendigȱsind.ȱAlsȱBeiȬ spieleȱ sindȱ hierȱ derȱ NamingȬService,ȱ einȱ EventȬService,ȱ einȱ SecurityȬService,ȱ einȱ ExternalizationȬService,ȱ einȱ TransactionȬService,ȱ einȱ SecurityȬService,ȱ einȱ ConcurȬ rencyȬControlȬService,ȱ derȱ LifecycleȬServiceȱ usw.ȱ zuȱ nennen.ȱ Jederȱ Serviceȱ stelltȱ Schnittstellenȱbereit,ȱdieȱüberȱIDLȱspezifiziertȱsind.ȱAuchȱüberȱdieȱCORBAfacilitiesȱ werdenȱ dieȱ bereitsȱ genanntenȱ Standarddiensteȱ angeboten.ȱ Allerdingsȱ habenȱ dieȱ meistenȱ Diensteȱ keineȱ praktischeȱ Relevanzȱ erlangt.ȱ Eineȱ Ausnahmeȱ bildetȱ derȱ CORBAȬTransaktionsdienst,ȱderȱinȱKapitelȱ4ȱnochȱerläutertȱwird.ȱ
Sonstige Unterscheidungsmerkmale AufgrundȱderȱvielfältigenȱPOAȬEinstellmöglichkeitenȱ(Policies)ȱkannȱfürȱCORBAȬ basierteȱ Anwendungenȱ eineȱ guteȱ Skalierbarkeitȱ erreichtȱ werden.ȱ Derȱ NamingȬ Serviceȱ kannȱ vonȱ einemȱ CORBAȬHerstellerȱ soȱ umgesetztȱ werden,ȱ dassȱ erȱ auchȱ einenȱ Beitragȱ zurȱ Erhöhungȱ derȱ Verfügbarkeitȱ einesȱ CORBAȬbasiertenȱ Systemsȱ leistenȱ kann,ȱ wasȱ manȱ etwaȱ durchȱ ClusteringȬUnterstützungȱ erreichenȱ kann.ȱ LöȬ sungenȱ hierfürȱ sindȱ allerdingsȱ nichtȱ standardisiert,ȱ sondernȱ denȱ CORBAȬ Implementierungenȱüberlassen.ȱȱ
2.3.3
Fallbeispiel Java-RMI
JavaȬRMIȱ(RemoteȱMethodȱInvocation,ȱimȱWeiterenȱkurzȱalsȱRMIȱbezeichnet)ȱkannȱ auchȱalsȱWeiterentwicklungȱdesȱRemoteȱProcedureȱCallȱ(RPC)ȱaufgefasstȱwerden.ȱ Währendȱ RPCȬMechanismenȱ eineȱ prozeduraleȱ Notationȱ vorweisen,ȱ istȱ JavaȬRMIȱ eineȱ Weiterentwicklungȱ inȱ Richtungȱ einerȱ objektorientiertenȱ RPCȬVariante.ȱ Beiȱ JavaȬRMIȱ werdenȱ imȱ Gegensatzȱ zuȱ RPCȱ keineȱ Einzelfunktionenȱ aufgerufen,ȱ sonȬ dernȱentfernteȱMethodenȱvonȱRemoteȬObjekten.ȱRMIȱ(RemoteȱMethodȱInvocation)ȱ istȱnurȱinȱderȱSpracheȱJavaȱundȱzwarȱimȱPackageȱjava.rmiȱverfügbar.ȱ
Architektur Dieȱ RMIȬArchitekturȱ (Abbildungȱ 2Ȭ30)ȱ siehtȱ vor,ȱ dassȱ sowohlȱ derȱ RMIȬClient,ȱ alsȱ auchȱderȱRMIȬServerȱinȱeinerȱeigenenȱJavaȱVirtualȱMachineȱ(JVM)ȱablaufen.ȱDamitȱ istȱeineȱeinheitlicheȱAblaufumgebungȱgewährleistet.ȱEinȱRMIȬClientȱverwendetȱfürȱ denȱZugriffȱaufȱeinȱServerobjektȱeinenȱProxy,ȱderȱdieȱeigentlicheȱKommunikationȱ undȱ auchȱ dasȱ Marshalling/Unmarshallingȱ ausführt.ȱ Einȱ RMIȬClientȱ sendetȱ denȱ MethodenaufrufȱanȱeinenȱRMIȬServer,ȱderȱinȱeinerȱeigenenȱJVMȱeinenȱoderȱmehreȬ reȱServerbausteineȱalsȱJavaȬObjekteȱbeherbergt.ȱ
ȱ
81
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ RMIRegistry (Naming-Service) kup Loo
Registrieren (bind)
RMI-Client
Stub
Clientprozess mit eigener JVM
Methodenaufruf
Skeleton
RMI-Serverbaustein
Serverprozess mit eigener JVM
ȱ Abbildungȱ2Ȭ30:ȱJavaȬRMIȱArchitekturüberblickȱ
Einȱ Methodenaufrufȱ wendetȱ sichȱ anȱ denȱ lokalenȱ Stub.ȱ Derȱ Stubȱ versendetȱ dannȱ denȱ serialisiertenȱ Methodenaufrufȱ samtȱ denȱ zugehörigenȱ Parameternȱ anȱ dasȱ SerȬ verobjekt,ȱ erwartetȱ dasȱ Ergebnisȱ undȱ gibtȱ esȱ anȱ denȱ Clientȱ weiter.ȱ Dieȱ NachrichȬ tenübermittlungȱ kannȱ aufgrundȱ derȱ einheitlichenȱ Umgebungȱ imȱ Clientȱ undȱ imȱ Serverȱ inȱ einemȱ JavaȬObjektstromȱ erfolgen.ȱ Dasȱ Marshalling/Unmarshallingȱ istȱ damitȱbereitsȱdurchȱdieȱSprachumgebungȱvorgegeben.ȱ AufȱderȱServerȬSeiteȱwirdȱderȱAufrufȱvonȱeinemȱSkeletonȬObjektȱempfangen,ȱdasȱ eineȱDeserialisierungȱderȱParameterȱvornimmtȱundȱdenȱAufrufȱanȱdasȱadressierteȱ Serverobjektȱ (instanziierterȱ Serverbaustein)ȱ weitergibt.ȱ Nachȱ derȱ Bearbeitungȱ durchȱ denȱeigentlichenȱMethodencodeȱwirdȱ dasȱ Ergebnisȱ überȱ denȱ gleichenȱWegȱ ebenfallsȱserialisiertȱzurückȱanȱdenȱClientȱgesendet.ȱ RMIȱ stelltȱ fürȱ dieȱ Programmierungȱ vonȱ Serverbausteinenȱ spezielleȱ Klassenȱ imȱ Packageȱ java.rmi.serverȱ zurȱ Verfügung.ȱ Dieseȱ sindȱ vereinfachtȱ imȱ Klassenmodellȱ ausȱ Abbildungȱ 2Ȭ31ȱ dargestellt.ȱ Dieȱ Klasseȱ RemoteObjectȱ wirdȱ vonȱ derȱ StandardȬ JavaȬObjektklasseȱObjectȱabgeleitetȱundȱenthältȱu.a.ȱeineȱspezielleȱMethodeȱequals()ȱ zumȱVergleichȱvonȱentferntenȱObjekten.ȱDieȱKlasseȱRemoteȬStubȱdientȱalsȱBasisȱfürȱ dieȱClientȬStubs.ȱDerȱAnwendungsprogrammiererȱmussȱsichȱumȱdieseȱKlasseȱnichtȱ kümmern.ȱDieȱabstrakteȱKlasseȱRemoteServerȱerweitertȱdieȱKlasseȱRemoteObjectȱundȱ dientȱalsȱBasisȱfürȱdieȱImplementierungȱeinesȱRemoteȬServers.ȱEinȱspeziellerȱRemoȬ teȬServerȱ istȱ inȱ derȱ Klasseȱ UnicastRemoteObjectȱ definiert.ȱ Dieseȱ Klasseȱ wirdȱ übliȬ cherweiseȱzurȱProgrammierungȱeigenerȱServerȱverwendet,ȱindemȱmanȱdenȱeigenenȱ ServerȱvonȱUnicastRemoteObjectȱableitet.ȱ DerȱAnwendungsentwicklerȱsiehtȱalsoȱimȱWesentlichenȱnurȱdieȱKlasseȱUnicastReȬ moteObject,ȱweilȱerȱseineȱServerobjektklasseȱdavonȱableitenȱmuss,ȱundȱdasȱInterfaceȱ Remote,ȱ dasȱ seineȱ Serverobjektklasseȱ implementierenȱ muss.ȱ Dieȱ Klasseȱ UnicastReȬ moteObjectȱ stelltȱ einȱ Rahmenwerkȱ fürȱ entfernteȱ Objekteȱ bereit,ȱ dessenȱ TransportȬ mechanismenȱaufȱTCPȱbasieren.ȱRMIȬServerȱundȱȬClientȱbauenȱzurȱKommunikatiȬ
82 ȱ
2.3 Verteilte Objekte on also auf TCPȬVerbindungen auf, was jedoch für den Programmierer transparent bleibt. Object
RemoteObject
RemoteStub
erbt
RemoteServer UnicastRemote Object
Abbildung 2Ȭ31: RMIȬKlasse UnicastRemoteObject mit Vererbungshierarchie
Erwähnenswert ist noch, dass die Objektklasse UnicastRemoteObject ein nicht repliȬ zierbares entferntes Objekt definiert, dessen Objektreferenz auch nur innerhalb des Serverprozesses gültig ist, in dem es erstmalig konstruiert wurde. „Nicht replizierȬ bar“ bedeutet also, dass ein RMIȬServerobjekt nicht zur Laufzeit auf einen anderen Serverprozess und schon gar nicht auf einen anderen Serverrechner verlegt (migriert) werden oder mehrmals im Netz laufen kann. Bei Fehlern in der Ausführung einer entfernten Methode wird vom Server eine RemoteException geworfen. Es können wie bei lokalen Methoden auch eigene ExȬ ceptions definiert werden. Der Client erhält eine Exception mit der ResponseȬ Nachricht.
Remote erbt
MyRemoteI op1() op2() …
Abbildung 2Ȭ32: RMIȬRemoteȬInterface definieren
Auf Basis dieser Klassen und Interfaces kann man nun einen eigenen Dienst bzw. dessen Interface definieren. Ein RemoteȬInterface für ein entferntes Serverobjekt wird vom Interface Remote abgeleitet (siehe Abbildung 2Ȭ32). Im Interface werden
83
2 Konzepte und Modelle verteilter Kommunikation die Methoden, so wie es in Java üblich ist, definiert. Die Implementierung des ReȬ moteȬInterface entspricht der Implementierung eines lokalen Interface mit dem einen Unterschied, dass die Implementierungsklasse von der Klasse UnicastRemoȬ teObject erbt. Die Zusammenhänge zwischen Klassen und Interfaces zur Implementierung eines eigenen RMIȬObjekts sind nochmals in Abbildung 2Ȭ33 zusammengefasst. Dabei gilt: – MyRemoteI: Beliebiger Name für eigenes Remote Interface – MyRemote: Eigene Implementierungsklasse – UnicastRemoteObject: StandardȬRMIȬKlasse, von dem alle eigenen RemoteȬ Objekte erben müssen – Remote: StandardȬRMIȬInterface, von dem alle RemoteȬInterfaces erben müsȬ sen
MyRemoteI
erbt
Remote
erbt
UnicastRemote Object
impl
MyRemote
Abbildung 2Ȭ33: Entwicklung eines eigenen RMIȬObjekts
Zustandsverwaltung In JavaȬRMI wird nicht zwischen zustandslosen und zustandsbehafteten ServerȬ bausteinen unterschieden. Auch Singletons werden nicht explizit unterstützt. Das bedeutet, dass der Programmierer selbst für die Zustandsverwaltung zuständig ist.
Parameterübergabe Einfache Datentypen (Elementartypen wie int und long) werden bei JavaȬRMI an den RMIȬProxy als Werte übergeben (CallȬbyȬvalue). Die Übergabe von JavaȬObjekten als Parameter erfolgt lokal zwar im Client zwiȬ schen ClientȬObjekt und RMIȬStub über Referenzen, für die Übertragung werden die Objekte aber in den RMIȬStrom kopiert und damit ebenfalls als Wertparameter (CallȬbyȬvalue) übergeben. Man bezeichnet das Verfahren – wie bereits oben ausgeȬ führt Ȭ auch mit CallȬbyȬcopy. Die Übergabe von Referenzen auf RemoteȬObjekte erfolgt als Referenzparameter (CallȬbyȬreference).
84
2.3 Verteilte Objekte
Dienstschnittstellen Die Beschreibung der Schnittstelle eines verteilten Objektes geschieht bei JavaȬRMI direkt in der Programmiersprache. Es gibt keine sprachneutrale Möglichkeit wie dies in CORBA durch die IDL sichergestellt ist. Die Schnittstelle eines verteilten Objekts wird als JavaȬInterface beschrieben, das nur das in JavaȬRMI vorgegebene RemoteȬInterface beerben muss. Der Unterschied zu einem lokalen Interface ist also nicht groß, aber es ist dennoch einer vorhanden. Unterschiedlich ist auch, dass man an der Schnittstelle spezielle Exceptions (RemoteException) behandeln muss. Für den Programmierer ist die Nutzung verteilter Objekte also sichtbar und er muss im Vergleich zur Nutzung einer lokalen Schnittstelle das ExceptionȬHandling anders vorsehen, wenn er die Schnittstelle eines entfernten Objekts nutzt. Die Schnittstellenbeschreibung kann alle Möglichkeiten von Java vorsehen. Es gilt das JavaȬTypkonzept. Da die JVM ein eigenes Typsystem hat, das völlig unabhänȬ gig von der konkreten HardwareȬArchitektur ist, ist eine spezielle Umwandlung der Nachrichten in eine Transfersyntax nicht erforderlich. Bedingung für den AusȬ tausch von Objekten in Argumenten und Returnwerten ist lediglich, dass diese gemäß der JavaȬObjektserialisierung serialisierbar sein müssen. Beispiele für die Beschreibung von Schnittstellen verteilter Objekte sind im folgenden Absatz skizȬ ziert. In neueren RMIȬVersionen wird nun auch RMI/IIOP (RMI über IIOP) unterstützt. Mit dieser Variante kann man die Schnittstellenbeschreibung im RMIȬStil durchȬ führen und auf Basis der RMIȬSchnittstellendefinitionen Code generieren, der die Kommunikation über IIOP durchführt. Hierzu wird ein Compiler (rmic6) verwenȬ det, der die JavaȬDatentypen auf CORBAȬIDLȬTypen abbildet. Die Nutzung dieser Möglichkeit ist dann sinnvoll, wenn man RMIȬProgramme entwickeln muss, die mit CORBAȬObjekten kommunizieren sollen. Bei RMI/IIOP sind aber einige ReȬ striktionen zu beachten, die sich aus der Abbildung der JavaȬDatentypen auf CORBAȬIDLȬDatentypen ergeben. Ab der Java Standard Edition 5 (J2SE 5) ist der rmicȬCompiler nicht mehr notwenȬ dig, da eine dynamische Generierung von Stub und Skeleton durchgeführt werden kann. Die RemoteȬAufrufe eines Clients sehen fast genauso aus wie lokale MethodenaufȬ rufe mit dem Unterschied, dass wegen Netzwerkfehlern zusätzlich eine spezielle Ausnahme (RemoteException) erzeugt werden kann.
6
Den Compiler rmic muss man mit der Option „Ȭiiop“ aufrufen, um die Generierung von CORBAȬCode zu bewirken. Die Option „Ȭidl“ erzeugt aus den angegebenen RMIȬ Schnittstellendefinitionen darüberhinaus auch eine IDLȬNotation. Umgekehrt gibt es bei RMI auch einen Compiler namens idlj, der aus einer IDLȬNotation eine JavaȬRMIȬ Schnittstellenbeschreibung generiert. Diese Mechanismen gibt es seit J2SE V1.3.
85
2 Konzepte und Modelle verteilter Kommunikation Beispiel „Interface einer RMIȬbasierten Artikelverwaltung“: Die folgende InterȬ faceȬDefinition für einen einfachen RMIȬbasierten Artikelmanager soll die NutȬ zung der vorhandenen JavaȬKlassen aufzeigen: package articlemanagement.server; import articlemanagement.*; import java.rmi.*; import java.util.Vector; public interface ArticleMgrRemoteI extends Remote { public void createArticle(long katalogId) throws ArticleMgrExistsException, RemoteException; public void createArticle(Article a) throws ArticleMgrExistsException, RemoteException; public void updateArticle(long katalogId, String beschreibung, float preis, long warengruppe) throws ArticleMgrNotFoundException, RemoteException; public Article findArticleByKatalogId(long katalogId) throws ArticleMgrNotFoundException, ArticleMgrParamException, RemoteException; public Vector findArticlesByGroup(long warengruppe) throws ArticleMgrNotFoundException, ArticleMgrParamException, RemoteException; public Vector findAllArticles() throws ArticleMgrNotFoundException, ArticleMgrParamException, RemoteException; public void deleteArticle(long katalogId) throws ArticleMgrNotFoundException, ArticleMgrParamException, RemoteException; }
Das Interface ArticleMgrRemoteI erbt vom RemoteȬInterface und beschreibt alle Operationen, die über den Artikelmanager ausgeführt werden können. In einer Implementierungsklasse sind alle Methoden zu programmieren. Die im Folgenden skizzierte Klasse ArticleMgrRemote erbt von UnicastRemoteObject und implementiert das RMIȬInterface ArticleMgrRemoteI. Die Artikel können ohne VerȬ änderung der Schnittstelle z.B. im Filesystem oder in einer Datenbank persistent gespeichert werden. Die Klasse Article beschreibt einen Artikel und ist für das BeiȬ spiel nicht weiter von Interesse. Der JavaȬCode für die speziellen Exceptions ist aus Vereinfachungsgründen nicht aufgeführt. package articlemanagement.server; import articlemanagement.*; import java.rmi.*; import java.rmi.server.*;
86
2.3 Verteilte Objekte … public class ArticleMgrRemote extends UnicastRemoteObject implements ArticleMgrRemoteI { ... // Konstruktor public ArticleMgrRemote() throws RemoteException { … } public void createArticle(long katalogId) throws ArticleMgrExistsException, RemoteException { … } public void createArticle(Article a) throws ArticleMgrExistsException, RemoteException { … } public void updateArticle(long katalogId, String beschreibung, float preis, long warengruppe) throws ArticleMgrNotFoundException, RemoteException { … } public Article findArticleByKatalogId(long katalogId) throws ArticleMgrNotFoundException, ArticleMgrParamException, RemoteException { System.out.println("start: findArticleByKatalogId"); … } public Vector findArticlesByGroup(long warengruppe) throws ArticleMgrNotFoundException, ArticleMgrParamException, RemoteException { … } public Vector findAllArticles() throws ArticleMgrNotFoundException, ArticleMgrParamException, RemoteException
87
2 Konzepte und Modelle verteilter Kommunikation { … } public void deleteArticle(long katalogId) throws ArticleMgrNotFoundException, ArticleMgrParamException, RemoteException { … } }
Über den RMIȬCompiler rmic (ab J2SE 5 dynamisch) werden ClientȬStub und SerȬ verȬSkeleton mit folgenden Dateinamen generiert: – ArticleMgrRemote_Stub.class – ArticleMgrRemote_Skel.class rmic ist ab Java Version 1.5 nicht mehr erforderlich. Die Stubs und Skeletons werȬ den dann dynamisch erzeugt. Der im Folgenden skizzierte Client legt einen neuen Artikel an und löscht anȬ schließend einen anderen Artikel. … import java.rmi.* ; import articlemanagement.*; public class ArticleMgrClient { // Artikelmanager-Interface private static ArticleMgrRemoteI aMgr = null; public static void main (String args[]) throws IOException { // Lookup zum besorgen de Objektreferenz hier nur angedeutet // Im Lookup-Aufruf die RMI-URL des Servers mit Hostname, // Port und Servicename angeben aMgr = (ArticleMgrRemote) = java.rmi.Naming.lookuk(rmi://hostname/AreticleMgr“); // Katalog-Id, Beschreibung, Warengruppe und Preis einlesen und // Artikel anlegen. Die Erfassung der Artikelattribute ist // im Beispiel nicht programmiert. Article a = new Article(); try { aMgr.createArticle(a); } catch (ArticleMgrExistsException e) {
88
2.3 Verteilte Objekte System.out.println("Artikel bereits vorhanden"); } // Weitere Katalog-Id einlesen und Artikel löschen try { aMgr.deleteArticle(katalogId); } catch (ArticleMgrNotFoundException e) { … } catch (Exception e) { … } … } }
Marshalling und Unmarshalling In Abbildung 2Ȭ34 wird das Marshalling bei RMI vereinfacht dargestellt. Man sieht, dass man auf ClientȬ und auf Serverseite durchaus komplexe Objektstrukturen aufbauen kann, die als Parameter bzw. Rückgabewerte über den Objektstrom geȬ sendet werden können. Als Programmierer muss man sich hierum nicht kümmern, da RMI die Objekte selbstständig serialisiert.
RMI Serialisierter Bytestrom
Eigene JVM
RMI
Eigene JVM
Objekte mit Beziehungen
Abbildung 2Ȭ34: Serialisierung bei RMI
Die Serialisierung bei RMI ist einfach und leistungsfähig, was sich aus der einheitȬ lichen Nutzung einer virtuellen Maschine ergibt, die eine übergreifende PräsentaȬ tion aller Datentypen vorgibt. Die übertragenen Objekte sind hinsichtlich ihrer lokalen Präsentation aufgrund der JVM immer gleich aufgebaut und müssen damit nicht transformiert, sondern zur Übertragung nur in eine flache Struktur gebracht
89
2 Konzepte und Modelle verteilter Kommunikation werden. Dabei spielt es auch keine Rolle, auf welchen Rechnerarchitekturen die ClientȬ und Serveranwendungen laufen. Die Präsentation der Datentypen in der JVM ist immer gleich. Für die Übertragung wird ein JavaȬObjektstrom verwendet, was bedeutet, dass alle übertragenen Objekte das Interface Serializable implemenȬ tieren müssen.
Adressierung und Kommunikation Namensauflösung und NamingȬ/DirectoryȬService: Die RMIȬRegistry ist ein sehr einfacher Namensdienst. Sie wird im Package java.rmi.Naming oder im Package java.rmi.Registry bereitgestellt. Mit den Klassen und Interfaces dieses Packages kann man ein Registry anlegen und auch einen eigenen NamingȬService impleȬ mentieren, wenn man die StandardȬRegistry nicht für geeignet hält. Jeder Eintrag in der Registry hat einen Namen und eine Objektreferenz. Der Namensraum ist nicht wie bei anderen NamingȬServices hierarchisch geordnet, sondern flach. Wie bei Sun RPC’s Portmapper wird auf jedem Serverrechner ein HintergrundproȬ zess mit dem Namen rmiregistry gestartet. Der Prozess belegt standardmäßig den TCPȬPort 1099. rmiregistry verwaltet die Objektreferenzen aller Serverobjekte, die auf dem Serverrechner laufen. Eine Instanz der Registry, also ein rmiregistryȬ Prozess, kann mehrere RMIȬServer und deren Objekte verwalten. Die Adressierung von Serverdiensten erfolgt über URLȬAdressen (Uniform ReȬ source Locator). Der Client holt sich zunächst vom NamingȬServer eine ObjektrefeȬ renz, um ein entferntes Objekt zu adressieren. Das URLȬSchema sieht wie folgt aus: rmi://;/ mit rmi:// als Protokolltyp
Eine RMIȬObjektreferenz hat das Schema , was bedeutet, dass ein Serverobjekt zunächst durch die Transportadresse und innerhalb eines Serverprozesses mit einer eindeutigen ObjektȬId adressiert wird. Das initiale Auffinden des RMIȬRegistries erfolgt beim LookupȬAufruf, da die AdȬ resse der Registry aus der ServerȬURL abgeleitet werden kann. Die zuständige Registry läuft auf dem gleichen Serverrecher. Dem Programmierer muss also der Server, auf dem die adressierten Serverbausteine ablaufen, bekannt sein. Die öffentlich zugänglichen Methoden für das Binding und die Kontexterzeugung und damit für den Zugriff auf die Registry bzw. zur Aktualisierung der Registry sind in der Klasse java.rmi.Naming definiert. Folgende Methoden sind von InteresȬ se: – bind: Mit dieser Methode bindet ein RMIȬServer einen Namen über einen URL an ein entferntes Objekt. Nach dem erfolgreichen Binden des Namens an das Objekt ist dem Objekt eine eindeutige Objektreferenz zugeordnet und ein Client kann sich diese besorgen. – rebind: Mit dieser Methode kann einem bereits gebundenen Objekt ein neuer Name zugeordnet werden.
90
2.3 Verteilte Objekte – unbind: Diese Methode dient dem Entfernen eines Objekts aus der Registry. – lookup: Diese Methode dient dem Client dazu, mit Hilfe eines URL eine ObȬ jektreferenz aus einer Registry zu lesen. Clientrechner Clientobjekt
Stub
Serverrechner 2: lookup
1: rebind
Serverobjekt
rmiregistry
3: Methodenaufruf
Skeleton
4: Ergebnis RMI Transport Protocol TCP/IP
RMI Transport Protocol
TCP/IP
Abbildung 2Ȭ35: Ablauf der Kommunikation mit RMIȬRegistry
Ein Serverobjekt registriert sich lokal über einen rebindȬ oder bindȬAufruf bei der RMIȬRegistry. Ein Client ruft zur Ermittlung der Objektreferenz eine lookupȬ Methode auf und kann anschließend mit dieser die gewünschten Methodenaufrufe ausführen. Beim Lookup ist der vollständige Name des URL des Serverobjekts anzugeben. In Abbildung 2Ȭ35 ist der Zusammenhang nochmals dargestellt. Kommunikationsprotokoll: Die Kommunikation erfolgt in JavaȬRMI grundsätzȬ lich synchron mit einer unterstützen AtȬMostȬOnceȬ Fehlersemantik. Benötigt man asynchrone Aufrufe, lässt sich das nur über Threads oder über eigene, ereignisgeȬ steuerte CallbackȬMethoden bewerkstelligen. Der Client muss dann auch ein ReȬ moteȬInterface zur Verfügung stellen und ist in einer Zwitterstellung (siehe weiter unten). Aufrufe desselben Clients werden im Server sequentiell ausgeführt. RMI unterstützt die Kommunikation über zwei Protokolle, die beide auf TCP/IP basieren. Es handelt sich um CORBA/IIOP und um das RMI Transport Protokoll, das auch als JRMP bekannt ist. Wir wollen den Protokollstack für das RMI TransȬ port Protocol etwas näher betrachten. In Abbildung 2Ȭ36 sind zunächst die verȬ schiedenen Layer dargestellt. Stub und Skeleton kommunizieren über dieses ProȬ tokoll, das der Anwendungsschicht zugeordnet ist. Die Remote Reference Layer ist ebenfalls der Anwendungsschicht zugeordnet und enthält die AdressierungsmeȬ chanismen für die ObjektȬAdressierung. Die Remote Reference Layer soll grundsätzlich verschiedene Protokolle zum AuffinȬ den von Serverobjekten unterstützen und ist daher generisch konzipiert. Derzeit ist jedoch nur eine PointȬtoȬPointȬKommunikation zwischen Client und Server impleȬ
91
2 Konzepte und Modelle verteilter Kommunikation mentiert und in der RMIȬKlasse UnicastRemoteObject realisiert. Zukünftig sind auch andere Protokolle denkbar. Im Transportsystem wird derzeit TCP in Schicht 4, IP in Schicht 3 und Ȭ wie es im Internet üblich ist Ȭ ein beliebiger Netzwerkzugang genutzt. Das RMIȬTransportȬProtokoll ist ein streamorientiertes Protokoll. Eine RMIȬInstanz verwaltet je Verbindung einen InputȬ und einen OutputȬSocketȬStream. Beide Streams werden paarweise verwaltet. Jeder OutputȬStream hat einen korresponȬ dierenden InputȬStream. Clientobjekt
Serverobjekt
Stub
Skeleton
Remote Reference Layer
Löst entfernte Referenzen auf
RMI Transport Protocol Transport Layer IP Netzwerkzugang
Derzeit TCP, prinzipiell unabhängig, auch UDP möglich
Abbildung 2Ȭ36: RMIȬProtokollstapel
Die Abbildung 2Ȭ37 zeigt den RMIȬTransportȬHeader, der nicht über den RMIȬ Objektserialisierungsmechanismus serialisiert wird. Nach einem VersionȬ und eiȬ nem ProtocolȬFeld werden die Nutzdaten übertragen. RMI unterstützt verschiedene Protokollvarianten. Die NutzdatenȬNachrichten sind mit einem speziellen Header versehen. Im Feld Protocol ist angegeben, um welche Protokollvariante es sich hanȬ delt. Möglich sind hier: – StreamProtocol: Dies ist ein streamorientiertes Protokoll für eine einzige Transportverbindung. Es können mehrere Nachrichten nach einem Header gesendet werden. – SingleOpProtocol: Dieser Protokolltyp erlaubt das Senden einer einzigen Nachricht (Message) nach dem Header und wird für die Einbettung von RMIȬNachrichten in HTTP verwendet. – MultiplexProtocol: Dieser Protokolltyp dient der Nutzung einer realen TransȬ portverbindung (SocketȬVerbindung) für das Multiplexieren mehrerer logiȬ scher RMIȬVerbindungen. Für dieses Protokoll sind einige ZusatzmechaȬ nismen zum logischen AufȬ und Abbau von Verbindungen und zum Senden von Requests für die verschiedenen logischen Verbindungen erforderlich. In der Spezifikation sind die Operationen OPEN, CLOSE, CLOSEACK, REȬ QUEST, und TRANSMIT definiert.
92
2.3 Verteilte Objekte Alle Protokolltypen sind in der RMIȬSpezifikation beschrieben (WWWȬ005). Wir betrachten im Weiteren hauptsächlich das StreamȬProtokoll. RMI unterscheidet aus der Sicht eines Clients zwischen ausgehenden (out) und ankommenden (in) Nachrichten. Es sind drei ausgehende RMIȬNachrichtentypen spezifiziert: – Call: Normaler Request für einen Methodenaufruf – Ping: Nachricht zur Überprüfung auf der Transportebene, ob eine PartnerȬ JVM noch aktiv ist – DgcAck: Nachricht zum Senden von GarbageȬCollectionȬInformationen vom Client zum Server, wenn ein Client ein entferntes Objekt über einen ReȬ turnwert erhält Version
Protocol Nachrichten
Abbildung 2Ȭ37: RMI TransportȬHeader
Es sind auch u.a. die folgenden ankommenden Nachrichten definiert: – ReturnData: Nachricht für das Ergebnis eines Methodenaufrufs – PingAck: Diese Nachricht enthält eine Antwort auf eine PingȬNachricht. Der Inhalt des MessageȬTeils ist in Abbildung 2Ȭ38 skizziert, wobei zwischen ReȬ quest und Response unterschieden wird. Eine RequestȬNachricht enthält folgende Felder: – MessageȬType: In diesem Feld ist der MessageȬTyp kodiert (Call, Ping, DgcAck). – OID: ObjektȬIdentifikation des adressierten Objekts – Operation: Dies ist eine Nummer, welche die adressierte Servermethode iȬ dentifiziert. – Hash Number: Ein Hashcode, welcher der Verifikation von StubȬ und SkeleȬ tons dient. Es wird damit überprüft, ob Stub und Skeleton zusammenpassen. – (Argument, Value),...: Parameter und Parameterwert, der beim Aufruf überȬ geben wird. Hier ist eine Liste zugelassen. Die Argumente werden entspreȬ chend der JavaȬObjektserialisierung serialisiert. Eine ResponseȬNachricht enthält folgende Felder: – UniqueIdentifier: Eindeutige Identifikation des Returnwerts oder bei negatiȬ vem Ablauf der Exception. Diese Identifikation wird in einer folgenden DgcAckȬNachricht an den Server genutzt, um diesem bekanntzugeben, dass ein RMIȬObjekt über den Returnwert an den RMIȬClient übertragen wurde. Mit dieser Information kann der RMIȬServer den entsprechenden ReferenzȬ zähler für das GarbageȬCollection erhöhen. – Return Value: Rückgabewert oder Wert der Exception
93
2 Konzepte und Modelle verteilter Kommunikation Der typische Ablauf einer Kommunikation zwischen RMIȬClient und ȬServer erȬ fordert zunächst einen TCPȬDreiwegeȬVerbindungsaufbau (Mandl 2008b), den der Client initiiert. Anschließend wird vom Client eine RequestȬMessage gesendet, die vom Server bestätigt wird. Request (Call-Data)
Response (Return-Data)
Message-Type
Unique Identifier
OID
Return Value
Operation Hash Number (Argument, Value),..
Abbildung 2Ȭ38: RMI MessageȬInhalt (OutputȬStream)
Die Antwort des Servers mit dem Ergebnis der Requestbearbeitung wird in einer ResponseȬMessage gesendet, die bei Bedarf vom Client nochmals mit einer DgcAckȬNachricht beantwortet wird. Die DgcAckȬNachricht wird vom Client nur gesendet, wenn im Returnwert der ResponseȬNachricht ein Objekt übertragen wurde, das bis dahin vom Client nicht genutzt wurde. Als Parameter wird die ObjectȬId (Unique Identifier) des empfangenen RMIȬObjekts übergeben. Der Server kann daraufhin den zugehörigen Referenzzähler für das RMIȬObjekt hochzählen (siehe auch GarbageȬCollection). Eine dedizierte PDU für ein explizites Reduzieren des Referenzzählers im Server gibt es nicht. Wenn also ein Client ein Objekt nicht mehr benötigt, bemerkt der Server dies nicht. RMI-Client
RMI-Server TCP-Verbindungsaufbau ... Request-Mes sage
(Call, OID, Op eration,...)
turn Value) e Identifier, Re essage (Uniqu Response-M
Evtl.
DgcAck (Uniqu e Identifier)
... TCP-Verbindungsabbau
Abbildung 2Ȭ39: Typischer Ablauf einer RMIȬKommunikation
94
2.3 Verteilte Objekte Der typische Ablauf einer RMIȬKommunikation ist in Abbildung 2Ȭ39 skizziert. Eine Verbindung kann für mehrere Requests verwendet werden. Es ist nicht festȬ gelegt, wer diese wieder abbaut, also dürfen es vermutlich beide Partner. ÜbliȬ cherweise wird der Client den Verbindungsabbau initiieren, wenn er die Dienste des Servers nicht mehr benötigt. Mit PingȬ und PingAckȬNachrichten können sich Client und Server gegenseitig überwachen (siehe Abbildung 2Ȭ40). In der RMIȬSpezifikation ist allerdings nicht festgelegt, in welchen Zeitabständen eine Überwachung stattfindet und welche Konsequenzen sich daraus ergeben, wenn ein PingAck nicht rechtzeitig ankommt. Dies ist vermutlich einer RMIȬImplementierung überlassen. RMI-Client
RMI-Server Ping
PingAck Ping PingAck
Abbildung 2Ȭ40: Lebendüberwachung zwischen RMIȬClient und RMIȬServer
Garbage-Collection Die verteilte Speicherbereinigung oder auch GarbageȬCollection erfolgt bei Java RMI auf Basis eines ReferenceȬCountingȬAlgorithmus in Verbindung mit Leases, der im Laufzeitsystem (der JVM) integriert ist. Der GarbageȬCollectionȬMechanismus von RMI basiert auf dem ModuloȬ3ȬAlgorithmus von Birell (Birell 1993). Das RMIȬ Laufzeitsystem führt Buch über alle lebenden Objektreferenzen. Wenn eine ObjektȬ referenz eine ClientȬJVM zum ersten Mal „betritt“, wird ein Zähler für diese ObȬ jektreferenz angelegt. Gleichzeitig wird die oben genannte DgcAckȬPDU an den Server gesendet, damit der Server seinen Referenzzähler erhöhen kann. Auf der Serverseite werden nur die ClientȬJVMs gezählt, die ein Serverobjekt referenzieren. Wenn die Verbindung zu einem Client abgebaut wird, kann im Server der RefeȬ renzzähler für alle von diesem Client benutzten Serverobjekte reduziert werden. Für diese Aufgabe implementiert jedes RMIȬObjekt das Interface java.rmi.server.Ȭ Unreferenced, das nur die Methode unreferenced enthält. Das RMIȬLaufzeitsystem ruft diese Methode auf, wenn kein RMIȬClient mehr das Objekt referenziert. Das Ereignis, über welches das RMIȬLaufzeitsystem dies bemerkt, ist in der SpezifikaȬ tion nicht festgelegt. Er ist vermutlich der Abbau der Transportverbindung. Wenn ein Referenzzähler eines Serverobjekts auf 0 steht und keine sonstige lokale RefeȬ
95
2 Konzepte und Modelle verteilter Kommunikation renz mehr auf das Objekt zeigt, kann man das Objekt beim nächsten Lauf entferȬ nen. Wenn zwischen ClientȬ und Serverrechner ein Netzwerkproblem vorhanden ist, so dass sie nicht mehr miteinander kommunizieren können, kann es vorkommen, dass der Server das Objekt freigibt, obwohl der Client es noch nutzt. Somit ist keiȬ ne referenzielle Integrität sichergestellt. Ist das Serverobjekt nicht mehr vorhanden, wenn ein Client eine Methode aufruft, so erhält dieser eine RemoteException.
Nebenläufigkeit Die Parallelität der RMIȬServer wird durch die Implementierung geregelt. TypiȬ scherweise wird für die Abwickung des Aufrufs im Server in der Regel ein eigener Thread verwendet (meist aus einem Threadpool), der den Methodenaufruf ausȬ führt und das Ergebnis an den Client zurücksendet. Dies ist aber in der RMIȬ Spezifikation nicht zwingend vorgeschrieben. Die RMIȬSpezifikation (Sun 2004b) überlässt die Implementierung vielmehr dem Hersteller. Es muss also kein eigener Thread sein und man kann sich auch nicht darauf verlassen. Daher muss der ProȬ grammierer eines RMIȬObjekts dafür sorgen, dass der Code threadȬsicher ist. In Abbildung 2Ȭ41 ist ein typischer Methodenaufruf eines Clients an einen Server dargestellt.
Client Methodenaufruf
Server Objekt
Antwort
Eigene JVM
Eigene JVM Typischerweise ein eigener Thread
Abbildung 2Ȭ41: RMIȬClient und ȬServer in eigenen JVMs
Beispiel „Server zur Artikelverwaltung“: In der unten skizzierten mainȬMethode wird eine Instanz des Artikelmanagers erzeugt und über die Methode rebind des RMIȬNamingȬServices wird das RemoteȬObjekt registriert. In einer praktisch sinnȬ vollen Anwendung wird natürlich meist nicht „localhost“ als Serveradresse verȬ wendet.
96
2.3 Verteilte Objekte … // Hier wird der eigentliche RMI-Server gestartet und das // Remote-Objekt im RMI-Registry eingetragen. public static void main(String args[]) { try { ArticleMgrRemote amgr = new ArticleMgrRemote(); // Name des Service angeben und einer konkreten // Serverbaustein-Instanz zuordnen Naming.rebind("rmi://localhost/articlemgr", server, amgr); System.out.println("ArticleMgr gestartet"); } catch(Exception e) { System.out.println("Fehler bei Start"); } }
Die weitere Abwicklung übernimmt das RMSȬLaufzeitsystem und kann nicht beȬ einflusst werden.
Lebenszyklus von Serverbausteinen Die RMIȬObjekte werden in einem RMIȬServer in der Regel zum Startzeitpunkt instanziiert und existieren so lange, bis der Server sie freigibt. Allerdings legt die RMIȬSpezifikation dies nicht fest und überlässt es dem Hersteller. Es wird auch eine Instanzierung festgelegt, die als dynamische Serveraktivierung bzw. Lacy Activation bezeichnet wird. Bei der dynamischen Serveraktivierung wird das Starten eines Servers mit einem Verwaltungsprozess namens rmid dynamisch bei Bedarf möglich. Ein Server registriert in diesem Fall seine Objekte nicht bei der RMIȬRegistry sondern beim rmid, der dann bei einem Request eine eigene JVM startet, um diesen abzuarbeiten. Die Instanzierung und die Aktivierung werden in der Terminologie der einzelnen Lösungsansätze nicht immer eindeutig getrennt. Die Aktivierung gemäß unserer Definition, also die konkrete Zuordnung einer ServerbausteinȬInstanz zu einem Client, erfolgt zum Zeitpunkt der Verbindungsaufnahme während der LookupȬ Phase. In der Regel, aber eben doch implementierungsabhängig, wird eine RMIȬ ServerbausteinȬInstanz in einem eigenen Serverthread ausgeführt.
Basisdienste JavaȬRMI bietet neben dem einfachen NamingȬService keine weiteren Basisdienste für verteilte Anwendungen an.
97
2 Konzepte und Modelle verteilter Kommunikation
Sonstige Unterscheidungsmerkmale Bei JavaȬRMI gibt es keine Basismechanismen, die eine Skalierung von Servern unterstützen und auch keine Möglichkeiten, hochverfügbare Lösungen zu realisieȬ ren. Dies muss über eigene Mechanismen erfolgen. Als besondere Merkmale sollen die Konzepte für das dynamische Laden von KlasȬ sen und die Möglichkeit, einen CallbackȬMechanismus zu simulieren, erwähnt werden: Dynamic Class Loading: Eine Besonderheit bei JavaȬRMI ist das Dynamic Class Loading. Java bietet hier generell die Möglichkeit, Softwarebausteine in Form von Klassen, Interfaces und ebenso StubȬKlassen und auch Klassen, die als Parameter und Returnwerte benötigt werden, von einem entfernten Rechner in eine lokale JVM zu laden. Hierzu muss eine URL bekanntgemacht werden, über die die KlasȬ sen und Interfaces angefordert werden können. Das bedeutet, dass man Software dynamisch zum Ablauf bringen kann, ohne diese vorher lokal zu installieren. DieȬ se Aufgabe übernimmt der sog. RMIȬClassLoader. RMI stellt hierfür die Klasse RMIClassLoader, die dem Herunterladen von Klassen über das Netzwerk dient, bereit. Die Adresse, unter der man entfernte Softwarebausteine zum HerunterlaȬ den bereitstellt, wird als Codebase bezeichnet und ist vergleichbar mit dem lokalen JavaȬKlassenpfad (CLASSPATHȬEnvironmentȬVariable), nur dass die Codebase einen Pfad auf ein entferntes (oder auch lokales) Verzeichnis angibt. Der KlassenȬ pfad ist also im Prinzip eine lokale Codebase. Die Reihenfolge des Durchsuchens nach Klassen über den CLASSPATH und den URL wird aus der Angabe in jaȬ va.rmi.server.codebase gesteuert. http://MyHost/basedir
RMI-Client
RMI Registry
Codebase
MyRmiServer bind
lookup
codebase= http://MyHost/basedir
Referenz auf StubInstanz und Codebase Stub-Klasse anfordern Stub-Klasse Remote Methodenaufruf
Abbildung 2Ȭ42: Nutzung der Codebase für das Klassenladen bei RMI
Um die Codebase bekanntzumachen, gibt es bei RMI eine Eigenschaft (Property), die mit dem URL oder einer Liste von URLs belegt werden kann. Diese Eigenschaft wird mit java.rmi.server.codebase bezeichnet und wird im Server und zwar in der Regel beim Start über Startoptionen angegeben. Sie wird bei der Registrierung des
98
2.3 Verteilte Objekte Servers auch der RMIȬRegistry bekanntgegeben. Bei entfernten Objekten zeigt der URL üblicherweise auf einen über die Protokolle HTTP oder FTP erreichbaren Pfad. Die Zusammenhänge beim Laden von JavaȬKlassen über die Codebase sind in Abbildung 2Ȭ42 dargestellt. Falls die benötigte Klasse im lokalen Klassenpfad liegt, wird diese immer bevorȬ zugt von dort geladen. Ist dies nicht der Fall, wird die Codebase des entfernten Objekts durchsucht. Wenn ein Client eine Referenz auf ein entferntes Objekt erhält, wird ihm eine StubȬKlasse zugeschickt, von der er eine Instanz erzeugt. Diese InȬ stanz dient als Proxy (Stub) des Serverobjekts. Die Codebase kann auch von einem entfernten Objekt verwendet werden, wenn der RMIȬClient eine Instanz einer Klasse als Parameter mitgibt, die das entfernte ObȬ jekt nicht kennt, also auch nicht in seinem Klassenpfad hat. Im Normalfall kommt das zwar nicht vor, da die Parameter auf der Serverseite bekannt sind, aber ein Client kann auch einen Subtyp eines in der Methodendeklaration festgelegten PaȬ rametertyps übergeben. Dieser Subtyp kann im Server nicht bekannt sein. Für dieȬ sen Fall muss der Client mit dem Methodenaufruf eine CodebaseȬInformation an das entfernte Objekt mitgeben, damit dieses die Klasse des Parameters nachladen kann. Dieser Fall ist in Abbildung 2Ȭ43 skizziert. Diese Codebase wird als clientȬ spezifizierte Codebase bezeichnet. http://OtherHost/basedir
RMI-Client
RMI Registry
Client-spez. Codebase
MyRmiServer bind
…
codebase= http://MyHost/basedir
Remote Methodenaufruf mit Client-spezifizierter Codebase Klasse besorgen
Abbildung 2Ȭ43: Nutzung der Codebase für das serverseitige Klassenladen bei RMI
Ein interessanter Aspekt, der noch erwähnt werden soll, ist das Sicherheitskonzept von RMI, das auf dem Java SandboxȬModell basiert. Der RMISecurityManager wird von der JVM bereitgestellt. Er verhindert das Ausführen unerlaubter Operationen durch Klassen, die vom RMIClassLoader über das Netz geladen wurden. Diese Klassen gelten nicht als vertrauenswürdig. Vor der JavaȬVersion 2 musste der RMIȬ SecurityȬManager zur Laufzeit installiert werden (mit Methode System.setSecurityȬ Manager). Auch das Überschreiben der SecurityȬPolitik durch die Definition eigeȬ
99
2 Konzepte und Modelle verteilter Kommunikation ner SecurityȬManager ist möglich. Seit JavaȬVersion 2 ist der SecurityȬ Mechanismus implizit in der JVM vorhanden. CallbackȬMechanismus im Client: In RMI ist auch eine ereignisgesteuerte VerarȬ beitung realisierbar. Diese Variante eignet sich für Anwendungen, bei denen ein Server bei bestimmten Ereignissen einen oder mehrere Clients informieren möchte. Wie wir bei der Betrachtung des MessageȬPassingȬModells noch sehen werden, handelt es sich in diesem Fall um die Realisierung einer PublishȬSubscribeȬ Aufgabenstellung. Ein Server (Publisher) informiert einen oder mehrere InteresȬ senten (Subscriber) über das Eintreffen bestimmter Ereignisse. Die Clients müssen sich vorher beim Server registrieren. Ein Client kann zur Lösung dieser Aufgabenstellung mit RMI eine CallbackȬ Methode festlegen (z.B onMessage()), die er selbst in einem eigenen RemoteȬ Interface (abgeleitet vom Interface Remote) definiert. Eine Instanz des implemenȬ tierten RemoteȬInterface (abgeleitet von UnicastRemoteObject) muss er über ein weiteres RemoteȬInterface des Servers sozusagen als Listener registrieren, indem er die Referenz auf das RemoteȬInterface des Clients als Parameter über einen MeȬ thodenaufruf an der entfernten Schnittstelle (z.B registerListener()) an den Server übergibt. Der Server kann dann bei Eintreten des definierten Ereignisses die MeȬ thode onMessage (anderer Methodenname möglich) des Clients aufrufen. Was in dieser Methode gemacht wird, obliegt dem Programmierer der Anwendung. Diese Möglichkeit hat eine Umkehrung der ClientȬServerȬBeziehung zur Folge. Der Client wird in diesem Fall auch zum Server. Die Interfaces und Methoden können mit RMIȬMitteln beliebig benannt werden. Eine konkretere Vorgabe gibt es hierzu nicht. Ein Beispiel für diese Nutzungsvariante von RMI ist in (Abts 2003) zu finden.
2.3.4
Fallbeispiel .NET Remoting
.NET Remoting ist ein grundlegender Mechanismus für die Kommunikation verȬ teilter Objekte in der .NETȬTechnologie von Microsoft. Ähnliche Mechanismen waren in Microsofts DCOM verfügbar. .NET Remoting ist vom Grundkonzept und der angebotenen Funktionalität her zu JavaȬRMI sehr ähnlich.
Architektur .NET Remoting setzt auf die .NETȬPlattform und damit auf dessen Laufzeitsystem, die Common Language Runtime (CLR) auf. Client und Server laufen meist, aber nicht zwingend in einem eigenen Betriebssystemprozess und innerhalb des Prozesses in einer Application Domain (siehe unten) ab. Client und Server sind über einen KomȬ munikationskanal verbunden. Da für das Verständnis von .NET Remoting grundȬ legende .NETȬKenntnisse erforderlich sind, wird vorab ein kurzer Überblick über dieses, noch stark in Entwicklung befindliche Framework gegeben. In Abbildung 2Ȭ44 ist die Einbettung von ClientȬ und Serveranwendungen in die .NETȬ Laufzeitumgebung skizziert.
100
2.3 Verteilte Objekte .NETȬFrameworkȬBegriffe: Die Laufzeitumgebung CLR ist eine virtuelle Maschine. Sie führt einen vom Compiler bzw. von den Compilern der unterstützten ProȬ grammiersprachen erzeugten Zwischencode aus, der als Common Intermediate LanȬ guage (CIL) bezeichnet wird. Die Umwandlung in den Maschinencode erfolgt erst zur Laufzeit (JustȬinȬTime). Alle Microsoft .NETȬSprachen (Visual C#, Visual J#7, Visual Basic,...) werden unterstützt. In vordefinierten Klassenbibliotheken wird Basisfunktionalität bereitgehalten. Zudem gibt es verschiedene Werkzeuge zur Entwicklung und für das Deployment. Es werden vorwiegend die neueren WinȬ dowsȬDerivate als Ablaufumgebung verwendet. Die Laufzeitumgebung ist in Abbildung 2Ȭ45 mit ihren Einzelkomponenten skizȬ ziert. Sie enthält wie die JVM Mechanismen für das dynamische Laden von KlasȬ sen, SicherheitsȬFeatures, ExceptionȬHandling, einen JustȬinȬTimeȬCompiler sowie einen GarbageȬCollector. Ebenso sind eine ThreadȬUnterstützung und eine UnterȬ stützung für sog. virtuelle Prozesse vorhanden. Prozess / Application Domain
Prozess / Application Domain
.NET Remoting Client
.NET Remoting Server
Laufzeitumgebung (CLR)
Laufzeitumgebung (CLR)
Betriebssystem
Betriebssystem
Hardware
Hardware Netzwerkverbindung
Abbildung 2Ȭ44:.NETȬRemotingȬUmgebung nach (Kuhrman 2004)
Der Code, der unter der CLR abläuft, wird als managed Code bezeichnet. Dies ist ein Code von Softwarebausteinen, die von der CLR verwaltet werden. Diese BauȬ steine enthalten Metainformationen zur Beschreibung der enthaltenen Klassen und den CILȬCode, der zur Laufzeit auf Maschinencode abgebildet wird. Ein oder mehrere verwaltete Bausteine werden zusammen mit dem CILȬCode und den MeȬ tadaten als Assembly bezeichnet. Eine Assembly enthält zudem auch ein sog. ManiȬ fest, das alle wichtigen Informationen zur Assembly enthält (Versionsinformation, Referenzen auf andere Assemblies, exportierte Typen usw.). Es lassen sich unȬ ter .NET Framework auch sog. shared Assemblies einrichten, die in einem globalen Assembly Cache (GAC) registriert werden müssen. Diese sind dann systemweit verȬ fügbar. Assemblies sind ablauffähige Programme oder Dynamic Link Libraries (DLLs), die verteilbar sind.
7
Visual J# ist die JavaȬVariante von Microsoft und in einigen Teilen nicht kompatibel zu Java.
101
2 Konzepte und Modelle verteilter Kommunikation Auch die Einbindung von sog. unmanaged Code, also Codeteilen, die nicht unter der CLR ablaufen (z.B. bestehende COMȬ/DCOMȬAnwendungen), ist möglich. Interessant ist vor allem das spezielle Prozesskonzept. .NET unterstützt sog. AppliȬ kationsdomänen (Application Domains). Dies sind Ablaufumgebungen für virtuelle Prozesse. Innerhalb eines Prozesses können mehrere Applikationsdomänen exisȬ tieren (siehe Abbildung 2Ȭ46), die wiederum mehrere Kontexte beherbergen. Ein Prozess enthält mindestens eine Applikationsdomäne. Man kann eine ApplikaȬ tionsdomäne als virtuellen Prozess bzw. Subprozess innerhalb eines BetriebssystemȬ prozesses bezeichnen. Existieren mehrere Applikationsdomänen in einem BeȬ triebssystemprozess, so sind diese untereinander isoliert. Jede ApplikationsdomäȬ ne enthält mindestens einen Kontext. Auch Kontexte sind untereinander isoliert.
Class Loader Sicherheitsmanagement
Virtuelle Prozesse (Threading und Application Domains)
Ausnahmebehandlung Code- und Typprüfung JIT-Compiler
COM-, DCOM-, COM+-Anbindung
Anbindung für Klassenbibliotheken
Speicherverwaltung (Garbage Collector)
Virtual Execution System
Basismaschine
Abbildung 2Ȭ45: Laufzeitumgebung CLR nach (Kuhrmann 2004)
In einem Kontext ist eine Gruppe von Objekten zusammengefasst, die gleiche AnȬ forderungen an die Laufzeitumgebung hat. Der Kontext wird auch als Lebensraum für die Objektgruppe bezeichnet. Der Zugriff auf einen Kontext erfolgt über ein ProxyȬObjekt, das auch als transparenter Proxy bezeichnet wird. Um von einem Kontext auf einen anderen zuzugreifen, nutzt man .NET Remoting, wobei es keine Rolle spielt, ob die Kontexte in der gleichen Applikationsdomäne liegen oder nicht oder mehrere Betriebssystemprozesse beteiligt sind, die über Rechnergrenzen hinweg verteilt sind.
102
2.3 Verteilte Objekte Prozess Default A AppDomain ppDomain
User AppDom AppDomain ain
Default Context
Default Context
User Context 1
User Context 1
...
...
User Context N
User Context N
Abbildung 2Ȭ46: .NET Remoting Applikationsdomänen und Kontexte
Einem Kontext können Eigenschaften (Attribute) zugeordnet werden. Ein Kontext ist also demnach eine durch gemeinsame Eigenschaften gebildete Gruppe von Objekten. Ein Beispiel für ein Kontextattribut ist das Transaktionsattribut. Es gibt an, ob der Kontext transaktional ist, d.h. ob man Transaktionen darin ausführen kann. Programmierung: Die wichtigsten .NETȬRemotingȬKlassen sind im Namespace mit der Bezeichnung System.Runtime.Remoting definiert. Eine Klasse, die verteilte Objekte repräsentieren soll, erbt von der Basisklasse MarshalByRefObject und impȬ lementiert mindestens ein RemoteȬInterface. Ein statisches Generieren von Stub und Skeleton ist nicht erforderlich. Diese werden zur Laufzeit bei der Aktivierung eines Serverbausteins erzeugt. Object Namespace System.Runtime.Remoting...
erbt MarshalByRefObject
ServicedComponent
erbt
erbt
MyRemote Object
erbt impl
ContextBoundObject erbt MyContext Object
impl
MyRemote Interface
Abbildung 2Ȭ47: Wichtige Klassen von .NET Remoting und deren Nutzung
Die Vorgehensweise bei der Programmierung sieht etwa wie folgt aus:
103
2 Konzepte und Modelle verteilter Kommunikation – Man entwickelt zunächst das Interface, welches das verteilte System bereitȬ stellen soll (in Abbildung 2Ȭ47 als MyRemoteInterface benannt). – Serverseitig ist dann die Objektklasse zu realisieren, die die Methoden aus dem Interface implementiert. Diese Klasse (in Abbildung 2Ȭ47 als MyRemoȬ teObject benannt) erbt von MarshalByRefObject. – Neben der eigentlichen Klasse für das RemoteȬObjekt ist noch ein ServerȬ StartupȬCode zu implementieren, der das RemoteȬObjekt registriert. – Anschließend kann ein Clientprogramm entwickelt werden. Im Serverprogramm muss zunächst ein Kommunikationskanal eingerichtet und registriert werden. Eine vordefinierte Klasse namens ChannelServices im NamespaȬ ce System.Runtime.Remoting stellt Dienste bereit, um einen Kommunikationskanal zu registrieren. Die verwendete Methode heißt RegisterChannel. Anschließend muss noch eine Registrierung des Dienstes mit Hilfe eines vordefinierten Objekts naȬ mens RemotingConfiguration erfolgen. Hier wird auch angegeben, wie die AktivieȬ rung auszusehen hat. Ein Client, der die Dienste eines entfernten Objekts nutzen möchte, legt ebenfalls einen Kommunikationskanal an und registriert ihn.
Zustandsverwaltung Man bezeichnet Objekte, die über Referenzen angesprochen werden, in .NET auch als Referenzobjekte. Sie erben von der .NETȬBasisklasse MarshalByRefObject und sind nur über einen Proxy (ClientȬStub) erreichbar. Instanziiert werden diese ObȬ jekte in den Adressräumen von Serverprozessen. Sie verfügen über RemoteȬ Schnittstellen und können nur über eine Objektreferenz genutzt werden. Eine ObȬ jektreferenz wird auf der Clientseite immer durch einen Proxy verwaltet. Serveraktivierte Objekte (SAO) sind Objekte, deren Lebensdauer direkt vom Server gesteuert wird. Fordert ein Client eine Instanz eines serveraktivierten Objekts an, wird in der Anwendungsdomäne des Clients ein Proxy erstellt. Es gibt zwei sog. Aktivierungsmodi für serveraktivierte Objekte: – Singletons: Wie der Name sagt, wird bei diesem Aktivierungsmodus im SerȬ ver nur eine Instanz des verteilten Objekts angelegt. Ein Singleton wird beim ersten Aufruf einer Methode instanziiert und kann von beliebig vielen Clients verwendet (aktiviert) werden. – SingleCallȬObjekte sind verteilte Objekte, bei denen für jeden Request eine eigene Instanz verwendet wird. SingleCallȬInstanzen vom gleichen Typ sind untereinander isoliert. SingleCallȬObjekte sind zustandslose Serverbausteine. Clientaktivierte Objekte (CAO) sind dagegen Objekte, deren Lebensdauer von der aufrufenden Anwendungsdomäne (also vom Client) gesteuert wird. Die Objekte liegen aber nicht wirklich im Client. Nach der Registrierung und einem klassischen Aufruf des newȬOperators im Client wird eine Konstruktion und damit InstanzieȬ rung des Serverbausteins im Server durchgeführt. Der Client erhält eine ObjektreȬ ferenz auf das CAO, die nur er sieht, das CAO residiert aber im Server. CAOs sind
104
2.3 Verteilte Objekte statusbehaftete Serverbausteine. Jeder Client erhält eine eigene Instanz des verteilȬ ten Serverbausteins. Die Lebensdauer eines CAO richtet sich nach der Lebensdauer des Clients, kann aber die Lebensdauer des Servers, in dem es residiert, nicht überdauern. Für den Serverprogrammierer spielt es fast keine Rolle, ob er SAOs oder CAOs anlegt. Die Programmierung ist hier ähnlich. Lediglich bei der Registrierung im ServerȬStartupȬCode sind leichte Unterschiede vorhanden. SAOs werden über die Objektklasse RemotingConfiguration mit der Methode RegisterWellKnownServiceType, CAOs werden über die Methode RegisterActivatedServiceType registriert.
Parameterübergabe Werteobjekte bei einfachen Typen werden in .NET Remoting über CallȬbyȬvalue übertragen. Objektreferenzen werden über CallȬbyȬreference (genauer: CallȬbyȬ copy/copyȬback) übermittelt.
Dienstschnittstellen Bei .NET Remoting wird, wie bei JavaȬRMI, das Interface des Objekts direkt in der Hostsprache (z.B. C#) definiert. Ein RemoteȬInterface unterscheidet sich nicht von anderen Interfaces und wird erst durch eine Implementierung als RemoteȬObjekt abgeleitet von der Basisklasse MarshalByRefObject bekanntgemacht. Beispiel: Das einfache Beispiel für ein ArtikelmanagerȬInterface sieht folgenderȬ maßen aus: namespace ArticleManagementServer { public interface IArticleMgr{ void createArticle(long katalogId);8 void createArticle(Article a); void updateArticle(long katalogId, String beschreibung, float preis, long warengruppe); Article findArticleByKatalogId(long katalogId, ArrayList findArticlesByGroup(long warengruppe); ArrayList findAllArticles(); void deleteArticle(long katalogId); } }
Im Folgenden wird nur der Rahmen für das RemoteȬObjekt angegeben, in dem die Implementierung der Methoden stattfindet. using System.Runtime.Remoting; …
8
Exceptions werden im Gegensatz zu Java in C# bei der Methodenbeschreibung nicht angegeben.
105
2 Konzepte und Modelle verteilter Kommunikation // Basisklassen zur Artikelverwaltung, die hier nicht betrachtet werden … using ArticleManagementBase; namespace ArticleManagementServer { public class ArticleMgr : MarshalByRefObject,IArticleMgr { public ArticleMgr() { … } // Konstruktor public void createArticle(long KatalogId) { … } public void createArticle(Article a) { … } public void updateArticle(long KatalogId, string Beschreibung, float Preis, long Warengruppe) { … } public Article findArticleByKatalogId(long KatalogId) { … } public ArrayList findArticlesByGroup(long Warengruppe) { … } public ArrayList findAllArticles() { … } public void deleteArticle(long KatalogId) { … } } }
Marshalling und Unmarshalling Die Argumente und Rückgabewerte der Methoden eines RemoteȬObjekts müssen serialisierbar, d.h. sie müssen entsprechend gekennzeichnet sein (Attribut „SerialiȬ zable“). Der ClientȬProxy und das ServerȬSkeleton werden implizit zur Laufzeit aus Metadaten generiert und sind für das Marshalling und Unmarshalling verantȬ wortlich.
Adressierung und Kommunikation Namensauflösung und NamingȬ/DirectoryȬService: Die Registrierung erfolgt durch einen Server über das .NETȬFramework. Im Server laufen die .NETȬRemoteȬ Objekte innerhalb eines Kontextes in einer Applikationsdomäne ab. Der Server registriert für den Zugriff auf die Objekte eigene Kommunikationskanäle. Der Client wendet sich über die vorgegebene ActivatorȬKlasse an den zuständigen SerȬ ver, um eine Objekttreferenz zu ermitteln. Kommunikation: NET Remoting ist so konzipiert, dass es auf allen TransportsysȬ temen implementiert werden kann. Die Kommunikation wird über. sog. Kanäle (Channels) zwischen zwei Kommunikationsendpunkten ausgeführt. Die EndpunkȬ te der Kommunikation werden als Transportsenken (Transport Sinks) bezeichnet. Sog. Formatierungssenken (Formatter Sinks) übernehmen an beiden Endpunkten die AbȬ bildung der Parameter und Rückgabewerte sowie das Einfügen in den Datenstrom bzw. das Herauslesen aus dem Datenstrom in die lokale Syntax. Mehrere Senken können für spezielle Verarbeitungen auch hintereinandergeschaltet werden. EigeȬ ne Senken können ergänzt werden. Das Zusammenspiel zwischen den einzelnen Bausteinen und die Anordnung der Formatter und Senken ist in Abbildung 2Ȭ48 dargestellt. Der Proxy gibt einen MeȬ thodenaufruf bzw. dessen Argumente an einen Formatter, der daraus eine NachȬ
106
2.3 Verteilte Objekte richt erzeugt, die über den Transportkanal gesendet wird. Auf der Empfängerseite wird nach Empfang der Nachricht am Transportkanal ein Dispatcher bemüht, der den Methodenaufruf schließlich an das adressierte verteilte Objekt weitergibt. Es gibt mehrere Kanaltypen, die im .NETȬFramework verfügbar sind und beim Aufbau der Kommunikation angelegt und registriert werden. Client und Server müssen beide die gleichen Kanaltypen anlegen, um zusammenarbeiten zu können, ein RemoteȬObjekt kann aber auch mehrere Kanaltypen unterstützen. Man unterȬ scheidet: – Transport über HTTP (HTTPȬKanal) – Transport über TCP (TCPȬKanal) – Lokaler Transport über IPC (auf Basis von Named Pipes realisiert) Clientprozess
1
Serverprozess
Methodenaufruf
5 Interface Formatter
Proxy
6
2
Dispatcher Formatter 7
Message Interface
3 Message
Sink1
Verteiltes Objekt
4
...
SinkN
Sink1
...
SinkN
Transportkanal
Abbildung 2Ȭ48: .NET Remoting Formatter und Kanäle nach (Kuhrmann 2004)
Der HTTPȬKanal verwendet standardmäßig eine SOAPȬFormatierungssenke. Der TCPȬKanal verwendet eine Formatierungssenke, die einen binären Datenstrom serialisierter Objekte erzeugt. Auf das Kommunikationsprotokoll und auf den Nachrichtenaufbau der .NET RemotingȬNachrichten soll an dieser Stelle nicht weiȬ ter eingegangen werden (siehe WWWȬ006). Als Fehlersemantik für die Kommunikation wird AtȬMostȬOnce unterstützt. Die Kommunikation zwischen Client und Server ist synchron (blockierend), es wird in .NET Remoting aber auch ein asynchrones Kommunikationsmodell unterstützt. Zudem wird ein CallbackȬMechanismus bereitgestellt, der es einem Client ermögȬ
107
2 Konzepte und Modelle verteilter Kommunikation licht, bei Aufruf einer Servermethode nicht zu blockieren. Stattdessen wird beim Aufruf der Servermethode ein CallbackȬObjekt (Rückrufobjekt) übergeben, von dem bei Ankunft des Ergebnisses durch das Laufzeitsystem eine Methode aufgeruȬ fen wird. Diese Mechanismen werden hier nicht weiter betrachtet (WWWȬ06).
Garbage-Collection Bei der ersten Nutzung eines entfernten Objekts erhält der Proxy eine ObjektrefeȬ renz. Objektreferenzen sind in .NET nur für eine bestimmte Zeit gültig und müsȬ sen vom Client auf Basis eines LeaseȬMechanismus immer wieder ausgeliehen werden. Diese Aufgabe übernimmt der Proxy. Es wird kein Referenzzähler (RefeȬ rence Counting) für entfernte Objekte verwendet. In DCOM, das die Basis für .NET darstellt, wird aber ein ReferenceȬCountingȬMechanismus eingesetzt. Die Leases sind mit einer Zeitbegrenzung (TTLȬAngabe = Time To Live) versehen, eine Verlängerung der Leases wird durch einen erneuten Methodenaufruf veranȬ lasst. Ein Lease kann auch explizit verlängert werden. Dies wird als Sponsoring bezeichnet (Schwichtenberg 2007).
Nebenläufigkeit Nebenläufigkeit der Serverbausteine wird durch das .NETȬRemotingȬLaufzeitsysȬ tem unterstützt, eine explizite Programmierung nebenläufiger Server ist nicht möglich. CAOȬInstanzen sind Clients fest zugeordnet. Jeder Client erhält seine eigene CAOȬInstanz durch das .NETȬFramework. Beim SinglecallȬMechanismus (SAOs) werden ebenfalls vom Server mehrere SAOȬInstanzen erzeugt. Singletons werden nur einmal instanziiert. Parallele Methodenaufrufe werden aber in nebenȬ läufigen Threads ausgeführt, wobei keine ThreadȬSicherheit beim Zugriff auf geȬ meinsame Datenbereiche unterstützt wird. Darum muss sich der Programmierer selbst kümmern.
Lebenszyklus von Serverbausteinen Wie bereits erläutert, unterscheidet man bei .NET Remoting die clientseitige und die serverseitige Aktivierung, und bezeichnet die entsprechenden Objekte als Client Activated Objects (CAO) und Server Activated Objects (SAO), wobei InstanzieȬ rung und Aktivierung nicht eindeutig voneinander getrennt sind. Die vordefinierte Objektklasse Activator dient z.B. der Aktivierung eines SAOs (SingleCallȬSAO). Wann die tatsächliche Instanzierung erfolgt, wird nicht offengeȬ legt und ist der .NETȬImplementierung überlassen. Folgende Beispiele sollen die Aktivierung näher beschreiben. BeispielȬAktivierung über ActivatorȬKlasse: Unser Client wird in diesem Fall unter dem Namespace ArticleManagementClient programmiert. Zunächst wird ein HTTPȬKanal (siehe Adressierung und Kommunikation) angelegt und registriert. Anschließend wird das Objekt über die Klasse Activator aktiviert.
108
2.3 Verteilte Objekte using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Http; using ArticleManagementBase; using ArticleManagementServer; namespace ArticleManagementClient { class ArticleMgrClient { // Interface des Artikelmanagers static ArticleMgrI aMgr; static void Main (string[] args) { // Hostnamen erfassen string host = Console.ReadLine(); // Adresse des Servers string url = "http://" + host + ":1234/ArticleMgr"; // Kanal erzeugen und registrieren HttpChannel chnl = new HttpChannel(); ChannelServices.RegisterChannel(chnl); // Erzeugen eines Proxy für den Zugriff auf einen // Artikelverwalter aMgr = (ArticleMgrI) // Aktivieren des Serverobjekts Activator.GetObject(typeof(ArticleMgrI), url); // Nutzung des entfernten Objekts … … } } }
Beispiel für eine SingletonȬAktivierung: Eine SingletonȬAktivierung erfolgt im .NETȬRemotingȬServer, was am Beispiel eines Artikelverwalters grob skizziert wird. Das Singleton wird im folgenden Codestück instanziiert und registriert. Der Service ist über einen HTTPȬKanal erreichbar. … using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Http; using ArticleManagementBase; // Basisklassen für Artikel namespace ArtikelManagementServer {
109
2 Konzepte und Modelle verteilter Kommunikation public class ServerStartup { public static void Main() { try { // ArtikelManager für Remoting als Singleton mit // einem HTTP-Channel deklarieren HttpChannel chnl = new HttpChannel(1234); ChannelServices.RegisterChannel(chnl); // Objekt als Singleton registrieren RemotingConfiguration.RegisterWellKnownServiceType (typeof(ArticleMgr), /* Typ des Objekts */ "ArticleMgr", /* URI des Objekts */ WellKnownObjectMode.Singleton); /* Aktivierungs-Modus */ Console.WriteLine("ArticleMgr gestartet"); } catch(Exception) { Console.WriteLine("Fehler bei Start"); } } } }
Basisdienste .NET Remoting bietet außer einem impliziten NamingȬService keine weiteren Dienste für eine verteilte Programmierung an. Darüber hinausgehende Dienste sind in den .NET Enterprise Services (siehe unten) zu finden.
Sonstige Unterscheidungsmerkmale .NET Remoting ist eine recht einfach zu nutzende, objektbasierte Variante für eine ClientȬServerȬLösung, die nicht für hochskalierbare und hochverfügbare AnwenȬ dungen konzipiert wurde. Hierfür sind .NET Enterprise Services oder ältere MicrosoftȬLösungen (COM+, DCOM) zu verwenden. Die Zukunft von .NET Remoting ist aus heutiger Sicht aber unsicher, da Microsoft ab .NET V3.0 die Windows Communication Foundation (WCF) in den Vordergrund stellt. Die Kommunikationsmechanismen nutzen in erster Linie Webservices.
2.3.5
Zusammenfassung
In diesem Abschnitt wurden die ClientȬServerȬTechnologien CORBA, JavaȬRMI und .NET Remoting beschrieben. Dies sind im Prinzip Weiterentwicklungen von RPC. Grundsätzlich kann man sagen, dass die grundlegenden Mechanismen recht ähnlich sind, sich allerdings auch an einigen Stellen wie etwa der Beschreibung von Dienstschnittstellen unterscheiden. CORBA ist ein sprachunabhängiger StanȬ
110
2.3 Verteilte Objekte dard, ONC RPC arbeitet mit der Sprache C, JavaȬRMI funktioniert nur mit Java und .NET Remoting wird heute vorwiegend unter WindowsȬBetriebssystemen, dafür aber mit mehreren MicrosoftȬSprachen unterstützt. Ein Fehler der frühen Nutzung des Konzepts der verteilten Objekte war, dass LeisȬ tungsaspekte nicht richtig betrachtet wurden. Es funktioniert nicht so ohne weiteȬ res, dass in einem verteilten System jedes Objekt auch mit all seinen Methoden so wie ein lokales Objekt aus der Ferne benutzt werden kann. Es liegen NetzwerkȬ verbindungen zwischen den beteiligten Rechnersystemen, die es erfordern, auf die Netzbelastung und auf Verzögerungen zu achten und diese im Design verteilter Anwendungen zu berücksichtigen. CORBA wird heute nur noch in heterogenen Umgebungen eingesetzt, oft auch „nur“ zur Entwicklung der Infrastruktur von Komponentensystemen, also im VerȬ borgenen. In der Praxis ist CORBA heute eine Basistechnologie zur ImplementieȬ rung von ApplicationȬServern geworden. Der ursprüngliche Ansatz, CORBA als direkt zu nutzendes Werkzeug für die Anwendungsentwickler verteilter, objektbaȬ sierter Anwendungen zu platzieren, verlor aufgrund der schnellen Entwicklung der Komponententechnologie in letzter Zeit an Bedeutung. ONC RPC ist immer noch in vielen Anwendungen im Einsatz, wird jedoch in der Regel nicht mehr für neue Entwicklungen verwendet. JavaȬRMI wird als leichtgeȬ wichtiger Mechanismus heute gerne eingesetzt, wenn man nicht größere Lösungen mit hohen Skalierbarkeitsanforderungen bauen muss. .NET Remoting ist erst am Anfang seiner Entwicklung und evtl. auch schon wieder auf dem Abstellgleis, wenn man die .NETȬStrategie von Microsoft näher betrachtet. (siehe .NET 3.0) Wir wollen abschließend in der Tabelle 2Ȭ1 eine zusammenfassende GegenüberȬ stellung der betrachteten Lösungsansätze in Bezug auf die betrachteten konzeptioȬ nellen Fragestellungen durchführen. Wie man der Tabelle entnehmen kann, bietet CORBA die meisten Dienste an und ist damit die am weitesten entwickelte Objekttechnologie. Die Services sind aber zum Teil sehr komplex und haben wie der Persistenzdienst oder der NebenläufigȬ keitsdienst nie praktische Bedeutung erlangt. Der Transaktionsdienst wird in KapiȬ tel 3 noch besprochen. .NET Remoting und Java RMI sind nahezu gleichwertig. Man erkannte nach einer ersten Nutzungsphase von CORBA in der Praxis, dass man grobkörnigere Objekte mit speziellen Schnittstellen konzipieren musste, um in verteilten Umgebungen bestehen zu können. Auch aus dieser Erkenntnis heraus hat der Begriff der Komponenten in verteilten Systemen immer mehr an BedeuȬ tung gewonnen. Dies führte zu einer Entwicklung von verteilten KomponentenȬ systemen, die im Folgenden betrachtet werden.
111
2 Konzepte und Modelle verteilter Kommunikation Tabelle 2Ȭ1: Gegenüberstellung der ClientȬServerȬLösungen Technologien KonzeptȬ
CORBA
Java RMI
.NET Remoting
ONC RPC
Objektbasiert, ORB
Objektbasiert, Basis
Objektbasiert,
Prozedural
im Mittelpunkt,
ist die JVM
Basis ist die CLR
merkmal Architektur
mächtiger POA ZustandsȬ
Keine explizite
Keine explizite
Stateful (CAO)
Keine explizite
verwaltung
Unterstützung
Unterstützung
Stateless (SingleȬ
Unterstützung
Call) Singelton ParameȬ
CallȬbyȬvalue
CallȬbyȬvalue
CallȬbyȬvalue für
terübergabe
CallȬbyȬreference für CallȬbyȬcopy/copyȬ
CallȬbyȬ
alle Parameter und
IORȬReferenzen
copy/copyȬback
Returnwerte
CallȬbyȬvalue back bei Referenzen
CallȬbyȬreference bei für lokale RefeȬ DienstȬ
CORBA IDL
RemoteȬObjekten
renzen
Über JavaȬInterface
Über .NETȬ
schnittstellen
RPC Sprache
Sprache (InterȬ face)
Marshalling
CDR
und UnȬ
JavaȬObjektȬ
.NETȬObjektȬ
serialisierung
serialisierung .NET NamingȬ
XDR
marshalling AdressieȬ
NamingȬService
rmiregistry
rung und
IIOP
JRMP und RMI/IIOP Service
TCP/UDPȬbasiert
KommuniȬ
AtȬmostȬonce
AtȬmostȬonce
.NET Protokoll
AtȬmostȬonce (TCP)
AtȬmostȬonce
AtȬLeastȬonce (UDP)
Leases mit max.
Keine explizite
kation GarbageȬ
Keine explizite
Collection
Unterstützung
NebenläuȬ
Thread Policies im
figkeit LebensȬ zyklus
ReferenceȬCounting
Portmapper
TTL + Sponsoring
Unterstützung
ImplementierungsȬ
ImplementieȬ
Entwicklung über
POA
abhängig
rungsabhängig
LowȬLevelȬAPI
Lifecycle Service
Instanzierung beim
Instanzierung
Instanzierung beim
Activation Policies
Start, Aktivierung
und Aktivierung
Start und AktivieȬ
bei VerbindungsȬ
abhängig von der
rung beim VerbinȬ
aufbau
ActivationȬ
dungsaufbau
Strategie Basisdienste
Persistency Service
Keine weiteren
Keine weiteren
AuthentifizierungȬ
Transaction Service
Basisdienste
Basisdienste
dienste
und viele andere Sonstiges
112
Hohe Skalierbarkeit
Keine hohe SkalierȬ
Keine hohe SkaȬ
Keine hohe SkalierȬ
über POA Policies
barkeit und VerfügȬ
lierbarkeit und
barkeit außer bei
konfigurierbar
barkeit machbar
Verfügbarkeit
Eigenentwicklung
machbar
über LowȬLevelȬAPI
2.4 Verteilte Komponenten
2.4 Verteilte Komponenten 2.4.1
Grundlegendes Modell
Im praktischen Einsatz stellte sich heraus, dass objektbasierte, verteilte Systeme relativ aufwändig zu programmieren sind (siehe CORBA). Eine Vereinfachung für den Entwickler wurde gefordert. Die Verteilung relativ kleiner Objekte stellte sich zudem als nicht leistungsfähig genug heraus, wenn man heute verfügbare NetzȬ werke unterstellt. Ein entferntes Objekt kann (noch) nicht wie ein lokal vorhandeȬ nes Objekt genutzt werden. Objekte sind also feingranulare Softwarebausteine, die sich nicht so gut für eine Verteilung eignen. Man denke nur an ein Objekt mit vieȬ len SetterȬ und GetterȬMethoden, die alle über das Netz als entfernte MethodenȬ aufrufe ausgeführt werden. Dies führt zu schlechter Performance. Weiterhin sind verteilte Objektsysteme recht kompliziert in der Handhabung.
Definitionen Aus diesen Überlegungen heraus, wurden die Konzepte verteilter Komponenten entwickelt. Vorreiter waren hier Microsoft mit MTS bzw. COM+ und Sun MicroȬ systems mit der EnterpriseȬJavaȬBeansȬTechnologie. Soweit es noch nachzuvollzieȬ hen ist, hat sich die JavaȬGemeinde ein paar Anregungen von MTS/COM+ für die EJBȬSpezifikation geholt, aber auch die umgekehrten Einflüsse sind erkennbar. Beide Technologien stellten Konzepte und Ablaufumgebungen zur Realisierung verteilter Komponenten bereit. Während Sun Microsystems eine Spezifikation auf Basis von Java grundsätzlich offen entwickelte, stellte Microsoft eine geschlossene Ablaufumgebung innerhalb des Betriebssystems Windows bereit. Komponenten kapseln Objekte und stellen eine oder mehrere Schnittstellen (Fassaden) für den Zugriff bereit. Der Komponentenbegriff ist sicher nicht eindeutig und es gibt viele Definitionen. Wir betrachten die Definitionen aus der UML (Jeckle 2004) und aus (Scyperski 1997). Definition gemäß UML: Eine verteilte Komponente stellt eine modulare, verteilbare und ersetzbare Einheit eines Systems dar, welche ihren Inhalt kapselt und eine odere mehrere Schnittstellen nach außen zur Verfügung stellt. Eine Komponente wird in UML mit speziellen Symbolen (siehe Abbildung 2Ȭ49) dargestellt. Schnittstelle1
Schnittstelle2
Kompon Kom ponente ente
Abbildung 2Ȭ49: UMLȬNotation für eine Komponente
113
2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ Definitionȱnachȱ(Scyperskiȱ1997):ȱ“Aȱsoftwareȱcomponentȱisȱaȱunitȱofȱcompositionȱwithȱ contractuallyȱspecifiedȱinterfacesȱandȱexplicitȱcontextȱdependenciesȱonly.ȱAȱsoftwareȱcomȬ ponentȱcanȱbeȱdeployedȱindependentlyȱandȱisȱsubjectȱtoȱcompositionȱbyȱthirdȱparties.”ȱȱ Dieseȱ Definitionȱ machtȱ mehrȱ alsȱ dieȱ UMLȬDefinitionȱ deutlich,ȱ dassȱ hinterȱ demȱ Konzeptȱ derȱ Komponentenȱ auchȱ dieȱ Möglichkeitȱ derȱ Komposition,ȱ alsoȱ derȱ ZuȬ sammensetzungȱvonȱAnwendungssystemenȱausȱKomponenten,ȱsteht.ȱKomponenȬ tenȱsollȱmanȱkaufenȱundȱinȱeineȱeigeneȱAnwendungȱintegrierenȱkönnen.ȱDieȱDefiȬ nitionȱvonȱScyperskiȱunterscheidetȱnichtȱzwischenȱlokalenȱundȱverteiltenȱKompoȬ nenten,ȱ daȱ hierȱ auchȱ prinzipiellȱ dieȱ gleichenȱ Anforderungenȱ gelten.ȱ Verteilteȱ Komponentenȱ sindȱ allerdingsȱ eherȱ (imȱ Sinneȱ einerȱ ClientȬServerȬBeziehung)ȱ serȬ verseitigeȱ Softwarebausteine.ȱ Vergleichtȱ manȱ sieȱ mitȱ verteiltenȱ Objekten,ȱ soȱ kannȱ manȱ sagen,ȱ dassȱ verteilteȱ Komponentenȱ inȱ derȱ Regelȱ größereȱ Softwarebausteineȱ sind.ȱ
Komponentenmodelle und –systeme, Application-Server und Container Komponentenmodelleȱ undȱ Ȭsysteme:ȱ Einȱ Komponentenmodellȱ legtȱ Regelnȱ fürȱ dieȱ AnwendungȱundȱdasȱZusammenspielȱvonȱKomponentenȱfest.ȱSystemeȱbestehendȱ ausȱ Komponenten,ȱ dieȱ einemȱ Komponentenmodellȱ folgen,ȱ werdenȱ auchȱ alsȱ KomȬ ponentensystemeȱ bezeichnet.ȱ Bekannteȱ Komponentenmodelleȱ sindȱ Enterpriseȱ Javaȱ Beansȱ (JEE/EJB),ȱ dasȱ SpringȬKomponentenmodellȱ (Wolffȱ 2006),ȱ Jiniȱ (Haaseȱ 2001),ȱ CORBAȱComponentsȱ(CORBA/CCM)ȱundȱ.NETȱEnterpriseȱServices.ȱȱ ApplicationȬServer:ȱ Komponentenȱ benötigenȱ eineȱ Ablaufumgebung,ȱ dieȱ alsȱ ApȬ plicationȬServerȱbezeichnetȱwird.ȱEsȱgibtȱzwarȱkeineȱeindeutigeȱFestlegung,ȱwelcheȱ Funktionenȱ einȱ ApplicationȬServerȱ bereitstellenȱ muss,ȱ imȱ Prinzipȱ handeltȱ esȱ sichȱ aberȱumȱeineȱWeiterentwicklungȱderȱklassischenȱTransaktionsmonitoreȱfürȱverteilȬ teȱAnwendungen.ȱApplicationȱServerȱbietenȱBasisdienste,ȱzuȱdenenȱNamingȬȱbzw.ȱ DirectoryȬDienste,ȱ Transaktionsdienste,ȱ Sicherheitsdiensteȱ undȱ Persistenzdiensteȱ gehören.ȱWährendȱTransaktionsmonitoreȱfürȱdieȱMainframeȬWeltȱentwickeltȱwurȬ den,ȱsindȱApplicationȬServerȱfürȱverteilteȱAnwendungssystemeȱkonzipiert.ȱTransȬ aktionsmonitoreȱunterstützenȱimȱWesentlichenȱeineȱprozeduraleȱEntwicklungȱvonȱ Transaktionsprogrammen.ȱ ApplicationȬServerȱ nutzenȱ dieȱ Konzepteȱ derȱ ObjektȬȱ undȱ vorȱ allemȱ derȱ Komponentenorientierung.ȱ Anwendungenȱ werdenȱ inȱ sog.ȱ Komponentenȱ zerlegt,ȱ dieȱ überȱ Schnittstellenȱ nachȱ außenȱ verfügenȱ sollen.ȱ Eineȱ Komponenteȱ mussȱ bestimmteȱ Schnittstellenȱ bereitstellen,ȱ dieȱ derȱ ApplicationȬ Serverȱ verwendet,ȱ umȱ Aufrufeȱ anȱ dieȱ Komponenteȱ weiterzuleiten.ȱ Dieseȱ SchnittȬ stellenȱwerdenȱdannȱüberȱeineȱNetzwerkverbindungȱvonȱdenȱClientsȱbenutzt.ȱ Dasȱ Grundprinzipȱ derȱ Arbeitsweiseȱ einesȱ ApplicationȬServersȱ istȱ inȱ Abbildungȱ 2Ȭ50ȱ vereinfachtȱ dargestellt.ȱ Dieȱ Clientanwendungenȱ laufen,ȱ imȱ Gegensatzȱ zumȱ klassischenȱ TeilhaberȬȱ undȱ auchȱ Teilnehmerbetrieb,ȱ aufȱ eigenenȱ Rechnernȱ mitȱ eiȬ genenȱ Betriebssystemenȱ ab.ȱ Aufȱ denȱ Clientrechnernȱ mussȱ eineȱ entsprechendeȱ Softwareȱvorhandenȱsein,ȱdieȱdenȱZugangȱzumȱApplicationȬServerȱermöglicht.ȱImȱ ServerȬBetriebssystemȱ läuftȱ derȱ ApplicationȬServerȱ ab.ȱ Inȱ diesemȱ liegen,ȱ ähnlichȱ
114 ȱ
2.4 Verteilte Komponenten wie Transaktionsprogramme in Transaktionsmonitoren, die Softwarekomponenten der Anwendungen. Zum Ablaufzeitpunkt werden diesen Komponenten nach BeȬ darf Prozesse oder Threads zugeordnet, in denen der eigentliche Programmcode zum Ablauf kommt. Ein ApplicationȬServer verwaltet üblicherweise einen Pool an Prozessen bzw. Threads und ordnet diese den Komponenten dynamisch zu. Die benötigten Datenhaltungssysteme liegen meist, aber nicht zwingend, auf einem eigenen Serverrechner Die Zugriffe auf die Datenbank werden über den ApplicatiȬ onȬServer kontrolliert. C1
C2
C3
... Cn
Mit eigenen Betriebssystemen
Netzwerk ClientAufruf
DB-Zugriff
Datenbanksystem
DatenbankServersystem
D B M S
Px DBMS
Prozess/Thread
K1
K2
K3 ... Km
P1
P2
P3 ... Pl
Kx
Softwarekomponente
Cx
ApplicationServer und Container
Serversystem
Pool
Anwender mit Clientprogramm auf einem Arbeitspaltzrechner
Datenbankmanagementsystem
Abbildung 2Ȭ50: Architektur eines ApplicationȬServers nach (Mandl 2008a)
ApplicationȬServer leisten wie Transaktionsmonitore umfangreiche Dienste. Sie verwalten die Komponenten, ordnen diese zur Laufzeit Prozessen zu, optimieren die Datenbankzugriffe und erleichtern die Programmierung durch vordefinierte Standardschnittstellen. Container: In heutigen Technologien für verteilte Systeme wird der Begriff ConȬ tainer als konkrete Laufzeitumgebung für gleichartige Komponenten häufig verȬ wendet. Container sind Bestandteile von ApplicationȬServern. Je nach verwalteten Objekten spricht man auch von WebȬContainern, EJBȬContainern usw. Container laufen meist innerhalb der Umgebung eines ApplicationȬServers ab und sind in ApplicationȬServer eingebettet. Container nehmen dem Programmierer und auch dem Systemintegrator (auch als Deployer bezeichnet) einige Arbeiten ab. Hierzu gehört: – Der Programmierer muss sich nicht mehr um die Erzeugung von KompoȬ nenteninstanzen kümmern. Die Verwaltung des Lebenszyklus von KompoȬ nenten wird von Containern übernommen.
115
2 Konzepte und Modelle verteilter Kommunikation – Container ermöglichen den nebenläufigen Ablauf mehrerer Instanzen einer Komponente ohne zusätzliche Programmierung. Der Programmierer einer Komponente nutzt ein einfaches, sequentielles Programmiermodell. Die PaȬ rallelisierung übernimmt der Container. Komponenten werden vom ContaiȬ ner bei Bedarf erzeugt und freigegeben. – Container stellen eine Reihe von Systemdiensten bereit, die vom KomponenȬ tenentwickler verwendet werden können bzw. implizit verwendet werden. Hierzu gehören das Pooling von Datenbankverbindungen und ThreadpooȬ ling. – Container stellen Basismechanismen für die Einbettung von Komponenten dar. Über Regeln wird festgehalten, welche Schnittstellen eine Komponente bereitstellen muss, damit sie im Container ablauffähig ist. – Mechanismen für die Skalierbarkeit und auch für Fehlertoleranz und LastȬ verteilung werden durch den Container unterstützt. Komponenten können mehrfach gestartet werden. Inversion of Control: Die Programmierung von Komponenten ist im Vergleich zur Programmierung verteilter Objekte einfacher. Der Container kümmert sich um den gesamten Lebenszyklus einer Komponente, dient als Laufzeitumgebung und ruft bei einem ankommenden Request die Methode des entsprechenden KompoȬ nentenȬInterface auf. Dies bezeichnet man auch als Inversion of Control9.
2.4.2
Fallbeispiel CORBA Components (CCM)
Eine weitere Komponententechnologie namens CORBA Components Model (CCM) wurde von der OMG spezifiziert (OMG 2002a). Basis von CCM ist CORBA. CCM stellt also eine Erweiterung von CORBA um Möglichkeiten zur komponenȬ tenbasierten Entwicklung dar. Der in der OMA definierte Object Request Broker (ORB) dient zur Kommunikation zwischen den beteiligten Instanzen. Ähnlich wie die EJBȬSpezifikation stellt CCM ein Komponentenmodell für verteilte Komponenten bereit, das genaue Vorgaben zu den Komponentenverträgen macht und hierfür eine Menge von Schnittstellen festlegt. Eine Integration mit EJBeans ist ebenfalls möglich. CCM besteht im Wesentlichen aus dem Komponentenmodell selbst, der Component IDL (CIDL), dem Component Implementation Framework (CIF) und dem Container Programming Model. CCM definiert den grundsätzlichen Aufbau der Komponenten sowie Ihre EigenȬ schaften. Es legt auch fest, wie man Komponenten zu sog. Assemblies zusammenȬ bauen kann und wie diese verteilt werden (Deployment). CIDL ist eine ErweiteȬ rung von IDL und CIF stellt ein Rahmenwerk für die Komponentenentwicklung und die Infrastruktur für die Laufzeit der Komponenten bereit.
9
Man nennt dies auch das HollywoodȬPrinzip („Don’t call us, we call you“).
116
2.4 Verteilte Komponenten Beispiel: Die folgende CIDLȬNotation zeigt eine CORBAȬKomponente namens MyCCMComponent, die zwei Interfaces bereitstellt und zum Modul MyCCMModule gehört. Das Schlüsselwort session gibt den LebenszyklusȬTyp an und ist vergleichȬ bar mit dem BeanȬTyp SessionȬBean bei EJB (siehe weiter unten). Neben dem KomȬ ponententyp session gibt es auch noch die Typen service, entity und process. module MyCCMModule { interface MyInterface1 {... }; interface MyInterface2 { ... }; component MyCCMComponent session { provides MyInterface1 i1; provides MyInterface2 i2; }; };
Das Container Programming Model definiert einen Container als LaufzeitumgeȬ bung für Komponenten, der in ApplicationȬServern implementiert wird. Der ConȬ tainer dient der Verwaltung von KomponentenȬInstanzen. Diese können mit Hilfe eines POA (Portable Object Adapter) referenziert werden. CORBAȬKomponenten greifen auch über einen ORB auf die Standarddienste des CORBAȬModells zu. CCMȬKomponenten sind die wesentlichen Bausteine im CCM. Eine Komponente kann mehrere Schnittstellen bereitstellen. Aus der CIDLȬSchnittstellenspezifikation generiert ein CCMȬkonformes System die Skeletons für Client und Server. Die Schnittstellen zur Kommunikation mit den CORBAȬClients und anderen CORBAȬKomponenten werden auch als Ports bezeichnet. Vier PortȬTypen sind vorgegeben, von denen eine CORBAȬKomponente jeweils mehrere anbieten kann: – Facets sind die Schnittstellen, die einem Client zur Verfügung gestellt werȬ den. Eine CORBAȬKomponente kann verschiedene Facets anbieten, die jeȬ weils durch eine ObjektȬReferenz angesprochen werden können. Jedes Facet ist durch ein IDLȬInterface beschrieben. – Receptables sind Schnittstellen, die es einer CORBAȬKomponente ermögliȬ chen, mit anderen Komponenten eine Verbindung aufzubauen. Receptables sind benannte Verbindungsendpunkte (Named Connection Points). – Event Sources sind auch benannte Verbindungsendpunkte, die es ermögliȬ chen, typisierte Ereignisse an Clients über die Implementierung des Observer Patterns bereitzustellen. Ereignisse können an diesem PortȬTyp publiziert (PublishȬSubscribeȬModell) und gesendet werden. – Event Sinks dienen dazu, definierte Ereignisse entgegenzunehmen. Es sind auch benannte Verbindungsendpunkte. Komponenten können gemäß dem PublishȬSubscribeȬModell Ereignisse abonnieren. Tritt ein konkretes Ereignis für einen abonnierten Typ ein, wird es am Event Sink zugestellt. Von der Komponente kann an diesen PortȬTyp eine Aktionsroutine bereitgestellt werden, die auf das Ereignis adäquat reagiert.
117
2 Konzepte und Modelle verteilter Kommunikation Wie in Abbildung 2Ȭ51 zu sehen ist, verfügen CORBAȬKomponenten über ein HoȬ
meȬInterface, das hier mit IDL definiert wird. Es wird für das LifecycleȬ Management verwendet (Erzeugen und Löschen von KomponentenȬInstanzen). Die Referenzen der HomeȬSchnittstellen werden in einer Datenbasis verwaltet. Eine HomeFinderȬSchnittstelle dient dem Auffinden der Komponenten. Component Home
CCM-Container CCMKomponente Komponente
CallbackSchnittstellen
externe Schnittstellen
Interne Schnittstellen POA
ORB
Abbildung 2Ȭ51: CCMȬContainerȬProgrammiermodell nach (Andresen 2003)
Beispiel: In Abbildung 2Ȭ52 ist eine Komponente zur Artikelverwaltung skizziert, die über alle vier PortȬTypen verfügt. Die Adressierung einer Komponente erfolgt, wie in der Abbildung dargestellt, über eine CORBAȬObjektreferenz. Im Bild stellt eine Komponente namens ArtikelverwaltungsȬKomponente ein Facet Artikel für Clients bereit, um Methoden für den Zugriff auf Artikel aufzurufen. Dieses Facet wird von den Clients verwendet. Über das Receptable Lager kann eine andere Komponente (z.B. ein Lagerverwaltungssystem) auf Bestandsdaten von Artikeln zugreifen. Über den Event Sink Auftrag können z.B. neu im System ankommende Aufträge an die Bestandsverwaltung gemeldet werden. Damit kann der Bestand aktualisiert werden. Das Event Source Preisänderung dient der Propagierung von Preisänderungen von Artikeln an andere betroffene Komponenten (z.B. eine AufȬ tragsverwaltung).
118
2.4 Verteilte Komponenten CORBA-Objektreferenz
Artikelverwaltungskomponente
Lager
Artikel Receptable Facet-Schnittstelle
Auftrag Preisänderung
Event Sink
Event-Source Event- Sink Implementation
Abbildung 2Ȭ52: CCMȬKomponente und deren Ports nach (Andresen 2003)
Die Entwicklung von eigenen Komponenten wird mit Hilfe eines CIDLȬCompiler durchgeführt, der aus einer CIDLȬDatei eine Komponentenbeschreibung sowie ein KomponentenȬGerüst erzeugt. Die Bedeutung von CCM ist in der Praxis relativ gering. Es gibt nur wenige ImpȬ lementierungen wie etwa OpenCCM (WWWȬ039). Für eine tiefergehende BetrachȬ tung wird auf die Literatur verwiesen (WWWȬ009). Das CCM ist allerdings im Vergleich zu anderen Komponentenmodellen mächtiger und daher relativ aufȬ wändig zu implementieren. Möglicherweise ist dies auch ein Grund für die gerinȬ ge Verbreitung.
2.4.3
Fallbeispiel .NET Enterprise Services
Das Komponentenmodell von Microsoft heißt COM+, basiert auf der WindowsȬ DNAȬArchitektur (Windows Distributed interNetwork Applications Architecture). Es baut auf COM und DCOM auf. WindowsȬDNA wurde von Microsoft im Jahre 1999 mit COM+ vermarktet und enthält neben COM+ auch eine Reihe von ProdukȬ ten. DNA war in der Praxis nie relevant, da es im Wesentlichen ein Satz von DoȬ kumentationen bzw. Spezifikationen war (Kuhmann 2004). COM steht für CompoȬ nent Object Model und wurde aus der OLEȬTechnologie (Object Linking and EmbedȬ ding), die der Verküpfung von Dokumenten unter Windows dient, weiterentwiȬ ckelt. Vorgänger von OLE war wiederum das Clipboard von Windows, also die klassische WindowsȬZwischenablage aus den späten 80er Jahren. DCOM (DistribuȬ ted COM) erweiterte COM um verteilte Kommunikationsmechanismen auf Basis
119
2 Konzepte und Modelle verteilter Kommunikation des Remote Procedure Calls. Verteilte Komponenten kommunizieren bei DCOM über eine Implementierung von DCE/RPC.
COM+-Komponente
COM+-Komponente
DCOM/RPC
COM+-Komponente
COM+-Komponente
Kontext A
Kontext C
Prozess P1
Prozess P2
Abbildung 2Ȭ53: COM+ȬKomponenten, Kontexte und Prozesse nach (Andresen 2003)
Bevor COM+ freigegeben wurde, veröffentlichte Microsoft in den 90er Jahren noch einen ApplicationȬServer namens MTS (MTS = Microsoft Transaction Manager). MTS gilt heute als der erste ApplicationȬServer. Weiterhin entwickelte Microsoft einen verteilten Transaktionskoordinator namens MSDTC und einen MessageȬQueueȬ Server namens MSMQ jeweils als eigenständige Produkte auf dem Markt. All diese Produkte wurden dann Ende der 90er Jahre in COM+ vereint. COM+ȬKomponenten werden in dynamischen Laufzeitbibliotheken (DLL) abgeȬ legt und zur Laufzeit vom sog. Service Control Manager (SCM) auf eine ClientanȬ frage hin geladen. Die prozessübergreifende Kommunikation erfolgt über DCOM und damit über DCE/RPC. COM+ sorgt für die Aktivierung von Objekten (JustȬinȬTimeȬActivation), für das ObjektȬPooling, die Transaktionsunterstützung usw. Die COM+ȬLaufzeitumȬ gebung unter Windows erfüllt also im Wesentlichen die Dienste eines Containers bzw. eines ApplicationȬServers. In Abbildung 2Ȭ53 ist eine Komponentenverteilung unter Windows auf zwei Betriebssystemprozesse dargestellt. Mehrere KomponenȬ
120
2.4 Verteilte Komponenten ten können beim COM+ unter einem gemeinsamen Kontext ablaufen und ein ProȬ zess kann mehrere Kontexte aufnehmen. Nachfolger von COM+ sind die .NET Enterprise Services. Der Anfang 2000 vorgeȬ stellte „Komponentenstandard“ der WindowsȬWelt stellt auch eine Basis für komȬ ponentenbasierte verteilte Systeme dar und setzt selbst auf COM+ auf. KomponenȬ ten laufen auch in Containern ab. .NET Enterprise Services
COM+
.NET Remoting DCOM
COM
Abbildung 2Ȭ54: .NET Enterprise Services, Einordnung nach (Kuhrmann 2004)
.NET Enterprise Services basiert auf der Common Language Runtime (CLR). CLR stellt Ȭ wie auch die Java Virtual Machine (JVM) Ȭ eine Laufzeitumgebung für BytecodeȬ orientierte Sprachen dar. CLR dient der Interpretation mehrerer Sprachen, weshalb der WindowsȬKomponentenstandard verschiedensprachige Komponenten unterȬ stützt (C++, C#, J#, VB,...). Die Zusammenhänge der einzelnen WindowsȬKomponentenlösungen sind in Abbildung 2Ȭ54 aufgezeigt. COM+ vereint die älteren Technologien COM und DCOM und die .NET Enterprise Services nutzen sowohl COM+ als auch .NET Remoting. Das Ziel von Microsoft zur weiteren Entwicklung verteilter BasissysteȬ me ist die Vereinheitlichung der Technologien. Derzeit wird noch COM+ benötigt, um verteilte Komponenten zum Ablauf zu bringen. Im Folgenden wird kurz auf das Progammiermodell und die Laufzeitumgebung von .NET Enterprise Services eingegangen. Weitere Informationen sind in der angeȬ gebenen Literatur enthalten. Jede Komponente ist als sog. Serviced Component zu implementieren, indem sie von der Basisklasse ServicedComponent (Namensraum System.EnterpriseServices) abgeleiȬ tet wird. Alle Serviced Components werden in Containern verwaltet, die heute noch übergangsweise auf die COM+ȬInfrastruktur abgebildet werden. Container sind „Lebensräume für Komponenten“. Sie werden in einem Katalog, dem sog. COM+Ȭ
121
2 Konzepte und Modelle verteilter Kommunikation Katalog mit all ihren Metadaten registriert und damit für ihre Nutzer bekannt geȬ macht. Die Klasse ServicedComponent leitet sich wiederum aus der Klasse ContectȬ BoundObject und indirekt aus der Basisklasse MarshalByRefObject ab, womit die Kommunikationsmechanismen von .NET Remoting geerbt werden. Serviced ComȬ ponents sind also auch entfernte Objekte. Komponenten müssen in einer BiblioȬ theksȬAssembly (DLL) abgelegt sein. Die Objektklasse ContextBoundObject (Kontextgebundenes Objekt) ist eine ErweiteȬ rung der Objektklasse MarshalByRefObject. Über einen Kontext können mehrere Komponenten zu einer gemeinsamen Gruppe zusammengefasst werden. Dieser Gruppe können dann gemeinsame Eigenschaften, sog. Kontextattribute, zugewiesen werden. Object
MarshalBy Ma rshalByRefO RefObject bject
registriert
COM+Laufzeitsystem Laufzeitsystem (Application(A pplication-Server) Server)
ContextB ontextBoundO oundObject bject
ServicedC Servic edConpon onponent ent
läuft in
CLRCL RLaufzeitsystem Laufzeitsystem
MyCom ompon ponent ent
Abbildung 2Ȭ55: Klassenhierarchie für .NETȬKomponenten
Eine verteilte Anwendung, die auf Basis der .NET Enterprise Services läuft, besteht aus einer Gruppe von Komponenten, der gemeinsame technische Eigenschaften wie der Aktivierungsmechanismus, das Prozessmodell und der Mechanismus zum Nachrichtentransport zugewiesen werden können. Das Prozessmodell sieht unter .NET auch noch sog. Anwendungsdomänen vor. Anwendungsdomänen stellen eine logische Aufteilung von Prozessen dar. In einer Anwendungsdomäne laufen mehrere Anwendungen ab. Ein Prozess kann mehrere Anwendungsdomänen entȬ halten. Damit können also mehrere Anwendungen in einem Prozess verwaltet werden. Die .NET Enterprise Services stellen den eingebetteten Komponenten einige BasisȬ dienste bereit, die im Wesentlichen aus COM+ stammen. Hierzu gehören die verȬ teilte Transaktionsunterstützung, RessourcenȬ/ObjektȬPoolingȬMechanismen und
122
2.4 Verteilte Komponenten eine JustȬInȬTimeȬAktivierung für die Komponenten (JITA). Eine Komponente registriert sich beim COM+ȬLaufzeitsystem und läuft in der CLR ab (siehe Abbildung 2Ȭ55). Ähnlich wie in anderen Komponentenmodellen (siehe EJB) müssen auch .NETȬ Komponenten einige Methoden implementieren, die für den Lebenszyklus wichtig sind. Beispielmethoden der Klasse ServiceComponents sind z.B. Activate zur KomȬ pontentenaktivierung und Deactivate zur Deaktivierung. Die Methoden werden durch das Laufzeitsystem aufgerufen. Eigenschaften der Komponenten, wie z.B. das Transaktionsverhalten, können über Attribute im Programm eingestellt werȬ den. Das Transaktionsverhalten der .NET Komponententechnologie wird in KapiȬ tel 4 näher betrachtet.
2.4.4
Fallbeispiel JEE / Enterprise Java Beans
JEE bzw. J2EE (vor der Version 1.5) beinhaltet neben vielen anderen Standards für verteilte Systeme die EnterpriseȬJavaȬBeansȬSpezifikation (EJB). EJB dient der EntȬ wicklung von serverseitigen Komponenten und ist mittlerweile in der Praxis ein verbreiteter Ansatz. Wir versuchen uns bei dieser Betrachtung auf die EJBȬ Grundkonzepte zu beschränken. Eine detaillierte Technologiebetrachtuung ist in der EJBȬSpezifikation (Sun 2007a) bzw. in (Burke 2006) oder (Backschat 2007) zu finden.
Idee und Ziele Bei Enterprise JavaBeans handelt es sich um ein verteiltes Komponentenmodell, bei dem die Komponenten auch als Enterprise Java Beans10 (im Weiteren auch EJȬ Beans) bezeichnet werden. Ziel der EJBȬSpezifikation ist es, einen „Standard“ für verteilte, transaktionsorientierte, objektorientierte und serverbasierte KomponenȬ ten, die mit Java entwickelt werden, zu schaffen. Enterprise JavaBeans sind dabei die Serverkomponenten. Diese werden nach bestimmten Regeln entwickelt und müssen einige sog. Contracts (Verträge) erfüllen, damit sie in jeder beliebigen UmȬ gebung, welche die EJBȬSpezifikation unterstützt, ablaufen können. Die Definition von Sun Microsystems für Enterprise JavaBeans (EJBeans) lautet wie folgt (WWWȬ004): ȈThe Enterprise JavaBeans architecture is a component architecture for the development and deployment of objectȬoriented distributed enterpriseȬlevel applications. Applications written using the Enterprise JavaBeans architecture are scalable, transacȬ tional, and multiuser secure. These applications may be written once, and deployed on any server platform that supports the Enterprise JavaBeans specification.“ Unter Nutzung der EJBȬTechnologie soll es also möglich sein, serverseitige KomȬ ponenten, die mit Werkzeugen unterschiedlicher Hersteller entwickelt werden, miteinander zu kombinieren. Das Prinzip „Write Once Run Anywhere“ trägt dem 10
Wir verwenden im Weiteren den Begriff Bean im Femininum.
123
2 Konzepte und Modelle verteilter Kommunikation Portabilitätsgedanken Rechnung. Die EJBȬSpezifikation zielt also nicht nur auf die Phase der Entwicklung ab, sondern regelt auch die Aspekte Deployment und RunȬ time. Enterprise Java Beans sind also serverseitige Komponenten und laufen in EJBȬ ApplicationȬServern bzw. in EJBȬContainern innerhalb von EJBȬApplicationȬ Servern ab. Wir bezeichnen im weiteren Enterprise Java Beans auch in Abgrenzung zum Komponentenmodell kurz als EJBeans. Konkrete Instanzen von EJBeans beȬ zeichnen wir mit EJBȬInstanzen., sofern der Kontext nicht eindeutig ist. Eine Bean soll laut EJBȬSpezifikation auf einem EJBȬApplicationȬServer jedem AbȬ lauf kommen können, ohne den Code noch einmal zu verändern. Der Hersteller des EJBȬApplicationȬServers muss sich an die EJBȬSpezifikation halten. Es muss lediglich ein sog. Deployment Descriptor (DD), der außerhalb des AnwendungscoȬ des liegt, angepasst werden. Dies ist eine XMLȬbasierte Konfigurationsdatei. Weitere wichtige Aspekte der EJBȬSpezifikation sind vor allem die TransaktionsunȬ terstützung, die Bereitstellung von SecurityȬMechanismen und die Unterstützung bei konkurrierenden Zugriffen auf persistente Daten. Auf welche Weise solche aufwändigen Mechanismen wie Transaktionsunterstützung und persistente DaȬ tenhaltung implementiert werden sollen, bleibt den Herstellern überlassen. HierȬ aus ergibt sich auch, dass Hersteller von EJBȬProdukten das Rad nicht neu erfinden. Hersteller entwickelten und entwickeln vielmehr vorhandene ApplicationȬServer, Datenbankmanagementsysteme oder transaktionale Basissysteme zu EJBȬ ApplicationȬServern weiter.
EJB-Application-Server und EJB-Container Ein EJBȬContainer ist für die Erzeugung und die Verwaltung der Beans in einer nebenläufigen Umgebung zuständig. Die Infrastruktur, in der ein EJBȬContainer in ein Betriebssystem eingebettet wird, wird als EJBȬApplicationȬServer oder kurz als EJBȬServer bezeichnet. In die Sprache Java ist die EJBȬTechnologie über das JavaȬ Package javax.ejb eingebettet. Es enthält alle Klassen und Interfaces für die ZuȬ sammenarbeit zwischen EJBȬClient und EJBȬContainer sowie zwischen EJBeans und EJBȬContainer. Damit sind gewissermaßen auch die Verträge der ZusammenȬ arbeit zwischen den beteiligten Softwarebausteinen definiert. Ein EJBȬContainer verwaltet den Kontext von EJBeans. Es gibt mehrere BeanȬ Typen. Der Zugang einer ClientȬAnwendung zu einem EJBean erfolgt über dediȬ zierte Komponentenschnittstellen. In früheren EJBȬVersionen (< 3.0) verfügte jede EJBean über zwei vordefinierte Schnittstellen, ein sog. HomeȬ und ein RemoteȬ Interface. Der BeanȬEntwickler musste beide Interfaces definieren und die eigentliȬ chen MethodenȬImplementierungen bereitstellen. Das HomeȬInterface diente als Factory zur Erzeugung einer EJBean. Das RemoteȬInterface stellte die Funktionalität der Komponente über BusinessȬMethoden bereit. Das HomeȬ und das RemoteȬ Interface repräsentierten die Sicht eines EJBȬClients. In neueren Versionen (ab EJB
124
2.4 Verteilte Komponenten 3.0) wurde die Unterscheidung zwischen HomeȬ und RemoteȬInterface aufgehoben und soll daher nicht weiter betrachtet werden. Der Fokus unserer Betrachtung liegt auf der EJBȬVersion 3.0. EJB-Application-Server EJB Application Server EJB-Client RMI/IIOP
EJB-Container
Remote
EJB-Proxy EJBean 1 Local
EJBean 2
EJBean n
Basisdienste
Persistenzdienst
Abbildung 2Ȭ56: EJBȬArchitektur im Groben
In Abbildung 2Ȭ56 wird ein grober Überblick über die serverseitige EJBȬ Architektur gegeben. Innerhalb eines EJBȬContainers kommen beliebig viele EJȬ Beans zum Ablauf, die über RemoteȬSchnittstellen von außen zugänglich sind. Innerhalb des EJBȬContainers können die EJBeans auch über LocalȬSchnittstellen genutzt werden. EJBeans können sich also im Container auch gegenseitig nutzen. In der Spezifikation ist die Art der Implementierung des EJBȬContainers nicht vorȬ gegeben. Er kann in einer oder mehreren JVMs ablaufen. Der EJBȬContainer ist in einen EJBȬApplicationȬServer eingebettet, der die Schnittstellen von Basisdiensten (Naming, Transaktionen,…) und einen Persistenzdienst bereitstellt. Die SchnittstelȬ le zwischen EJBȬContainer und EJBȬApplicationȬServer ist nur über die DienstȬ schnittstellen vorgegeben. Im Client ist ein EJBȬProxy erforderlich, der den Zugriff und das Marshalling regelt. In der EJBȬSpezifikation sind die BeanȬTypen SessionȬBean (stateless und stateful), EntityȬBean und MessageȬDrivenȬBean (MDB) definiert. Damit können eine Reihe von grundlegenden ClientȬServerȬMechanismen (siehe Abschnitt 2.1) abgebildet werden. Diese SessionȬBeans und ihre Besonderheiten sollen im Weiteren betrachȬ tet werden. MDBs kamen erst später hinzu, um auch die nachrichtenbasierte Kommunikation zu unterstützen. Sie werden in Abschnitt 2.5 erläutert. EntityȬ Beans dienen dem Zugang zu DatenbankȬEntitäten und werden in Kapitel 5 im Zuge der Architekturdiskussion nochmals aufgegriffen.
125
2 Konzepte und Modelle verteilter Kommunikation
Rollen Die EJBȬArchitektur legt Benutzerrollen für die Entwicklung, die Inbetriebnahme und die Administration fest. Die Rollen sollen kurz beschrieben werden: – Eine EJBean wird von einem Enterprise Bean Provider (kurz BeanȬProvider) erstellt. Dieser ist ein Spezialist einer Anwendungsdomäne und liefert im Wesentlichen die eigentliche Anwendungslogik. – Ein Application Assembler ist ein in seiner Anwendungsdomäne erfahrener Anwendungsentwickler, der sich für eine Anwendung die notwendigen Komponenten z.B. in einem zukünftigen EJBeanȬMarkt oder im UnternehȬ men zusammensucht und daraus seine Applikation aufbaut. – Ein Deployer ist gewissermaßen ein Systemintegrator, der die fertige AppliȬ kation in einer ITȬUmgebung zum Einsatz bringt bzw. installiert. Damit eine automatische Generierung von Code möglich ist, muss der Component Contract eingehalten werden. Der BeanȬProvider muss die entsprechenden Methoden wie im Contract vorgegeben implementieren. – Ein EJBȬServerȬProvider (ServerȬProvider) ist typischerweise ein Hersteller von MiddlewareȬ oder Basissoftware, der die notwendigen Basisdienste wie Transaktionsmechanismen usw. bereitstellt. – Ein EJBȬContainerȬProvider (ContainerȬProvider) liefert die erforderlichen DeploymentȬWerkzeuge sowie die Laufzeitumgebung, um EJBeans zum Einsatz zu bringen. – Ein SystemȬAdministrator ist für die Konfigurierung und Administration der verteilten Umgebung verantwortlich, in der die EJBeans ablaufen sollen. Die Schnittstelle zwischen einem EJBȬContainer und einem EJBȬApplicationȬServer ist nicht in einem Contract festgelegt. Die EJBȬSpezifikation geht davon aus, dass in der Praxis die beiden Rollen EJBȬServerȬ und ContainerȬProvider zusammenfallen. Dies sind die typischen Aufgaben des Herstellers eines EJBȬApplicationȬServers. Hier wird auch nochmals deutlich, dass typische EJBȬApplicationȬServer als umȬ fassende Laufzeitumgebungen angesehen werden, die sowohl die Aufgaben des EJBȬServerȬProviders, als auch die eines EJBȬContainerȬProviders übernehmen. Nicht in der EJBȬSpezifikation vorgeschrieben, aber in der Regel ebenfalls von eiȬ nem EJBȬApplicationȬServer angeboten, sind die Werkzeuge zur Entwicklung von EJBeans, die vom BeanȬProvider verwendet werden.
Session-Beans Lokale und entfernte Schnittstellen: SessionȬBeans benötigen ein oder mehrere BusinessȬInterfaces. Die Kennzeichnung, ob es sich um ein lokales oder entferntes Interface handelt, erfolgt über die JavaȬAnnotationen @Local und @Remote. Erst ab EJBȬVersion 2.0 gibt es auch lokale Interfaces für EJBeans. Aufrufe über lokale Interfaces sind auf die virtuelle Maschine (JVM) beschränkt, in der die EJȬ Bean läuft. Der Grund für die Einführung von lokalen Interfaces liegt in der EffiȬ zienz der Aufrufe. Ohne diese Möglichkeit konnten sich EJBeans nämlich nur über
126
2.4 Verteilte Komponenten die RemoteȬInterfaces gegenseitig nutzen, was ineffizienter ist, als ein lokaler AufȬ ruf. Der gesamte RemoteȬMechanismus muss hier nämlich durchlaufen werden. Eine Architektur, in der sich EJBeans auch gegenseitig nutzen, war damit für gröȬ ßere Anwendungen praktisch nicht möglich. Allerdings haben lokale Interfaces den Nachteil, dass die Ortstransparenz nicht mehr gegeben ist. Der Nutzer der Schnittstelle muss wissen, wo die EJBean liegt. Ein wichtiger Unterschied zwischen RemoteȬ und LocalȬInterface ist die Übergabe der Parameter bei den Methodenaufrufen. Während RemoteȬInterfaces die CallȬbyȬ valueȬSemantik (CallȬbyȬcopy) verwenden, nutzen LocalȬInterfaces für die ParameȬ terübergabe CallȬbyȬreference, d.h. statt Werte von Objekten werden Referenzen auf Objekte (im lokalen Adressraum der JVM) übergeben. Ein BusinessȬInterface einer SessionȬBean wird nun als . POJI (Plain Old Java InterȬ face) angegeben. Dies sind klassische JavaȬInterfaces ohne EJBȬBesonderheiten. Die aus EJB 2.1 bekannten Interfaces EJBObject oder EJBLocalObject müssen nicht mehr implementiert werden. Eine typische Notation für die Implementierung einer Bean wird an einem Beispiel skizziert. Beispiel: Am Beispiel unseres Artikelmanagers soll gezeigt werden, wie man InterȬ faces für SessionȬBeans notiert. Man definiert zunächst beispielsweise ein klassiȬ sches POJI für die BusinessȬMethoden und erweitert dies dann zu RemoteȬ und LocalȬInterfaces. // Klassisches POJI mit Business-Methoden package …; import javax.ejb.*; … public Interface ArticleMgrI { public Article updateArticle(Article a); public Article deleteArticle(long catalogId); … } … // Remote-Interface abgeleitet vom klassischen POJI @Remote public Interface ArticleMgrRemoteI extends ArticleMgrI { … } // Local-Interface abgeleitet vom klassischen POJI @Local public Interface ArticleMgrLocalI extends ArticleMgrI { … }
127
2 Konzepte und Modelle verteilter Kommunikation Eine Implementierung der Interfaces erfolgt in . POJOs (Plain Old Java Objects), wie wir noch weiter unten sehen werden. Naming Service (z.B. LDAP) 4: Liefert Referenz des Home-Objektes
3: Besorgt Referenz auf Remote-Object
5: Ruft RemoteMethode auf
JNDI
Remote Re mote Interface
1: EJB-Objekt wird erzeugt
EJB-Object
Client
2: Registriert Object beim Naming-Service
6: Liefert Ergebnis
BeanInstanz
Der EJB-Container bestimmt den Zeitpunkt und erzeugt die Bean-Instanzen selbstständig.
EJB-Container EJB-Application-Server
Abbildung 2Ȭ57: Abwicklung eines synchronen Aufrufs einer SessionȬBean
In Abbildung 2Ȭ57 ist das Zusammenspiel von ApplicationȬServer, EJBȬContainer und EJBȬClient skizziert, wobei es keine Rolle spielt, um welche Art von SessionȬ Bean es sich handelt. Zunächst muss der EJBȬContainer ein EJBȬObjekt erzeugen und eine BeanȬInstanz zuordnen (1). Das EJBȬObjekt wird bei einem NamingȬ Service über das JNDIȬAPI registriert (2). Ein Client muss, bevor er die Dienste einer EJBean nutzen kann, dessen Adresse (Referenz) über JNDI besorgen (3)(4). Anschließend wendet er sich an den zuständigen ApplicationȬServer, um über das RemoteȬInterface der EJBean zu adressieren. Der Vorgang des Erzeugens, bei EJB als Aktivieren bezeichnet, und des Entfernens (Passivierens) einer BeanȬInstanz ist für den Client transparent. Das Erzeugen oder das Verwenden einer bereits bestehenden BeanȬInstanz bestimmt der Container. Bei SessionȬBeans unterscheidet man stateful und stateless SessionȬBeans. SessionȬ Beans werden nicht persistent verwaltet. Stateful SessionȬBeans ordnen einem EJBȬ Client einen Zustand zu. Sie werden benötigt, wenn ein Client einen SessionȬ Kontext benötigt. Dies ist beispielsweise erforderlich, wenn mehrere MethodenaufȬ rufe zusammenhängend verwendet werden und ein Aufruf einer Methode auf den Zustand des vorherigen Methodenaufrufs aufsetzt. Für die EJBean wird vom ConȬ tainer ein Konversationszustand verwaltet. Stateful SessionȬBeans realisieren zuȬ standsbehaftete Serverobjekte. Die Lebensdauer einer stateful SessionȬBean ist an
128
2.4 Verteilte Komponenten die ClientȬSession gebunden und damit auch durch diese begrenzt. Eine stateful SessionȬBean kann nicht mehreren Clients zugeordnet werden. Stateless SessionȬBeans: Stateless SessionȬBeans sind Implementierungen zuȬ standsloser Serverobjekte, die von mehreren (auch vielen) Clients gleichzeitig geȬ nutzt werden können. Ein Methodenaufruf eines Clients wird vollständig abgearȬ beitet. Die Lebensdauer einer stateless SessionȬBean ist nicht an die ClientȬSession gebunden. Sie wird durch den Container implementierungsabhängig bestimmt. In Abbildung 2Ȭ58 ist der Lebenszyklus einer stateless SessionȬBean dargestellt. EntȬ weder die SessionȬBean ist nicht vorhanden oder sie liegt in einem BeanȬPool für die Bearbeitung neuer Methodenaufrufe bereit. Der Zustandsübergang vom ZuȬ stand PooledȬReady nach DoesȬNotȬExist wird durch den Container initiiert. Der Pool wird auch durch den Container verwaltet. Beim Zustandsübergang vom ZuȬ stand DoesȬNotȬExist nach PooledȬReady wird ggf. eine BeanȬInstanz erzeugt und der SessionȬKontext belegt. Jeder Methodenaufruf wird komplett unabhängig von einem anderen Methodenaufruf ausgeführt. Während der Zustandsübergänge können Methoden aufgerufen werden, die vom EJBȬProvider mit Hilfe der AnnoȬ tationen @PreDestroy und @PostConstruct definiert werden können. Mehr hierzu bei der Erläuterung der Konzepte Callback und Interceptor. Does-Not-Exist
Durch EJBContainer initiiert
Aufruf einer Methode durch EJB-Client
@PreDestroy
Class.newInstance() @PostConstruct
Pooled ooled-Ready -Ready
Abbildung 2Ȭ58: Zustandsdiagramm für stateless SessionȬBean
Stateful SessionȬBeans: Der Zustandsautomat für eine stateful SessionȬBean ist in Abbildung 2Ȭ59 skizziert. Es gibt hier einen Zustand mehr als bei stateless SessionȬ Beans. Der Zustand Passive wird eingenommen, wenn die SessionȬBean vom ConȬ tainer passiviert wird. Sie wird dort vom Container in einen externen SpeicherbeȬ reich gelegt und bei Aufruf einer BusinessȬMethode durch den Client implizit wieȬ der aktiviert. Bei stateful SessionȬBeans wird für jeden Client eine eigene Instanz zugeordnet. Es wird ein Konversationszustand verwaltet, was z.B. bei der Realisierung eines WaȬ renkorbs für eine WebȬAnwendung sinnvoll ist. Stateless SessionȬBeans ermögliȬ
129
2 Konzepte und Modelle verteilter Kommunikation chen im Vergleich hierzu eine wesentlich effizientere Abarbeitung der Methoden und sind auch robuster als stateful SessionȬBeans. Der Container kann die BeanȬInstanz zu einem beliebigen Zeitpunkt vor der eiȬ gentlichen Nutzung durch einen Client anlegen. Der Client bemerkt davon nichts. Nach dem Passivieren und erneuten Aktivieren ist es möglich, dass eine andere BeanȬInstanz die Aufgabe übernimmt. Nicht die physikalische BeanȬInstanz, sonȬ dern der Zustand (Konversationszustand) der stateful SessionȬBean ist dem Client zugeordnet. Beim Zustandsübergang vom Zustand Passive in den Zustand MethodȬReady ruft der Container beispielsweise bei einer stateful SessionȬBean die über die AnnotatiȬ on @PrePassivate definierte Methode auf. Weitere CallbackȬRoutinen können über die Annotationen „@PostConstruct“, @PreDestroy, usw. angegeben werden. Die Bezeichnungen der Annotationen geben meist schon das CallbackȬEreignis an. Die mit @PostConstruct angegebene Methode wird nach der Konstruktion einer SessiȬ onȬBean aufgerufen, die mit @PostActivate angegebene Methode wird vor einer Aktivierung aufgerufen usw. Die Annotationen @PrePassivate und @PostActivate können nur bei stateful SessionȬBeans angewendet werden. Ein weiterer Zustand kommt noch hinzu, wenn die SessionȬBean in einer Transaktion verwendet wird. In diesem Fall gelten auch noch weitere Regeln bzgl. der Passivierung (siehe KapiȬ tel 4). Vom Container initiiert
Does-Not-E oes-Not-Exist xist
create()
Timeout Vom Client initiiert
@Predestroy
Class.newInstance() Injections aufrufen @PostConstruct
remove() Vom Container initiiert @PrePassivate Vom Client initiiert
Method-R hod-Ready eady
Passive
@PostActivate Aufruf einer einer BusinessMethode Meth ode
Aufruf einer Business-Methode Business-Methode
Vom Client initiiert
Abbildung 2Ȭ59: Zustandsdiagramm für stateful SessionȬBean
Beispiel: Am Beispiel unseres Artikelmanagers soll gezeigt werden, wie eine stateȬ less SessionȬBean notiert wird. Man implementiert RemoteȬ und LocalȬInterfaces, die vorher mit entsprechenden Annotationen definiert wurden. RemoteȬ und LoȬ calȬInterfaces können dabei gemeinsam oder auch in eigenen SessionȬBeanȬKlassen
130
2.4 Verteilte Komponenten implementiert werden. Eine stateless SessionȬBean, die die ArticleMgrȬInterfaces unterstützt, sieht dann wie folgt aus: package …; import javax.ejb.*; … @Stateless public class ArticleMgrSessionBean implements ArticleMgrRemoteI,ArticleMgrLocalI { public void updateArticle(Article a) {…} public void deleteArticle(long catalogId) {…} … }
Der Name der SessionȬBean könnte in der Annotation überschrieben werden. Wird dies nicht gemacht, so wird standardmäßig der Name der Klasse, in diesem Fall also ArticleMgrSessionBean verwendet. Alternativ könnte man auch auf die expliziȬ te Definition von POJIs verzichten und die BeanȬKlasse gleich wie folgt programȬ mieren: package …; import javax.ejb.*; … @Stateless @Remote(ArticleMgrLocalIclass) @Local(ArticleMgrRemoteI.class) public class ArticleMgrSessionBean { public void updateArticle(Article a) {…} public void deleteArticle(long catalogId) {…} … }
Eine explizite Trennung von Interface und Implementierung ist aber die bevorzugȬ te Variante. Eine stateful SessionȬBean wird auf ähnliche Weise notiert: import javax.ejb.*; … @Stateful public class MySessionBean implements ArticleMgrRemoteI …. { public Article deleteArticle(…) { … } @Remove public void removeArticleMgr(…) { // Code wird vor dem Zerstören der Instanz ausgeführt } }
131
2 Konzepte und Modelle verteilter Kommunikation Für jede SessionȬBean wird vom Container ein Kontext verwaltet, der durch die Klasse SessionContext, die wiederum von der Klasse EJBContext abgeleitet ist, defiȬ niert wird. Das SessionContextȬInterface ist wie folgt definiert: public interface javax.ejb.SessionContext extends javax.ejb.Context { { EJBLocalObject getEJBLocalObject() throws …; // EJB 2.1 EJBObject getEJBObject() throws …; // EJB 2.1 MessageContext getMessageContext() throws …; getBusinessObject(Class businessInterface) throws …;11 class getInvokedBusinessInterface(); }
Die Methoden getEJBLocalObject und getEJBObject gelten nur noch für EJB 2.1. Die Methode getBusinessObject liefert eine Referenz auf die aktuelle BeanȬInstanz, die mit dem JavaȬPointer this vergleichbar ist. Diese Referenz kann z.B. genutzt werȬ den, um sie als Parameter für einen Methodenaufruf einzusetzen, da die WeitergaȬ be von this in EJBeans nicht zulässig ist. Über die Methode getInvokedBusinessȬ Interface lässt sich herausfinden, über welches Interface (lokal, remote, Webservice) die EJBean aktuell aufgerufen wurde. Bei einer stateful SessionȬBean wird also für jeden Client ein Konversationszustand verwaltet. Ein EJBȬObjekt ist zumindest logisch einem Client zugeordnet. Wie aus der Darstellung des Zustandsautomaten hervorgeht, gibt es im Container bei stateȬ ful SessionȬBeans die Vorgänge Passivieren und Aktivieren. Der KonversationszuȬ stand darf hierbei nicht verlorengehen. Die beiden Aktivitäten werden ausschließȬ lich vom Container gesteuert. Nur er bestimmt, wann ein Passivieren erforderlich ist. Ein Grund kann sein, dass die SessionȬBean längere Zeit nicht angesprochen wurde. Durch ein Passivieren kann man HauptspeicherȬRessourcen freimachen, da der Container bei diesem Vorgang laut Spezifikation die SessionȬBean aus dem Hauptspeicher entfernt. In diesem Fall muss die SessionȬBean serialisiert werden, was bedingt, dass einige Regeln bei der Entwicklung einer Session Bean zu beachȬ ten sind. Um die Vorgänge besser zu verstehen, wollen wir noch genauer klären, aus welchen Bestandteilen der Konversationszustand besteht und welche KonseȬ quenzen sich aus einer Passivierung ergeben. Konversationszustand: Die EJBȬSpezifikation definiert den Konversationszustand einer instantierten stateful SessionȬBean als die aktuellen Werte aller InstanzvariabȬ len der entsprechenden BeanȬKlasse einschließlich aller Objekte, die über die InȬ stanzvariablen per Referenz erreichbar sind. Dies kann ein komplexer Objektgraph sein. Ausgeschlossen sind die Variablen, die als transient gekennzeichnet sind.
11
ist ein Platzhalter für den Typ der Bean.
132
2.4 Verteilte Komponenten Passivierung: Bei der Passivierung wird eine SessionȬBeanȬInstanz einschließlich des gesamten referenzierten Objektgraphen gemäß den Regeln der JavaȬ Objektserialisierung oder auch einem anderen herstellerspezifischen Verfahren serialisiert und als ByteȬStrom auf einen externen Speicher geschrieben. Das SpeiȬ chermedium ist herstellerspezifisch festgelegt. Der Speicherbereich, den die EJBean samt Objektgraph belegte, wird freigegeben (Backschat 2007). Die Passivierung erfolgt in der Regel nach Ablauf eines definierten und konfigurierbaren Timers. Aktivierung: Bei der Aktivierung wird der zur Passivierung inverse Vorgang durchgeführt. Der ByteȬStrom wird wieder deserialisiert, im Hauptspeicher abgeȬ legt und einer SessionȬBeanȬInstanz zugeordnet. Dies setzt voraus, dass die InȬ stanzvariablen einer stateful SessionȬBean und alle referenzierten Objekte auch serialisierbar sind, also das JavaȬInterface Serializable implementieren. Der ContaiȬ ner kümmert sich bei der Passivierung um die von ihm verwalteten Objekte wie SessionContext, Entity Manager (siehe Entity Beans in Kapitel 3), DataSources für den Zugriff auf externe Systeme, Timer usw. Zusammenfassung: Zusammengefasst kann festgehalten werden, dass SessionȬ Beans für die Realisierung von ClientȬServerȬBeziehungen spezifiziert wurden. Folgende Konzepte wurden eingearbeitet: – Stateless SessionȬBean entsprechen zustandslosen shared Servern. Die ErzeuȬ gung regelt der EJBȬContainer in Eigenregie, wofür ein BeanȬPool verwaltet wird. Die Aktivierung und Zuweisung zum Client erfolgt bei einem MethoȬ denaufruf eines Clients. Nach dem Methodenaufruf entzieht der EJBȬ Container dem Client die Bean wieder (SingleCallȬMechanismus). – Stateful Session Beans sind zustandsbehaftete, unshared Server. Die Erzeugung regelt ebenfalls der EJBȬContainer. Die Aktivierung und Zuweisung der BeanȬInstanzen zu Clients erfolgt auf Initiative des Clients. Logisch bleibt die EJBean einem Client zugeordnet, bis die Verbindung abgebaut wird. Durch einen Passivierungsmechanismus kann die EJBean nach einiger Zeit der Untätigkeit physikalisch einem Client entzogen werden. Bei erneutem Zugriff auf die „logische“ Bean wird der Konversationszustand durch den EJBȬContainer wieder hergestellt. – Das SingletonȬKonzept wird bis zur EJBȬVersion 3.0 noch nicht unterstützt, sondern erst ab Version 3.1. Einige Hersteller bieten aber Möglichkeiten, Singletons zu definieren. Im JBossȬApplication Server kann man z.B. im Deployment Descriptor eine SessionȬBean als „SingletonȬBean“ konfigurieȬ ren. Sie wird dann nur einmal instanziiert. Dazu sind im Deployment DescȬ riptor spezielle Einträge notwendig, es wird allerdings empfohlen, sich mit dem genauen Eintrag im DD zu befassen. Er könnte etwa wie folgt ausseȬ hen:
133
2 Konzepte und Modelle verteilter Kommunikation
1 true
EJB-Clients EJBȬClients greifen über einen generierten Stub (ProxyȬPattern) auf entfernte SessiȬ onȬBeans zu. Vom ContainerȬHersteller wird erwartet, dass er die nötigen Tools dafür bereitstellt, um die Stubs dynamisch oder statisch zu erzeugen. Als Protokoll wird entweder das RMI Transport Protokoll oder RMI/IIOP (RMI over IIOP) verȬ wendet. Letzteres bildet die RMIȬMechanismen auf das standardisierte Protokoll IIOP ab. Dies ist sinnvoll, wenn ein Client mit einem CORBAȬObjekt kommunizieȬ ren möchte oder ein CORBAȬObjekt mit einer EJBean. Bevor eine Methode einer EJBean aufgerufen werden kann, muss die EJBean zuȬ nächst über einen JNDIȬLookup gefunden werden. Über einen initialen Kontext, den der ContainerȬHersteller bereitstellt, wird ein konkreter Kontext einer EJBean erȬ mittelt. Anschließend steht das RemoteȬInterface für die Nutzung der BusinessȬ Methoden zur Verfügung. In früheren EJBȬVersionen musste zunächst ein HomeȬ Interface erzeugt werden, um ein RemoteȬInterface für eine EJBean zu instanziieȬ ren. Die Kommunikation zwischen einem Client und einer EJBean ist synchron, also blockierend. Der Client wartet immer auf das Ergebnis, bevor die nächste entfernte Methode ausgeführt werden kann. Beispiel: Das folgende Beispiel soll die prinzipielle Programmierung eines EJBȬ Clients zeigen, der die Dienste einer SessionȬBean nutzt. Ein EJBȬClient, der den weiter oben skizzierten Artikelmanager verwendet, soll hier als Beispiel dienen. In einer eigenen Methode namens getHome wird der Namenskontext hergestellt und es wird ein JNDIȬLookup auf das RemoteȬInterface des Artikelmanagers durchgeȬ führt. Der JNDIȬCode ist proprietär und kann bei den verschiedenen ApplicationȬ ServerȬProdukten unterschiedlich sein. Im Beispiel werden zwei Methoden des Artikelmanagers aufgerufen (updateArticle und deleteArticle). … import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import MyArticleMgr; … public class MyClient { public static void main(String[] args) throws RemoteException {
134
2.4 Verteilte Komponenten // Referenz auf eine entfernte Bean MyArticleMgr manager = null; // Lookup durchführen try { Hashtable env = new Hashtable(); // Setzen von Environment-Parametern in Variable env // und Namen der gesuchten Bean als Parameterliste aufbauen // (Code abhängig vom EJB-Produkt) InitialContext ctx = new InitialContext(env); manager = ctx.lookup(env, “MaBean”); ctx.close(); } catch(Exception e){…} … try { // Beispielhafte Bean-Methodenaufrufe Article a = new Article; // Artikel-Instanz füllen und über Bean aktualisieren … manager.updateArticle(a); // Einen Artikel löschen long catalogId = 121212; manager.deleteArticle(catalogId); … } catch (RemoteException e) { System.out.println("RemoteException!"); e.printStackTrace(); … } … } }
Wie man sieht, muss sich der Programmierer des EJBȬClients nur an den SchnittȬ stellen der EJBean orientieren und diese nutzen. Er muss sich nicht um die Details der Kommunikation zwischen Client und EJBȬContainer kümmern. Dies wird durch den Stub erledigt. Auch ein WebserviceȬClient kann die Methoden einer EJBean über einen WebserȬ viceȬEndpunkt nutzen.12 Diese Mechanismen sollen aber hier nicht weiter ausgeȬ führt werden. Weitere nützliche Hinweise zur Programmierung von EJBȬClients sind der EJBȬSpezifikation (WWWȬ004) oder den Produktbeschreibungen der einȬ zelnen ApplicationȬServerȬProdukte zu entnehmen. 12
Siehe hierzu die JAXȬAPI.
135
2 Konzepte und Modelle verteilter Kommunikation
Timer Service In EJB wird ein serverseitiger, zeitgesteuerter EventȬBenachrichtigungsdienst beȬ reitgestellt, der in EJBeans verwendet werden kann. Man kann damit eine Aktion implementieren, die nach einer vorgegebenen Zeit (SingleȬActionȬTimer) oder periodisch (IntervallȬTimer) zum Ablauf gebracht (getriggert) wird. Bei SingleȬ ActionȬTimern wird ein einziges TimeoutȬEvent erzeugt, bei IntervallȬTimern imȬ mer wieder eines in vorgegebenen Zeitabständen. Der EJBȬContainer erzeugt nach der gewünschten Zeit eine sog. TimerȬNotification, die durch eine entsprechende Methode bearbeitet werden muss. Der Entwickler muss lediglich einen Timer erzeugen und für diesen eine AktionsȬ methode (CallbackȬRoutine) über die vorgegebene TimeoutObjectȬSchnittstelle impȬ lementieren. In der Aktionsroutine wird die BusinessȬLogik programmiert, die bei Ablauf des Timers durchlaufen werden soll. Diese Schnittstelle enthält genau eine Methode namens ejbTimeout, welche die Aktionsroutine repräsentiert. Das folgende Codestück zeigt das zu implementierende Interface: … public interface javax.ejb.TimedObject { // Aktionsroutine mit Geschäftslogik public void ejbTimeout(Timer timer); }
Die Erzeugung eines Timers erfolgt über das Interface TimerService. Dieses InterȬ face verfügt über mehrere Erzeugungsmethoden: public interface javax.ejb.TimerService { // Single Action Timer, der an nach einer bestimmten Zeit abläuft public Timer createTimer(long duration, java.io.Serializable info) throws …; // Intervall Timer, der nach einer vorgegebenen Zeit startet public Timer createTimer(long initialDuration, long intervalDuration, java.io.Serializable info) throws …; // Single Action Timer, der an einem festen Termin abläuft public Timer createTimer(java.util.Date expiration, java.io.Serializable info) throws …; // Intervall Timer, der an einem festen Termin startet
136
2.4 Verteilte Komponenten public Timer createTimer(java.util.Date initialExpiration, long intervalDuration, java.io.Serializable info) throws …; // Alle aktiven Timer auslesen public Collection getTimers() throws …; }
Mit der ersten createTimerȬMethode ist es möglich, einen Timer zu erzeugen (ReȬ turnwert vom Typ Timer), der nach einer bestimmten Zeit (in ms) abläuft. Mit der zweiten Methode kann ein IntervallȬTimer erzeugt werden, der immer wieder in einem angegebenen Abstand abläuft. Bei Ablauf der Zeit wird die Methode ejbTiȬ meout des TimerȬObjekts aufgerufen (Aktionsroutine), das bei Aufruf einer der createȬMethoden zurückgegeben wurde. Sobald ein Timer erzeugt worden ist, wird er persistent gemacht und überlebt auch Systemausfälle.13 Der Timer selbst ist ein Objekt einer Objektklasse, welche das Interface javax.ejb.Timer implementiert. Das Interface sieht wie folgt aus: public interface javax.ejb.Timer { public void cancel() throws …; public java.util.Date getNextTimeout() throws …; public long getTimeRemaining() throws …; public TimerHandle getHandle() throws…; … }
Ein Timer kann z.B. über das TimerȬInterface wieder entfernt werden. Hierzu wird die Methode Timer.cancel() verwendet. Ein TimerȬObjekt wird der Methode ejbTimeȬ out im ejbTimeoutȬInterface angegeben. Beispiel: Die Erzeugung eines Timers und das Definieren einer Aktionsroutine sieht wie folgt aus: … @Stateless public class ArticleMgrSessionBean implements … { … public void … {
13
Allerdings ist hier nicht ganz klar, was passiert, wenn der Timer während der AusfallȬ zeit eines Systems abläuft. Es ist nicht ganz eindeutig spezifiziert, ob dann die TimeoutȬ Methode nach dem erneuten Start aufgerufen wird. Dies muss der Hersteller eines ApȬ plicationȬServers definieren.
137
2 Konzepte und Modelle verteilter Kommunikation @Resource javac.ejb.TimerService timerService // Timer erzeugen timerService.createTimer(…); … } @Timeout public void MyTimeoutAction (javax.ejb.Timer timer) { … // Geschäftslogik beim Ablauf des Timers } }
In diesem Beispiel wird in der ArtikelmanagerȬBean auch das TimedObjectȬ Interface implementiert. Über den Aufruf der Methode createTimer wird ein Timer „aufgezogen“ und der CallbackȬRoutine ejbTimeout übergeben. Weitere Details zu Timern insbesondere zur Nutzung von Timern innerhalb von Transaktionen und zur Nutzung in messageȬdriven und stateless Session Beans sind der Literatur zu entnehmen.
Enterprise Naming Context (JNDI ENC) und Bean-Kontext Eine wichtige Aufgabe eines EJBȬContainers ist die Verwaltung von Ressourcen. Jeder EJBȬContainer verfügt über ein eigenes internes Registry (siehe Abbildung 2Ȭ60), das als Enterprise Naming Context (ENC) bezeichnet wird. In diesem ReȬ gistry werden verschiedenste Referenzen verwaltet, die über das JNDIȬAPI abgeȬ fragt werden können. EJBClient
Naming Service Registry (ENC)
Registrieren und lookup
Kontext Kontext
BeanInstanz In stanz 1
...
BeanInstanz Inst anz 3
Kontext
BeanInstanz In stanz 2
Kontext
BeanInstanz Inst anz n EJB-C EJ B-Container ontainer Application Applic ation Se Server rver
Abbildung 2Ȭ60: JNDI ENC im EJBȬContainer, Kontext je Bean
138
2.4 Verteilte Komponenten Das JNDIȬAPI stellt eine Schnittstelle für einen NamingȬ und DirectoryȬService zur Verfügung. Sowohl das Registrieren von Ressourcen als auch das Auffinden dieser (Lookup) ist über die API möglich. Referenzen werden zum Teil automatisch vom Container erzeugt, können aber auch explizit angegeben werden und verweisen u.a. auf EJBȬInterfaces, JMSȬQueues, JMSȬTopics und auf Datasources für DatenȬ bankzugriffe. Jedes „Objekt“, das dem ENC bekanntgegeben wird, kann über eiȬ nen JNDIȬLookupȬAufruf abgerufen werden. Referenzen als Ressourcen injizieren: Das ENC ist bereits seit der ersten EJBȬ Version vorhanden. Durch Nutzung von Annotationen wurde der Zugang ab EJB 3.0 noch etwas komfortabler gelöst. In EJB 3.0 wurde ein InjectionȬMechanismus eingeführt, der es ermöglicht, Referenzen direkt in Variablen von BeanȬKlassen einzubringen. Einträge im ENC können im DD oder direkt über eine Annotation bekanntgemacht werden, wobei Einträge im DD Annotationen überschreiben. Für die BekanntmaȬ chung in einem DD stehen verschiedene XMLȬElemente zur Verfügung. Eine lokaȬ le InterfaceȬReferenz wird z.B. über das XMLȬTag in der KonfiguraȬ tionsdatei ejbȬjar.xml definiert. Im folgenden XMLȬCode wird einer SessionBean mit dem Namen CustomerMgrSessionBean eine lokale Referenz auf eine ArticȬ leMgrSessionBean zugeordnet. Dies bedeutet, die CustomerMgrSessionBean kann die ArticleMgrSessionBean lokal im Container nutzen. Der Klassenname der referenȬ zierten Bean wird mit dem Tag angegeben.
CustomerMgrSessionBean … Session 14 ArticleMgrSessionBean Session articlemanagement.ArticleMgrSessionBean …
14
Es gibt verschiedene Varianten für Referenzen. In diesem Fall handelt es sich um eine lokale Referenz. Andere Referenzen beziehen sich auf Webservices, MDBs, Datenbanken usw.
139
2 Konzepte und Modelle verteilter Kommunikation In EJB 3.0 können für die Bekanntgabe von Ressourcen die speziellen AnnotatioȬ nen „@RESOURCE“ und „@EJB“ verwendet werden. Nutzt man eine Annotation anstelle eines DD, kann man die Referenz wie folgt im Coding der CustoȬ merMgrSessionBean bekanntgeben: import javax.annotation.ejb; @stateless @EJB(name=”ArticleMgrSessionBean”, beanInterface=ArticleMgrSessionBean.class beanName=”ArticleMgrSessionBean”) public class CustomerMgrSesssionBean implements … { …
Ein lookupȬAufruf in der CustomerMgrSessionBean liefert eine Referenz auf die lokaȬ le ArticleMgrSessionBean: public void customerMgrMethod(…) { ArticleMgrSessionBean articleMgrBean = null; … try { javax.naming.InitialContext initialContext = new InitialContext(); articleMgrBean = (ArticleMgrSessionBean) initialContext.lookup (“java:comp/env/ejb/ArticleMgrSessionBean”);15 } catch … {…} // Aufruf einer Methode des Artikelmanagers articleMgrBean.createArticle(…) … } }
Bevor auf die ArticleMgrSessionBean zugegriffen werden kann, muss über einen initialen Kontext ein lookup durchgeführt werden, der die Referenz besorgt. DaȬ nach können Methoden der ArticleMgrSessionBean aufgerufen werden (hier creaȬ teArticle). Nachteilig an dieser Vorgehensweise ist, dass überall im BeanȬCoding LookupȬCode eingebaut werden muss. Dies widerspricht auch einem grundlegenȬ den Prinzip in der Softwaretechnik und zwar dem Prinzip des „Separation of ConȬ cerns“ (Trennung der Zuständigkeiten). Technische Belange sollten von der GeȬ schäftslogik getrennt werden, damit eine mögliche TechnologieȬPortierung nicht unnötig erschwert wird (siehe Kapitel 5). Um das Problem zu vermeiden nutzt man heute auch gerne Dependency Injection (DI) als Spezialform des InversionȬofȬControlȬPrinzips. DI überträgt die VerantȬ 15
java:comp/env verweist auf den Environment Naming Context (ENC).
140
2.4 Verteilte Komponenten wortung für das Erzeugen und die Verknüpfung von Serverobjekten/ȬkomponenȬ ten an ein konfigurierbares Framework. Über die Annotation „@RESOURCE“ können weitere Referenzen in das BeanȬ Coding injiziert werden, beispielsweise Referenzen auf verschiedene KontextȬ Informationen, die der EJBȬContainer für Beans verwaltet. Hierzu gehören die Kontexte von Beans (EJBContext, SessionContext, MessageDrivenBeanContext) aber auch der oben im Beispiel verwendete InitialContext. Durch Nutzung von „@REȬ SOURCE“ kann das oben gezeigte CodeȬBeispiel etwas vereinfacht werden: … @stateless @EJB(name=”ArticleMgrSessionBean”, … public class CustomerMgrSesssionBean implements … { … @RESOURCE private javax.ejb.SessionContext ejbContext; public void customerMgrMethod(…) { ArticleMgrSessionBean articleMgrBean = null; … try { articleMgrBean = (ArticleMgrSessionBean) ejbContext.lookup(“ejb/ArticleMgrSessionBean”); } catch … {…} … } }
Da dies immer noch kompliziert ist, gibt es eine einfachere Variante. Eine Referenz auf die ArticleMgrSessionBean kann direkt in den BeanȬCode der CustomerMgrSessiȬ onBean injiziert werden. In diesem Fall übernimmt der EJBȬContainer die InjizieȬ rung in die Variable articleMgrBean automatisch. Diese Variante kommt dem DeȬ pendencyȬInjection schon recht nahe: … import javax.annotation.ejb; @stateless public class CustomerMgrSessionBean implements … { @EJB private ArticleMgrSessionBean articleMgrBean; … articleMgrBean.createArticle(…); … } }
141
2 Konzepte und Modelle verteilter Kommunikation Zur Injizierung von Referenzen gibt es in EJB 3.0 noch weitere Varianten, die hier nicht mehr ausgeführt werden sollen. Konfigurationsparameter als Ressourcen definieren und injizieren: Eine interesȬ sante Anwendungsmöglichkeit, die die Annotation „@RESOURCE“ mit sich bringt, ist die Definition von Variablen, die von außen über den DD initialisiert und „injiȬ ziert“ werden können. Man definiert z.B. in einer EJBean eine ResourceȬVariable mit der Bezeichnung konfigParameter wie folgt: @stateless public class ArticleMgrSesssionBean implements … { … @RESOURCE (name=“param1“) int konfigParameter; … }
Der Inhalt der Variable kann dann über den DD vorbelegt werden. Dazu wird ein Tripel der Form (Name, Typ, Wert) im XMLȬTag der zugehörigen Bean festgelegt. Der DD kann wie folgt angegeben werden:
ArticleMgrSessionBean …
param1 java.lang.Integer 1000
…
Der Wert von param1 (hier 1000) wird bei der Initialisierung des Containers in das ENC geladen und bei jeder Instanzierung einer ArticleMgrSessionBean verwendet, um die Variable konfigParameter zu setzen. Damit ist eine Möglichkeit gegeben, typische Konfigurationsparameter aus dem BeanȬCoding zu eliminieren. EJBContext: Wie oben bereits angedeutet, verwaltet der Container für alle BeanȬ Typen eine Kontextinformation, die auch den BeanȬInstanzen zur Verfügung geȬ stellt wird. Die zugrundeliegende Schnittstelle hat den Namen EJBContext und ist wie folgt definiert: public interface javax.ejb.EJBContext extends { public Object lookup(String name);
142
2.4 Verteilte Komponenten … public TimeService getTimerService() throws ..; … // Transaktionsmethoden javax.transaction.UserTransaction getUserTransaction() throws ..; public Boolean setRollbackOnly() throws ..; … public EJBHome getEJBHome() throws ..; public EJBLocalHome getEJBLocalHome() throws ..; }
Wie schon unter EJB 2.1 kann über den Kontext auf die HomeȬObjekte der Bean zugegriffen werden. Dazu gibt es die Methoden getEJBHome und getEJBLocal. Die wichtigste Methode ist die Methode lookup. Sie dient dem Auflösen von Referenzen auf Objekte, die im BeanȬCoding angesprochen werden. Der Aufruf wird auch über das containerȬinterne ENC bedient. Schließlich kann über EJBContext auch auf den TimerȬService und auf den Kontext einer laufenden Transaktion zugegriffen werden. Mit der Methode setRollbackOnly kann man für eine Transaktion auch vorgeben, dass der Container ein Rollback durchzuführen hat.
Callbacks und Interceptoren Der EJBȬStandard bietet die Möglichkeit, an vorgegebenen Stellen eigene MethoȬ den einzubringen, die bei Eintreffen bestimmter Ereignisse vom EJBȬContainer aufgerufen werden. Dies wird über Callbacks und Interceptoren erreicht. Callbacks wurden bereits bei der Diskussion der BeanȬZustandsautomaten angerissen. Callbacks: Callbacks können prinzipiell für alle BeanȬTypen eingesetzt werden. Betrachtet man die Lebenszyklen von stateless und stateful SessionȬBeans, so sieht man, dass bei einigen Zustandsübergängen in den ausgeführten Aktionen CallȬ backȬMethoden aufgerufen werden. Bei einer stateless SessionȬBean wird z.B. die mit der Annotation @PreDestroy markierte Methode aufgerufen, wenn ein ZuȬ standsübergang von Ready Pooled nach Does Not Exist durchgeführt wird. Beim Zustandsübergang vom Zustand Passive in den Zustand MethodȬReady ruft der Container bei einer stateful SessionȬBean die über die Annotation @PreActivate definierte Methode auf. Weitere CallbackȬRoutinen können über die Annotationen @PostConstruct und @PrePassivate, usw. angegeben werden. Die Bezeichnungen der Annotationen geben meist schon das CallbackȬEreignis an. Beispiel: Die Angabe einer CallbackȬRoutine für das Ereignis PreDestroy sieht wie folgt aus: @Stateful public class ArticleMgrBean implements ArticleMgrRemoteI { … public Article findArticleByKey(int catalogId) {…}
143
2 Konzepte und Modelle verteilter Kommunikation @PreDestroy endOfArticleManagement() {…} … }
Interceptoren: Interceptoren16 sind zustandslose Klassen und dienen, wie in CORȬ BA, dem Abfangen von Methodenaufrufen, die ein EJBȬClient an eine Bean richtet. Es gibt viele Einsatzmöglichkeiten für Interceptoren. Der ClientȬRequest wird abȬ gefangen und man kann vor und nach der Ausführung des Requests eigene AktioȬ nen einbauen. Beispielsweise können ankommende ClientȬRequests über spezielle CheckȬRoutinen untersucht werden, die Parameter können geprüft werden, eine Zugangskontrolle kann realisiert werden, bestimmte Aufrufe können verhindert werden oder es wird einfach ein Logging bzw. eine Zeitmessung eingebaut. Der Sinn des InterceptorȬKonzepts ist es, allgemeine Routinen aus der BusinessȬLogik in zentrale Klassen auszulagern. Ein EJBȬContainer ruft wie bei CallbackȬMethoden einen Interceptor automatisch und zwar nach dem Eintreffen eines ClientȬRequests und vor der eigentlichen AusȬ führung auf. Interceptoren werden als Objektklassen programmiert. Die IntercepȬ torȬMethode wird über die Annotation @AroundInvoke gekennzeichnet. Die NutȬ zung eines Interceptors muss dann über eine weitere Annotation (@Interceptor oder @Interceptors für die Angabe einer Liste von Interceptoren) in der nutzenden BeanȬ Klasse angegeben werden. Der eigentliche Aufruf des Requests wird im InterceptorȬCode über den MethoȬ denaufruf proceed ausgeführt. Beispiel: Zunächst ist eine InterceptorȬKlasse zu definieren. Die folgende Klasse ArticleMgrInterceptor kann dann von beliebig vielen BeanȬKlassen verwendet werȬ den: import javax.ejb.*; public class ArticleMgrInterceptor { @AroundInvoke public Object doMyWork (InvocationContext ctx) { // Tue etwas vor der eigentlichen Bearbeitung des Methodenaufrufs return ctx.proceed();// Aufruf der eigentlichen Methode … // Tue etwas nach der eigentlichen Bearbeitung des Methodenaufrufs } }
Die Methode doMyWork erhält als Parameter vom Container einen AufrufȬKontext übergeben, in dem Informationen über den aktuellen Aufrufkontext des Requests
16
Engl. Interceptor = Abfänger, Abfangjäger; to intercept = abfangen.
144
2.4 Verteilte Komponenten enthalten sind. Dieser Kontext wird allen Interceptoraufrufen der gleichen Bean weitergereicht, Beans können aber nicht darauf zugreifen. Der AufrufȬKontext ist über ein spezielles Interface zugänglich: public interface InvocationContext { public Object getBean() public Method getMethod() public Object[] getParameters(); public EJBContext getEJBContext(); public Object proceed(); … }
Über die Methode getBean kann man sich z.B. die aktuelle Instanz der Bean besorȬ gen, die den Request bearbeitet, über die Methode getMethod die aktuell aufgerufeȬ ne Methode. Auch die Methode proceed ist in dem Interface definiert. Mit der MeȬ thode getEJBContext kann man sich im Interceptor auch den aktuellen EJBȬKontext besorgen, der jeder Bean zugeordnet ist und dann Operationen auf den Kontext (z.B. eine Transaktion mit setRollbackOnly markieren) ausführen. Für die Nutzung eines Interceptors ist in der BeanȬKlasse, die ihn verwenden soll, ein Verweis auf die Interceptorklasse über die Annotation @Interceptor einzubauen. Werden mehrere Interceptoren zugeordnet, wird die Annotation @Interceptors verȬ wendet. Dabei werden die Klassennamen der Interceptorklasse angegeben: import javax.ejb.Interceptor; … @Stateless // Interceptorklasse nutzen, referenziert durch den Klassennamen @Interceptor(ArticleMgrInterceptor.class) public class ArticleMgrSessionBean implements …{ … }
In diesem Fall wird der Interceptor der ganzen BeanȬKlasse und damit allen MeȬ thoden der BeanȬKlasse zugeordnet. Es ist auch möglich einzelnen Methoden deȬ diziert einen Interceptor zuzuordnen. In diesem Fall sieht die Definition wie folgt aus: import javax.ejb.Interceptor; … @Stateless public class ArticleMgrSessionBean implements …{ … // Interceptor wird einer Methode zugeordnet (hier updateArticle) @Interceptor(ArticleMgrInterceptor.class) public void updateArticle(Article a) {…} }
145
2 Konzepte und Modelle verteilter Kommunikation Der konkrete Ablauf für das Beispiel sieht bei Aufruf einer Methode (hier updaȬ teArticle) wie folgt aus: EJB-Client updateArticle(...)
EJBContainer
ArticleMgr SessionBean
ArticleMgr Interceptor
Invocation Contect
doMyWork(...) proceed() updateArticle(...)
Abbildung 2Ȭ61: InterceptorȬEinbindung bei Requestbearbeitung in EJB 3
Wie man sieht, wird der InterceptorȬAufruf im aktuellen Stack der RequestbearbeiȬ tung aufgerufen. Er erhält damit auch mögliche Exceptions der BeanȬMethode (hier der Methode updateArticle) als Ergebnis des Aufrufs proceed, die bearbeitet werden müssen. Auch der aktuelle Transaktionskontext wird nicht verlassen. Als weitere Variante, einen Interceptor zu nutzen, soll noch die Möglichkeit aufgeȬ zeigt werden, eine InterceptorȬMethode direkt in eine BeanȬKlasse einzubauen: import javax.ejb.Interceptor; … @Stateless public class ArticleMgrSessionBean implements …{ … // Interceptormethode direkt in der Bean-Klasse @AroundInvoke public Object doMyWork (InvocationContext ctx) {…} … }
In diesem Fall wird die InterceptorȬMethode als letzter Interceptor einer möglichen Liste von Interceptoren aufgerufen. Weitere interessante Features sind die Definition von DefaultȬInterceptoren, die Zuordnung einer InterceptorȬKlasse an eine ganze Bean (alle Methoden der Bean) oder sogar an alle BeanȬKlassen und das Unterdrücken von Interceptoren für beȬ stimmte Methodenaufrufe. Es soll noch erwähnt werden, dass InterceptorȬ Methoden auch andere Beans nutzen, JMSȬNachrichten versenden oder über JDBC bzw. den EntityȬManager auf eine Datenbank zugreifen können. Ein Interceptor hat also Zugriff auf alle Resourcen und kann sich die erforderlichen Referenzen auch über das JNDIȬAPI besorgen. Interceptoren können anstelle der Nutzung von Annotationen auch über den DeloymentȬDescriptor außerhalb des Codings defiȬ
146
2.4 Verteilte Komponenten niert werden. Hierzu wird auf die Literatur verwiesen (Burke 2006). Die ZuordȬ nung einer InterceptorȬKlasse auf alle BeanȬKlassen erfolgt am besten über den DD.
Einige EJB-Programmierregeln und Erfahrungswerte Wie wir gesehen haben, sind bei der Programmierung von EJBeans eine Reihe von Konventionen und Regeln zu beachten. Programmier müssen definierte Verträge (Contracts) einhalten, damit sich die EJBeans auch EJBȬkonform verhalten. Zudem gibt es noch einige allgemeine Programmierkonventionen, die darauf zuȬ rückzuführen sind, dass der Container die Kontrolle über alle EJBeans behalten muss. Vor allem kann man nicht davon ausgehen, dass die EJBeans vom Container in genau einer JVM gestartet werden und damit immer eine prozessȬinterne KomȬ munikation stattfindet. Dies kann der Hersteller eines EJBȬContainers selbst entȬ scheiden. Programmierer von EJBeans (BeanȬProvider) müssen also einige Enschränkungen akzeptieren. Zu diesen gehören u.a.: – Es dürfen keine Synchronisationsprimitive von Java (wait, notify, notifyAll, join,…) verwendet werden. Der Grund dafür liegt darin, dass nicht festgeȬ legt ist, in welchen JVMs welche BeanȬInstanzen zum Ablauf kommen. DieȬ se Methoden funktionieren nur innerhalb der gleichen JVM. – Alle statischen Felder sind aus dem gleichen Grund als final zu deklarieren. – Es dürfen auch keine eigenen Threads erzeugt werden. Dies ist Aufgabe des Containers. – sleepȬAufrufe bringen den Container ebenfalls aus dem Konzept. – Eine Nutzung des Package java.io und damit eine eigenständige Nutzung von EinȬund Ausgabeoperationen (etwa für das Fileshandling) ist in einer EJBean nicht zugelassen. Stattdessen ist ein entsprechendes RessourcenmaȬ nagerȬAPI zu nutzen (wie JDBC für Datenbanken).17 – Socketaufrufe wie listen sind nicht gestattet, das Erzeugen eines aktiven SoȬ ckets ist aber zulässig. Auch aus Sicherheitsgründen gibt es einige Einschränkungen, die der EJBȬSpeziȬ fikation entnommen werden können. Generell gilt, dass der Container die KontrolȬ le hat und nach jedem Methodenaufruf diese auch schnell wieder erhalten muss, um effizient zu sein. Sonst kann es passieren, dass manche Clients zu lange auf die Bearbeitung ihrer Methodenaufrufe warten müssen. Es gibt auch schon einige Erfahrungswerte für die Nutzung der verfügbaren BeanȬ Typen, die aber keine Vorgabe im Sinne der EJBȬSpezifikation darstellen. So könȬ
17
Für das Filehandling ist keine API definiert. Hierfür ist ein Connector entsprechend der JCAȬAPI (Java Connector API) zu entwickeln. FileȬConnectors sind im OpenȬSourceȬ Umfeld verfügbar.
147
2 Konzepte und Modelle verteilter Kommunikation nen SessionȬBeans Anwendungsfälle oder Teile davon repräsentieren oder ServiceȬ Klassen darstellen. Sie sollten vorzugsweise eingesetzt werden, um Dienste eines Anwendungssystems (BusinessȬLogik) bereitzustellen. Stateful SessionȬBeans sind notwendig, wenn EJBȬClients unbedingt mehrere zusammenhängende Methoden ausführen müssen, die sich einen bestimmten SessionȬKontext teilen. Wenn mögȬ lich sollte man sie aus Gründen der Robustheit eines Systems vermeiden, was aber nicht immer möglich ist. Zumindest sollte man aber einen minimalen Einsatz von stateful SessionȬBeans anstreben, der sich auf die Verwaltung spezieller SessionȬ Kontexte beschränkt. Der Einsatz von MDBs und EntityȬBeans wird weiter unten erläutert.
2.5 Message-Passing 2.5.1
Grundlegendes Modell
Nicht alle Anwendungen lassen sich auf das asymmetrische ClientȬServerȬModell abbilden. Oft ist auch eine gleichberechtigte (symmetrische) Beziehung zwischen den Kommunikationspartnern oder aber eine andere Art der Kommunikation erȬ forderlich. Folgende Kommunikationsbeziehungen sind u.a. möglich: – Eine Gruppe von Kommunikationspartnern (oder nur einer) möchte etwas konsumieren, was andere produzieren. Hier spricht man von einem ProduȬ zentenȬKonsumentenȬModell (ProducerȬConsumer), das oft auch im lokalen Bereich als klassisches Synchronisationsproblem vorkommt. Das Modell ist auch als PublishȬSubscribeȬModell bekannt. – Ein Partner sendet an viele andere bei Auftreten eines Ereignisses bestimmte Nachrichten. Dies ist auch eine Art ProduzentenȬKonsumentenȬModell mit nur einem Produzenten. Die Konsumenten möchten erst dann benachrichȬ tigt werden, wenn eine Nachricht zur Bearbeitung ansteht. Eine Erweiterung dieser Kommunikationsart ist, dass alle Nachrichten auf alle Fälle ankomȬ men müssen und evtl. sogar in der richtigen Reihenfolge. – Ein Teilnehmer möchte eine Nachricht an einen anderen Teilnehmer senden, der nicht zwangsläufig aktiv ist. Die Nachricht soll zwischengespeichert werden und wenn der Empfänger wieder aktiv ist, dann soll sie ihm zugeȬ stellt werden. Diese Variante ist auch über Systemausfälle hinweg denkbar, die Nachrichten sind in diesem Fall persistent zu machen. Man spricht in diesem Zusammenhang auch vom PointȬtoȬPointȬModell (P2P) und vom PublishȬSubscribeȬModell. Bei einer P2PȬKommunikation kommunizieren zwei Kommunikationsparter gleichberechtigt (symmetrisch) und keiner ist, wie im asymmetrischen ClientȬServerȬModell, in einer speziellen Rolle. Im PublishȬ SubscribeȬModell registrieren (subscribe) sich Konsumenten von bestimmten Nachrichtentypen für einen bestimmten Kommunikationsaspekt (Topic). ProduȬ
148
2.5 MessageȬPassing zenten erzeugen diese Nachrichtentypen und senden (publish) sie an die KonsuȬ mentengruppe. Receiver 1
Queue
Sender
Receiver 2 . . .
Receiver n
Abbildung 2Ȭ62: PointȬtoȬPointȬModell Subscriber 1
Publisher
Topic
Subscriber 2 . . .
Subscriber n
Abbildung 2Ȭ63: PublishȬ/SubscribeȬModell
2.5.2
Klassifikation nachrichtenorientierter Kommunikation
Diese verschiedenen Spielarten der Kommunikation werden – sofern sie nicht in das ClientȬServerȬModell passen Ȭ auch unter dem Begriff der nachrichtenorientierȬ ten Kommunikation oder unter dem Begriff MessageȬPassing zusammengefasst. Die Systeme, die in der Regel über bestimmte MiddlewareȬLösungen implementiert sind, werden auch als Nachrichtensysteme bezeichnet. Spezielle Nachrichtensysteme sind Nachrichtenwarteschlangensysteme (MessageȬQueuingȬSysteme). Letztere unterȬ stützen z.B. die Kommunikation, auch wenn gerade ein Partner oder mehrere Partner nicht aktiv sind, im sog. storeȬandȬforwardȬMechanismus. Sie werden auch häufig eingesetzt, wenn Prozesse (ohne Einfluss der Benutzeroberfläche) miteinȬ ander kommunizieren müssen. Wichtigster Aufgabenbereich ist die Integration von Anwendungen in betrieblichen Informationssystemen, wenn z.B. eine AnȬ wendung eine Transaktion anstößt, die auch weitere Transaktionen in anderen Systemen bzw. deren Datenbanken erfordert. Nachrichtenwarteschlangen können auch persistent (dauerhaft) sein, also SystemȬ ausfälle oder das bewusste Stoppen eines Teilnehmersystems tolerieren. Ein typiȬ sches Beispiel für ein verteiltes Anwendungssystem, das persistente WarteschlanȬ gen verwendet, ist das heute weit verbreitete EȬMailȬSystem. Es gibt zu MessageȬPassingȬSystemen keine einheitliche Theorie. Tanenbaum unȬ terscheidet bei diesen Systemen generell transiente und persistente sowie (wie bei
149
2 Konzepte und Modelle verteilter Kommunikation der ClientȬServerȬKommunikation) synchrone und asynchrone Kommunikation. Diese Unterscheidung soll uns hier als Diskussionsgrundlage dienen (Tanenbaum 2003): – Wie bereits erläutert kann der Sender bei der asynchronen Kommunikation nach dem Absenden einer Nachricht sofort weiterarbeiten, ist also nicht bloȬ ckiert. Die Nachricht wird dem Empfänger z.B. über eine Middleware zugeȬ stellt. Bei der synchronen Kommunikation wird der Sender blockiert, bis der Empfänger die Nachricht erhalten bzw. gar verarbeitet hat oder diese zuȬ mindest im Empfängerrechner angekommen ist. – Bei transienter Kommunikation wird eine Nachricht nur so lange gespeiȬ chert, wie das verteilte System (bzw. Sender und Empfänger) aktiv ist. Im persistenten Fall dagegen wird eine Nachricht solange gespeichert, bis sie beim Empfänger oder den Empfängern ausgeliefert ist. Kombiniert man nun die Attribute, die die Kommunikationsart beschreiben, so können folgende Fälle vorkommen: – Transient asynchrones MessageȬPassing ist dem EinwegeȬRPC sehr ähnlich. Eine gesendete Nachricht wird vom Kommunikationssystem lokal (in einem Puffer) abgelegt. Der Sender arbeitet weiter und das KommunikationssysȬ tem sendet die Nachricht parallel dazu zum Empfänger. Die DatagrammȬ orientierte Kommunikation über UDP auf Basis von DatagramȬSockets kann hier als Beispiel dienen. Bei Systemausfällen ist kein Recovery möglich, um den Zustand vor dem Ausfall wiederherstellen zu können. – Bei der transient synchronen Kommunikation gibt es mehrere Formen. In der strengsten Form blockiert der Sender bis das Ergebnis vom Empfänger zuȬ rück ist. In der einfacheren Form wird der Sender so lange blockiert, bis die Nachricht im Puffer des Empfängers gelandet ist. Systemausfälle überlebt das System nicht. – Bei der persistent synchronen Kommunikation speichert das KommunikatiȬ onssystem eine Nachricht beim Empfänger (in einem Puffer) ab, bevor der Sender weiterarbeiten kann. – Beim persistenten asynchronen MessageȬPassing wird eine gesendete Nachricht dauerhaft vom Kommunikationssystem zwischengespeichert, bis der adresȬ sierte Empfänger sie liest, während der Sender gleich weiterarbeiten kann. EiȬ ne Anwendung dieses Typs ist wiederum das EȬMailȬSystem der InternetȬWelt mit SMTP (Simple Message Transfer Protocol) als Protokoll. Die Begriffswelt ist bzgl. der Kommunikationsarten uneinheitlich. Weber unterȬ scheidet in (Weber 1998) im Gegensatz zu Tanenbaum (Tanenbaum 2003) zwiȬ schen dienstȬ und meldungsorientierter Kommunikation und diese beiden Begriffe werden mit den Attributen synchron und asynchron kombiniert. Im Prinzip ist die Unterscheidung nicht so wesentlich, da man anhand der Anwendung am besten ersehen kann, welchen Kommunikationsmechanismus man braucht, wie er heißt ist sekundär. Welche Variante verwendet wird, hängt von der
150
2.5 MessageȬPassing konkreten Anwendung ab und ist vom Architekten der verteilten Anwendung zu entscheiden. Neu an der Klassifikation von Tanenbaum sind die Attribute transient und perȬ sistent. Die transiente Kommunikation lässt sich mit Hilfe der klassischen TransȬ portzugriffsmechanismen wie die BerkeleyȬSockets, über die von AT&T entwickelȬ te TLI (Transport Layer Interface) oder über XTI (X/Open Transport Interface), einem Standard der ehemaligen X/Open18, realisieren. Auch das hier nicht weiter diskutierte MPI (MessageȬPassingȬInterface) mit über 100 hochwertigen FunktioȬ nen für das MessageȬPassing dient ähnlichen Zwecken. MPI ist ein Standard für ein Message Passing Interface, der heute auch in GridȬSystemen Anwendung finȬ det (Bauke 2006). Der Standard wurde von der University of Tennessee, Knoxville sowie von vielen Herstellern und Anwendern Mitte der 90er Jahre entwickelt. MPI ist frei verfügbar und steht als Bibliothek zur Verfügung. Die Bibliothek stellt Funktionen wie MPI_send, MPI_recv usw. bereit. Weitere Informationen hierzu finden sich in der HomeȬPage des MPIȬForums (WWWȬ008) und in (Tanenbaum 2003).
2.5.4
Persistente Kommunikation
Die nachrichtenorientierte persistente Kommunikation soll im Weiteren etwas ausführlicher betrachtet werden. Diese Form der Kommunikation wird über NachȬ richtenwarteschlangensysteme oder sog. MOMȬSysteme (MessageȬOriented MiddȬ leware) abgewickelt. Diese Systeme stellen Mechanismen zur NachrichtenübertraȬ gung im Wesentlichen für die persistente asynchrone Kommunikation bereit. Als Abgrenzung zu den klassischen RPCȬMechanismen und der objektbasierten Kommunikation kann man festhalten, dass bei nachrichtenorientierter persistenter Kommunikation keine entfernten FunktionsȬ oder Methodenaufrufe unterstützt werden, sondern die Nachrichten durch die Kommunikationspartner explizit aufȬ zubauen und zu übertragen sind. Nachrichtenwarteschlangensystem: In einem Nachrichtenwarteschlangensystem kommunizieren die beteiligten verteilten Anwendungsbausteine nicht direkt mitȬ einander. Die Kommunikation erfolgt indirekt über Nachrichtenwarteschlangen, in die ein Sender eine Nachricht einträgt und ein Empfänger diese abholt. Der Sender erhält die Zusicherung, dass seine Nachricht irgendwann in die Warteschlange des Empfängers gestellt wird, wann dies geschieht, ist nicht festgelegt und wann der Empfänger diese ausliest ebenfalls nicht. Die Verwaltung der Warteschlangen übernimmt das Kommunikationssystem bzw. die Middleware. Die allgemeine Architektur eines Warteschlangensystems kann nach Tanenbaum wie folgt skizziert werden (vgl. Abbildung 2Ȭ64):
18
X/Open war eine Herstellervereinigung, die in die Open Group eingegangen ist.
151
2 Konzepte und Modelle verteilter Kommunikation – QuellȬ und Zielwarteschlangen, wobei jede Warteschange einen Namen bzw. eine Adresse hat. Die Quellwarteschlange ist örtlich in der Nähe des Senders, evtl. sogar auf dem gleichen Rechnersystem. Eine Nachricht enthält die AdȬ resse der Zielwarteschlange, an die sie übertragen werden soll. Das NachȬ richtenwarteschlangensystem ist für die Bereitstellung von Warteschlangen zuständig. – WarteschlangenȬManager verwalten die Warteschlangen. Sie kommunizieren direkt mit den Anwendungsbausteinen (im Bild die Applikationen), die Nachrichten senden und empfangen. Sender stellen ihre Nachrichten immer in eine lokale Warteschlange oder eine Warteschlange, die sich in der Nähe des Senders befindet, ein. Die Warteschlange wird vom lokalen WarteȬ schlangenȬManager verwaltet. – Spezielle WarteschlangenȬManager arbeiten als Router (auch Relays genannt). In dieser Funktion geben Sie eingehende Nachrichten an andere WarteȬ schlangenȬManager, die auf dem Weg zum Ziel liegen, weiter. – Die Applikationen können über eine einfach zu bedienende Schnittstelle (API) mit Operationen wie put und get (entspricht send und receive) NachȬ richten in die Quellwarteschlange einstellen bzw. aus der Zielwarteschlange auslesen. Weiterhin können Sie die Zielwarteschlange auf anstehende NachȬ richten abfragen (Operation poll) bzw. auf ankommende Ereignisse (NachȬ richt in der eigenen Zielwarteschlange) über die Bekanntgabe einer selbst definierten Funktion mit Hilfe der Operation notify reagieren. Sender A C Applikation Applikation
EmpfangsWarteSchlange R2 Nachricht SendeWarteschlange
D R3
Applikation
R1
Router Applikation Empfänger B
Abbildung 2Ȭ64: Allgemeiner Aufbau eines Nachrichtenwarteschlangensystems nach (Tanenbaum 2003)
152
2.5 MessageȬPassing In Abbildung 2Ȭ64 ist ein Nachrichtenwarteschlangensystem mit vier RechnersysȬ temen A, B, C, und D, auf denen jeweils eine Applikation mit zugeordneten QuellȬ und Zielwarteschlangen abläuft, skizziert. Weiterhin sind drei Router R1, R2 und R3 eingezeichnet. Diese Architektur ist vom Grundaufbau her dem MboneȬNetz für Multicasting im Internet sehr ähnlich. Beispiele für MOMȬProdukte sind IBM Websphere MQ, Microsoft MSMQ und BEA MessageQ. Interessant ist in diesem Zusammenhang auch die JavaȬAPI JEE/JMS (Java Message Service), die eine Schnittstelle für MessageȬPassingȬ Systeme bereitstellt und auch die bereits erwähnten MessageȬdriven Beans (MDB) der EJBȬSpezifikation, die nachrichtenorientierte Komponenten darstellen. Wir betrachten im Weiteren JMS und MDBs als Fallbeispiele.
2.5.6
Fallbeispiel: Java Messaging Service
JMS ist eine Java API, die einen Satz allgemeingültiger Schnittstellen für die KomȬ munikation über MOMȬSysteme bereitstellt. Sowohl die PointȬtoȬPointȬ (P2P) als auch die PublishȬ/SubscribeȬKommunikation (Pub/Sub) wird über JMS ermöglicht. JMS stellt allerdings nur eine API für den Zugang zu MOMȬSystemen bereit. Die Implementierung eines MOMȬSystems und auch die Kommunikation zwischen MOMȬSystemen werden nicht festgelegt. Es gibt bis heute kein Standardprotokoll, das alle Hersteller von MOMȬSystemen nutzen, um miteinander zu kommunizieȬ ren. Die JMSȬSpezifikation legt fest, dass ein System, welches die JMSȬAPI bereitstellt, als JMSȬProvider bezeichnet wird. Eine JMSȬAnwendung, die über JMS kommuniȬ zieren möchte, muss sich mit dem JMSȬProvider verbinden, also eine Connection einrichten. Eine JMSȬAnwendung wird auch als JMSȬConsumer bezeichnet. ZuȬ sätzlich muss eine Session erzeugt werden. Connections und Sessions bilden also die Basis für die Kommunikation zwischen JMSȬAnwendung und JMSȬProvider. Sessions sind unabhängig voneinander. Jede Anwendung baut eine eigene Session mit dem JMSȬProvider auf. Eine Connection kann als Kommunikationskanal zum JMSȬProvider verstanden werden, während eine Session einen KommunikationsȬ kontext für Sender, Empfänger und Nachrichten repräsentiert (Abbildung 2Ȭ65).
Abbildung 2Ȭ65: Kommunikation zwischen Anwendung und JMSȬProvider
153
2 Konzepte und Modelle verteilter Kommunikation Ein JMSȬProvider bietet Kommunikationsdienste an, die in den Schichten 5 – 7 des ISO/OSIȬReferenzmodells anzusiedeln sind und setzt auf einen Transportdienst wie etwa TCP auf (siehe Abbildung 2Ȭ66). In der Abbildung wird noch deutlicher, dass jeder CMSȬConsumer völlig unabhängig von anderen Consumern eine VerȬ bindung und eine Session mit dem JMSȬProvider unterhält. Die JMSȬAnwenȬ dungen sind in einer ClientȬServerȬBeziehung mit dem JMSȬProvider und stellen in dieser Beziehung den Client dar, während der JMSȬProvider in der Serverrolle ist. Die Abbildung zeigt auch deutlich die völlige Entkopplung der Anwendungen, die miteinander Nachrichten austauschen wollen. JMS-Anwendung
JMS JM S-Anwe Anwendung ndung
JMS-SAP (JMS-Interface)
JMS-Provider JMS (JMS-Server, MOM-Server)
Session JMS JM S Connection Connection
Unabhängige Verbindungen
TSAP (Socketzugriff)
Session JMS JM S Con onnection nection
TSAP
Schicht 5-7
TSAP
Schicht 1-4
Tran Tr ans sportsys ysttem (TCP)
Abbildung 2Ȭ66: Kommunikation bei JMS
JMS unterstützt sowohl die Kommunikation im PointȬtoȬPointȬ als auch im PubȬ lishȬSubscribeȬModell. Der JMSȬProvider stellt hierfür die nötigen Ressourcen beȬ reit. Er verwaltet Queues und Topics, die auch als administrative Objekte bezeichȬ net werden (siehe Abbildung 2Ȭ67). JMS JM SAnwendung Anwend ung 1
JMSAnwendung Anwendu ng 2
JMS-Consumer
Connection/ Session
Connection/ Session
JMS-Interfaces
JMS-Interfaces
JMS JM S-Provider Queues Qu eues
Topic To pic
Queues Topic To pic
Abbildung 2Ȭ67: Topics und Queues als administrative Objekte
154
2.5 MessageȬPassing Über JMS können aber auch temporäre Topics und Queues angelegt werden (MeȬ thoden createTemporaryTopic und createTemporaryQueue).
JMS Point-to-Point-Modell Das JMSȬP2PȬModell legt fest, wie eine Anwendung mit Warteschlangen (Queues) arbeiten kann. Dazu gehört das Auffinden von Queues sowie das Senden und Empfangen von Nachrichten in/aus Queues. JMSȬP2P definiert keine Mechanismen für das Erzeugen und Administrieren von Warteschlangen (Queues). Eine Ausnahme bilden temporäre Queues. Das Anlegen von dauerhaften Queues ist Aufgabe des Administrators eines NachrichtenwarteȬ schlangensystems. Eine Queue wird üblicherweise durch einen Administrator erzeugt und lebt dann für einen längeren Zeitraum. Queues werden in der Regel vom JMSȬProvider immer verfügbar gehalten, also dauerhaft eingerichtet, und Anwendungen können Nachrichten ohne Unterbrechung einstellen oder auslesen. Es ist in JMS nicht definiert, wie lange der Transport einer Nachricht dauert. Die Verzögerung hängt von der Implementierung des JMSȬProviders ab. JMSȬPTP bietet zwei verschiedene Typen von Interfaces an: Das PTP Domain InterȬ face und das JMS Common Interface. Beide Schnittstellen sind semantisch gleich und bieten mehrere EinzelȬInterfaces an (siehe Tabelle 2Ȭ3). Über das Interface QueueConnectionFactory19 bzw. ConnectionFactory kann eine VerȬ bindung zu einem JMSȬPTPȬProvider erzeugt werden. Es wird ein Objekt instanziȬ iert, das ein Interface vom Typ QueueConnection (bzw. Connection) bereitstellt. JMS unterstützt auch temporäre Queues (WWWȬ004). Ein Objekt, das ein QueueȬ bzw. ein DestinationȬInterface bereitstellt, kapselt eine Queue. Über dieses Interface kann eine Anwendung eine in einem Nachrichtenwarteschlangensystem eingerichtete Queue ansprechen. Tabelle 2Ȭ3: JMSȬPTPȬInterfaces
PTP Domain Interfaces
JMS Common Interfaces
QueueConnectionFactory
ConnectionFactory
QueueConnection
Connection
Queues
Destination
QueueSession
Session
QueueSender
MessageProducer
QueueReceiver
MessageConsumer
19
Hier wird das FactoryȬPattern genutzt.
155
2 Konzepte und Modelle verteilter Kommunikation Über eine Connection können eine oder mehrere Sessions zum JMSȬProvider angeȬ legt werden. Sessions stellen das Interface QueueSession (bzw. Session) zur VerfüȬ gung. Innerhalb einer Session kann man Objekte mit dem Interface QueueReceiver (bzw. MessageConsumer) und QueueSender (MessageProducer) erzeugen, über die sowohl aus Queues gelesen als auch in Queues geschrieben werden kann.
JMS Publish-/Subscribe-Modell Das JMSȬPub/SubȬModell stellt einen abstrakten, allen Beteiligten bekannten „KnoȬ tenpunkt“ zur Verfügung, der als Topic bezeichnet wird. Dieser Knotenpunkt kann Nachrichten empfangen und weiterleiten. Ein Topic kann auch als MessageȬBroker verstanden werden, der Nachrichten sammelt und wieder verteilt. Die Nutzer eines Topics heißen auch Produzenten und Konsumenten. Die Anzahl der ProduȬ zenten und Konsumenten kann sich dynamisch verändern. Man erkennt die Analogie zum PTPȬModell. Die Common Interfaces entsprechen den Interfaces des PTPȬModells. Über die Common Interfaces kann also sowohl das PTPȬ als auch das Pub/SubȬModell genutzt werden (siehe Tabelle 2Ȭ4). Im PubȬ /SubȬModell unterscheidet man Produzenten und Konsumenten von Nachrichten, die völlig unabhängig voneinander arbeiten. Tabelle 2Ȭ4: JMSȬPub/SubȬInterfaces
Pub/Sub Domain Interfaces
JMS Common Interfaces
TopicConnectionFactory
ConnectionFactory
TopicConnection
Connection
Topic
Destination
TopicSession
Session
TopicSender
MessageProducer
TopicReceiver
MessageConsumer
JMS-Nachrichten JMS gibt einen bestimmten Nachrichtenaufbau vor (siehe Abbildung 2Ȭ68). Die Nachricht besteht aus einem Header, der sich wiederum aus drei Bestandteilen zusammensetzt, sowie einem MessageȬBody. Im Header sind vordefinierte JMSȬ MessageȬHeaderfelder und optionale Headerfelder als Properties zu finden. Bei den Properties unterscheidet man wiederum vordefinierte JMSXȬProperties und eigene Properties, die auch eigene Namen haben können. Properties sind als (name, value)ȬPaare mit unterschiedlichen Typen (boolean, byte, long, String, …, Object) definierbar. JMSXȬProperties sind in der JMSȬSpezifikation vordefinierte MessageȬEigenschaften. Beispiele hierzu sind:
156
2.5 MessageȬPassing – JMSXUserid: Eindeutiger String zur Identifikation eines JMSȬClients, wird vom Provider beim Senden gesetzt – JMSXApplId: Identifiziert die Anwendung, wird vom Provider beim Senden gesetzt JMS-MessageHeaderfelder Vordefinierte JMSX-Properties
Header
Frei definierte Properties Message-Body
Abbildung 2Ȭ68: JMSȬMessageȬAufbau
Eine Nachricht kann über das vordefinierte Interface Message bearbeitet werden. So können z.B. mit der Methode getPropertyNames alle PropertyȬNamen aus einer Nachricht ausgelesen werden. Die Methode clearProperties dient dem Löschen aller Properties einer Nachricht. Mit getȬ und setȬMethoden können die Properties geleȬ sen und verändert werden. Die Methode clearBody löscht den ganzen MessageȬ Body. Beim Erzeugen einer Nachricht innerhalb einer Session werden schon einige Felder des Headers vorbelegt. JMSȬMessageȬHeaderȬFelder können ebenfalls mit get/setȬMethoden gelesen und verändert werden In Tabelle 2Ȭ5 sind die wichtigsten HeaderȬFelder aufgeführt. Im PropertyȬTeil werden optionale JMSȬeigene Felder und ProviderȬspezifische Felder gesetzt. Weiterhin können eigene, anwendungsspezifische Felder definiert werden. Der optionale MessageȬBody beinhaltet die applikationsspezifischen Daten, welche mit der Nachricht übertragen werden sollen. Im JMSȬStandard werden aufbauend auf einen generischen Nachrichtentypen (Klasse Message) fünf spezielle NachrichȬ tentypen bereitgestellt: – BytesMessage: Mit diesem Nachrichtentyp können Daten byteweise übertraȬ gen werden. Damit lassen sich auch Nachrichten lesen, die keine StandardȬ JMSȬDatentypen nutzen (etwa von Fremdsystemen). – MapMessage: Der Nutzlastteil bei diesem Nachrichtentyp enthält nur ProperȬ ties mit (name,value)ȬPaaren. Die Namen werden als Strings übergeben. – ObjectMessage: Dieser Nachrichtentyp erlaubt die Übertragung serialisierter JavaȬObjekte (Vorsicht: Kompatibilität). – StreamMessage: Mit diesem Nachrichtentyp können große Mengen primitiver Datentypen versendet. – TextMessage: Hier wird die Nachricht als String übertragen.
157
2 Konzepte und Modelle verteilter Kommunikation Tabelle 2Ȭ5: JMSȬPub/SubȬInterfaces
HeaderȬFeld
Bedeutung
Wird belegt
JMSDestination
ZielȬTopic oder –Queue
implizit beim Senden
JMSDeliveryMode NichtȬpersistenter und persistenter Modus
implizit beim Senden
JMSMessageID
Eindeutige NachrichtenȬID (String)
implizit beim Senden
JMSTimeStamp
Zeitpunkt der Übergabe an den JMSȬ implizit beim Senden Provider)
JMSRedelivered
Hinweis, dass möglicherweise schon durch JMSȬProvider ausgeliefert wurde
JMSRedelivered
Erneute Zustellung einer Nachricht
durch MessageȬ Consumer
JMSExpiration
Angabe, wie lange eine Nachricht leben soll
implizit beim Senden
JMSPriority
Prioritäten, 0Ȭ4 = normal, 5Ȭ9 = hoch
implizit beim Senden
JMSCorrelationID
Verlinken von Nachrichten möglich
durch JMSȬClient
JMSReplyTo
Destination (Topic, Queue), zu der die Antwort geschickt werden soll
durch JMSȬClient
JMSType
Frei vergebener Typ der Nachricht (Client vergibt
durch JMSȬClient
Filterung von Nachrichten Ein wichtiger Aspekt bei pub/subȬAnwendungen stellt die Filterung von NachrichȬ ten dar. Wenn mehrere Konsumenten vorhanden sind, stellt sich die Frage, ob alle Nachrichten an alle Konsumenten verteilt werden sollen oder ob eine Filterung bzw. Selektion vorzunehmen ist. Beispielsweise kann es in einem Handelssystem für Derivate sinnvoll sein, dass bestimmte Händler auch nur dedizierte InformatiȬ onen über bestimmte Aktienkurse oder Kurse anderer Finanzinstrumente zugeȬ stellt bekommen. In JMS wird hierfür der SelektorȬMechanismus bereitgestellt. Dies ist ein MechaȬ nismus zum Filtern von Nachrichten auf der Providerseite, also üblicherweise auf dem JMSȬServer. Bei entsprechender Implementierung hat dies den Vorteil, dass auch nur die Nachrichten an einen JMSȬKonsumenten zugestellt werden, die er wirklich braucht. Der SelektorȬMechanismus ermöglicht die Definition von Filtern in einer SQLȬähnlichen Notation. In den Filtern werden Bedingungen erfüllt, die sich auf Headerfelder und Properties beziehen, nicht auf den MessageȬBody. Es können sowohl die JMSXȬProperties, als auch die selbst definierten Properties heȬ
158
2.5 MessageȬPassing rangezogen werden. Wir werden den Filtermechanismus weiter unten anhand eines Beispiels erläutern.
JMS-Interfaces im Überblick Die JMSȬAPI stellt einige BasisȬInterfaces bereit. Die wichtigsten sind in Abbildung 2Ȭ68 zusammengefasst. Dabei ist auch die typische Nutzungsreihenfolge angegeȬ ben. Zunächst wird typischerweise über das Interface ConnectionFactory ein Topic oder eine Queue erzeugt und anschließend eine Connection angelegt. Danach kann über das ConnectionȬInterface eine Session erzeugt und innerhalb der Session je nach Anwendungsteil Producer oder Consumer instanziiert werden. Diese können dann MessageȬObjekte erzeugen und versenden sowie, evtl. über ein ListenerȬ Objekt, Messages empfangen.
ConnectionFactory
TopicConnection Factory
Connection
1
QueueConnection Factory
TopicConnection
2
MessageProducer
MessageConsumer
3
TopicPublisher
3
QueueSender
publish()
TopicSubscriber
send()
QueueReceiver
setM essageListener()
Message
BytesMessage
QueueConnection
…
HierȱwirdȱderȱkomplexeȱDatentypȱArticleȱbeschrieben.ȱInȱdemȱTagȱsequenceȱwerdenȱ alleȱ Elementeȱ desȱ zusammengesetztenȱ Typsȱ alsȱ Gruppeȱ definiert.ȱ Esȱ gibtȱ auchȱ nochȱandereȱVariantenȱfürȱdieȱBildungȱvonȱElementȬGruppen.ȱ DieȱTypbeschreibungȱbeginnt,ȱwieȱbeiȱXMLȬSchemabeschreibungenȱüblich,ȱimmerȱ mitȱ einemȱ ȬElement.ȱ Derȱ Namensraumȱ www.w3.org/2001/XMLSchemaȱ istȱ inȱdiesemȱBeispielȱderȱDefaultȬNamensraum.ȱImȱAttributȱtargetNamespaceȱwirdȱdieȱ URIȱ desȱ Zielnamensraumesȱ definiert.ȱ Dieserȱ Namensraumȱ wirdȱ automatischȱ fürȱ alleȱdeklariertenȱElementeȱundȱAttributeȱdesȱSchemasȱverwendet.ȱWeiterhinȱkannȱ manȱ überȱ dieȱ imȱ Beispielȱ nichtȱ einbezogenenȱ Attributeȱ elementFormDefaultȱ undȱ attributeFormDefaultȱdenȱZielnamensraumȱlockern.ȱGibtȱmanȱhierȱdenȱWertȱ„qualiȬ fied“ȱan,ȱsoȱkannȱeinȱElementȱoderȱeinȱAttributȱauchȱaußerhalbȱdesȱȱZielnamensȬ raumsȱauftreten.ȱ ImȱAttributȱtypeȱwerdenȱjeweilsȱdieȱTypenȱderȱElementeȱdesȱkomplexenȱDatentypsȱ Articleȱangegeben.ȱJedesȱElementȱbesitztȱauchȱeinenȱNamen.ȱEinȱArtikelȱbestehtȱimȱ BeispielȱausȱeinemȱAttributȱvomȱTypȱint,ȱzweiȱAttributenȱvomȱTypȱstringȱundȱeiȬ nemȱAttributȱdesȱTypsȱdouble.ȱBeiȱdenȱeinzelnenȱElementenȱdesȱDatentypsȱArticleȱ istȱangegeben,ȱwieȱoftȱsieȱinȱeinemȱkonkretenȱXMLȬDokumentȱvorkommenȱdürfen.ȱ Hierzuȱ dienenȱ dieȱ Attributeȱ minOccursȱ undȱ maxOccurs.ȱ Wennȱ beliebigȱ vieleȱ EinȬ trägeȱ zugelassenȱ sind,ȱ wirdȱ imȱ Attributȱ maxOccursȱderȱ Wertȱ „unbounded“ȱ angeȬ geben.ȱ Wirdȱ imȱ Attributȱ minOccursȱderȱWertȱ„0“ȱ angegeben,ȱ kannȱ dasȱ Elementȱ inȱ einerȱkonkretenȱAusprägungȱdesȱTypsȱauchȱfehlen.ȱ
Das message-Element DieserȱTagȱbeschreibtȱdieȱDaten,ȱdieȱzwischenȱeinemȱClientȱundȱdemȱWebserviceȬ Providerȱ ausgetauschtȱ werden.ȱ Zuȱ jederȱ Methodeȱ einesȱ Webserviceȱ (Tagȱ WebȬ Method)ȱgibtȱesȱüblicherweiseȱ(aberȱnichtȱzwingend)ȱzweiȱNachrichtenȱ(TagȱMessaȬ
ȱ
191
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ ge).ȱEineȱNachrichtȱfürȱdenȱRequestȱmitȱEingabeparameternȱ(input)ȱundȱeineȱResȬ ponseȬNachrichtȱmitȱRückgabeparameternȱ(output).ȱJedeȱNachrichtȱbeinhaltetȱeineȱ oderȱ mehrereȱ partȬElemente,ȱ jeȱ einesȱ fürȱ jedenȱ Parameterȱ einerȱ WebserviceȬ Methode.ȱAllenȱParameternȱsindȱTypenȱzugeordnet,ȱdieȱentwederȱBasistypenȱderȱ WSDLȱoderȱeigeneȱTypenȱ(sieheȱtypesȬElement)ȱseinȱkönnen.ȱ Anȱ einemȱeinfachenȱ BeispielȱsollȱdasȱmessageȬElementȱ verdeutlichtȱwerden.ȱ Dieseȱ NachrichtȱkönnteȱdieȱRequestȬNachrichtȱfürȱdieȱMethodeȱdeleteArticleȱunseresȱArȬ tikelmanagersȱsein.ȱAlsȱÜbergabeȱistȱimȱpartȬTagȱeinȱParameterȱnamensȱPLZȱ(PostȬ leitzahl)ȱvomȱTypȱstringȱdefiniertȱworden:ȱ11ȱ
Dasȱ nächsteȱ Beispielȱ definiertȱ dieȱ Übergabeparameterȱ anȱ eineȱ Methodeȱ unseresȱ Artikelmanagersȱ namensȱ findArticleByKatalogId.ȱ Dasȱ partȬAttributȱ definiertȱ dabeiȱ dieȱ Eingabeparameterȱ derȱ findArticleByKatalogIdȬMethode.ȱ Diesesȱ Elementȱ kannȱ aufȱfolgendeȱWeiseȱdefiniertȱwerden:ȱ12ȱ
InȱderȱMessageȱwirdȱfolgenderȱElementtypȱalsȱParameterȱverwendet:ȱ
Eineȱ konkreteȱ SOAPȬNachrichtȱ fürȱ denȱ Aufrufȱ desȱ CreateArticleȬDienstesȱ kannȱ dannȱfolgendermaßenȱaufgebautȱsein:ȱ
xsi:type=“xsd:int“>2000 xsi:type=“xsd:string“>20 xsi:type=“xsd:string“> Vespa xsi:type=“xsd:float“>2500
Aufgrundȱ derȱ inȱ derȱ Nachrichtȱ enthaltenenȱ WSDLȬDefinitionenȱ istȱ dasȱ XMLȬ Dokumentȱ fürȱ einenȱ Empfängerȱ etwasȱ schwerȱ zuȱ validieren.ȱ Weiterhinȱ entstehtȱ durchȱdieȱÜbertragungȱderȱTypdefinitionenȱeinȱgewisserȱOverhead.ȱ BeispielȱRPC/literal:ȱImȱLiteralȬStilȱsiehtȱeineȱNachrichtȱetwasȱandersȱaus.ȱAnhandȱ derȱ CreateArticleȬRequestȬNachrichtȱ istȱ ersichtlich,ȱ dassȱ sichȱ RPC/Literalȱ vonȱ RPC/encodedȱdurchȱdieȱfehlendenȱTypȬAngabenȱbeiȱdenȱParameternȱunterscheidet.ȱ Dieȱ Nachrichtȱ wirdȱ damitȱ kürzerȱ undȱ istȱ auchȱ leichterȱ zuȱ validieren.ȱ Derȱ Nameȱ desȱDienstesȱ(CreateArcicle)ȱistȱauchȱhierȱinȱderȱNachricht,ȱwasȱsichȱvorteilhaftȱaufȱ dieȱDiagnoseȱundȱauchȱaufȱdasȱDispatchingȱimȱZielknotenȱauswirkt.ȱ
2000 20 Vespa 2500
198 ȱ
3.3ȱȱTechnologienȱfürȱSOAȱundȱWebservicesȱ BeispielȱDocument/literal:ȱInȱderȱWSDLȱwirdȱinȱdiesemȱFallȱfürȱjedenȱParameterȱ einȱ eigenesȱ WSDLȬElementȱ definiert.ȱ Inȱ denȱ Nachrichtenbeschreibungenȱ wirdȱ daraufȱverwiesen.ȱWirȱbetrachtenȱwiederȱdenȱCreateArticleȬDienst:ȱ
2000 …
…
…
GrundsätzlichȱsollteȱmanȱsichȱbeiȱderȱEntwicklungȱvonȱWebservicesȱaufȱdieȱKomȬ binationȱ Style=Document/Use=Literalȱ oderȱ Style=RPC/Use=Literalȱ beschränken.ȱ Alleȱ WebserviceȬPlattformenȱ dürftenȱ dieseȱ beidenȱ Kombinationenȱ kennen.ȱ Willȱ manȱ ganzȱsicherȱgehen,ȱdassȱWebservicesȱauchȱinȱheterogenerȱUmgebungȱfunktionieren,ȱ soȱ istȱ dieȱ Kombinationȱ Style=Document/Use=Literalȱ amȱ besten,ȱ daȱ dieseȱ auchȱ inȱ .NETȬWebservicesȱ verwendetȱ wird.ȱ SOAPȬEncodingȱ warȱ historischȱ begründetȱ undȱsollteȱnichtȱmehrȱverwendetȱwerden.ȱ
3.3.7
WS-I-Standard
WSȬIȱ stehtȱ fürȱ WebȱServiceȱInteroperabilityȱOrganisationȱ undȱ istȱ einȱ offenesȱ HerstelȬ lerkonsortiumȱ(WWSȬ001).ȱWSȬIȱhatȱdieȱAufgabeȱübernommen,ȱdieȱInteroperabiliȬ tätȱ vonȱ WebserviceȬImplementierungenȱ zuȱ verbessern.ȱ WSȬIȱ hatȱ sichȱ daherȱ zumȱ Zielȱ gesetzt,ȱ Standardsȱ imȱ WebserviceȬUmfeldȱ zuȱ Profilenȱ zusammenzustellen,ȱ ImplementierungshinweiseȱzuȱgebenȱundȱTesttoolsȱfürȱConformanceȬTestsȱbereitȬ zustellen.ȱInsbesondereȱwurdeȱeinȱ„WebserviceȬStandardsȬStack“ȱkonzipiertȱ(sieheȱ Abbildungȱ 3Ȭ10),ȱ derȱ ständigȱ weiterentwickeltȱ werdenȱ soll.ȱ Wieȱ manȱ erkennenȱ kann,ȱ werdenȱ hierȱ nebenȱ denȱ Kommunikationsmechanismenȱ auchȱ wichtigeȱ AsȬ pekteȱ desȱ Zusammenspielsȱ wieȱ Security,ȱ Reliability,ȱ Transaktionshandlingȱ undȱ ManagementȱvonȱWebservicesȱadressiert.ȱ Additional Capabilities Business Process Orchestration Composable Service elements
Managements
Portals
Composition/Orchestration
WSSecurity
Reliable Messaging
Transactionality
Messaging
Endpoint Identification, Publish/ Subscribe
Description
XML Schema, WSDL, UDDI, SOAP with Attachments
Invocation
XML, SOAP
Transports
HTTP, HTTPS, Others
ȱ Abbildungȱ3Ȭ10:ȱWebserviceȬStandardsȬStackȱderȱWSȬIȱ
200 ȱ
3.3ȱȱTechnologienȱfürȱSOAȱundȱWebservicesȱ DurchȱWSȬIȱwerdenȱspezielleȱProfileȱdesȱStacksȱdefiniert,ȱdieȱauchȱeineȱklareȱZuȬ sammensetzungȱ derȱ Versionenȱ derȱ Einzelstandardsȱ vorgeben.ȱ Soȱ gibtȱ esȱ z.B.ȱ dasȱ sog.ȱ BasicȬProfile,ȱ dasȱ dieȱ unterenȱ Schichtenȱ Transports,ȱ Invocationȱ undȱ Descriptionȱ definiert.ȱ DasȱBasicȬProfileȱerlaubtȱinȱderȱVersionȱ1.1ȱfolgendeȱKombinationenȱausȱNachrichȬ tenformatȱundȱKodierungsstil:ȱ – Style=Document/Use=Literalȱȱ – Style=RPC/Use=Literalȱ DieȱKombinationȱ(Style=RPC/Use=Encoded)ȱwirdȱvonȱWSȬIȱnichtȱunterstützt.ȱ
3.3.8
Vorgehensweise zur Entwicklung von Webservices
HäufigȱwerdenȱbestehendeȱSoftwarebausteineȱinȱeineȱWebserviceȬUmgebungȱeinȬ gebettet.ȱ Abbildungȱ3Ȭ11ȱ zeigtȱdieȱEinbettungȱeinerȱvorhandenenȱSoftwarekompoȬ nenteȱ (imȱ Beispielȱ unserȱ Artikelmanager)ȱ inȱ eineȱ WebserviceȬLaufzeitumgebung.ȱ ImȱWesentlichenȱistȱeinȱWrappingȱderȱbestehendenȱKomponenteȱerforderlich,ȱumȱ dieȱangebotenenȱDiensteȱalsȱWebserviceȱdarzustellen.ȱHierȱeignetȱsichȱdieȱWebserȬ viceȬTechnikȱ alsoȱ sehrȱ gutȱ fürȱ dieȱ Integrationȱ derȱ bestehendenȱ Komponenteȱ inȱ neueȱApplikation.ȱȱ WebserviceClient
WebserviceWrapper für Artikelmanager
Artikelmanager
WebserviceLaufzeitumgebung
Andere Laufzeitumgebung (z.B. EJB)
ȱ Abbildungȱ3Ȭ11:ȱEinbettungȱinȱdieȱLaufzeitumgebungȱ
Damitȱ dieȱ Methodenȱ desȱ Artikelmanagersȱ überȱ Webservicesȱ verwendetȱ werdenȱ können,ȱsindȱdieȱDatentypenȱundȱMethodenȱinȱWSDLȱzuȱbeschreiben.ȱDabeiȱmussȱ überlegtȱwerden,ȱwelcheȱEinȬȱundȱAusgabeparameterȱfürȱdieȱeinzelnenȱMethodenȱ (Operationen)ȱnotwendigȱsind.ȱ
ȱ
201
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ Amȱ Beispielȱ unseresȱ Artikelmanagersȱ sollȱ imȱ Folgendenȱ dieȱ Vorgehensweiseȱ beiȱ derȱ Entwicklungȱ vonȱ Webservicesȱ skizziertȱ werden.ȱ Wirȱ gehenȱ beiȱ unseremȱ BeiȬ spielȱ vonȱ demȱ typischenȱ Szenarioȱ aus,ȱ inȱ demȱ bereitsȱ eineȱ ArtikelmanagerȬ Komponenteȱ mitȱ derȱ obenȱ angegebenenȱ Schnittstelleȱ existiertȱ undȱ dieseȱ umȱ eineȱ WebserviceȬSchnittstelleȱerweitertȱwerdenȱmuss.ȱȱ Zunächstȱ einmalȱ kannȱ manȱ festhalten,ȱ dassȱ dieȱ Diensteȱ desȱ Artikelmanagersȱ aufȱ einenȱWebserviceȱmitȱeinemȱPorttyp,ȱderȱmehrereȱOperationenȱenthält,ȱabgebildetȱ werdenȱkönnen.ȱEineȱJavaȬȱoderȱsonstigeȱMethodeȱoderȱProzedurȱentsprichtȱdabeiȱ einerȱWebserviceȬOperation.ȱWirȱbetrachtenȱimȱFolgendenȱ(etwasȱvereinfachtȱmitȱ nurȱ zweiȱ Operationen)ȱ dasȱ ArticlemanagerȬInterface.ȱ Dieȱ serverseitigȱ implemenȬ tierteȱKomponenteȱbietetȱfolgendeȱSchnittstelleȱ(hierȱinȱJavaȬNotation):ȱ public interface ArticleMgrSimpleI extends Remote { … public void createArticle(Article a) throws ArticleMgrExistException, RemoteException; public Vector findArticlesByGroup(long warengruppe) throws throws ArticleMgrNotFoundException, RemoteException; … }
FürȱdieȱKommunikationȱerscheintȱdasȱRequestȬResponseȬModellȱangemessen.ȱDiesȱ entsprichtȱdemȱKonzeptȱdesȱArtikelmanagers.ȱDieȱbeidenȱMethodenȱhabenȱjeweilsȱ Eingabeparameter,ȱ Returnwerteȱ undȱ Exceptions.ȱ Esȱ mussȱ nunȱ überlegtȱ werden,ȱ wieȱ dieseȱ aufȱ dieȱ Mechanismenȱ vonȱ Webservicesȱ abbildbarȱ sind.ȱ Dasȱ ExceptionȬ HandlingȱwirdȱdabeiȱzurȱVereinfachungȱausgeblendet:ȱ – WieȱbereitsȱangedeutetȱwirdȱdasȱInterfaceȱaufȱgenauȱeinenȱWebserviceȱundȱ dessenȱJavaȬMethodenȱaufȱWebserviceȬOperationenȱabgebildet.ȱȱ – DieȱEingabeparameterȱlassenȱsichȱrelativȱeinfachȱaufȱWSDLȬDatentypenȱabȬ bilden,ȱdaȱesȱsichȱnurȱumȱlongȬWerteȱhandelt.ȱ – Derȱ Rückgabewertȱ derȱ Methodeȱ CreateArticleȱ istȱ void.ȱ Hierfürȱ istȱ alsoȱ inȱ WSDLȱnichtsȱfestzulegen.ȱȱ – Etwasȱ schwierigerȱ gestaltetȱ sichȱ dieȱ Rückgabeȱ desȱ ArtikelȬVectorsȱ beiȱ derȱ MethodeȱfindArticlesByGroup.ȱEineȱÜbergabeȱvonȱsprachabhängigenȱObjektȬ instanzenȱ(JavaȬȱoderȱC#ȬObjekte)ȱalsȱEingabeȬȱundȱAusgabeparameterȱeinerȱ Operationȱ istȱ nichtȱ sinnvoll,ȱ umȱ Sprachabhängigkeitenȱ zuȱ vermeiden.ȱ Einȱ serialisiertesȱJavaȬObjektȱ kannȱinȱ einerȱC#ȬUmgebungȱ nichtȱ bearbeitetȱ werȬ denȱ undȱ umgekehrt.ȱ Derȱ Vektorȱ mussȱ alsoȱ aufȱ einenȱ eigenenȱ WSDLȬ Datentypenȱabgebildetȱwerden.ȱHierȱsollteȱallerdingsȱbeachtetȱwerden,ȱdassȱ eineȱ Erzeugungȱ einerȱ WSDLȬDateiȱ durchȱ vorhandeneȱ Toolsȱ problematischȱ ist.ȱ JAXȬRPCȱ (sieheȱ unten),ȱ eineȱ APIȬImplementierungȱ vonȱ Webservicesȱ inȱ
202 ȱ
3.3ȱȱTechnologienȱfürȱSOAȱundȱWebservicesȱ Javaȱ unterstütztȱ z.B.ȱ keineȱ Vektoren,ȱ sondernȱ nurȱ klassischeȱ JavaȬArraysȱ (wieȱz.B.ȱArticle[]).17ȱ – JedeȱOperationȱbenötigtȱaufgrundȱdesȱgewähltenȱRequestȬResponseȬModellsȱ eineȱRequestȬȱundȱeineȱResponseȬNachricht.ȱ DieȱWSDLȬDateiȱstelltȱdasȱVerbindungsstückȱzwischenȱdemȱDiensterbringerȱ(SerȬ ver)ȱ undȱ demȱ Dienstnehmerȱ (Client)ȱ dar.ȱ Prinzipiellȱ gibtȱ esȱ zweiȱ Möglichkeiten,ȱ eineȱ WSDLȬDateiȱ zuȱ erstellen.ȱ Entwederȱ überȱ einenȱ TopȬDownȬAnsatz,ȱ indemȱ zunächstȱeineȱWSDLȬDateiȱerstelltȱwirdȱundȱdannȱausȱdieserȱautomatischȱderȱnotȬ wendigeȱCodeȱ(StubsȱundȱSkeletonsȱbzw.ȱTies18)ȱzumȱEinsatzȱinȱProgrammenȱgeȬ neriertȱ wird.ȱ Danachȱ wirdȱ inȱ diesemȱ Fallȱ derȱ Codeȱ fürȱ dieȱ eigentlicheȱ BusinessȬ Logikȱ programmiertȱ bzw.ȱ eingebundenȱ werden.ȱ Dieȱ zweiteȱ Varianteȱ istȱ einȱ BotȬ tomȬUpȬAnsatz.ȱ Inȱ diesemȱ Fallȱ wirdȱ zunächstȱ dieȱ BusinessȬLogikȱ programmiertȱ undȱanschließendȱdarausȱbzw.ȱausȱdenȱSchnittstellenbeschreibungenȱeineȱWSDLȬ Dateiȱ mitȱ Stubsȱ undȱ Skeletonsȱ generiert.ȱ Dieȱ Elementeȱ derȱ WSDLȱ sindȱ zwarȱ einȬ fachȱzuȱverstehen,ȱdennochȱistȱdasȱFormulierenȱeinesȱWSDLȬSchemasȱrelativȱaufȬ wändig.ȱDarumȱgibtȱesȱbeiȱdenȱführendenȱTechnologienȱ(Java,ȱ.NET)ȱTools,ȱdieȱzuȱ bestehendenȱWebservicesȱdieȱWSDLȱautomatischȱerzeugen.ȱAuchȱdieȱumgekehrteȱ Richtungȱ istȱ mitȱ Toolsȱ automatischȱ zuȱ erzeugen.ȱ Ausȱ einerȱ bestehendenȱ WSDLȱ lässtȱsichȱwiederȱeinȱCodeȱgenerierenȱgegenȱdenȱeinȱClientȱentwickeltȱwerdenȱkann.ȱȱ Typischȱ fürȱ denȱ BottomȬUpȬAnsatzȱ istȱ es,ȱ dassȱ einȱ WebserviceȬAnbieterȱ eineȱ WSDLȬBeschreibungȱ bereitstellt,ȱ dieȱ vomȱ WSDLȬNutzerȱ zurȱ Programmierungȱ seinerȱ ClientȬAnwendungȱ verwendetȱ wird.ȱ Dieȱ WSDLȬDateiȱ kannȱ nunȱ alsȱ Inputȱ fürȱeinenȱStubȬCompilerȱdienen,ȱderȱdarausȱClientȬStubsȱundȱServerȬSkeletonsȱähnȬ lichȱwieȱbeiȱRPC,ȱCORBAȱoderȱRMIȱgeneriert.ȱDieȱZusammenhängeȱderȱGenerieȬ rungȱsindȱinȱAbbildungȱ3Ȭ12ȱdargestellt.ȱ WieȱimȱBildȱgezeigtȱwird,ȱstelltȱderȱServiceȬAnbieterȱeineȱWSDLȬBeschreibungȱfürȱ seinenȱServiceȱ bereit.ȱ Ausȱdieserȱ WSDLȬBeschreibungȱ kannȱ dannȱsowohlȱ fürȱ denȱ Clientȱ alsȱ auchȱ fürȱ denȱ Serverȱ einȱ Stubȱ bzw.ȱ einȱ Skeletonȱ erzeugtȱ werden.ȱ Derȱ VorgangȱwirdȱüblicherweiseȱüberȱeinenȱWSDLȬCompilerȱautomatisiert.ȱDasȱSkeleȬ tonȱstelltȱdenȱAufrufmechanismusȱundȱdieȱMarshallingȬ/UnmarshallingȬMechanisȬ menȱ sowieȱ dieȱ Kommunikationsbausteineȱ bereit.ȱ Dieȱ spezielleȱ Programmierungȱ desȱDienstesȱerfolgtȱinȱeinemȱAnwendungsobjekt.ȱDerȱZugriffȱaufȱdenȱDienstȱwirdȱ fürȱ denȱ Clientȱ durchȱ denȱ Stub,ȱ derȱ einȱ ProxyȬObjektȱ darstellt,ȱ gewährleistet.ȱ Imȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 17
ȱ Hinweis:ȱ Generellȱ solltenȱ dieȱ Datentypenȱ vonȱ Parameternȱ undȱ Rückgabewertenȱ fürȱ WebserviceȬOperationenȱgenauȱbetrachtetȱwerden,ȱwennȱdieȱWSDLȬNotationȱausȱbesteȬ hendenȱ Anwendungskomponentenȱ generiertȱ werden.ȱ Java2WSDLȱ (Toolȱ vonȱ Axis),ȱ wscompileȱoderȱsonstigeȱToolsȱerkennenȱnichtȱalleȱTypen,ȱwasȱdannȱdazuȱführt,ȱdassȱesȱ Laufzeitproblemeȱgebenȱkann.ȱDiesȱgiltȱnichtȱnurȱfürȱJava,ȱsondernȱauchȱfürȱandereȱProȬ gammiersprachen.ȱEsȱempfiehltȱsich,ȱmöglichstȱeinfacheȱParametertypenȱzuȱnutzen.ȱ
18
ȱ Engl.ȱTieȱ=ȱVerbindung.ȱ
ȱ
203
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ Bildȱwirdȱauchȱgezeigt,ȱdassȱimȱServiceȬNutzerȱundȱimȱServiceȬAnbieterȱeineȱSOȬ APȬbasierteȱMiddlewareȱalsȱLaufzeitumgebungȱvorhandenȱseinȱmuss.ȱȱ WSDL des Service Provider WSDL-Generator
WSDL-Compiler (server-seitig)
WSDL-Compiler (client-seitig)
Service-Nutzer
Service-Anbieter
Anwendungsobjekt (Client)
Anwendungsobjekt (Service-Anbieter)
Stub
Skeleton
SOAP-basierte Middleware
SOAP
SOAP-basierte Middleware
ȱ Abbildungȱ3Ȭ12:ȱGenerierungȱvonȱStubȱundȱSkeletonȱausȱWSDLȬBeschreibungenȱnachȱ WWWȬ012ȱ
EineȱmanuelleȱUmsetzungȱdesȱvereinfachtenȱJavaȬInterfaceȱinȱeineȱWSDLȬNotationȱ wirdȱ imȱ Folgendenȱ unterȱ Berücksichtigungȱ derȱ genanntenȱ Entscheidungenȱ skizȬ ziert19.ȱEineȱkonkreteȱÜbersetzungȱvonȱJavaȱnachȱWSDLȱhängtȱvonȱdemȱeingesetzȬ tenȱÜbersetzungswerkzeugȱab.ȱDasȱErgebnisȱkannȱbeispielseweiseȱwieȱfolgtȱausseȬ henȱ(Nachrichtenformatȱdocument,ȱKodierungsstilȱliteral):ȱ
…
ȱ
ȱ
205
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ
ȱ
206 ȱ
3.4ȱȱJavaȬTechnologienȱfürȱWebservicesȱ
Selbstverständlichȱ sindȱ auchȱ andereȱ Variantenȱ fürȱ eineȱ Umsetzungȱ nachȱ WSDLȱ denkbar.ȱ Generierungstoolsȱ verwendenȱ ganzȱ eigeneȱ Namenskonventionen.ȱ Wieȱ manȱnunȱeinenȱWebserviceȱkonkretȱaufȱBasisȱvonȱvorhandenenȱWebserviceȬ,ȱEntȬ wicklungsȬȱundȱLaufzeitumgebungenȱrealisierenȱkann,ȱsollȱimȱFolgendenȱanhandȱ vonȱFallbeispielenȱerläutertȱwerden.ȱ
3.4 Java-Technologien für Webservices 3.4.1
Unterstützte Standards und Ablaufumgebungen
Inȱ Javaȱ werdenȱ einigeȱ APIȬStandardsȱ vorgegeben,ȱ dieȱ zumȱ Zielȱ haben,ȱ JavaȬ Komponentenȱ unterschiedlicherȱ Containerȱ (EJB,ȱ Servlet)ȱ mitȱ einemȱ Zugangȱ überȱ eineȱWebserviceȬSchnittstelleȱzuȱversehen.ȱInȱJ2EEȱ1.4ȱundȱauchȱinȱJavaȱEEȱ5ȱundȱ EJBȱ3.0ȱsindȱfolgendeȱStandardsȱintegriert:ȱ – – – – –
ȱ
SAAJ:ȱSOAPȱwithȱAttachmentsȱAPIȱforȱJavaȱ JAXR:ȱJavaȱAPIȱforȱXMLȱRegistriesȱ JAXB:ȱJavaȱArchitectureȱforȱXMLȱBindingȱ JAXȬRPC:ȱJavaȱAPIȱforȱXMLȬbasesȱRPCȱ JAXȬWS:ȱJavaȱAPIȱforȱXMLȱWebȱServices.ȱȱ
207
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ SAAJȱ dientȱ vorȱ allemȱ dazu,ȱ denȱ internenȱ Aufbauȱ vonȱ SOAPȬPDUsȱ vonȱ eigenenȱ Programmenȱ ausȱ zuȱ beeinflussenȱ (Headerȱ setzenȱ usw.).ȱ Überȱ JAXRȱ kannȱ derȱ ZugriffȱaufȱUDDIȬVerzeichnisseȱprogrammiertȱwerden.ȱJAXBȱdientȱdemȱMarshalȬ lingȱ vonȱ SOAPȬRequests.ȱ JAXȬRPCȱ undȱ dasȱ neueȱ JAXȬWSȱ dienenȱ dazu,ȱ AnwenȬ dungenȱmitȱWebservicesȱfürȱalleȱKommunikationspartner,ȱalsoȱz.B.ȱsowohlȱfürȱdieȱ ServerȬȱalsȱauchȱfürȱdieȱClientseiteȱzuȱentwickeln.ȱWirȱwerdenȱunsȱimȱFolgendenȱ mitȱJAXȬRPCȱundȱJAXȬWSȱbefassen.ȱȱ Imȱ EJBȬStandardȱ 3.0ȱ wirdȱ sowohlȱ derȱ Document/LiteralȬȱ alsȱ auchȱ derȱ RPC/LiteralȬ Styleȱunterstützt.ȱBasisȱistȱhierfürȱdieȱWebserviceȬAPIȱJAXȬWSȱ(JavaȱAPIȱforȱXMLȱ WebȱServices).ȱZudemȱwirdȱauchȱnochȱdieȱStilformȱRPC/Encodedȱunterstützt,ȱaberȱ nichtȱmehrȱempfohlen.ȱ Fürȱ dieȱEntwicklungȱ vonȱWebservicesȱistȱ eineȱ Entwicklungsumgebungȱ (einȱ ToolȬ kit)ȱundȱfürȱdenȱBetriebȱeineȱLaufzeitumgebungȱ(WebserviceȬPlattform)ȱerforderȬ lich.ȱEsȱgibtȱsowohlȱfürȱJavaȬ,ȱalsȱauchȱfürȱ.NETȬUmgebungenȱentsprechendeȱEntȬ wicklungsȬȱ undȱ Laufzeitsysteme.ȱ Zudemȱ gibtȱ esȱ verschiedeneȱ Toolkitsȱ undȱ LaufȬ zeitumgebungen.ȱ Inȱ derȱ WebserviceȬLaufzeitumgebungȱ istȱ einȱ sog.ȱ SOAPȬ Prozessorȱ erforderlich,ȱ derȱ SOAPȬNachrichtenȱ bearbeitenȱ kann.ȱ Einȱ SOAPȬ Prozessorȱ (auchȱ SOAPȬEngine)ȱ verarbeitetȱ ankommendeȱ undȱ abgehendeȱ SOAPȬ Nachrichten.ȱ Dasȱ Verarbeitenȱ einerȱ Nachrichtȱ bedingt,ȱ dassȱ derȱ SOAPȬProzessorȱ überȱ Informationenȱ zuȱ denȱ konkretȱ ablaufendenȱ Webservicesȱ verfügenȱ muss.ȱ Hierzuȱ gehörtȱ dasȱ Wissenȱ überȱ dasȱ Kommunikationsmodellȱ (RequestȬ/ResponseȬ Modell,ȱEinwegnachricht,...)ȱundȱdieȱverwendetenȱTransportmechanismen.ȱȱ Weiterhinȱ müssenȱ dieȱ Nachrichtenbeschreibungenȱ vorliegen.ȱ Heuteȱ unterstützenȱ fastȱ alleȱ ApplicationȬServerȬLösungenȱ auchȱ Webservices.ȱ Einȱ typischerȱ SOAPȬ Prozessorȱistȱz.B.ȱAxis,ȱderȱinȱdenȱServletȬContainerȱApacheȱTomcatȱeingebundenȱ werdenȱ kann.ȱ Axisȱ enthältȱ zudemȱ Werkzeugeȱ zurȱ Generierungȱ vonȱ JavaȬKlassenȱ ausȱWSDLȬDateienȱundȱumgekehrt.ȱAndereȱImplementierungenȱderȱWebservicesȬ Spezifikationenȱ sindȱ JWSDPȱ (Javaȱ Webȱ Servicesȱ Developmentȱ Packȱ (Sunȱ MicroȬ systems)ȱȱundȱdieȱJBoss/WSȱimȱJBossȱApplicationȬServer.ȱ
3.4.2
JAX-RPC
JAXȬRPCȱstehtȱfürȱJavaȱAPIsȱforȱXMLȱbasedȱRPC,ȱistȱmitȱJSRȱ101ȱ(JavaȱSpecificationȱ Request)ȱ spezifiziertȱ wordenȱ undȱ stelltȱ eineȱ APIȱ fürȱ dieȱ Entwicklungȱ vonȱ JavaȬ basiertenȱWebservicesȱdar.ȱInȱAbbildungȱ3Ȭ13ȱistȱdieȱBearbeitungȱeinesȱWebserviceȱ aufȱ Basisȱ vonJAXȬRPCȱskizziert.ȱEinȱ Clientȱ sendetȱeinenȱ RPCȬRequestȱ überȱ einenȱ generiertenȱ oderȱ dynamischȱ erzeugtenȱ Stubȱ undȱ überȱ dasȱ JAXȬRPCȬ Laufzeitsystemȱ anȱ denȱ Webservice,ȱ derȱ seinerseitsȱ überȱ einȱ Skeletonȱ (auchȱ Tieȱ genannt)ȱundȱeineȱJAXȬRPCȬAblaufumgebungȱverfügenȱmuss.ȱDieȱStubsȱundȱSkeȬ letonsȱ sindȱ wieȱ beimȱ klassischenȱ RPCȬMechanismusȱ fürȱ dieȱ Serialisierungȱ undȱ Deserialisierungȱ derȱ übermitteltenȱ Parameterȱ undȱ Returnwerteȱ zuständig.ȱ Nebenȱ einerȱstatischenȱErzeugungȱvonȱStubsȱundȱSkeletonsȱistȱaufȱeineȱdynamischeȱVariȬ
208 ȱ
3.4ȱȱJavaȬTechnologienȱfürȱWebservicesȱ anteȱvorhanden,ȱinȱderȱProxiesȱzurȱLaufzeitȱerzeugtȱwerden.ȱDieseȱVariantenȱwerȬ denȱalsȱDynamicȱProxiesȱundȱDynamicȱInvocationȱbezeichnet.ȱ DieȱÜbergabeȱderȱParameterȱerfolgtȱperȱValueȱ(callȬbyȬvalue).ȱAlsȱTransportprotoȬ kollȱwurdeȱHTTPȱfestgelegt.ȱWennȱeinȱClientȱeinenȱRequestȱanȱdenȱServerȱsendenȱ möchte,ȱ mussȱ erȱ diesenȱ zunächstȱ inȱ eineȱ SOAPȬNachrichtȱ packenȱ undȱ anschlieȬ ßendȱ dieȱ SOAPȬPDUȱ inȱ eineȱ HTTPȬPDU.ȱ Aufȱ derȱ Serverseiteȱ mussȱ derȱ Requestȱ ausgepacktȱwerdenȱundȱdannȱüberȱeinenȱDispatchingȬMechanismusȱanȱdenȱadresȬ siertenȱ Endpunktȱ übergebenȱ werden.ȱ Dieȱ Antwortnachrichtȱ wirdȱ entsprechendȱ verarbeitet.ȱDieseȱArbeitenȱwerdenȱvomȱJAXȬRPCȬLaufzeitsystemȱausgeführt.ȱ ClientAnwendung
WebService
Stub
Skeleton (Tie) SOAPNachrichten
JAX-RPCRuntime
HTTPNachrichten
Transportsystem
JAX-RPCRuntime
Transportsystem
ȱ Abbildungȱ3Ȭ13:ȱWebserviceȬAufrufsȱmitȱJAXȬRPCȱ
Dieȱ Abbildungȱ derȱ JavaȬObjekteȱ bzw.ȱ Datentypenȱ aufȱ WSDLȬkonformeȱ DatentyȬ penȱundȱumgekehrtȱwirdȱvonȱdenȱStubsȱundȱSkeletonsȱdurchgeführt.ȱEinȱCodegeȬ neratorȱ erzeugtȱ üblicherweiseȱ auchȱ dieȱ SerialisierungsȬȱ undȱ DeserialisierungsȬ methodenȱfürȱdieseȱAufgabe.20ȱ Zurȱ Bereitstellungȱ einesȱ Webserviceȱ wirdȱ serverseitigȱ einȱ sog.ȱ ServiceȬEndpointȱ definiert.ȱ Einȱ ServiceȬEndpointȱ stelltȱ eineȱ Schnittstelleȱ fürȱ WebserviceȬClientsȱ beȬ reit,ȱwobeiȱdieȱTechnologie,ȱdieȱderȱClientȱnutzt,ȱunerheblichȱist.ȱDieȱSchnittstelleȱ wirdȱmitȱJavaȬHilfsmittelnȱalsȱRemoteȬInterfaceȱbeschrieben.ȱDieȱImplementierungȱ desȱServiceȬEndpointsȱerfolgtȱüberȱdieȱImplementierungȱdesȱRemoteȬInterfaceȱalsȱ JavaȬRemoteȬObjekteȱ (imȱ Sinneȱ derȱ RMIȬProgrammierung).ȱ Ausȱ derȱ JavaȬInterȬ faceȬBeschreibungȱkönnenȱdannȱeineȱWSDLȬBeschreibungȱ(alsȱXMLȬDatei)ȱundȱdieȱ erforderlichenȱ Stubsȱ bzw.ȱ Skeletonsȱ erzeugtȱ werden.ȱ Dieȱ WSDLȬBeschreibungȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ InȱJWSDPȱwirdȱhierfürȱdasȱToolȱwscompile,ȱinȱApacheȱAxisȱdasȱToolȱJava2WSDLȱbereitȬ gestellt.ȱ
20
ȱ
209
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ kannȱ auchȱ vonȱ denȱ ClientȬProgrammierernȱ genutztȱ werden,ȱ umȱ eineȱ StubȬ GenerierungȱfürȱeineȱandereȱTechnologieȱ(z.B.ȱ.NETȱWebservices)ȱvorzunehmen.ȱ Ausȱ unseremȱ bekanntenȱ Beispielȱ desȱ JavaȬArtikelmanagersȱ kannȱ einȱ Webserviceȱ generiertȱ werden,ȱ derȱ mehrereȱ Operationenȱ (createArticle,...)ȱ enthält.ȱ Dasȱ AuffinȬ denȱ desȱ Webserviceȱ undȱ dasȱ Dispatchingȱ derȱ entsprechendenȱ Operationenȱ zurȱ Laufzeitȱ werdenȱ durchȱ dasȱ JAXȬRPCȬLaufzeitsystemȱ ermöglicht.ȱ Auchȱ eineȱ vorȬ handeneȱWSDLȬBeschreibungȱkannȱaufȱeineȱJavaȬSchnittstelleȱabgebildetȱwerden.ȱ JAXȬRPCȱ legtȱ fest,ȱ wieȱ dasȱ Mappingȱ derȱ WSDLȬDatentypenȱ aufȱ JavaȬDatentypenȱ erfolgenȱsoll.ȱTabelleȱ3Ȭ1ȱzeigtȱdieȱwesentlichenȱJavaȬDatentypenȱundȱdieȱzugehöȬ rigenȱDatentypenȱausȱderȱXMLȬSchemaȬSpezifikation.ȱKomplexeȱJavaȬDatentypenȱ wieȱ Arraysȱ werdenȱ aufȱ komplexeȱ WSDLȬTypenȱ (wsdl:complexType)ȱ abgebildet.ȱ WeiterhinȱwerdenȱJavaȬExceptionsȱaufȱdasȱfaultȬElementȱvonȱWSDLȱabgebildet.ȱȱ JavaȬObjektklassenȱ könnenȱ auchȱ aufȱ WSDLȬDatentypenȱ abgebildetȱ werden.ȱ Beimȱ Mappingȱ sindȱ dieȱ inȱ derȱ JAXȬRPCȬSpezifikationȱ definiertenȱ Regelnȱ zuȱ beachten,ȱ sonstȱkannȱeinȱWSDLȬGeneratorȱkeineȱvernünftigeȱCodegenerierungȱdurchführen.ȱ EinȱAusschnittȱausȱdemȱRegelwerkȱsollȱerwähntȱwerden:ȱȱ – Dieȱ JavaȬObjektklassen,ȱ ausȱ denenȱ eineȱ WSDLȬBeschreibungȱ erzeugtȱ werȬ denȱ soll,ȱ müssenȱ einenȱ StandardȬKonstruktor,ȱ derȱ alsȱ publicȱ definiertȱ wird,ȱ implementieren.ȱ – DieȱJavaȬObjektklassenȱ müssenȱ dieȱJavaȬBeanȬKonventionenȱ einhalten.ȱ BeiȬ spielsweiseȱ müssenȱ sieȱ fürȱ alleȱ Attributeȱ GetterȬȱ undȱ SetterȬMethodenȱ beȬ reitstellen.ȱ – JavaȬObjektklassenȱdürfenȱnichtȱdasȱRemoteȬInterfaceȱdesȱPackageȱjava.rmiȱ implementieren.ȱ Tabelleȱ3Ȭ1:ȱMappingȱderȱvonȱJAXȬRPCȱunterstütztenȱDatentypenȱaufȱWSDLȬTypenȱ ȱ
JavaȬTypȱ
XMLȬSchemaȬTypȱ
booleanȱ
xsd:booleanȱ
byteȱ
xsd:byteȱ
doubleȱ
xsd:doubleȱ
shortȱ
xsd:shortȱ
java.lang.Stringȱ
xsd:stringȱ
java.lang.Calendarȱ
xsd:ȱdateTimeȱ
byte[]ȱ
xsd:base64Binaryȱ
…ȱ
ȱ
Alleȱ genanntenȱ Datentypen,ȱ auchȱ dieȱ komplexerenȱ Klassen,ȱ dieȱ sichȱ anȱ dieȱ geȬ nanntenȱ Konventionenȱ halten,ȱ könnenȱ sowohlȱ alsȱ Parameterȱ alsȱ auchȱ alsȱ ReturnȬ
210 ȱ
3.4ȱȱJavaȬTechnologienȱfürȱWebservicesȱ werteȱ verwendetȱ werden.ȱ Zudemȱ istȱ dieȱ Nutzungȱ dieserȱ Datentypenȱ inȱ Arraysȱ (Beispiele:ȱ int[],ȱ String[],ȱ Kunde[])ȱ möglich.ȱ Eineȱ Unterstützungȱ vonȱ CollectorȬ Klassenȱ (JavaȬVector,ȱ usw.)ȱ istȱ nichtȱ sinnvoll,ȱ daȱ NichtȬJavaȬKommunikationsȬ partnerȱ damitȱ nichtȱ umgehenȱ können.ȱ Gemäßȱ Spezifikationȱ mussȱ einȱ Herstellerȱ einesȱ JAXȬRPCȬLaufzeitsystemsȱ folgendeȱ Kombinationenȱ ausȱ Nachrichtenformatȱ undȱKodierungsstilȱ(inȱderȱSpezifikationȱalsȱoperationȱmodesȱbezeichnet)ȱimplemenȬ tieren:ȱ – Style=Document/Use=Literalȱȱ – Style=RPC/Use=Literalȱ – Style=RPC/Use=Encodedȱ OptionalȱistȱdieȱKombinationȱStyle=Document/Use=Encodedȱmöglich.ȱ EineȱausführlicheȱBeschreibungȱzumȱWSDLȬtoȬJavaȬMappingȱistȱinȱderȱJAXȬRPCȬ Spezifikationȱnachzulesenȱ(WWWȬ020).ȱ Alleȱ JAXȬRPCȬKlassenȱ sindȱ imȱ JavaȬPackageȱ javax.xml.rpcȱ enthalten.ȱ Aufȱ derȱ ClientȬSeiteȱsindȱvorȱallemȱfolgendeȱInterfacesȱundȱKlassenȱrelevant:ȱ – StubȬInterface:ȱjavax.xml.rpc.Stubȱ – Schnittstellenȱ fürȱ denȱ dynamischenȱ Aufrufȱ einesȱ Websservice:ȱ javax.Ȭ xml.rpc.Callȱundȱjavax.xml.rpc.Serviceȱ – FactoryȱfürȱdieȱErzeugungȱvonȱServiceȬObjekten:ȱjavax.xml.rpc.ServiceFactoryȱȱ – Ausnahmebehandlung:ȱjavax.xml.rpc.JAXRPCExceptionȱȱ Hinzuȱ kommenȱ einigeȱ Basisklassenȱ undȱ Interfaces,ȱ dieȱ fürȱ eineȱ Generierungȱ vonȱ StubsȱundȱSkeletonsȱverwendetȱwerden.ȱEinȱJAXȬRPCȬLaufzeitsystemȱmussȱdieseȱ KlassenȱundȱInterfacesȱimplementieren.ȱJAXȬRPCȱhatȱverschiedeneȱMöglichkeiten,ȱ alsȱ WebserviceȬClientȱ aufȱ Webservicesȱ zuzugreifen.ȱ Derȱ Zugriffȱ kannȱ vonȱ einemȱ J2SEȬClientȱoderȱauchȱvonȱeinerȱJEEȬKomponente,ȱwieȱz.B.ȱausȱeinerȱEJBȬSessionȬ Beanȱherausȱerfolgen.ȱHierfürȱstelltȱJAXȬRPCȱSchnittstellenȱbereit.ȱAufȱderȱClientȬ Seiteȱ istȱ ebenfallsȱ einȱ JAXȬRPCȬLaufzeitsystemȱ erforderlich,ȱ dasȱ imȱ JEEȬFallȱ auchȱ imȱ EJBȬContainerȱ integriertȱ seinȱ kann.ȱ Dieȱ konkreteȱ Implementierungȱ istȱ hierȱ alȬ lerdingsȱnichtȱfestgelegt.ȱInȱJAXȬRPCȱgibtȱesȱfürȱdieȱImplementierungȱeinesȱWebȬ serviceȬClientsȱfolgendeȱMöglichkeiten:ȱ – Nutzungȱ vonȱ generiertenȱ Stubsȱ mitȱ dynamischerȱ KonfigurierungsmöglichȬ keitȱ – Nutzungȱvonȱsog.ȱDynamicȱProxiesȱ – Nutzungȱdesȱsog.ȱDynamicȱInvocationȱCallȱInterfaceȱ(DII)ȱ DieseȱMöglichkeitenȱsollenȱimȱFolgendenȱkurzȱvorgestelltȱwerden.ȱ
Statische Stubs mit dynamischer Konfigurierungsmöglichkeit: Eineȱ StubȬInstanzȱ repräsentiertȱ einenȱ clientseitigenȱ Proxyȱ fürȱ denȱ ServiceȬ Endpunkt.ȱ Dasȱ ProtokollȬBindingȱ undȱ derȱ ServiceȬEndpointȱ sindȱ hierȱ bereitsȱ imȱ StubȬCodeȱfestgelegt.ȱDerȱClientȬStubȱfürȱeinenȱWebserviceȱkannȱstatischȱvorkonȬ figuriertȱwerdenȱundȱkannȱauchȱvomȱWebserviceȬClientȱdynamischȱüberȱdasȱStubȬ
ȱ
211
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ Interfaceȱ nachkonfiguriertȱ werden.ȱ Dieseȱ Varianteȱ entsprichtȱ demȱ CORBAȬȱ oderȱ RMIȬStubȬModellȱundȱkannȱalsȱStandardvarianteȱbetrachtetȱwerden.ȱȱ Einȱ generierterȱ Stubȱ istȱ üblicherweiseȱ anȱ einȱ vorgegebenesȱ Transportprotokollȱ gebunden.ȱ Dieȱ Spezifikationȱ verlangtȱ hierȱ keineȱ generischenȱ Stubs.ȱ Dasȱ StubȬ InterfaceȱenthältȱaberȱauchȱMethodenȱzumȱSetzenȱundȱAuslesenȱvonȱEigenschaftenȱ (Properties)ȱzurȱLaufzeitȱundȱsiehtȱwieȱfolgtȱaus:ȱ package javax.xml.rpc; public interface Stub { … void _setProperty(String name, Object value); Object _getProperty(String name); java.util.Iterator _getPropertyNames(); … }
ManȱkannȱalsoȱbestimmteȱEigenschaftenȱüberȱdieȱStubȬInstanzȱdynamischȱüberȱdieȱ MethodeȱsetPropertyȱkonfigurieren.ȱTypischeȱEigenschaften,ȱdieȱverändertȱwerdenȱ können,ȱsindȱz.B.ȱdasȱProtokollȬBindingȱundȱderȱServiceȬEndpunkt.ȱ Konkreteȱ Produkte,ȱ dieȱ JAXȬRPCȱ unterstützen,ȱ erweiternȱ dasȱ StubȬInterfaceȱ beiȱ derȱ Codegenerierungȱ inȱ derȱ Regelȱ umȱ dieȱ speziellenȱ Methodenȱ (Operationen)ȱ eiȬ nesȱinȱWSDLȱnotiertenȱWebservice.ȱȱ Beispiel:ȱEineȱgenerierteȱKlasseȱsiehtȱdannȱbeispielsweiseȱwieȱfolgtȱaus:ȱ public class ArticleMgrSimpleIGenerierterStub21 extends Basispackage.Stub implements ArticleMgrSimpleI { … void _setProperty(String name, Object value); Object _getProperty(String name); java.util.Iterator _getPropertyNames(); // Individuelle Webservice-Methoden (Operationen) public void createArticle(…); … }
DieȱNutzungȱeinesȱStubsȱkönnteȱdann,ȱstarkȱvereinfacht,ȱwieȱfolgtȱaussehen:ȱ … public class MyArticleMgrSimpleClient { … public static void main(String[] args) { …
ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ VomȱGenerierungstoolȱfreiȱvergebenerȱName.ȱ
21
212 ȱ
3.4ȱȱJavaȬTechnologienȱfürȱWebservicesȱ // Stub instanziieren, implementierungsabhängig ArticleMgrSimpleIGenerierterStub stub = (ArticleMgrSimpleIGenerierterStub) new ArticleMgrSimpleIGenerierterStub; stub._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, …); … // Konkrete Operation aufrufen stub.createArticle(…); … } … }
Dynamic Proxy: JAXȬRPCȱ unterstütztȱ auchȱ dieȱ dynamischeȱ Erzeugungȱ einesȱ Zugangsȱ zuȱ einemȱ Webservice.ȱEineȱVarianteȱhierzuȱistȱdieȱNutzungȱeinesȱdynamischenȱProxies.ȱDieȬ serȱ erlaubtȱ es,ȱ einenȱ Webserviceȱ zurȱ Laufzeitȱ aufzurufen,ȱ ohneȱ vorherȱ eineȱ StubȬ Generierungȱ vornehmenȱ zuȱ müssen.ȱ Überȱ einenȱ Aufrufȱ derȱ getPortȬMethodeȱ ausȱ demȱServiceȬInterfaceȱkannȱmanȱsichȱeineȱReferenzȱaufȱeinenȱdynamischenȱProxyȱ besorgen.ȱDasȱServiceȬInterfaceȱsiehtȱvereinfachtȱwieȱfolgtȱaus:ȱ package javax.xml.rpc; public interface Service { java.rmi.Remote getPort(QName portName, class serviceEndpointInterface) throws ServiceException; ... }
Beispiel:ȱDieȱNutzungȱdieserȱVarianteȱsollȱderȱfolgendeȱCodeausschnittȱzeigen:ȱ public class MyArticleMgrSimpleClient { … public static void main(String[] args) { … // Service-Instanz erzeugen Service ArticleMgrSimpleService = …; // implementierungsabhängig … ArticleMgrSimpleI port = ArticleMgrSimpleService.getPort(…); // Konkrete Operation aufrufen port.createArticle(…); } }
Inȱ derȱ JAXȬRPCȬSpezifikationȱ istȱ nichtȱ festgelegt,ȱ dassȱ dasȱ ServiceȬEndpunktȬ InterfaceȱdynamischȱgegenȱdieȱWSDLȬDefinitionȱvalidiertȱwerdenȱmuss.ȱDiesȱkannȱ
ȱ
213
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ derȱ Herstellerȱ selbstȱ entscheiden.ȱ Dadurchȱ sindȱ imȱ Gegensatzȱ zurȱ Nutzungȱ vonȱ statischenȱStubsȱLaufzeitfehlerȱmöglich.ȱ
Dynamic Invocation Call Interface (DII): AlsȱweitereȱdynamischeȱVarianteȱistȱnochȱdasȱDynamicȱInvocationȱCallȱInterfaceȱ(DII)ȱ zuȱ nennen.ȱ Diesesȱ Modellȱentsprichtȱ demȱ CORBAȬDIIȬModellȱundȱ istȱ dannȱ sinnȬ voll,ȱwennȱzumȱZeitpunktȱderȱEntwicklungȱeinesȱClientsȱdieȱServerseiteȱnichtȱfestȬ steht,ȱ alsoȱ dieȱ Methodensignaturenȱ unbekanntȱ sindȱ undȱ daherȱ erstȱ zurȱ Laufzeitȱ ermitteltȱwerdenȱmüssen.ȱInȱdiesemȱFallȱwirdȱauchȱvorabȱkeineȱGenerierungȱvonȱ clientseitigenȱKlassenȱvorgenommen.ȱ Überȱ dasȱ ServiceȬInterfaceȱwirdȱ mitȱ Hilfeȱ derȱ Methodeȱ createCallȱeineȱ CallȬInstanzȱ erzeugt,ȱdieȱschließlichȱderȱAusführungȱeinerȱWebserviceȬMethodeȱdient.ȱDieȱCallȬ Instanzȱ ermöglichtȱ dannȱ dasȱ Setzenȱ vonȱ Propertiesȱ undȱ sonstigenȱ Parametern.ȱ ServiceȬȱundȱCallȬInterfaceȱsind,ȱsehrȱvereinfacht,ȱwieȱfolgtȱdefiniert:ȱ public interface Service { Call createCall() throws ServiceException; Call createCall(QName portName, String OperationName) throws ServiceException; … } public interface Call { void addParameter(…); QName getParameterTypeByName(…); void setOperationName(…); void setPortByName(…); void setProperty(…); void setTargetEndpointAddress(…): Object invoke(QName operationName, Object[] inputParams) throws java.rmi.RemoteException; … }
ÜberȱdieȱCallȬInstanzȱkönnenȱz.B.ȱdieȱaufzurufendeȱOperationȱ(setOperationName),ȱ derȱ Porttypȱ (setPortTypeName)ȱ undȱ dieȱ EndpunktȬAdresseȱ (setTargetEndpointAdȬ dress)ȱmitȱWertenȱbelegtȱwerden.ȱWeiterhinȱkönnenȱParameterȱundȱalleȱEigenschafȬ tenȱgesetztȱwerden,ȱdieȱauchȱbeiȱstatischenȱStubsȱverfügbarȱsind.ȱÜberȱdieȱMethoȬ deȱinvokeȱwirdȱschließlichȱderȱAufrufȱderȱWebserviceȬMethodenȱinitiiert.ȱ Beispiel:ȱEinȱkonkreterȱDIIȬClientȱkönnteȱwieȱfolgtȱprogrammiertȱwerden:ȱ public classȱMyArticleMgrSimpleClient { public static void main(String[] args) throws Exception { // Service-Instanz erzeugen Service ArticleMgrSimpleService = …; // implementierungsabhängig
214 ȱ
3.4ȱȱJavaȬTechnologienȱfürȱWebservicesȱ // Erzeugung einer Call-Instanz Call call = (Call) ArticleMgrSimpleService.createCall(); // Service-Endpunkt-Adresse setzen call.setTargetEndpointAddress(…); // Definition der Eingabeparameter, des Operationsnamens // und des Ergebnistyps call.addParameter(…); call.setReturnType(XMLType.XSD_STRING); call.setOperationName(…); … // Aufruf der Operation call.invoke(…); … }
DieseȱVarianteȱbietetȱamȱmeistenȱMöglichkeiten,ȱdaȱallesȱzurȱLaufzeitȱbelegtȱwird.ȱ DieȱProgrammierungȱwirdȱdadurchȱentsprechendȱkomplexer.ȱ
Fallbeispiel: Apache Axis ApacheȱAxisȱ(kurzȱAxis)ȱstelltȱeineȱWeiterentwicklungȱvonȱApacheȱSOAPȱdar,ȱdasȱ wiederumȱausȱSOAP4Jȱ(IBM)22ȱhervorging.ȱAlsȱSOAPȬEngineȱimplementiertȱsieȱdieȱ JAXȬRPCȬAPIȱ undȱ auchȱ dieȱ SAAJȬAPI.ȱ Axisȱ beinhaltetȱ auchȱ einigeȱ Toolsȱ fürȱ dieȱ EntwicklungȱvonȱWebservicesȱ Apache Tomcat
HTTP/SOAPNachrichten WebserviceClient
Axis Servlet Webservice 1 Webservice 2 ... Webservice n
ȱ Abbildungȱ3Ȭ14:ȱAxisȬArchitekturüberblickȱȱ
AxisȱrealisiertȱdenȱZugangȱzuȱServiceȬEndpunktenȱüberȱeinȱServletȱundȱistȱdaherȱ inȱ einemȱ ServletȬkonformenȱ Containerȱ wieȱ Apacheȱ Tomcatȱ (WWWȬ007)ȱ ablaufȬ fähig.ȱ Dieȱ eingehendenȱ Aufrufeȱ vonȱ Webservicesȱ (HTTPȬRequestsȱ mitȱ SOAPȬ PDUs)ȱwerdenȱüberȱdasȱServletȱentgegengenommenȱundȱanȱdieȱSOAPȬEngineȱzurȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 22
ȱ DieȱEntwicklungȱbegannȱimȱJahreȱ2000.ȱ
ȱ
215
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ Bearbeitungȱ weitergeleitet.ȱ Ankommendeȱ SOAPȬPDUsȱ sindȱ inȱ HTTPȬPDUsȱ verȬ packt.ȱDerȱServletȬContainerȱentpacktȱdieseȱundȱleitetȱsieȱanȱdasȱAxisȬServletȱweiȬ ter.ȱ Dieȱ Weiterleitungȱ erfolgtȱ mitȱ Hilfeȱ einesȱ doPostȬAufrufsȱ anȱ dasȱ AxisȬServlet.ȱ DortȱwirdȱauchȱdieȱSOAPȬPDUȱentpacktȱundȱderȱOperationsaufrufȱanȱdenȱadresȬ siertenȱ ServiceȬEndpunktȱ weitergeleitet.ȱ Dieȱ grobeȱ Architekturȱ vonȱ Axisȱ istȱ inȱ Abbildungȱ3Ȭ14ȱdargestellt.ȱ Gemäßȱ JAXȬRPCȱ kannȱ dieȱ Programmierungȱ vonȱ Webservicesȱ entwederȱ BottomȬ Upȱ oderȱ TopȬDownȱ erfolgen.ȱ Dieȱ Generierungȱ einerȱ WSDLȬDateiȱ mitȱ Axisȱ kannȱ ausȱ einerȱ JavaȬKlasseȱ oderȱ einemȱ JavaȬInterfaceȱ imȱ TopȬDownȬAnsatzȱ durchgeȬ führtȱwerden.ȱHierzuȱwirdȱdasȱToolȱJava2WSDLȱeingesetzt.ȱDiesesȱToolȱistȱauchȱeinȱ JavaȬProgramm,ȱdasȱüberȱverschiedeneȱOptionenȱgesteuertȱwerdenȱkann.ȱBeiȱAufȬ rufȱdesȱToolsȱmitȱAngabeȱeinesȱJavaȬInterfaceȱwirdȱdieȱGenerierungȱdurchgeführt.ȱ EsȱwirdȱeineȱDateiȱerzeugt,ȱdieȱeineȱvollständigeȱWSDLȬBeschreibungȱfürȱdasȱJavaȬ Interfaceȱ enthält.ȱ Dieȱ Dateiȱ enthältȱ nebenȱ denȱ Beschreibungenȱ allerȱ Operationen,ȱ Messages,ȱ Porttypes,ȱ Servicesȱ usw.ȱ auchȱ fürȱ jedeȱ JavaȬKlasse,ȱ dieȱ alsȱ Parameterȱ Verwendungȱfindet,ȱeineȱBeschreibungȱalsȱkomplexerȱWSDLȬDatentyp.ȱ
Serverseitige Programmierung: BeiȱderȱBottomȬUpȬVorgehensweiseȱkannȱausȱeinerȱWSDLȬBeschreibungȱeineȱGeȬ nerierungȱ vonȱ Stubs,ȱ Skeletonsȱ undȱ SerialisierungsȬȱ sowieȱ Deserialisierungscodeȱ überȱ dasȱ AxisȬToolȱ WSDL2Javaȱ erfolgen.ȱ Derȱ Aufrufȱ desȱ Toolsȱ mitȱ einerȱ WSDLȬ BeschreibungȱfürȱdenȱeinfachenȱArtikelmanagerȱerzeugtȱfolgendeȱFilestruktur:ȱ ArticlemanagementSimple (Verzeichnis) ArticlemanagementSimple (Verzeichnis) Article.java ArticleMgrSimpleI_pkg (Verzeichnis) ArticleMgrSimpleI.java ArticleMgrSimpleIService.java ArticleMgrSimpleIServiceLocator.java ArticleMgrSimpleISoapBindingStub.java ArticleMgrSimpleISoapBindingSkeleton.java ArticleMgrSimpleISoapBindingImpl.java deploy.wsdd undeploy.wsdd
DieȱDateienȱkönnenȱnunȱfürȱdieȱEntwicklungȱderȱBusinessȬLogikȱaufȱderȱServerseiȬ te,ȱ fürȱ denȱ Aufrufȱ desȱ Webserviceȱ aufȱ derȱ Clientseiteȱ undȱ fürȱ dasȱ Deploymentȱ verwendetȱ werden.ȱ Abbildungȱ 3Ȭ15ȱ zeigtȱ nochmalsȱ imȱ Zusammenhang,ȱ welcheȱ Dateienȱ überȱ denȱ Aufrufȱ desȱ Toolsȱ WSDL2Javaȱ erzeugtȱ werden.ȱ Derȱ WebserviceȬ Clientȱ (MyClient.java)ȱ mussȱ zusätzlichȱ programmiertȱ werdenȱ undȱ dieȱ ServerȬ Implementierungȱ mussȱ umȱ dieȱ BusinessȬLogikȱ erweitertȱ werden.ȱ Alleȱ anderenȱ Dateienȱwerdenȱautomatischȱgeneriertȱundȱmüssenȱnichtȱmehrȱverändertȱwerden.ȱ
216 ȱ
3.4ȱȱJavaȬTechnologienȱfürȱWebservicesȱ EinȱJavaȬClientȱ mussȱz.B.ȱmitȱ Hilfeȱ derȱ JAXȬRPCȬAPIȱ zunächstȱ einȱ ServiceLocatorȬ Objektȱ instanziieren,ȱ umȱ dannȱ eineȱ Referenzȱ aufȱ denȱ ArtikelmanagerȬServiceȬ Endpunktȱzuȱbekommen.ȱÜberȱeineȱzusätzlichȱzuȱerzeugendeȱInstanzȱeinesȱClientȬ StubsȱkönnenȱdieȱMethodenȱdesȱWebserviceȱaufgerufenȱwerden.ȱ x.wsdl
WSDL2Java
deploy.wsdd undeploy.wsdd
xSoapBinding Stub
xServiceLocator
xService
xSoapBinding Skeleton
Java Beans und Java Beans Java Interface
SoapBinding Impl
MyClient.java
Muss um BusinessLogik erweitert werden
Eigenentwicklung
Java-Compiler
In verwendeten Container einbinden
MyClient.class
Deployed .class-Files
ȱ Abbildungȱ3Ȭ15:ȱCodegenerierungȱmitȱAxisȬWSDL2JavaȬToolȱ
Inȱ einerȱanderenȱ ClientȬUmgebungȱ(.NET,ȱ ...)ȱ könnenȱ dieseȱ generiertenȱ ProgramȬ meȱnatürlichȱnichtȱverwendetȱwerden.ȱInȱdiesemȱFallȱmussȱüberȱdortȱvorhandeneȱ Möglichkeitenȱ ausȱ derȱ WSDLȬBeschreibungȱ eineȱ eigeneȱ StubȬGenerierungȱ durchȬ geführtȱwerden.ȱ Dasȱ inȱ Abbildungȱ 3Ȭ16ȱ skizzierteȱ Klassendiagrammȱ zeigtȱ wichtigeȱ Basisklassenȱ undȱ Schnittstellenȱ desȱ AxisȬSystemsȱ undȱ dieȱ fürȱ unserenȱ speziellenȱ Webserviceȱ generiertenȱWrapperklassen.ȱSoȱwieȱdiesȱinȱAxisȱrealisiertȱist,ȱmussȱesȱnichtȱinȱanȬ derenȱWebserviceȬPlattformenȱsein.ȱDieȱImplementierungȱistȱhierȱweitgehendȱfrei.ȱ DieȱJAXȬRPCȬSpezifikationȱmussȱaberȱeingehaltenȱwerden,ȱdaȱsonstȱeineȱKommuȬ nikationȱ nichtȱ möglichȱ ist.ȱ Inȱ derȱ Abbildungȱ siehtȱ manȱ auchȱ nochmals,ȱ dassȱ serȬ verseitigȱ lediglichȱ dieȱ BusinessȬLogikȱ implementiertȱ werdenȱ muss.ȱ Alleȱ anderenȱ InterfacesȱundȱKlassenȱwerdenȱgeneriertȱbzw.ȱsindȱimȱAxisȬBasissystemȱenthaltenȱ undȱwerdenȱnurȱverwendet.ȱȱ
ȱ
217
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ Generierter Client-Code
Von beiden benutzter Code
Generierter Server-Code
javax.xml.rpc. Service
java.io.Serializable
java.rmi.Remote
extends
impl
Article uses
ArticleMgrSimpleI impl
uses
ArticleMgrSimpleI ServiceLocator
ArticleMgrSimpleI SoapBindingImpl
impl
Muss um Business-Logik erweitert werden!
ArticleMgrSimpleI SoapBinding Stub extends
extends
impl
ArticleMgrSimpleI Service
uses
uses
impl
ArticleMgrSimpleI SoapBinding Skeleton impl
org.apache.axis. client.Stub
MyArticleMgrSimpleI Client
org.apache.axis. wsdl.Skeleton
Selbst entwickelter Client
Abbildungȱ3Ȭ16:ȱKlassenmodellȱfürȱmitȱWSDL2JavaȱgenerierteȱKlassenȱ
Clientseitige Programmierung: FürȱdieȱNutzungȱeinesȱWebserviceȱmussȱeinȱWebserviceȬClientȱ(inȱAbbildungȱ3Ȭ16ȱ MyArticleMgrSimpleIClientȱ bezeichnet)ȱ entwickeltȱ werden,ȱ derȱ dieȱ generiertenȱ JaȬ vaȬKlassenȱnutzenȱkann.ȱAberȱauchȱeinȱClient,ȱderȱinȱeinerȱanderenȱProgrammierȬ spracheȱentwickeltȱwurde,ȱkannȱȬȱbeiȱEinhaltungȱderȱStandardsȱȬȱdenȱWebserviceȱ nutzen.ȱHierzuȱsindȱdieȱentsprechendenȱWebserviceȬMechanismenȱderȱjeweiligenȱ Entwicklungsumgebungȱzuȱverwenden.ȱAxisȱweichtȱallerdingsȱvomȱStandardȱab,ȱ wennȱ manȱ spezielleȱ JavaȬMechanismenȱ wieȱ Exceptionsȱ undȱ Collectionsȱ nutzt.ȱ JavaȬVektorenȱkönnenȱz.B.ȱdurchȱdieȱToolsȱbearbeitetȱwerden,ȱallerdingsȱkannȱeinȱ Kommunikationspartner,ȱ derȱ nichtȱ inȱ Javaȱ realisiertȱ ist,ȱ damitȱ nichtȱ sehrȱ vielȱ anȬ fangen.ȱ Beiȱ derȱ Implementierungȱ einesȱ WebserviceȬClientsȱ inȱ Javaȱ genügtȱ dieȱ Kenntnisȱ vonȱeinigenȱwenigenȱAxisȬBasisklassen.ȱDieȱwichtigstenȱKlassenȱStub,ȱCall,ȱServiceȬ Factory,ȱService,ȱMessageContextȱundȱAxisFaultȱsindȱimȱPaketȱorg.apache.axisȱenthalȬ ten.ȱDieȱKlassenȱwerdenȱjeȱnachȱClientȬVarianteȱ(statischerȱStub,ȱdynamischerȱProȬ xy,…)ȱ verwendet.ȱ Inȱ Axisȱ gibtȱ esȱ fürȱ dieȱ Implementierungȱ einesȱ WebserviceȬ Clientsȱdieȱverschiedenen,ȱimȱJAXȬRPCȬStandardȱspezifiziertenȱMöglichkeiten.ȱȱ
218 ȱ
3.4ȱȱJavaȬTechnologienȱfürȱWebservicesȱ
Deployment: Schließlichȱ sollenȱ nochȱ einigeȱ Hinweiseȱ zumȱ Deploymentȱ gegebenȱ werden.ȱ Beiȱ Axisȱ mussȱ einȱ Webserviceȱ mitȱ einemȱ DeploymentȬDescriptor23ȱbeschriebenȱ werȬ den.ȱDieȱWebserviceȬKlassenȱmüssenȱinȱdieȱAxisȬUmgebungȱeingebrachtȱwerden.ȱ DieȱVorgehensweiseȱfürȱdasȱDeploymentȱistȱinȱderȱToolbeschreibungȱnachzulesenȱ (WWWȬ007).ȱEsȱgibtȱgrundsätzlichȱzweiȱDeploymentȬVarianten:ȱ – InstantȱDeployment:ȱDiesȱistȱeinȱvereinfachterȱDeployȬMechanismus.ȱEineȱJaȬ vaȬKlasseȱ wirdȱ inȱ dasȱ Verzeichnisȱ wepappsȱ (WEBAPPS/axis)ȱ vonȱ Tomcatȱ kopiertȱundȱumbenanntȱinȱeineȱDateiȱmitȱdemȱSuffixȱ.jws.ȱDieseȱVarianteȱistȱ nurȱ fürȱ einfachsteȱ Klassenȱ ohneȱ JavaȬPackagesȱ geeignet.ȱ Derȱ Sourcecodeȱ mussȱ verfügbarȱ sein.ȱ Axisȱ erzeugtȱ beimȱ erstenȱ Aufrufȱ alleȱ notwendigenȱ KlassenȱundȱdieȱWSDLȬDateiȱselbstständig.ȱ – CustomȱDeployment:ȱBeiȱdieserȱDeploymentȬVarianteȱerfolgtȱdasȱDeploymentȱ überȱ DeploymentȬDescriptorenȱ (Webȱ Serviceȱ Deploymentȱ Descriptorsȱ =ȱ WSDD).ȱWSDDsȱkönnenȱüberȱdasȱToolȱWSDL2Javaȱgeneriertȱwerden.ȱÜberȱ einȱweiteresȱAxisȬToolȱnamensȱAdminClientȱkannȱeineȱWSDDȬDateiȱbeiȱderȱ AxisȬEngineȱ bekanntȱ gemachtȱ werden.ȱ Dieȱ generiertenȱ .classȬDateienȱ werȬ denȱ unterȱ demȱ TomcatȬVerzeichnisȱ \webapps\axis\WEBȬINF\classesȱ abgeȬ legt.ȱ
3.4.3
JAX-WS
Zielȱ vonȱ JAXȬWSȱ istȱ es,ȱ denȱ Entwicklungsaufwandȱ vonȱ JAXȬRPCȱ zuȱ reduzierenȱ undȱ dasȱ Deploymentȱ vonȱ Webservicesȱ einfacherȱ zuȱ gestalten24.ȱ JAXȬWSȱ wirdȱ imȱ JSRȱ 181ȱ spezifiziert.ȱ JAXȬWSȱ nutztȱ denȱ JAXBȬStandardȱ fürȱ dasȱ Marshallingȱ undȱ Unmarshallingȱ(Serialisierung/Deserialisierung).ȱDiesȱbedeutet,ȱdassȱdasȱklassischeȱ XMLȬParsingȱmitȱSAX/DOMȬParsernȱnichtȱmehrȱnotwendigȱist.ȱȱ
Serverseitige Programmierung: JAXȬWSȱunterstütztȱdieȱWebserviceȬEntwicklungȱüberȱspezielleȱJavaȬAnnotationenȱ (Burkeȱ 2006).ȱ Dieȱ wichtigstenȱ Annotationenȱ sindȱ „@WebService“ȱ undȱ „@WebȬ Method“.ȱDieȱAnnotationȱ„@WebService“ȱdientȱderȱKennzeichnungȱeinerȱstatelessȱ SessionȬBeanȱalsȱWebservice.ȱDieȱAnnotationȱ„@WebMethod“ȱwirdȱverwendet,ȱumȱ einzelneȱ Methodenȱ derȱ SessionȬBeanȱ alsȱ WebserviceȬOperationȱ zuȱ bekanntzumaȬ chen.ȱWirdȱdieȱAnnotationȱnichtȱverwendet,ȱsoȱwerdenȱalleȱMethodenȱalsȱWebserȬ viceȬOperationenȱbekanntgemacht,ȱimȱanderenȱFallȱnurȱdieȱgekennzeichneten.ȱ DieȱAnnotationenȱwerdenȱinȱdemȱJavaȬPackageȱjavax.jwsȱbereitgestellt.ȱDieȱAnnoȬ tationȱ„@WebService“ȱistȱmitȱentsprechendenȱDefaultsȱfürȱihreȱParameterȱdefiniert,ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 23
ȱ Sieheȱhierzuȱz.B.ȱdieȱDateienȱwebservices.xmlȱundȱjaxrpc_mapping.xml.ȱ
24
ȱ Derȱ Nameȱ derȱ APIȱ istȱ auchȱ nichtȱ soȱ irreführendȱ wieȱ JAXȬRPC,ȱ beiȱ demȱ manȱ meinenȱ könnte,ȱesȱwäreȱnurȱRequestȬReponseȬKommunikationȱmöglich,ȱwasȱnichtȱderȱFallȱist.ȱ
ȱ
219
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ soȱdassȱmanȱsichȱauchȱnurȱaufȱdieȱAngabeȱderȱAnnotationenȱohneȱweitereȱParameȬ terȱbeschränkenȱkann.ȱManȱkannȱaberȱauchȱeinigeȱParameterȱwieȱdenȱNamenȱoderȱ denȱ Servicenamenȱ speziellȱ angeben.ȱ Gleichesȱ giltȱ fürȱ dieȱ Annotationȱ „@WebȬ Method“.ȱWirdȱhierȱderȱOperationsnameȱnichtȱangegeben,ȱsoȱwirdȱderȱNameȱderȱ JavaȬMethodeȱ verwendet.ȱ Eineȱ WSDLȬCodegenerierungȱ erfolgtȱ durchȱ dieȱ EntȬ wicklungsumgebung,ȱdieȱdurchȱdenȱContainerȬHerstellerȱbereitgestelltȱwird.ȱȱ WeitereȱAnnotationenȱkönnenȱoptionalȱverwendetȱwerden.ȱHierzuȱgehören:ȱ – – – –
„@SOAPBinding“ȱ „@WebParam“ȱ „@WebResult“ȱ „@OneWay“ȱ
MitȱderȱAnnotationȱ„@SOAPBinding“ȱkannȱderȱKodierungsstilȱbeeinflusstȱwerden.ȱ Standardmäßigȱ wirdȱ alsȱ Kodierungsstilȱ Document/Literalȱ festgelegt.ȱ Esȱ sindȱ dreiȱ Parameterȱ verfügbar:ȱ Styleȱ mitȱ denȱ Wertenȱ „DOCUMENT“ȱ undȱ „RPC“,ȱ Useȱ mitȱ denȱ Wertenȱ „LITERAL“ȱ undȱ „ENCODED“ȱ undȱ ParameterStyleȱ mitȱ denȱ Wertenȱ „BARE“ȱundȱ„WRAPPED“ȱ(Standardwert).ȱȱ DieȱAngabeȱUse=“ENCODED“ȱwirdȱnurȱausȱKompatibilitätsgründenȱerlaubt,ȱsollȬ teȱaberȱnichtȱmehrȱverwendetȱwerden.ȱDieȱAngabeȱdesȱParametersȱParameterStyleȱ beeinflusstȱdieȱNotationȱimȱXMLȬSchemaȱdesȱWebserviceȱ(Burkeȱ2006).ȱȱ Überȱ dieȱ Annotationenȱ „@WebParam“ȱ undȱ „@WebResult“ȱ könnenȱ Angabenȱ zuȱ ParameternȱundȱReturnwertenȱderȱeinzelnenȱMethodenȱgemachtȱwerden.ȱÜberȱdieȱ Annotationȱ „@OneWay“ȱ kannȱ festgelegtȱ werden,ȱ obȱ eineȱ Webmethodeȱ eineȱ leereȱ Nachrichtȱ alsȱ Antwortȱ erhaltenȱ soll.ȱ Damitȱ kannȱ eineȱ Optimierungȱ durchȱ eineȱ asynchroneȱAusführungȱderȱMethodeȱermöglichtȱwerden.ȱ Beispiel:ȱDieȱImplementierungȱeinesȱArtikelmanagersȱmitȱJAXȬWSȱinnerhalbȱeinerȱ EJBȬSessionȬBeanȱkannȱgrobȱwieȱfolgtȱaussehen:ȱ package…; import javax.ejb.Stateless; import javax.jws.WebService; import javax.jws.WebMethod; @Stateless @WebService (Name = “ArticleMgrSimple”, serviceName=”ArticleMgrSimpleService”) @SOAPBinding (Style = Document, Use = Literal, ParameterStyle = Wrapped) public class ArticleMgrSimple { @WebMethod (OperationName = “createNewArticle”) public void createArticle(…) {…} @WebMethod public Article findArticleByKatalogId(…) {…}
220 ȱ
3.4ȱȱJavaȬTechnologienȱfürȱWebservicesȱ … }
Ausȱ demȱ Namenȱ desȱ Webserviceȱ (Annotationȱ „@WebService“)ȱ wirdȱ derȱ WSDLȬ Porttypȱ generiertȱ undȱ dieȱ Namenȱ derȱ Methodenȱ (Annotationȱ „@WebMethod“)ȱ werdenȱ alsȱ WSDLȬOperationsnamenȱ verwendet.ȱ Derȱ WSDLȬServiceȬNameȱ wirdȱ ausȱ demȱ imȱ Codeȱ angegebenenȱ ServiceȬNamenȱ übernommen.ȱ Derȱ Kodierungstilȱ undȱ dasȱNachrichtenformatȱ wirdȱausȱderȱ Annotatonȱ „@SOAPBinding“ȱ übernomȬ men.ȱ
…
…
…
…
…
Webservicesȱ könnenȱ inȱ EJBȬSessionȬBeansȱ implementiertȱ werden,ȱ sindȱ aberȱ nichtȱ zwingendȱ anȱ dieseȱ gekoppelt.ȱ Esȱ istȱ zwarȱ nichtȱ unbedingtȱ erforderlich,ȱ dassȱ einȱ Herstellerȱdiesȱunterstützt,ȱaberȱesȱistȱdurchausȱsinnvoll,ȱdaȱnichtȱimmerȱdieȱEJBȬ Technologieȱverwendetȱwird.ȱ
Clientseitige Progammierung: Fürȱ dieȱ ClientȬProgrammierungȱ stelltȱ JAXȬWSȱ ähnlichȱ wieȱ JAXȬRPCȱ eineȱ JavaȬ KlasseȱServiceȱbereit,ȱüberȱdieȱeinȱWebserviceȱaufgerufenȱwerdenȱkann.ȱEineȱeigeneȱ KlasseȱistȱvonȱderȱKlasseȱServiceȱabzuleiten.ȱDabeiȱistȱeineȱMethodeȱbereitzustellen,ȱ dieȱ einenȱ ServiceȬEndpunktȱ erzeugt.ȱ Eineȱ weitereȱ Annotationȱ mitȱ demȱ Namenȱ „@WebServiceClient“ȱkannȱgenutztȱwerden,ȱumȱdenȱNamen,ȱdenȱNamespaceȱundȱ dieȱWSDLȬLocationȱdesȱ zuȱ verwendendenȱ Webserviceȱ anzugeben.ȱ Zudemȱ istȱ dieȱ Annotationȱ„@WebEndpoint“ȱerforderlich,ȱumȱdenȱPortȱdesȱWebserviceȱzuȱbestimȬ men.WebserviceȬClientsȱkönnenȱbeliebigeȱAnwendungenȱsein.ȱȱ – JAXȬWSȬClients,ȱ dieȱ nichtȱ inȱ einemȱ JEEȬContainerȱ ablaufenȱ undȱ dasȱ JAXȬ WSȬAPIȱdirektȱnutzen.ȱDieseȱClientȬVarianteȱkannȱstatischȱgenerierteȱStubsȱ oderȱdynamischeȱServiceȬProxiesȱverwenden.ȱ – JEEȬClients,ȱ dieȱ inȱ einemȱ JEEȬContainerȱ ablaufen.ȱ Eineȱ Referenzȱ aufȱ denȱ ServiceȬEndpointȱwirdȱüberȱJNDIȱermittelt.ȱȱ
ȱ
221
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ Beispielȱ 1:ȱ Dieȱ grobeȱ Strukturȱ einesȱ WebserviceȬClients,ȱ derȱ einenȱ dynamischenȱ Proxyȱ nutzt,ȱ zeigtȱ dasȱ folgendeȱ Beispiel.ȱ Mitȱ derȱ Methodeȱ createȱ wirdȱ einȱ Serviceȱ erzeugtȱ undȱ mitȱ derȱ Methodeȱ getPortȱ wirdȱ eineȱ Verbindungȱ zuȱ einemȱ Endpunktȱ hergestellt.ȱ package…; import javax.xml.ws.Service; … class MyClient { static String portType = “…“; static String serviceName = “…“; static String serviceEndpointAddress = “…“; static String nameSpace = “…“; public void main(….) { Url wsdlLocation = “…“; QName serviceNameQ = new QName (nameSpace, serviceName); Service s = Service.create(wsdlLocation, serviceNameQ); ArticleMgrSimpleServiceI port = s.getPort(ArticleMgrSimpleI.class); // WS-Operationen über Port aufrufen … }
Beispielȱ 2:ȱ Ähnlichesȱ kannȱ einfacherȱ überȱ Annotationenȱ erreichtȱ werden. Derȱ Clientȱ mussȱ inȱ diesemȱ Fallȱ ausȱ derȱ WSDLȬBeschreibungȱ JavaȬKlassenȱ erzeugen.ȱ Weiterhinȱ istȱ dieȱ Anwendungȱ derȱ zusätzlichenȱ JAXȬWSȬAnnotationenȱ „@WebȬ ServiceClient“ȱundȱ„@WebEndpoint“ȱerforderlich: import javax.xml.ws.WebServiceClient; import javax.xml.ws.WebEndpoint; … @WebServiceClient (name = “ArticleMgrSimpleService” targetNamespace = ”de.fhm.webservice.ArticleMgrSimple” wsdlLocation = “…”) public class ArticleMgrSimpleService extends javax.xml.ws.Service { public ArticleMgrSimpleService (…) {…} … @WebEndpoint (name = “ArticleMgrSimplePort”) public ArticleMgrSimpleI = getArticleMgrSimplePort() {…} }
Erwähntȱ seiȱ noch,ȱ dassȱ fürȱ dasȱ Deploymentȱ inȱ einemȱ JEEȬfähigenȱ Containerȱ aufȱ einenȱDeploymentȬDescriptorȱverzichtetȱwerdenȱkann.ȱWieȱbeiȱEJBȱ3.0ȱwerdenȱalleȱ Angaben,ȱdieȱfürȱeinȱDeploymentȱvonȱInteresseȱsind,ȱbereitsȱinȱdenȱAnnotationenȱ gemacht.ȱ
222 ȱ
3.5ȱȱZusammenfassungȱ
3.5 Zusammenfassung Serviceorientierteȱ Architekturenȱ verbreitenȱ sichȱ zunehmend.ȱ Nahezuȱ alleȱ großenȱ UnternehmenȱsetzenȱsichȱmitȱdemȱThemaȱauseinander.ȱSOAȱwirdȱallerdingsȱsehrȱ starkȱ mitȱ Webservicesȱ inȱ Verbindungȱ gebracht,ȱ tatsächlichȱ sindȱ dieȱ WebserviceȬ TechnologienȱaberȱnurȱeineȱkonkreteȱImplementierungsbasisȱfürȱserviceorientierteȱ Architekturen.ȱEineȱUmsetzungȱvonȱSOAȱimȱUnternehmenȱerfordertȱzunächstȱeineȱ DefinitionȱvonȱServices,ȱdieȱvölligȱunabhängigȱvonȱWebservicesȱseinȱsollte.ȱDiesȱistȱ einȱreinȱkonzeptuellerȱAspekt.ȱ TechnologischȱwurdeȱdasȱThemaȱvonȱallenȱnamhaftenȱHerstellernȱaufgegriffen.ȱImȱ JavaȬUmfeldȱ scheintȱ sichȱ dieȱ JAXȬWSȬAPIȱ alsȱ Standardȱ durchzusetzen.ȱ Imȱ Zugeȱ derȱWeiterentwicklungȱdesȱ.NETȬFrameworksȱhatȱMicrosoftȱdieȱWindowsȱCommuȬ nicationȱFoundationȱ(WCF)ȱeingeführt.ȱWCFȱorientiertȱsichȱstarkȱanȱSOAȱundȱwirdȱ alsȱ zentraleȱ Implementierungsbasisȱ fürȱ serviceorientierteȱ Architekturenȱ inȱ MicroȬ softȬUmgebungenȱdargestellt.ȱDieseȱTechnologieȱistȱbeispielsweiseȱinȱ(SchwichtenȬ bergȱ2007)ȱausführlichȱerläutertȱundȱkannȱdortȱnachgelesenȱwerden.ȱ Inȱ Kapitelȱ 2ȱ wurdenȱ einigeȱ konzeptionelleȱ Fragestellungenȱ fürȱ Client/ServerȬ Systemeȱ diskutiert.ȱ Wendetȱ manȱ dieseȱaufȱ Webservicesȱ inȱ derȱ heutigenȱ Formȱan,ȱȱ soȱ mussȱ festgestelltȱ werden,ȱ dassȱ einigeȱ Aspekteȱ nochȱ rudimentärȱ berücksichtigtȱ werden.ȱWirȱgehenȱkurzȱaufȱdieȱinȱKapitelȱ2ȱeingeführtenȱKonzeptfragenȱein:ȱ – Architekturkonzepte:ȱ Dieȱ Architekturkonzepteȱ heutigerȱ Basissystemeȱ fürȱ Webserviceȱ nutzenȱ vorhandeneȱ ApplicationȬServerȱ undȱ damitȱ auchȱ derenȱ Dienste.ȱInȱdiesemȱBereichȱwurdeȱalsoȱfürȱWebservicesȱnichtsȱNeuesȱerfunȬ den.ȱ – Zustandsverwaltung:ȱWebservicesȱsindȱvomȱGrundkonzeptȱherȱzustandsloseȱ Dienste.ȱȱ – Diensteschnittstellen:ȱ Dieȱ Diensteschnittstellenȱ werdenȱ überȱ WSDLȱ spezifiȬ ziert,ȱ wobeiȱ eineȱ Generierungȱ ausȱ einerȱ Programmierspracheȱ meistȱ unterȬ stütztȱ wird,ȱ soȱ dassȱ manȱ denȱ kompliziertenȱ Codeȱ nichtȱ selbstȱ entwickelnȱ muss.ȱ – Parameterübergabe:ȱ Parameterȱ undȱ Returnwerteȱ werdenȱ überȱ CallȬbyȬvalueȱ übergeben.ȱ – MarshallingȱundȱUnmarshalling:ȱDasȱMarshallingȱerfolgtȱjeȱnachȱKodierungsȬ stil,ȱwobeiȱdieȱNachrichtenȱüblicherweiseȱimȱTextformatȱübertragenȱwerden.ȱ Dieȱ MarshallingȬRoutinenȱ könnenȱ automatischȱ erzeugtȱ werdenȱ (Beispiel:ȱ JAXBȬStandard).ȱDieȱÜbertragungȱvonȱserialisiertenȱObjektenȱ(wieȱetwaȱJaȬ vaȬObjekte)ȱ alsȱ Parameterȱ istȱ grundsätzlichȱ möglich,ȱ fördertȱ aberȱ nichtȱ dieȱ Sprachunabhängigkeit.ȱ – AdressierungȱundȱKommunikation:ȱDieȱKommunikationȱzwischenȱdenȱbeteiligȬ tenȱ Partnernȱ kannȱ synchronȱ oderȱ aysnchronȱ erfolgen,ȱ eineȱ spezielleȱ UnterȬ stützungȱeinerȱFehlersemantikȱistȱnichtȱfestgelegt.ȱAlsȱSchnittstelleȱzuȱeinemȱ
ȱ
223
3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ NamingȬServiceȱ wirdȱ UDDIȱ empfohlen,ȱ esȱ kannȱ aberȱ auchȱ jederȱ andereȱ NamingȬServiceȱverwendetȱwerden.ȱȱ – GarbageȬCollection,ȱ Nebenläufigkeitȱ undȱ Lebenszyklus:ȱ Einȱ speziellerȱ GarbageȬ CollectionȬMechanismusȱistȱinȱderȱWebservicesȬSpezifikationȱnichtȱvorgeseȬ hen.ȱ Ebensoȱ wirdȱ keineȱ Festlegungȱ fürȱ dieȱ Nebenläufigkeitsunterstützungȱ undȱfürȱdenȱLebenszyklusȱeinesȱSoftwarebausteinsȱimȱServerȱvorgenommen.ȱ DiesȱwirdȱebensoȱwieȱeineȱUnterstützungȱderȱSkalierbarkeitȱundȱVerfügbarȬ keitȱderȱherstellerspezifischenȱPlattformȱüberlassen.ȱ – Basisdienste:ȱSpezifikationenȱvonȱBasisdienstenȱfürȱdieȱSicherheitȱ(WSȱSecuriȬ ty)ȱ undȱfürȱ Transaktionenȱ(WSȬCoordination)ȱ wurdenȱ durchȱ OASISȱ vorgeȬ legt,ȱsindȱaberȱnochȱstarkȱinȱDiskussion.ȱ EineȱWeiterentwicklungȱvonȱMethodenȱzurȱEntwicklungȱverteilterȱDienste,ȱinsbeȬ sondereȱvonȱWebserviceȬTechnologienȱistȱausȱheutigerȱSichtȱvorhersehbar.ȱDerzeitȱ beschäftigenȱsichȱvieleȱSoftwareleuteȱmitȱdiesemȱThema.ȱ
3.6 Übungsaufgaben 1. 2.
WasȱistȱderȱgroßeȱVorteilȱvonȱWebservicesȱimȱVergleichȱzuȱRMIȱoderȱCORBA?ȱ DiskutierenȱSieȱdenȱEinflussȱvonȱSOAPȱaufȱdieȱLeistungsfähigkeitȱeinerȱClientȬ ServerȬAnwendung!ȱ 3. WelcheȱAufgabeȱhatȱUDDIȱbeiȱWebservices?ȱ 4. MitȱwelchenȱTransportprotokollenȱarbeitetȱSOAP?ȱ 5. WasȱistȱeinȱSOAPȬProzessor?ȱ 6. Erläuternȱ Sieȱ dieȱ Einbettungȱ vonȱ SOAPȬPDUsȱ inȱ HTTPȬPDUs!ȱ Warumȱ istȱ HTTPȱalsȱ„Transportprotokoll“ȱfürȱSOAPȱsoȱgutȱgeeignet?ȱ 7. WieȱwirdȱeinemȱWebserviceȱeinȱPortȱzugeordnet?ȱ 8. ErläuternȱSieȱdieȱMechanismenȱderȱSerialisierungȱbeiȱWebservices?ȱ 9. WasȱistȱderȱUnterschiedȱzwischenȱJAXȬRPCȱundȱJAXȬWS?ȱ 10. WasȱverstehtȱmanȱunterȱeinerȱserviceorientiertenȱArchitektur?ȱDiskutierenȱSieȱ denȱAnsatzȱanhandȱvonȱWebservices!ȱKannȱmanȱeineȱserviceorientierteȱArchiȬ tekturȱauchȱaufȱBasisȱvonȱJEE/EJBȱrealisieren?ȱ 11. WasȱbedeutetȱbeiȱSOAPȱDocument/LiteralȱimȱUnterschiedȱzuȱRPC/literal?ȱ
224 ȱ
4 Konzepte, Modelle und Standards verteilter Transaktionsverarbeitung NachdemȱinȱKapitelȱ2ȱdieȱgrundlegendenȱKonzepteȱundȱImplementierungsfragenȱ fürȱ dieȱ verschiedenenȱ Variantenȱ vonȱ ClientȬServerȬSystemenȱ eingeführtȱ wurden,ȱ sollȱ nunȱ einȱ bisherȱ nurȱ amȱ Randeȱ erwähntesȱ undȱ fürȱ betrieblicheȱ Anwendungenȱ enormȱ wichtigesȱ Konzeptȱbesprochenȱwerden.ȱ Esȱ handeltȱ sichȱ umȱ dasȱ TransaktiȬ onskonzeptȱfürȱverteilteȱUmgebungen.ȱȱ Inȱ diesemȱ Kapitelȱ werdenȱwir,ȱaufbauendȱ aufȱ denȱ Grundlagenȱ derȱ TransaktionsȬ verarbeitungȱimȱlokalenȱUmfeld,ȱdenȱBegriffȱderȱverteiltenȱTransaktionȱeinführen.ȱ Imȱ Mittelpunktȱ derȱ Transaktionsverarbeitungȱ stehenȱ dieȱ gefordertenȱ TransaktiȬ onseigenschaften,ȱdieȱmitȱdemȱAkronymȱACIDȱumschriebenȱwerden.ȱAusgehendȱ vonȱ denȱ Anforderungenȱ anȱ lokaleȱ Transaktionenȱ werdenȱ dieȱ Anforderungenȱ anȱ globaleȱ(verteilte)ȱTransaktionenȱdiskutiert.ȱEsȱwirdȱaufgezeigt,ȱwelcheȱFunktionaȬ litätenȱfürȱdieȱImplementierungȱeinesȱTransaktionssystemsȱerforderlichȱsind.ȱHierȬ zuȱgehörenȱvorȱallemȱTransaktionsȬLogging,ȱRecovery,ȱConcurrencyȬControlȱundȱ verteilteȱKoordinationȱderȱbeteiligtenȱInstanzen.ȱVerschiedeneȱVariantenȱderȱImpȬ lementierungȱwerdenȱgezeigtȱundȱesȱwerdenȱnebenȱdenȱklassischenȱflachenȱTransȬ aktionenȱ(FlatȱTransactions)ȱauchȱandereȱTransaktionsmodelleȱskizziert.ȱ AnȱkonkretenȱStandardsȱwieȱdemȱDTPȬModellȱsowieȱCORBAȱOTS,ȱdieȱheuteȱeineȱ tragendeȱRolleȱbeiȱderȱTransaktionsverarbeitungȱspielen,ȱwerdenȱdieȱProblemeȱderȱ praktischenȱ Umsetzungȱ vonȱ Transaktionskonzeptenȱ inȱ verteiltenȱ Umgebungenȱ besprochen.ȱDieȱDarstellungȱvonȱMöglichkeitenȱzurȱTransaktionsunterstützungȱinȱ heutigenȱ MiddlewareȬPlattformenȱ undȱ auchȱ inȱ WebȬbasiertenȱ Umgebungenȱ runȬ detȱ dasȱ Themaȱ ab.ȱ Zusammenfassendȱ werdenȱ schließlichȱ einigeȱ Hinweiseȱ zurȱ NutzungȱvonȱTransaktionenȱinȱverteiltenȱAnwendungenȱgegeben.ȱ
Zielsetzung des Kapitels Derȱ Studierendeȱ sollȱ verstehen,ȱ wieȱ dasȱ Transaktionskonzeptȱ inȱ verteiltenȱ SysteȬ menȱgrundsätzlichȱfunktioniertȱundȱsinnvollȱangewendetȱwerdenȱkann.ȱErȱsollȱeinȱ Gefühlȱ dafürȱ entwickeln,ȱ wannȱ diesesȱ Konzeptȱ fürȱ verteilteȱ Anwendungenȱ sinnȬ vollȱbzw.ȱnotwendigȱist.ȱWeiterhinȱsollȱeinȱVerständnisȱderȱwichtigstenȱTransaktiȬ onsstandards,ȱvorȱallemȱdesȱDTPȬModellsȱvermitteltȱwerden.ȱȱ
Wichtige Begriffe ACIDȬTransaktionseigenschaften,ȱ lokaleȱ undȱ globaleȱ Transaktionen,ȱ flacheȱ undȱ geschachtelteȱ Transaktionen,ȱ Transaktionskontext,ȱ Serialisierbarkeit,ȱ TwoȬPhaseȬ Lockingȱ(2PL),ȱTwoȬPhaseȬCommitȱ(2PC),ȱUndo/RedoȬLoggingȱundȱWriteȬAheadȬ
ȱ
225
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Loggingȱ(WAL),ȱDTPȬModellȱundȱXAȬSchnittstelle,ȱEJBȱTransactions,ȱCORBAȱOTS,ȱ WS,ȱWSȬATȱundȱWSȬBA,ȱWSȬC,ȱJTA,ȱJTS.ȱ
4.1 Transaktionen: Idee und Herausforderungen DieȱIdeeȱderȱTransaktionȱistȱschonȱweitȱüberȱdreißigȱJahreȱaltȱundȱdientȱdazu,ȱeineȱ endlicheȱ Folgeȱ vonȱ Operationenȱ zusammenhängendȱ inȱ einemȱ Arbeitsschrittȱ ausȬ zuführen.ȱEineȱTransaktionȱbeginntȱmitȱeinerȱOperationȱbeginȱundȱendetȱmitȱcomȬ mitȱ bzw.ȱ commitȱ workȱ oderȱ wirdȱ mitȱ einerȱ Operationȱ rollbackȱ abgebrochen.ȱ Derȱ BeginnȱundȱdasȱEndeȱeinerȱTransaktionȱwerdenȱhäufigȱauchȱalsȱTransaktionsgrenȬ zenȱbezeichnet.ȱȱ EineȱTransaktionȱistȱeineȱFolgeȱvonȱAktivitätenȱoderȱOperationenȱaufȱDatenȱbzw.ȱ Objekte.ȱEinȱkonsistenterȱZustandȱeinesȱSystemsȱwirdȱüberȱdieseȱFolgeȱvonȱOperaȬ tionenȱinȱeinenȱneuenȱkonsistentenȱZustandȱüberführt,ȱwieȱdiesȱinȱAbbildungȱ4Ȭ1ȱ verdeutlichtȱwird.ȱȱ Derȱ Zustandȱ zwischenȱ demȱ Beginnȱ undȱ demȱ ȱ Endeȱ einerȱ Transaktionȱ istȱ nichtȱ konsistent,ȱ weshalbȱ einigeȱ Problemeȱ gelöstȱ werdenȱ müssen.ȱ Beispielsweiseȱ darfȱ keinȱ andererȱ Benutzerȱ inkonsistenteȱ Objekteȱ sehenȱ bzw.ȱ bearbeiten.ȱ Entwederȱ esȱ werdenȱ alleȱ Operationenȱ derȱ Transaktionȱ ausgeführtȱ oderȱ garȱ keine.ȱ Umȱ diesȱ siȬ cherzustellen,ȱsindȱentsprechendeȱMechanismenȱerforderlich.ȱ Rollback/Abort Commit
Begin
Konsistenter Zustand
Inkonsistenter Zustand
t Konsistenter Zustand
ȱ
Abbildungȱ4Ȭ1:ȱIdeeȱeinerȱTransaktionȱ
TransaktionenȱbildenȱeineȱwichtigeȱGrundlageȱfürȱdieȱEntwicklungȱfehlertoleranȬ terȱ Softwaresysteme.ȱ Dasȱ Konzeptȱ wurdeȱ ursprünglichȱ fürȱ klassischeȱ OLTPȬ Anwendungen1ȱaufȱHostsystemenȱentwickelt.ȱȱ Wieȱ bereitsȱ angedeutet,ȱ sindȱ beiȱ derȱ Implementierungȱ desȱ Transaktionskonzeptsȱ einigeȱ Problemeȱ zuȱ lösen.ȱ Zuȱ denȱ wesentlichenȱ Teilproblemen,ȱ dieȱ beiȱ verteiltenȱ Transaktionenȱbehandeltȱwerdenȱmüssen,ȱgehören:ȱ – Nebenläufigkeitskontrolleȱ(ConcurrencyȱControl)ȱȱ – Wiederanlaufstrategienȱ (Recovery)ȱ beiȱ Fehlersituationenȱ sowieȱ hierfürȱ erȬ forderlicheȱLoggingȬMechanismenȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ
1
OLTPȱstehtȱfürȱOnlineȱTransactionȱProcessing.ȱ
226 ȱ
4.1ȱȱTransaktionen:ȱIdeeȱundȱHerausforderungenȱ – Koordinationȱ(CommitȬProtokolle)ȱfürȱTransaktionen,ȱinȱdenenȱmehrereȱInȬ stanzenȱbeteiligtȱsindȱ DieseȱsollenȱimȱWeiterenȱnäherȱbetrachtetȱwerden.ȱWeiterhinȱsollenȱverschiedeneȱ Transaktionsmodelleȱ erörtertȱ werden.ȱ Zunächstȱ sollenȱ dieȱ besagtenȱ Teilproblemeȱ einführendȱ vorgestelltȱ werden.ȱ Vorabȱ sollenȱ aberȱ nochȱ einigeȱ Begriffeȱ definiertȱ werden:ȱ LokaleȱTransaktion:ȱAlsȱlokaleȱTransaktionȱbezeichnetȱmanȱeineȱTransaktion,ȱdieȱzuȱ ihrerȱ Ausführungȱ nurȱ aufȱ lokale,ȱ alsoȱ aufȱ demselbenȱ Rechnersystemȱ liegende,ȱ RessourcenȱzugreifenȱmussȱundȱkeineȱAbstimmungȱzwischenȱmehrerenȱRechnerȬ systemenȱerfordert.ȱ Globaleȱ oderȱ verteilteȱ Transaktion:ȱ Dagegenȱ wirdȱ eineȱ RechnerȬübergreifendeȱ TransaktionȱalsȱglobaleȱoderȱalsȱverteilteȱTransaktionȱbezeichnet.ȱEineȱglobaleȱTransȬ aktionȱ wirdȱaufȱ einemȱ Knotenȱ gestartetȱ undȱ breitetȱ sichȱ dannȱaufȱandereȱ Knotenȱ aus.ȱ Transaktionskontext:ȱEineȱlokaleȱoderȱverteilteȱTransaktionȱwirdȱimȱTransaktionsȬ systemȱ durchȱ bestimmteȱ Informationenȱ eindeutigȱ identifiziert.ȱ Dieseȱ InformatioȬ nenȱ werdenȱ alsȱ Transaktionskontextȱ bezeichnet.ȱ Derȱ Transaktionskontextȱ mussȱ fürȱ dieȱgesamteȱDauerȱderȱTransaktionȱverwaltetȱundȱallenȱBeteiligtenȱkommuniziertȱ werden.ȱ Imȱ verteiltenȱ Umfeldȱ bedeutetȱ dies,ȱ dassȱ entsprechendeȱ Protokolleȱ zurȱ ÜbermittlungȱdesȱKontextesȱ(Kontextpropagierung)ȱȱerforderlichȱsind.ȱImȱPrinzipȱistȱ dieȱ Verwaltungȱ desȱ Transaktionskontextesȱ derȱ Verwaltungȱ einesȱ TCPȬ Verbindungskontextesȱ ähnlich,ȱ mitȱ demȱ Unterschied,ȱ dassȱ imȱ RecoveryȬFallȱ abȬ hängigȱ vomȱ Zustandȱ inȱ derȱ Fehlersituationȱ derȱ Transaktionskontextȱ wiederherȬ stellbarȱseinȱmuss.ȱDerȱTCPȬVerbindungskontextȱwirdȱdagegenȱvölligȱneuȱerzeugt.ȱ Imȱ Transaktionskontextȱ istȱ eineȱ fürȱ dasȱ Transaktionssystemȱ globalȱ eindeutigeȱ IȬ dentifikationȱ fürȱ dieȱ Transaktionȱ enthalten.ȱ Einȱ Transaktionssystemȱ istȱ fürȱ dieȱ eindeutigeȱVergabeȱzuständig.ȱ DieȱverschiedenenȱTeilprobleme,ȱdieȱbeiȱderȱRealisierungȱdesȱTransaktionskonzepȬ tesȱauftreten,ȱsollenȱnunȱkurzȱskizziertȱwerden.ȱ Nebenläufigkeitskontrolle:ȱ Inȱ betrieblichenȱ Informationssystemenȱ undȱ auchȱ inȱ anderenȱ Systemenȱ erfolgtȱ meistȱ einȱ nebenläufigerȱ Zugriffȱ aufȱ verteilteȱ Objekteȱ durchȱmehrereȱoderȱsogarȱvieleȱAnwender.ȱDasȱSystemȱsollȱsoȱarbeiten,ȱdassȱesȱfürȱ denȱBenutzerȱsoȱaussieht,ȱalsȱobȱerȱesȱfürȱsichȱalleineȱzurȱVerfügungȱhat.ȱWieȱbeimȱ ZugriffȱnebenläufigerȱThreadsȱoderȱProzesseȱaufȱgemeinsamȱgenutzteȱDatenȱsindȱ auchȱ inȱ verteiltenȱ Anwendungenȱ dieȱ Zugriffeȱ aufȱ dieȱ gemeinsamenȱ Ressourcenȱ (meistȱObjekteȱinȱDatenbanken)ȱzuȱsynchronisieren.ȱ DieȱSynchronisationȱwirdȱbeiȱderȱProgrammierungȱnebenläufigerȱThreads,ȱdieȱaufȱ einenȱ gemeinsamenȱ Adressraumȱ zugreifen,ȱ meistensȱ überȱ Mechanismenȱ wieȱ Locks,ȱ Monitoreȱ oderȱ Semaphoreȱ gelöst.ȱ Kritischeȱ Abschnitteȱ sindȱ zuȱ definierenȱ undȱisoliertȱzuȱdurchlaufen.ȱInȱverteiltenȱSystemenȱsindȱhierȱähnlicheȱProblemeȱzuȱ lösen.ȱ Sieȱ sindȱ nurȱ nochȱ komplexer,ȱ daȱ einȱ Netzwerkȱ zwischenȱ denȱ verteiltenȱ
ȱ
227
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Komponentenȱ liegtȱ undȱmanȱ daherȱaufwändigeȱ Protokolleȱ benötigt.ȱ ZudemȱhanȬ deltȱ esȱ sichȱ beiȱ denȱ bearbeitetenȱ Datenȱ meistensȱ umȱ sog.ȱ persistenteȱ Objekte,ȱ dieȱ auchȱ sicherȱ aufȱ eineȱ Datenbankȱ oderȱ einenȱ sonstigenȱ persistentenȱ Speicherȱ geȬ schriebenȱwerdenȱmüssen.ȱ Erschwerendȱ kommtȱ hinzu,ȱ dassȱ mehrereȱ Operationenȱ anȱ Datenȱ bzw.ȱ Objektenȱ gemeinsam,ȱamȱbestenȱnachȱdemȱPrinzipȱ„ganzȱoderȱgarȱnicht“ȱausgeführtȱwerdenȱ müssen.ȱ Manȱ denkeȱ hierȱ nurȱ anȱ dasȱ Beispielȱ einerȱ einfachenȱ Buchungȱ inȱ einemȱ Kontoführungssystem,ȱbeiȱderȱvonȱeinemȱKontoȱetwasȱabgebuchtȱwird,ȱdasȱeinemȱ anderenȱKontoȱzugebuchtȱwerdenȱsoll.ȱ Dasȱ Konzeptȱ derȱ Transaktionenȱ sollȱ dasȱ Problemȱ lösen.ȱ Transaktionenȱ sindȱ einȱ hochwertigesȱ Programmierparadigmaȱ zurȱ fehlertolerantenȱ Programmierungȱ undȱ inȱklassischenȱDatenbankanwendungenȱwohlbekannt.ȱDatenbankmanagementsysȬ temeȱ (DBMS)ȱ unterstützenȱ diesesȱ Konzeptȱ schonȱ lange.ȱ Inȱ SQLȬähnlichemȱ PseuȬ docodeȱkönnteȱeineȱKontoumbuchungsȬTransaktionȱetwaȱwieȱfolgtȱnotiertȱwerden:ȱ Begin Transaction SELECT * FROM Konto WHERE Kontonummer = 100 SELECT * FROM Konto WHERE Kontonummer = 200 Betrag von Konto 1 abziehen Betrag zu Konto 2 zubuchen UPDATE Konto WHERE Kontonummer = 100 SET ... UPDATE Konto WHERE Kontonummer = 200 SET ... if (alles ausgeführt) Commit Work else Rollback Work End Transactionȱ
DieȱOperationȱCommitȱWorkȱistȱfürȱdenȱProgrammiererȱderȱDatenbankanwendungȱ sehrȱpraktisch.ȱErȱbrauchtȱsichȱnämlichȱumȱnichtsȱmehrȱzuȱkümmern.ȱDasȱDatenȬ bankmanagementsystemȱ übernimmtȱ dieȱ Aufgabenȱ derȱ Nebenläufigkeitskontrolleȱ undȱ kannȱ auchȱ imȱ Falleȱ einerȱ Fehlersituationȱ entwederȱ alleȱ Zwischenergebnisseȱ zurücksetzenȱ oderȱ aberȱ alleȱ Operationenȱ zuȱ Endeȱ führen.ȱ Alleȱ Operationenȱ zwiȬ schenȱ zweiȱ CommitȬAufrufenȱ werdenȱ alsȱ eineȱ Transaktionȱ behandelt2.ȱ Wennȱ derȱ ProgrammiererȱeineȱTransaktionȱabbrechenȱmuss,ȱsoȱruftȱerȱRollbackȱWorkȱaufȱundȱ keineȱderȱOperationenȱwirdȱausgeführt.ȱ Wiederanlaufstrategienȱ undȱ LoggingȬMechanismen:ȱ Einȱ System,ȱ dasȱ auchȱ beiȱ Fehlersituationenȱ wieȱ demȱ Ausfallȱ einesȱ Rechnersȱ währendȱ derȱ Bearbeitungȱ zuȬ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 2
ȱ
EsȱgibtȱDBMS,ȱbeiȱdenenȱeineȱexpliziteȱbeginTransactionȬOperationȱunterstütztȱwird.ȱDerȱ SQLȬStandardȱ siehtȱ diesȱ nichtȱ vor.ȱ Dieȱ Transaktionȱ liegtȱ hierȱ zwischenȱ zweiȱ CommitȬ Aufrufen.ȱ
228 ȱ
4.1ȱȱTransaktionen:ȱIdeeȱundȱHerausforderungenȱ rechtkommenȱ muss,ȱ benötigtȱ Wiederanlaufstrategienȱ (Recovery).ȱ Fürȱ einenȱ WieȬ deranlaufȱ sindȱ Informationenȱ erforderlich,ȱ dieȱ Auskunftȱ überȱ denȱ Standȱ derȱ vorȱ demȱAusfallȱausgeführtenȱOperationenȱgeben.ȱNurȱwennȱInformationenȱwährendȱ derȱBearbeitungȱprotokolliertȱwerdenȱundȱzwarȱso,ȱdassȱsieȱeinenȱAusfallȱüberleȬ ben,ȱ kannȱ eineȱ Wiederanlaufstrategieȱ dieȱ nötigenȱ Vorkehrungenȱ treffen.ȱ Dieȱ InȬ formationenȱmüssenȱalsoȱzeitnahȱundȱsicherȱinȱeinȱsog.ȱLogfileȱprotokolliertȱwerden.ȱ DiesenȱVorgangȱnenntȱmanȱTransaktionsloggingȱoderȱkurzȱLogging.ȱJedeȱZustandsȬ änderung,ȱdieȱnachȱeinemȱAusfallȱnachvollziehbarȱseinȱmuss,ȱwirdȱprotokolliert.ȱ Koordination:ȱ Dieȱ Komplexitätȱ derȱ Transaktionsverarbeitungȱ steigtȱ mitȱ derȱ VerȬ teilungȱ derȱ beteiligtenȱ Systemeȱ enormȱ an.ȱ Dieȱ Komponentenȱ könnenȱ innerhalbȱ einesȱRechnersystemsȱoderȱaberȱauchȱaufȱmehrereȱRechnersystemeȱundȱsogarȱüberȱ WANȱ oderȱ MANȱ verteiltȱ sein.ȱ Zurȱ Abstimmungȱ derȱ beteiligtenȱ Komponentenȱ benötigtȱmanȱKommunikationsprotokolle,ȱdieȱinȱderȱAnwendungsschichtȱangesieȬ deltȱsindȱundȱalsȱKoordinationsprotokolleȱbezeichnetȱwerden.ȱDasȱklassischeȱBeiȬ spielȱ fürȱ einȱKoordinationsprotokollȱ istȱ dasȱ TwoȬPhaseȬCommitȬȱoderȱ2PCȬProtoȬ koll,ȱdasȱinȱverschiedenenȱAusprägungenȱexistiertȱundȱinȱdiesemȱKapitelȱausführȬ lichȱbesprochenȱwird.ȱEineȱgrundlegendeȱVoraussetzungȱfürȱeinȱfunktionierendesȱ 2PCȬProtokollȱistȱȬȱwieȱwirȱnochȱsehenȱwerdenȱȬȱdasȱLogging.ȱȱ Transaktionsmodelleȱ undȱ Fehlerbehandlung:ȱ Idealtypischeȱ Transaktionenȱ müsȬ senȱinȱklassischenȱOLTPȬAnwendungenȱschnellȱausgeführtȱwerden.ȱSieȱsindȱkurzȱ undȱ blockierenȱ daherȱ dieȱ Ressourcenȱ nurȱ fürȱ sehrȱ kurzeȱ Zeit.3ȱDasȱ grundlegendeȱ undȱ ältesteȱ Transaktionsmodellȱ wirdȱ alsȱ flachesȱTransaktionsmodellȱ bezeichnet.ȱ Dieȱ weiterȱuntenȱbeschriebenenȱACIDȬTransaktionenȱsindȱhierȱdasȱMittelȱzurȱErzielungȱ vonȱ korrektenȱ Operationen,ȱ wobeiȱ dasȱ Akronymȱ ACIDȱ fürȱ vierȱ wichtigeȱ EigenȬ schaftenȱeinerȱflachenȱTransaktionȱsteht.ȱ ImȱLaufeȱderȱJahreȱwurdenȱweitereȱTransaktionsmodelleȱentwickelt,ȱdieȱauchȱanȬ dereȱ Anwendungsbereicheȱ abdeckenȱ sollen.ȱ Weitereȱ Konzepteȱ sindȱ verschachtelteȱ (nested),ȱverketteteȱ(chained)ȱundȱlanglebigeȱ(long)ȱTransaktionenȱundȱihreȱverschieȬ denenȱSonderformen.ȱȱ WährendȱeinerȱverteiltenȱTransaktionȱkönnenȱverschiedeneȱFehlersituationenȱaufȬ treten,ȱ dieȱ vonȱ einemȱ transaktionsverarbeitendenȱ Systemȱ (oderȱ kurz:ȱ TransaktionsȬ system),ȱ alsoȱ einemȱ System,ȱ dasȱ Transaktionenȱ unterstützt,ȱ erkanntȱ undȱ behobenȱ werdenȱmüssen.ȱBeispieleȱhierfürȱsind:ȱ – AusfallȱdesȱNetzwerksȱoderȱeinesȱTeilsȱdavonȱ – AusfallȱeinesȱanȱderȱTransaktionȱbeteiligtenȱRechnerknotensȱ – AusfallȱeinerȱAnwendung,ȱdieȱanȱderȱTransaktionȱbeteiligtȱistȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ
3
Komplizierterȱ wirdȱ esȱ schonȱ beiȱ sog.ȱ Batchanwendungen,ȱ dieȱ vieleȱ Objekteȱ bearbeitenȱ undȱ daherȱ langeȱ belegenȱ müssen.ȱ Hierȱ greiftȱ dasȱ klassischeȱ Transaktionskonzeptȱ nichtȱ soȱoptimal.ȱ
ȱ
229
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
VonȱeinemȱTransaktionssystemȱwirdȱerwartet,ȱdassȱderartigeȱFehlersituationenȱaufȱ keinenȱ Fallȱ zuȱ Inkonsistenzenȱ führen.ȱ Nochȱ nichtȱ abgeschlosseneȱ Transaktionenȱ müssenȱ entwederȱ zurückgesetztȱ oderȱ erfolgreichȱ zuȱ Endeȱ gebrachtȱ werden.ȱ FehȬ lersituationen,ȱ dieȱ durchȱ verfälschteȱ oderȱ verlorengegangeneȱ Nachrichtenȱ verurȬ sachtȱwerdenȱkönnten,ȱmüssenȱdurchȱNutzungȱgeeigneterȱKommunikationsprotoȬ kolleȱ vermiedenȱ werden.ȱ Nachȱ Ausfallȱ einesȱ Rechnerknotensȱ währendȱ einerȱ Transaktionȱkannȱesȱsein,ȱdassȱerȱnachȱeinerȱendlichenȱZeitȱwiederȱaktivȱwird.ȱEsȱ kannȱ aberȱ auchȱ vorkommen,ȱ dassȱ derȱ Rechnerȱ nieȱ mehrȱ startet.ȱ Imȱ erstenȱ Fallȱ mussȱeinȱTransaktionssystemȱnachȱdemȱerneutenȱStartȱdesȱKnotensȱdieȱInformatiȬ onȱüberȱdenȱStatusȱderȱabgebrochenenȱTransaktion(en)ȱermitteln.ȱDiesȱkannȱdurchȱ dasȱLesenȱdesȱerwähntenȱpermanentȱundȱdauerhaftȱgeführtenȱ(persistenten)ȱLogfiȬ lesȱ oderȱ durchȱ Nachfragenȱ beiȱ anderenȱ Knotenȱ erfolgen.ȱ Wirdȱ einȱ Knotenȱ nichtȱ mehrȱ oderȱ erstȱ nachȱ längererȱ Zeitȱ wiederȱ aktiv,ȱ kannȱ diesȱ zuȱ Blockierungenȱ vonȱ AnwendungenȱundȱRessourcenȱführen.ȱȱ EinȱweiteresȱProblemȱstellenȱbyzantinischeȱFehlerȱdar.ȱHierȱhandeltȱesȱsichȱumȱFehȬ lersituationen,ȱdieȱaufgrundȱinkorrektȱarbeitenderȱHardȬȱoderȱSoftwarekomponenȬ tenȱentstehenȱkönnen.ȱBeispielsweiseȱkannȱeinȱTeilnehmerȱeinerȱTransaktionȱwähȬ rendȱeinerȱ2PCȬProtokollabwicklungȱmitȱȈokȈȱantworten,ȱobwohlȱerȱdieȱTransaktiȬ onȱ nichtȱ erfolgreichȱ zuȱ Endeȱ führenȱ kann4.ȱ Solcheȱ Fehlersituationenȱ könnenȱ zumȱ Beispielȱ durchȱ fehlerhafteȱ Protokollimplementierungenȱ oderȱ Hardwarefehlerȱ entȬ stehen.ȱ Umȱ derartigeȱ Fehlerȱ zuȱ erkennen,ȱ müssenȱ sehrȱ aufwändigeȱ Algorithmenȱ implementiertȱwerden.ȱDerȱAufwandȱistȱinȱderȱPraxisȱbeiȱsehrȱkritischenȱAnwenȬ dungenȱ gerechtfertigt,ȱ dieȱ jederzeitȱ korrektȱ arbeitenȱ müssenȱ (zumȱ Beispielȱ weilȱ sonstȱMenschenlebenȱbedrohtȱwären).ȱBeiȱdenȱmeistenȱTransaktionsanwendungenȱ imȱ kommerziellenȱ Bereich,ȱ alsoȱ z.B.ȱ beiȱ betrieblichenȱ Informationssystemenȱ gehtȱ manȱ vonȱ funktionierenderȱ Hardwareȱ undȱ Softwareȱ ausȱ undȱ verzichtetȱ aufȱ dieȱ ImplementierungȱkomplizierterȱAlgorithmenȱzurȱErkennungȱsolcherȱFehlersituatiȬ onen.ȱEinȱAusfallȱeinerȱKomponenteȱbedeutetȱdannȱdieȱsofortigeȱEinstellungȱallerȱ ihrerȱ Aktivitäten,ȱ wasȱ wiederumȱ mitȱ angemessenemȱ Aufwandȱ durchȱ andereȱ Komponentenȱerkanntȱwerdenȱkann.ȱDiesesȱFehlermodellȱwirdȱauchȱalsȱFailȬStopȬ ModellȱȱbezeichnetȱundȱistȱdieȱBasisȱfürȱheutigeȱTransaktionssysteme.ȱ Wieȱ schonȱ erörtert,ȱ bietenȱ Transaktionsmonitoreȱ undȱ auchȱ DatenbankmanageȬ mentsystemeȱ eineȱ Transaktionsunterstützungȱ an.ȱ Esȱ sollȱ vorabȱ erwähntȱ werden,ȱ dassȱ auchȱ heutigeȱ ObjektȬȱ undȱ Komponentensystemeȱ bzw.ȱ derenȱ ImplementieȬ rungen,ȱ dieȱ auchȱ alsȱ Objektserverȱ oderȱ ApplicationȬServerȱ bezeichnetȱ werden,ȱ Transaktionen5ȱunterstützen.ȱ Kommerziellȱ verfügbareȱ Lösungenȱ basierenȱ z.B.ȱ aufȱ JEE/EJBȱundȱaufȱMicrosoftsȱ.NETȱEnterpriseȱServices.ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 4
ȱ
WirȱwerdenȱdenȱAblaufȱdesȱ2PCȬProtokollsȱnochȱausführlichȱerläutern.ȱ
5
ȱ
MeistȱallerdingsȱnurȱflacheȱTransaktionen.ȱ
230 ȱ
4.2ȱȱGrundlagenȱ Dieȱ angerissenenȱ Aspekteȱ sollenȱ imȱ Weiterenȱ ausführlicherȱ betrachtetȱ werden.ȱ ZunächstȱwirdȱderȱgrundlegendeȱBegriffȱderȱACIDȬTransaktionȱnäherȱerläutert.ȱ
4.2 Grundlagen 4.2.1
ACID-Eigenschaften
Wieȱ bereitsȱ einführendȱ erwähnt,ȱ sindȱTransaktionskonzepteȱ vorȱ allemȱ beiȱ DatenȬ bankenȱ(Bernsteinȱ1987),ȱbeiȱTransaktionsmonitorenȱ(MeyerȬWegenerȱ1988)undȱbeiȱ Betriebssystemenȱ (Tanenbaumȱ 2007)ȱ seitȱ längeremȱ vonȱ hoherȱ praktischerȱ BedeuȬ tung.ȱ Insbesondereȱ imȱ Datenbankbereichȱ gibtȱ esȱ eineȱ Fülleȱ vonȱ ImplementierunȬ gen.ȱNahezuȱjedesȱgrößereȱAnwendungssystemȱnutztȱTransaktionen.ȱ DerȱBegriffȱderȱklassischenȱTransaktionȱwirdȱinȱderȱLiteraturȱhäufigȱüberȱdasȱAkȬ ronymȱȈACIDȈȱȱerläutert,ȱdasȱfürȱvierȱEigenschaftenȱbzw.ȱKorrektheitskriterienȱsteht,ȱ dieȱ eineȱ Transaktionȱ erfüllenȱ muss.ȱ ACIDȱ stehtȱ alsȱ Abkürzungȱ fürȱ atomicity,ȱconȬ sistency,ȱ isolationȱ undȱ durability.ȱ Eineȱ Transaktionȱ wirdȱ alsȱ ACIDȬTransaktionȱ beȬ zeichnet,ȱ wennȱ sieȱ alleȱ vierȱ ACIDȬEigenschaftenȱ erfüllt.ȱ Dieȱ vierȱ Eigenschaftenȱ sollenȱimȱFolgendenȱerläutertȱwerden.ȱ Atomaritätȱ (Atomicity):ȱ Eineȱ Transaktionȱ istȱ entwederȱ ganzȱ oderȱ garȱ nichtȱ (atoȬ mar)ȱauszuführen.ȱPassiertȱwährendȱderȱTransaktionȱeinȱFehlerȱ(zumȱBeispielȱeinȱ Systemausfall,ȱeinȱNetzwerkzusammenbruchȱoderȱeinȱProgrammabsturz),ȱsoȱmüsȬ senȱalleȱbisȱdahinȱausgeführtenȱOperationenȱwiederȱrückgängigȱgemachtȱwerden.ȱȱ ParallelȱablaufendeȱTransaktionenȱdürfenȱnichtsȱdavonȱmerken.ȱBeiȱerfolgreichemȱ Transaktionsendeȱ(Commit)ȱmüssenȱalleȱOperationenȱvollständigȱausgeführtȱwerȬ den.ȱ Fürȱ einȱ Zurücksetzenȱ derȱ verändertenȱ Objekteȱ inȱ denȱ Zustandȱ vorȱ Beginnȱ einerȱ Transaktionȱ müssenȱ währendȱ derȱ Ausführungȱ derȱ Transaktionȱ redundanteȱ Informationenȱ überȱ Änderungsoperationenȱ aufȱ einemȱ dauerhaftenȱ Speicherȱ mitȬ protokolliertȱwerden.ȱDerȱProtokolliervorgangȱwirdȱauchȱalsȱLogging,ȱderȱWiederȬ anlaufȱnachȱeinemȱFehlerȱalsȱRecoveryȱbezeichnet.ȱ Konsistenzȱ (Consistency):ȱ Einȱ Transaktionssystemȱ mussȱ sicherstellen,ȱ dassȱ dieȱ Korrektheitȱ derȱ Datenobjekteȱ jederzeitȱ gewährleistetȱ ist.ȱ Einȱ Datenobjekt,ȱ dasȱ inȱ einemȱkorrektenȱZustandȱist,ȱwirdȱalsȱkonsistentesȱObjektȱbezeichnet.ȱEineȱTransȬ aktionȱ führtȱ einenȱ konsistentenȱ Zustandȱ derȱ Datenȱ inȱ einenȱ neuenȱ konsistentenȱ Zustandȱüber.ȱEineȱumfangreicheȱErläuterungȱdesȱKonsistenzbegriffsȱfindetȱsichȱinȱ (Tanenbaumȱ2007).ȱ Isolation:ȱParallelȱausgeführteȱTransaktionenȱdürfenȱsichȱgegenseitigȱnichtȱbeeinȬ flussen,ȱ müssenȱ alsoȱ voneinanderȱ isoliertȱ ablaufenȱ (isolation,ȱ auchȱ independenceȱ genannt).ȱ Teilresultateȱ einerȱ Transaktionȱ dürfenȱ fürȱ andereȱ Transaktionenȱ nichtȱ sichtbarȱwerden,ȱweshalbȱdieȱBearbeitungsreihenfolgeȱeineȱwesentlicheȱRolleȱspielt.ȱ Wennȱ alleȱ Transaktionenȱ seriellȱ ausgeführtȱ werden,ȱ könnenȱ sieȱ sichȱ nichtȱ beeinȬ flussen.ȱ Deshalbȱ wirdȱ auchȱ dasȱ Prinzipȱ derȱ Serialisierbarkeitȱ herangezogen,ȱ umȱ
ȱ
231
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
dasȱIsolationskriteriumȱzuȱerfüllen.ȱTransaktionenȱmüssenȱalsoȱserialisierbarȱsein.ȱ Manȱ sprichtȱ hierȱ auchȱ vonȱ seriellenȱ Schedules,ȱ wieȱ weiterȱ untenȱ nochȱ erläutertȱ wird.ȱ Dauerhaftigkeitȱ(Durability):ȱWerdenȱinnerhalbȱeinerȱTransaktionȱwieȱbeiȱeinemȱ DatenbanksystemȱpersistenteȱDatenȱbearbeitet,ȱsoȱmüssenȱdieseȱbeiȱTransaktionsȬ endeȱdauerhaftȱ(durable)ȱaufȱeinemȱnichtȬflüchtigenȱSpeicherȱabgelegtȱwerden.ȱBeiȱ Auftretenȱ einesȱ Fehlersȱ mussȱ einȱ Wiederanlaufverfahrenȱ dafürȱ sorgen,ȱ dassȱ dieȱ Objekteȱ wiederhergestelltȱ werden.ȱ Fürȱ dieȱ Wiederherstellungȱ oderȱ Vollendungȱ einesȱkonsistentenȱZustandsȱdientȱauchȱdasȱLogfile,ȱinȱdemȱdieȱaktuellenȱZuständeȱ allerȱTransaktionenȱabgelegtȱwerden.ȱ
4.2.2
Wichtige Transaktionsmodelle
Inȱ denȱ letztenȱ Jahrenȱ wurdenȱ unterschiedlicheȱ Transaktionsmodelleȱ entwickelt.ȱ Nebenȱ demȱklassischen,ȱflachenȱ Transaktionsmodellȱ sindȱ vorȱallemȱ geschachtelteȱ TransaktionenȱundȱderenȱAbleitungenȱsowieȱverketteteȱTransaktionenȱzuȱnennen.ȱ EineȱausführlicheȱEinführungȱinȱweitere,ȱzumȱTeilȱauchȱsehrȱtheoretischeȱAnsätzeȱ sowieȱihreȱpotenziellenȱEinsatzgebieteȱsindȱinȱ(Elmagarmidȱ1992)ȱnachzulesen.ȱ Nachfolgendȱ wirdȱ einȱ kurzerȱ Abrissȱ überȱ dieȱ bekanntestenȱ undȱ fürȱ betrieblicheȱ InformationssystemeȱpraxisrelevanterenȱModelleȱgegeben.ȱ Flacheȱ Transaktionen:ȱ Dieȱ klassischen,ȱ flachenȱ Transaktionenȱ (flatȱ transactions)ȱ fassenȱ eineȱ Mengeȱ vonȱ Operationenȱ zuȱ einerȱ unteilbarenȱ Aktionȱ zusammenȱ undȱ werdenȱnichtȱmehrȱweiterȱunterteilt.ȱEinȱFehlerȱwährendȱderȱAusführungȱbewirktȱ einȱ Zurücksetzenȱ bisȱ zumȱ Transaktionsbeginn,ȱ wasȱ beiȱ umfangreichenȱ Aktionenȱ sehrȱ kostenintensivȱ ist.ȱ Diesesȱ Transaktionsmodellȱ istȱ dieȱ Basisȱ fürȱ dieȱ meistenȱ DBMSȬImplementierungen.ȱDieȱKorrektheitȱderȱTransaktionenȱistȱdurchȱdieȱErfülȬ lungȱderȱACIDȬEigenschaftenȱgegeben.ȱ Beispiel:ȱTypischeȱBeispieleȱfürȱflacheȱTransaktionenȱsindȱinȱvielenȱAnwendungenȱ zuȱfinden.ȱEinȱBeispielȱistȱdieȱUmbuchungȱeinesȱLagerbestandesȱvonȱeinemȱLagerȬ platzȱaufȱeinenȱanderenȱinȱeinemȱklassischenȱLagerverwaltungssystem.ȱEinȱCodeȬ ausschnittȱzuȱdiesemȱBeispielȱistȱnachfolgendȱinȱeinerȱJavaȬMethodeȱdargestellt:ȱȱ void umbuchen(int artikelnummer, int anzahl, Lagerplatz quelle, Lagerplatz ziel) { … try (…) { … beginTransaction(); quelle.abbuchen(artikelnummer, anzahl); ziel.zubuchen(artikelnummer, anzahl); commitTransaction(); } catch() {
232 ȱ
4.2ȱȱGrundlagenȱ rollbackTransaction(); …. } finally() { …. } …. }
Imȱ Fehlerfall,ȱ alsoȱ beiȱ Auftretenȱ einerȱ Ausnahme,ȱ wirdȱ einȱ Rollbackȱ ausgeführt,ȱ währendȱ imȱ Erfolgsfallȱ dieȱ Transaktionȱ zuȱ Endeȱ geführtȱ wird.ȱ Dieȱ Dienstaufrufeȱ beginȬ,ȱ rollbackȬȱ undȱ commitTransactionȱ werdenȱ inȱ betrieblichenȱ InformationssysteȬ menȱmeistȱgegenȱeinȱDBMSȱausgeführt.ȱȱ Geschachtelteȱ Transaktionen:ȱ Geschachtelteȱ Transaktionenȱ (nestedȱ transactions)ȱ sindȱ Transaktionen,ȱ dieȱ ausȱ Subtransaktionenȱ bestehen,ȱ dieȱ wiederumȱ aufgeteiltȱ werdenȱkönnenȱ(Weikumȱ1989,ȱVossenȱ1993,ȱElmagarmidȱ1992ȱundȱRamamrithamȱ 1997).ȱHierdurchȱentstehtȱeinȱ„Transaktionsbaum“,ȱdessenȱBlätterȱdieȱeigentlichenȱ Operationenȱ entsprechendȱ einerȱ flachenȱ Transaktionȱ repräsentieren.ȱ Dieȱ obersteȱ TransaktionȱwirdȱalsȱTopȬLevelȬTransaktionȱbezeichnet,ȱdieȱdarunterliegendenȱalsȱ Subtransaktionenȱ (Subtransactions).ȱ Subtransaktionenȱ könnenȱ wiederumȱ weitereȱ Subtransaktionenȱaufrufen.ȱ Top-LevelTransaktion
beginTransaction ...
call subtransaction
Subtransaktionen
Subtransaktionen
beginTransaction call subtransaction call subtransaction commitTransaction
beginTransaction ... rollbackTransaction
...
call subtransaction ...
commitTransaction
beginTransaction ... commitTransaction
beginTransaction ... commitTransaction
ȱ Abbildungȱ4Ȭ2:ȱTransaktionsbaumȱeinerȱgeschachteltenȱTransaktionȱ
DieȱSubtransaktionenȱkönnenȱauchȱparallelȱausgeführtȱwerden.ȱJedeȱSubtransaktiȬ onȱ wirdȱ fürȱ sichȱ atomarȱ abgewickelt,ȱ Persistenzȱ giltȱ jedochȱ nurȱ fürȱ dieȱ gesamteȱ Transaktion.ȱ Geschachtelteȱ Transaktionenȱ könnenȱ insbesondereȱ inȱ verteiltenȱ SysȬ temenȱ zuȱ einerȱ Erhöhungȱ derȱ Parallelitätȱ (IntratransaktionsȬParallelität)ȱ umfangȬ reicherȱ Transaktionenȱ führen.ȱ Eineȱ Transaktion,ȱ dieȱ inȱ mehrerenȱ Knotenȱ ausgeȬ führtȱ werdenȱ muss,ȱ kannȱ mitȱ geschachteltenȱ Transaktionenȱ nebenläufigȱ abgewiȬ ckeltȱwerden.ȱZumȱanderenȱkönnenȱgeschachtelteȱTransaktionenȱrobusterȱsein,ȱdaȱ
ȱ
233
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
einȱAbbruchȱeinerȱSubtransaktionȱnichtȱunbedingtȱzumȱZurücksetzenȱderȱgesamȬ tenȱ Transaktionȱ führenȱ muss,ȱ fallsȱ dieȱ übergeordneteȱ Transaktionȱ eineȱ andereȱ Aktionȱ ausführenȱ kann,ȱ dieȱ trotzdemȱ zumȱ Erfolgȱ führt.ȱ Inȱ Abbildungȱ 4Ȭ2ȱ istȱ einȱ BeispielȱfürȱeineȱgeschachtelteȱTransaktionȱaufgeführt.ȱ Manȱ unterscheidetȱ geschlossenȱ geschachtelteȱ Transaktionenȱ undȱ offenȱ geschachtelteȱ TransaktionenȱsowieȱdieȱSpezialfälleȱSagasȱundȱContracts6:ȱȱ – ȱBeiȱ geschlossenȱ geschachteltenȱ Transaktionenȱ werdenȱ dieȱ Zwischenergebnisseȱ vonȱ Subtransaktionenȱ erstȱ fürȱ andereȱ Transaktionenȱ sichtbar,ȱ wennȱ dieȱ „TopȬLevelȬTransaktion“ȱerfolgreichȱbeendetȱwurde.ȱȱ – ȱOffenȱgeschachtelteȱTransaktionenȱ erlaubenȱ dieȱ Freigabeȱ vonȱ ZwischenergebȬ nissenȱ beendeterȱ Subtransaktionenȱ fürȱ nebenläufigeȱ Transaktionenȱ undȱ erȬ höhenȱ damitȱ denȱ Gradȱ derȱ IntertransaktionsȬParallelität.ȱ Dieȱ Folgeȱ davonȱ könnenȱVerletzungenȱderȱKonsistenzȱsein.ȱȱ – ȱSagasȱ sindȱ einȱ Spezialfallȱ vonȱ offenȱ geschachteltenȱ Transaktionenȱ mitȱ einemȱ maximalȱ zweistufigenȱ Transaktionsbaum.ȱ Sagasȱ wurdenȱ fürȱ langlebigeȱ Transaktionenȱ entwickeltȱ wieȱ sieȱ z.B.ȱ fürȱ dieȱ Behandlungȱ vonȱ Workflowsȱ diskutiertȱwerdenȱ(Jablonskiȱ1997).ȱSagasȱsindȱalsoȱeineȱFolgeȱvonȱeinzelnenȱ ACIDȬTransaktionenȱ T1,...,Tn,ȱ dieȱ gemeinsamȱ eineȱ Gesamttransaktionȱ bilȬ den.ȱBeiȱAbbruchȱderȱGesamttransaktionȱ könnenȱdaherȱdieȱbisȱdahinȱabgeȬ schlossenenȱEinzeltransaktionenȱ Tiȱ (mitȱ iȱ 1,,..,n)ȱ nichtȱ zurückgesetztȱ werȬ den,ȱ daȱ sieȱ bereitsȱ imȱ Zustandȱ „committed“ȱ sind.ȱ Umȱ nunȱ Inkonsistenzenȱ durchȱdieȱLiberalisierungȱderȱIsolationseigenschaftȱentgegenzuwirken,ȱwerȬ denȱ beiȱ Sagasȱ kompensierendeȱ Transaktionenȱ eingeführt,ȱ dieȱ einȱ semantiȬ schesȱ Zurücksetzenȱ einesȱ bereitsȱ freigegebenenȱ Ergebnissesȱ ausführen.ȱ SoȬ mitȱmussȱzuȱjederȱTransaktionȱTiȱ(iȱ1,…,n)ȱeineȱgeeigneteȱKompensationsȬ transaktionȱCiȱvorhandenȱsein.ȱFürȱdenȱFall,ȱdassȱdieȱGesamttransaktionȱabȬ bricht,ȱ weilȱ z.B.ȱ ihreȱ EinzelȬTransaktionȱ Tjȱ (jȱ 2,...,n)ȱ nichtȱ erfolgreichȱ ist,ȱ kannȱ Tjȱ normalȱ durchȱ Abortȱ bzw.ȱ Rollbackȱ zurückgesetztȱ werden.ȱ Dieȱ beȬ reitsȱ abgeschlossenenȱ EinzelȬTransaktionenȱ Tiȱ (iȱ 1,…,iȬ1)ȱ müssenȱ nunȱ durchȱ Ausführungȱ ihrerȱ Kompensationstransaktionenȱ Ciȱ inȱ umgekehrterȱ Reihenfolgeȱ zurückgesetztȱ werdenȱ (Niemannȱ 2000).ȱ Dieȱ Aufweichungȱ derȱ IsolationseigenschaftȱkannȱnatürlichȱwiederumȱzuȱkaskadiertenȱAbortsȱfühȬ ren.ȱ – Contractsȱ (Elmagarmidȱ 1992)ȱ sindȱ eineȱ Erweiterungȱ zuȱ Sagas.ȱ Dasȱ Modellȱ siehtȱ ebenfallsȱ einzelneȱ ACIDȬTransaktionenȱ vor,ȱ dieȱ inȱ einemȱ zusammenȬ gehörigenȱ Kontrollflussȱ ausgeführtȱ werden.ȱ Eineȱ einzelneȱ Transaktionȱ hängtȱdabeiȱimmerȱvonȱdemȱErgebnisȱseinerȱVorgängertransaktionȱab.ȱAufȱ BasisȱdesȱContractsȬModellsȱlassenȱsichȱganzeȱKontrollflüsseȱvonȱaufeinanȬ derfolgendenȱ Transaktionenȱ realisieren.ȱ Kompensationsstrategienȱ sindȱ wieȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 6
ȱ
WeitereȱSpezialfälleȱwieȱMehrschichtentransaktionenȱsindȱu.a.ȱinȱ(Vossenȱ1993),ȱ(ElmaȬ garmidȱ1992)ȱundȱ(ISOȱ1992b)ȱnachzulesen.ȱ
234 ȱ
4.2ȱȱGrundlagenȱ beiȱ Sagasȱ notwendig,ȱ wennȱ eineȱ Teiltransaktionȱ nichtȱ erfolgreichȱ ist.ȱ Einȱ Kontrollflussȱkannȱalsoȱz.B.ȱvorsehen,ȱbeiȱeinemȱFehlerȱinnerhalbȱeinerȱEinȬ zeltransaktionȱ zunächstȱ eineȱ Kompensationstransaktionȱ auszuführenȱ undȱ dannȱimȱentsprechendenȱZweigȱdesȱKontrollflussesȱweitermachen.ȱ Geschachtelteȱ Transaktionenȱ sindȱ sehrȱ aufwändigȱ zuȱ realisieren.ȱ Diesȱ giltȱ insbeȬ sondereȱdann,ȱwennȱalleȱACIDȬKorrektheitskriterienȱerfülltȱwerdenȱsollen.ȱWelcheȱ Korrektheitskriterienȱsinnvollȱsind,ȱistȱvomȱAnwendungsfallȱabhängig.ȱInȱumfangȬ reichenȱ Workflowsȱ hatȱ esȱz.B.ȱ keinenȱ Sinn,ȱ beiȱ Abbruchȱ einerȱ vonȱ mehrerenȱ hinȬ tereinanderȱ ausgeführten,ȱ aberȱ logischȱ zusammengehörigenȱ Transaktionen,ȱ alleȱ vorherȱ ausgeführtenȱ undȱ erfolgreichȱ beendetenȱ Transaktionenȱ zurückzusetzen.ȱ Könnenȱ aberȱ nichtȱ alleȱ vierȱ ACIDȬKriterienȱ eingehaltenȱ werden,ȱ soȱ sprichtȱ manȱ nichtȱmehrȱvonȱeinerȱACIDȬTransaktion.ȱȱ GeradeȱinȱlangȱandauerndenȱTransaktionenȱistȱvorȱallemȱdasȱEinhaltenȱdesȱIsolatiȬ onskriteriumsȱ sehrȱ hinderlich,ȱ daȱ dadurchȱ meistȱ nebenläufigeȱ Transaktionenȱ beȬ hindertȱwerden.ȱWeichtȱmanȱaberȱeinȱKriteriumȱauf,ȱsindȱauchȱdieȱanderenȱKriteȬ rienȱ inȱ Frageȱ gestellt.ȱ Beiȱ Verletzungȱ desȱ Isolationskriteriumsȱ kannȱ alsoȱ strengȱ genommenȱ auchȱ dieȱ Konsistenzȱ gefährdetȱ sein.ȱ Hierȱ kannȱ manȱ ebenfallsȱ sog.ȱ Kompensationstransaktionenȱ programmieren.ȱ Diesȱ obliegtȱ aberȱ nachȱ heutigemȱ KenntnisstandȱdemȱAnwendungsprogrammierer.ȱAllerdingsȱsindȱdiesemȱKonzeptȱ Grenzenȱgesetzt,ȱdaȱjeȱnachȱTransaktionsumfangȱKompensationsstrategienȱschnellȱ sehrȱkomplexȱwerdenȱkönnen.ȱ Langeȱ (langlebige)ȱ Transaktionen:ȱ Betrachtenȱ wirȱ denȱ starkȱ vereinfachtenȱ Workflowȱ einerȱ Auftragsbearbeitungȱ inȱ einemȱ Großhandelsunternehmenȱ mitȱ mehrerenȱ eigenen,ȱ abgeschlossenenȱ Teiltransaktionen.ȱ Inȱ derȱ Abbildungȱ 4Ȭ3ȱ sindȱ fünfȱArbeitsschritteȱskizziert,ȱdieȱinȱdreiȱverschiedenenȱSystemenȱ(ERPȬ,ȱVersandȬȱ undȱ Logistiksystem)ȱ insgesamtȱ fünfȱ Transaktionenȱ ausführen.ȱ Esȱ hätteȱ inȱ diesemȱ FallȱkeinenȱSinn,ȱüberȱdenȱlogischȱzusammengehörigenȱGesamtvorgangȱeineȱüberȬ greifendeȱTransaktionȱzuȱsetzen,ȱdieȱalleȱACIDȬKriterienȱerfüllt.ȱStattdessenȱführtȱ manȱeinzelneȱTeiltransaktionenȱaus,ȱumȱdenȱVorgangȱabzuwickeln.ȱȱ Kommissionierung durchführen
Rechnungstellung durchführen
Lieferung durchführen
Zahlunseingang bearbeiten
ERP-System Transaktion: Bestellung erfassen
Logistik-System Transaktion: Kommissionierung berechnen
ERP-System Transaktion: Rechnung erzeugen
Versand-System Transaktion: Sendung erzeugen
ERP-System Transaktion: Zahlungseingang buchen
ERP-DB
WMS-DB
Versand-DB
ERP-DB
Bestellung annehmen
ERP-DB
ERP = Enterprise Resource Planing WMS = Warehouse Management System
ȱ
Abbildungȱ4Ȭ3:ȱBeispielȱeinerȱlangenȱTransaktionȱȱ
ȱ
235
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
InȱdiesemȱBeispielȱhabenȱalsoȱdieȱTeiltransaktionenȱnichtsȱmiteinanderȱzuȱtun.ȱAlleȱ Änderungenȱ inȱ denȱ beteiligtenȱ Datenbanksystemenȱ werdenȱ völligȱ unabhängigȱ voneinanderȱ durchgeführt.ȱ Müssenȱ Änderungenȱ inȱ einemȱ Folgeschrittȱ zurückgeȬ setztȱ werden,ȱ soȱ wendetȱ manȱ dafürȱ Kompensationstransaktionenȱ an,ȱ dieȱ imȱ entȬ sprechendenȱ Anwendungssystemȱ unterstütztȱ undȱ damitȱ inȱ derȱ Anwendungȱ ausȬ programmiertȱ werdenȱ müssen.ȱ Langȱ andauerndeȱ (langlebige)ȱ Transaktionenȱ fürȱ dieȱ WorkflowȬBearbeitungȱ sindȱ demnachȱ typischeȱ Anwendungsfälleȱ fürȱ Sagasȱ oderȱContracts.ȱ ȱVerketteteȱ Transaktionenȱ undȱ Savepoints:ȱ Klassischeȱ Verketteteȱ Transaktionenȱ (auchȱchainedȱTransactionsȱgenannt)ȱermöglichenȱdieȱsequentielleȱAusführungȱmehȬ rererȱ flacherȱ Transaktionen,ȱ wobeiȱ beimȱ Übergangȱ derȱ Transaktionskontextȱ weiȬ tergereichtȱ wird.ȱ Jedeȱ Transaktionȱ innerhalbȱ derȱ Ketteȱ istȱ eineȱ eigeneȱ ACIDȬ TransaktionȱundȱwirdȱbeimȱÜbergangȱzurȱnächstenȱvollständigȱbeendet.ȱManȱbeȬ findetȱsichȱalsoȱimmerȱinȱeinerȱTransaktion.ȱDurchȱdieȱVerkettungȱkannȱeinȱLeisȬ tungsgewinnȱ erzieltȱ werden.ȱ Derȱ Übergangȱ vonȱ einerȱ Transaktionȱ zurȱ nächsten,ȱ alsoȱ dieȱ Operationenȱ commitȱ undȱ begin,ȱ werdenȱ inȱ einerȱ Operationȱ (chainȬ Transaction)ȱausgeführt.ȱHeutigeȱTransaktionssystemeȱunterstützenȱmeistȱverketteȬ teȱ Transaktionen,ȱ bietenȱ aberȱ auchȱ dieȱ Möglichkeit,ȱ dieȱ automatischeȱ Verkettungȱ abzuschalten.ȱ Auchȱ inȱ Zusammenhangȱ mitȱ Sagasȱ sprichtȱ manȱ vonȱ einerȱ VerketȬ tungȱvonȱTransaktionen.ȱ Schließlichȱ unterstützenȱ einigeȱ kommerzielleȱ Datenbankmanagementsystemeȱ alsȱ Ergänzungȱ zuȱ flachenȱ Transaktionenȱ sog.ȱ Savepoints.ȱ Diesȱ sindȱ Sicherungspunkteȱ innerhalbȱ einerȱ Transaktion,ȱ aufȱ dieȱ wiederȱ aufgesetztȱ werdenȱ kann,ȱ ohneȱ dieȱ gesamteȱ Transaktionȱ zurückzusetzen.ȱ Sieȱ werdenȱ durchȱ expliziteȱ Anweisungenȱ markiert,ȱ sindȱ aberȱ nichtȱ persistent.ȱ Einȱ Abbruchȱ derȱ Transaktionȱ bedeutet,ȱ dassȱ auchȱ dieȱ mitȱ Savepointsȱ markiertenȱ Zwischenergebnisseȱ wiederȱ zurückgesetztȱ werden.ȱ Queuedȱ Transactions:ȱ Dasȱ QueuedȱTransactionȱProcessingȱModellȱ teiltȱ eineȱ längereȱ Transaktionȱ inȱ mehrereȱ Schritteȱ auf.ȱ Imȱ Gegensatzȱ zuȱ einerȱ typischenȱ ClientȬ ServerȬVerarbeitungȱ wirdȱ eineȱ Transaktionȱ nichtȱ direktȱ zwischenȱ Clientȱ undȱ SerȬ verȱausgeführt.ȱDerȱClientȱlegtȱseinenȱRequestȱvielmehrȱinȱeinerȱerstenȱTeiltransakȬ tionȱ inȱ eineȱ Queueȱ (Warteschlange).ȱ Derȱ Requestȱ wirdȱ dannȱ inȱ einerȱ zweitenȱ TransaktionȱvomȱServerȱausgelesenȱundȱbearbeitet.ȱDerȱServerȱstelltȱschließlichȱdasȱ Ergebnisȱ inȱ eineȱ weitereȱ Queue,ȱ dieȱ dannȱ wiederumȱ inȱ einerȱ drittenȱ Transaktionȱ vomȱClientȱausgelesenȱwirdȱ(Bernsteinȱ1997).ȱȱ QueuedȱTransactionsȱermöglichenȱdamitȱeineȱEntkopplungȱvonȱClientȱundȱServer.ȱ Beideȱkönnenȱ ausfallenȱundȱ nachȱeinemȱ Neustartȱ dieȱ Bearbeitungȱ fortsetzen.ȱDieȱ einzelnenȱTransaktionenȱunterliegenȱfürȱsichȱdenȱACIDȬEigenschaften.ȱ Queuedȱ Transactionsȱ benötigenȱ einȱ MessageȬQueueingȬSystem,ȱ dasȱ dieȱ Queuesȱ persistentȱ verwaltetȱ undȱ dieȱ Einzeltransaktionenȱ ausführt.ȱ Diesesȱ MessageȬ QueueingȬSystemȱ stelltȱ einȱ eigenesȱ Transaktionssystemȱ dar.ȱ Benötigtȱ derȱ Serverȱ
236 ȱ
4.2ȱȱGrundlagenȱ fürȱdieȱBearbeitungȱdesȱRequestsȱnebenȱderȱQueueȱnochȱweitereȱRessourcenȱ(wieȱ z.B.ȱDatenbanken)ȱistȱallerdingsȱeineȱTransaktionskoordinationȱnotwendig.ȱHeuteȱ istȱdiesesȱKonzeptȱeinesȱderȱStandardkonzepteȱderȱTransaktionsverarbeitung.ȱNaȬ hezuȱ jedesȱ Middlewareproduktȱ unterstütztȱ auchȱ Queuedȱ Transactions.ȱ Imȱ JavaȬ UmfeldȱgibtȱesȱauchȱeinenȱoffenenȱStandardȱfürȱdieȱNutzungȱvonȱMessageȱQueues,ȱ derȱ alsȱ JMSȱ (Javaȱ Messageȱ Service)ȱ bezeichnetȱ wirdȱ undȱ denȱ heuteȱ dieȱ meistenȱ HerstellerȱvonȱApplicationȬServerȬȱundȱMessageȬQueueingȬMiddlewareȱunterstütȬ zenȱ(sieheȱKapitelȱ2).ȱ
4.2.3
Anatomie eines Transaktionssystems
DieȱerforderlichenȱMechanismenȱzurȱRealisierungȱeinesȱTransaktionssystemsȱbzw.ȱ zurȱ Unterstützungȱ derȱ ACIDȬEigenschaftenȱ könnenȱ denȱ Anwendungenȱ inȱ Formȱ vonȱDienstenȱzurȱVerfügungȱgestelltȱwerden,ȱdieȱwirȱalsȱtransaktionsunterstützendeȱ Diensteȱbezeichnen.ȱȱ Inȱ einemȱ Transaktionssystem,ȱ dasȱ ACIDȬTransaktionenȱ unterstützt,ȱ findetȱ manȱ üblicherweiseȱdieȱfolgendenȱtransaktionsunterstützendemȱDiensteȱbzw.ȱServices:ȱ – – – –
TransactionȱServiceȱ(TS)ȱ LoggingȱServiceȱ(LS)ȱ ConcurrencyȱControlȱServiceȱ(CS)ȱ RecoveryȱServiceȱ(RS)ȱ
Derȱ TSȬDienstȱ verwaltetȱ dieȱ Transaktionskontexteȱ undȱ wickeltȱ einȱ CommitȬ Protokollȱ zwischenȱ allenȱ anȱ einerȱ Transaktionȱ beteiligtenȱ Komponentenȱ ab.ȱ Erȱ stelltȱ Dienstprimitiveȱ zumȱ Startenȱ (begin),ȱ Beendenȱ (commit)ȱ undȱ Zurücksetzenȱ (rollback)ȱeinerȱTransaktionȱbereit.ȱDerȱCSȬDienstȱdientȱderȱSynchronisationȱnebenȬ läufigerȱZugriffeȱaufȱObjekteȱundȱstelltȱentsprechendeȱDienstprimitiveȱbereit.ȱDerȱ LSȬDienstȱ stelltȱ Dienstprimitiveȱ bereit,ȱ dieȱ esȱ ermöglichen,ȱ Logginginformationȱ persistentȱabzuspeichernȱundȱdieseȱwiederȱaufzufinden.ȱDerȱRSȬDienstȱermöglichtȱ dasȱZurücksetzenȱaktiverȱTransaktionenȱbeiȱeinerȱRollbackȬAnforderungȱundȱdenȱ Restartȱ nachȱ einemȱ Ausfallȱ einerȱ Komponente.ȱ Erȱ verwendetȱ denȱ LSȬDienst,ȱ umȱ dieȱ Zuständeȱ derȱ Transaktionenȱ vorȱ einemȱ Ausfallȱ zuȱ ermitteln.ȱ Nebenȱ diesenȱ DienstenȱwerdenȱfürȱdieȱZugriffeȱaufȱdieȱDatenobjekteȱnochȱDatenzugriffsdiensteȱ (DataȬAccessȬService,ȱ DS)ȱ undȱ beiȱ Bedarfȱ Diensteȱ zurȱ persistentenȱ Speicherungȱ vonȱDatenobjektenȱ(PersistencyȱService,ȱPS)ȱbenötigt.ȱ Inȱ Transaktionssystemenȱ arbeitenȱ üblicherweiseȱ Applikationen,ȱ Koordinatorenȱ undȱRessourcenmanagerȱzusammen.ȱAlleȱkommunizierenȱüberȱeinenȱeinheitlichenȱ Protokollstack,ȱderȱnebenȱdenȱklassischenȱTransportprotokollenȱauchȱdieȱdarüberȬ liegendenȱTransaktionsprotokolleȱenthält.ȱȱ DieȱbeteiligtenȱKomponentenȱbenötigenȱunterschiedlicheȱDiensteȱoderȱstellenȱdieseȱ bereit.ȱWieȱinȱAbbildungȱ4Ȭ4ȱzuȱsehenȱist,ȱbenötigtȱeinȱKoordinatorȱeinenȱRSȬȱundȱ einenȱ LSȬDienst,ȱ umȱ LoggingȬȱ undȱ Recoveryȱ durchzuführen.ȱ Dieȱ DiensteimpleȬ mentierungenȱ müssenȱ nichtȱ unbedingt,ȱ wieȱ inȱ derȱ Abbildungȱ dargestellt,ȱ imȱ KoȬ
ȱ
237
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
ordinatorȱ enthaltenȱ sein.ȱ Sieȱ könnenȱ auchȱ vonȱ außerhalbȱ bezogenȱ werden.ȱ Derȱ KoordinatorȱstelltȱselbstȱeinenȱTSȬDienstȱbereit,ȱderȱdieȱTransaktionskontexteȱverȬ waltetȱundȱdieȱklassischenȱOperationenȱ(begin,ȱcommit,...)ȱzurȱVerfügungȱstellt.ȱEinȱ RessourcenmanagerȱbenötigtȱdagegenȱnochȱeinenȱCSȬDienstȱundȱevtl.ȱDiensteȱzurȱ DatenhaltungȱsowieȱzurȱpersistentenȱDatenspeicherungȱ(DSȱundȱPS).ȱ Application
Coordinator
RM (Participant) CS
RS
RS LS
Log
TS
LS
PS Protocol Stack
Protocol Stack
Log
DS Data
Protocol Stack
Communication Protocols
ȱ
Abbildungȱ4Ȭ4:ȱTypischeȱSoftwarekomponentenȱtransaktionalerȱSystemeȱ
Konkreteȱ Implementierungenȱ stellenȱ dieȱ Diensteȱ inȱ Programmiersprachenȱ überȱ APIs,ȱzurȱVerfügung.ȱWelcheȱDienstaufrufeȱdieȱAnwendungenȱtatsächlichȱnutzenȱ undȱ welcheȱ implizitȱ vomȱ Transaktionssystemȱ verwendetȱ werden,ȱ hängtȱ vonȱ derȱ jeweiligenȱ Implementierungȱ ab.ȱ Umsoȱ schmalerȱ dasȱ vonȱ denȱ AnwendungsentȬ wicklernȱ zuȱ nutzendeȱ APIȱ ist,ȱ umsoȱ leichterȱ sindȱ Transaktionsanwendungenȱ zuȱ implementieren.ȱ Inȱ relationalenȱ DBMSȱ stelltȱ zumȱ Beispielȱ SQLȱ einȱ APIȱ dar,ȱ dasȱ demȱ Anwendungsprogrammiererȱ dieȱ LoggingȬ,ȱ RecoveryȬȱ undȱ auchȱ dieȱ ConcurȬ rencyȬControlȬServicesȱ weitgehendȱ versteckt,ȱ daȱ dieseȱ implizitȱ vomȱ DBMSȱ verȬ wendetȱwerden.ȱȱ Dieȱ wesentlichenȱ Dienste,ȱ dieȱ fürȱ eineȱ Realisierungȱ einesȱ Transaktionssystemsȱ erforderlichȱsind,ȱwerdenȱwirȱimȱFolgendenȱnäherȱbetrachten.ȱ
4.2.4
Concurrency Control
Durchȱ nebenläufigȱ ausgeführteȱ Transaktionenȱ kannȱ esȱ ohneȱ Einsatzȱ geeigneterȱ Synchronisationstechnikenȱ zuȱ Fehlersituationenȱ kommen.ȱ Manȱ unterscheidetȱ alsȱ möglicheȱ Fehlerfälleȱ (Anomalien)ȱ u.a.ȱ lostȬupdate,ȱ dirtyȬread,ȱ unrepeatableȬreadȱ undȱ Phantoms:ȱ – EinȱlostȬupdateȬProblemȱkannȱentstehen,ȱwennȱeineȱTransaktionȱT1ȱeineȱÄnȬ derungsoperationȱ(WriteȬOperation)ȱaufȱeinȱObjektȱausführt,ȱwelchesȱinȱeiȬ nerȱ parallelenȱ Transaktionȱ T2ȱ ebenfallsȱ verändertȱ wird.ȱ Dadurchȱ kannȱ dasȱ ErgebnisȱderȱOperationȱausȱT1ȱverlorengehen.ȱȱ
238 ȱ
4.2ȱȱGrundlagenȱ – Mitȱ dirtyȬreadȱ wirdȱ eineȱ Fehlersituationȱ verstanden,ȱ dieȱ auftretenȱ kann,ȱ wennȱeineȱTransaktionȱT1ȱeineȱWriteȬOperationȱaufȱeinȱObjektȱausführtȱundȱ dannȱabbricht.ȱNochȱvorȱAbbruchȱvonȱT1ȱkannȱnämlichȱeineȱTransaktionȱT2ȱ dasȱ Objektȱ mitȱ einerȱ Leseoperationȱ (readȬȱ oderȱ getȬOperation)ȱ anschauenȱ undȱ somitȱ einenȱ Wertȱ lesen,ȱ derȱ nichtȱ korrektȱ ist,ȱ weilȱ T1ȱ zurückgesetztȱ werdenȱmuss.ȱȱ – Unterȱ unrepeatableȬreadȱ ȱ istȱ zuȱ verstehen,ȱ dassȱ innerhalbȱ einerȱ Transaktionȱ dieȱWiederholungȱeinesȱLesevorgangsȱmitȱgleichemȱErgebnisȱzuȱeinemȱspäȬ terenȱ Zeitpunktȱ nichtȱ möglichȱ ist.ȱ Dieserȱ Fallȱ trittȱ ein,ȱ wennȱ T2ȱ eineȱ ReadȬ Operationȱ aufȱ einȱ Objektȱ ausführt,ȱ dannȱ T1ȱ eineȱ WriteȬOperationȱ aufȱ dasȱ gleicheȱ Objektȱ durchführtȱ undȱ schließlichȱ T2ȱ wiederȱ eineȱ ReadȬOperationȱ aufȱ diesesȱ Objekt.ȱ Dieȱ ersteȱ ReadȬOperationȱ vonȱ T2ȱ istȱ somitȱ nichtȱ wiederȬ holbar,ȱweilȱdasȱObjektȱvonȱeinerȱparallelȱablaufendenȱTransaktionȱT1ȱzwiȬ schenzeitlichȱverändertȱwurde.ȱ – Unterȱ demȱ Phantomproblemȱ ȱ verstehtȱ manȱ eineȱ spezielleȱ Formȱ fürȱ einȱ nichtȱ wiederholbaresȱLesen.ȱWirdȱz.B.ȱvonȱeinemȱProzessȱeineȱAnweisungȱselectȱ*ȱ fromȱȱdurchgeführtȱundȱeinȱnebenläufigerȱProzessȱerzeugtȱanschlieȬ ßendȱeinȱTupelȱinȱderȱDatenbanktabelleȱ,ȱdasȱaufȱdasȱSelektionskriȬ teriumȱgepasstȱhätte,ȱkannȱdieȱSelektionsanweisungȱnichtȱmitȱdemȱgleichenȱ Ergebnisȱwiederholtȱwerden.ȱDasȱneueȱTupelȱwirdȱalsȱPhantomȱbezeichnet.ȱ Dieseȱ Fehlerfälleȱ könnenȱ nurȱ vorkommen,ȱ wennȱ dieȱ Isolationseigenschaftȱ einerȱ Transaktionȱ nichtȱ erfülltȱ wird.ȱ Dieȱ Sequenzȱ anȱ ReadȬȱ undȱ WriteȬOperationenȱ paȬ rallelȱ ausgeführterȱ Transaktionenȱ wirdȱ auchȱ Scheduleȱ genannt.ȱ Imȱ ANSIȬSQLȬ Standardȱ wurdenȱ verschiedeneȱ Stufenȱderȱ Isolierungȱ definiert,ȱ dieȱ vonȱ einerȱAnȬ wendungȱ mitȱ einerȱSQLȬAnweisungȱ (setȱtransactionȱisolationȱlevel)ȱeinstellbarȱsind.ȱ DieȱEinstellungȱSerializableȱistȱdieȱstrengsteȱStufeȱundȱfordertȱSerialisierbarkeit.ȱBeiȱ Anwendungȱ vonȱ Serializableȱ istȱ sogarȱ dasȱ PhantomȬProblemȱ ausgeschlossen7.ȱ Dieȱ Nutzungȱ vonȱ Serializableȱ istȱ aberȱ inȱ vielenȱ Anwendungsszenarienȱ zuȱ strengȱ undȱ mussȱ deshalbȱ oftȱ abgemildertȱ werden.ȱ Manȱ wendetȱ esȱ daherȱ eherȱ seltenȱ an.ȱ Dieȱ weiterenȱdefiniertenȱIsolationslevelȱausȱdemȱSQLȬStandard8ȱsindȱReadȱUncommitted,ȱ ReadȱCommitted,ȱ RepeatableȱReadȱundȱUnrepeatableȱRead.ȱ Beiȱ reinȱ sequentiellȱ ablauȬ fendenȱTransaktionenȱkommtȱesȱzuȱkeinenȱProblemen,ȱdaȱesȱkeineȱNebenläufigkeitȱ gibt.ȱAnomalienȱkönnenȱnurȱbeiȱparallelȱoderȱquasiȱparallelȱausgeführtenȱTransakȬ tionenȱauftreten.ȱȱ
ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ
DieȱkorrekteȱImplementierungȱvorausgesetzt.ȱ
ȱ
Isolationsstufenȱ sindȱ imȱ SQLȬStandardȱ fürȱ relationaleȱ Datenbankmanagementsystemeȱ beschrieben.ȱ
7 8
ȱ
239
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ T1
T2
read (O1)
T1
T2
T2
read (O1)
read (O1) read (O1)
T1
read (O1)
write (O1) read (O1)
write (O1)
write (O1) write (O1) t
a) lost-update
read (O1)
rollback t
b) dirty-read
t
c) unrepeatable-read
ȱ
Abbildungȱ4Ȭ5:ȱMöglicheȱAnomalienȱȱ
Dieȱ grundlegendenȱ Problemeȱ derȱ Nebenläufigkeitskontrolleȱ wurdenȱ inȱ denȱ 80erȱ Jahrenȱ insbesondereȱ imȱ Umfeldȱ derȱ Datenbankforschungȱ eingehendȱ untersucht.ȱ DieȱwesentlichstenȱErkenntnisseȱwurdenȱinȱdieserȱZeitȱgewonnenȱundȱinȱderȱSeriaȬ lisisierbarkeitstheorieȱfestgehalten.ȱHierzuȱwerdenȱeinigeȱBegriffeȱdefiniert:ȱ SeriellerȱSchedule:ȱEinȱseriellerȱScheduleȱistȱeinȱSchedule,ȱinȱdemȱdieȱTransaktioȬ nenȱT1,...,Tnȱnacheinanderȱausgeführtȱwerden,ȱd.h.ȱzunächstȱwerdenȱalleȱAktionenȱ vonȱT1ȱausgeführt,ȱdannȱalleȱAktionenȱderȱTransaktionenȱT2ȱusw.ȱ SerialisierbarkeitȱeinesȱSchedule:ȱEinȱScheduleȱSȱheißtȱserialisierbarȱgenauȱdann,ȱ wennȱ esȱ zuȱ Sȱ einenȱ äquivalentenȱ seriellenȱ Scheduleȱ S’ȱ gibt,ȱ der,ȱ angewandtȱ aufȱ denselbenȱ Ausgangszustandȱ derȱ Ressourcen,ȱ zuȱ denselbenȱ Ausgabenȱ undȱ zuȱ demselbenȱEndzustandȱwieȱSȱführt.ȱ KorrektheitȱparallelerȱTransaktionen:ȱEineȱnebenläufigeȱundȱüberlappteȱAusfühȬ rungȱmehrererȱTransaktionenȱistȱdannȱundȱnurȱdannȱkorrekt,ȱwennȱesȱmindestensȱ eineȱ serielleȱ Ausführungsreihenfolgeȱ fürȱ dieseȱ Transaktionenȱ gibt,ȱ dieȱ aufȱ denȱ selbenȱAusgangszustandȱangewandtȱauchȱzumȱselbenȱEndzustandȱderȱRessourcenȱ (z.B.ȱDatenbanken)ȱführt.ȱ AlsȱgrundlegendeȱForderungȱgiltȱalso,ȱdassȱOperationenȱnebenläufigerȱTransaktiȬ onenȱ serialisierbarȱ seinȱ müssen,ȱ dasȱ heißtȱ dieȱ nebenläufigenȱ Transaktionenȱ müsȬ senȱdieȱErgebnisseȱliefern,ȱdieȱauchȱeinȱseriellesȱAusführenȱderȱTransaktionenȱlieȬ fernȱwürde.ȱEinȱsog.ȱTransaktionsȬSchedulerȱübernimmtȱdieseȱAufgabeȱinȱDatenȬ bankmanagementsystemen.ȱDiesȱistȱeinȱProgrammȱoderȱeineȱSoftwarekomponente,ȱ dieȱdieȱAusführungȱnebenläufigerȱTransaktionenȱkontrolliertȱundȱsteuert.ȱ
240 ȱ
4.2ȱȱGrundlagenȱ
(T1,O1), (T1,O2), (T1,O3) Datenmanager (RessourcenManager)
Schedule: (T1, O1), (T2,O1), (T2,O2),...
Scheduler
(T2,O1), (T2,O2), (T2,O3) (T3,O1), (T3,O2)
(Tx,Oy): Operation y in Transaktion x
ȱ
Abbildungȱ4Ȭ6:ȱVerarbeitungȱvonȱTransaktionenȱdurchȱdenȱSchedulerȱnachȱ(Vossenȱ1993)ȱ
InȱAbbildungȱ4Ȭ6 siehtȱmanȱbeispielsweise,ȱwieȱeinȱSchedulerȱdieȱOperationenȱvonȱ dreiȱnebenläufigenȱTransaktionenȱsoȱserialisiert,ȱdassȱsieȱbeiȱderȱAusführungȱkonȬ fliktfreiȱabgewickeltȱwerdenȱkönnen.ȱDieȱOperationenȱwerdenȱserialisiertȱanȱdieȱinȱ derȱ Abbildungȱ alsȱ ȱ Datenmanagerȱ bezeichneteȱ Komponenteȱ zurȱ Verarbeitungȱ übergeben.ȱHierfürȱmussȱderȱSchedulerȱRegelnȱfürȱdieȱReihenfolgebildungȱimpleȬ mentieren.ȱBeispielsweiseȱführenȱnebenläufigeȱLeseoperationenȱinȱderȱRegelȱnichtȱ zuȱ Schwierigkeiten,ȱ sondernȱ vorȱ allemȱ Änderungsoperationen.ȱ Dieȱ SerialisierbarȬ keitstheorieȱbeschreibtȱunterschiedlicheȱArtenȱvonȱSerialisierbarkeit.ȱ Zurȱ Serialisierungȱ derȱ Zugriffeȱ werdenȱ spezielleȱ Verfahrenȱ wieȱ zumȱ Beispielȱ dasȱ Sperrenȱ(Locking)ȱderȱRessourcen,ȱaufȱdieȱparallelȱzugegriffenȱwird,ȱeingesetzt.ȱImȱ Datenbankbereichȱ wurdenȱ einigeȱ Verfahrenȱ zurȱ Synchronisationȱ nebenläufigerȱ Transaktionenȱentwickelt.ȱBeispieleȱhierfürȱsindȱSperrȬ,ȱZeitmarkenȬȱundȱoptimisȬ tischeȱ Verfahren.ȱ Dieȱ erstenȱ beidenȱ Verfahrenȱ werdenȱ auchȱ alsȱ pessimistischȱ beȬ zeichnet,ȱ daȱ vonȱ vornhereinȱ mitȱ Konfliktenȱ gerechnetȱ wird.ȱ Alleȱ pessimistischenȱ Verfahrenȱ definierenȱ bestimmteȱ Regelnȱ zurȱ Behandlungȱ vonȱ Konfliktsituationen.ȱ Beiȱ jederȱ Operationȱ wirdȱ sofortȱ entschieden,ȱ obȱ sieȱ ausgeführtȱ werdenȱ darfȱ oderȱ nicht.ȱ Dagegenȱ gehenȱ optimistischeȱ Verfahrenȱ davonȱ aus,ȱ dassȱ Konflikteȱ seltenȱ auftretenȱundȱführenȱOperationenȱeinerȱTransaktionȱsofortȱaus,ȱohneȱzunächstȱzuȱ prüfen,ȱobȱKonflikteȱmitȱanderenȱTransaktionenȱvorliegen.ȱDieȱwichtigstenȱVerfahȬ renȱ sindȱ ausführlichȱ inȱ (Grayȱ 1993)ȱ beschriebenȱ undȱ werdenȱ imȱ Folgendenȱ kurzȱ erläutert.ȱ
Two-Phase-Locking Inȱ praktischenȱ Implementierungenȱ hatȱ sichȱ überwiegendȱ dasȱ TwoȬPhaseȬLockingȱ (2PL)ȱdurchgesetzt.ȱBeimȱ2PLȱwerdenȱnachȱBeginnȱeinerȱTransaktionȱinȱeinerȱersȬ tenȱ Phaseȱ alleȱ benötigtenȱ Sperrenȱ besorgtȱ undȱ erstȱ dannȱ inȱ einerȱ zweitenȱ Phaseȱ wiederȱfreigegeben,ȱwennȱkeineȱweiterenȱSperrenȱmehrȱbenötigtȱwerden.ȱDieȱersteȱ PhaseȱwirdȱauchȱalsȱZunahmephaseȱbezeichnet,ȱdieȱzweiteȱalsȱAbnahmephase.ȱȱ
ȱ
241
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Konservativesȱ2PL:ȱManȱsprichtȱvonȱkonservativemȱ2PLȱ(Abbildungȱ4Ȭ7),ȱwennȱjedeȱ Transaktionȱ zunächstȱ alleȱ benötigtenȱ Sperrenȱ inȱ einerȱ sog.ȱ Zunahmephaseȱ anforȬ dertȱundȱdanachȱinȱeinerȱabsteigendenȱPhaseȱnachȱundȱnachȱwiederȱfreiȱgibt.ȱ Anzahl Sperren Alle Sperren gesetzt
Zunahmephase
Alle Sperren freigegeben
Abnahmephase
t
ȱ Abbildungȱ4Ȭ7:ȱPhasenȱbeimȱkonservativemȱTwoȬPhaseȬLockingȱ
SobaldȱderȱSchedulerȱmitȱderȱFreigabeȱderȱSperrenȱbegonnenȱhat,ȱdarfȱkeineȱweiteȬ reȱ Sperreȱ mehrȱ fürȱ dieȱ Transaktionȱ gesetztȱ werden.ȱ Hierȱ vergehtȱ eineȱ bestimmteȱ Zeit,ȱ bisȱ alleȱ Sperrenȱ freigegebenȱ sind,ȱ inȱ derȱ bereitsȱ freigegebeneȱ Objekteȱ schonȱ wiederȱvonȱanderenȱTransaktionenȱgesperrtȱwerdenȱkönnen.ȱȱ Strengesȱ2PL:ȱVonȱstrengemȱoderȱstriktemȱ2PLȱwirdȱdagegenȱgesprochen,ȱwennȱalleȱ SperrenȱamȱEndeȱderȱTransaktionȱ(nachȱderȱletztenȱOperation)ȱaufȱeinmal,ȱlogischȱ zusammengehörend,ȱfreigegebenȱwerden.ȱDieȱFreigabeȱdauertȱnatürlichȱauchȱeineȱ bestimmteȱZeit,ȱallerdingsȱkannȱinȱdieserȱZeitȱkeineȱandereȱTransaktionȱdieȱbeteiȬ ligtenȱObjekteȱsperren.ȱ Anzahl Sperren Alle Sperren gesetzt Zunahmephase
Alle Sperren freigegeben
Abnahmephase
t Alle Sperren werden hier freigegeben
ȱ Abbildungȱ4Ȭ8:ȱPhasenȱbeimȱstrengenȱTwoȬPhaseȬLockingȱ
Dasȱ strengeȱ 2PLȬVerfahrenȱ hatȱ denȱ Vorteil,ȱ dassȱ eineȱ Transaktionȱ nieȱ einȱ Objektȱ erhält,ȱ dasȱ geradeȱ durchȱ eineȱ andereȱ Transaktionȱ gesperrtȱ istȱ undȱ dasȱ sieȱ damitȱ eigentlichȱnichtȱsehenȱdürfte.ȱDamitȱvermeidetȱmanȱsog.ȱkaskadenförmigeȱ(kaskadierȬ
242 ȱ
4.2ȱȱGrundlagenȱ te)ȱ Abbrüche,ȱ inȱ denenȱ bereitsȱ festgeschriebeneȱ Transaktionenȱ nochȱ einmalȱ rückȬ gängigȱgemachtȱwerdenȱmüssten.ȱAusȱdiesemȱGrundȱwirdȱinȱDatenbanktransaktiȬ onenȱgängigerȱDatenbankmanagementsystemeȱdasȱstrengeȱ2PLȱverwendet.ȱ BeiȱbeidenȱVariantenȱdesȱ2PLȬVerfahrensȱsindȱDeadlocksȱmöglich,ȱwennȱnämlichȱ zweiȱProzesseȱversuchen,ȱdieselbenȱObjekteȱzuȱsperren.ȱSperrtȱdieȱersteȱTransaktiȬ onȱzunächstȱdasȱersteȱObjektȱundȱdieȱzweiteȱTransaktionȱzunächstȱdasȱzweiteȱObȬ jektȱundȱdanachȱumgekehrt,ȱistȱeinȱDeadlockȱmöglich.ȱ Dieȱ Tabelleȱ 6Ȭ1ȱ zeigtȱ dieȱ LockȬKompatibilitätsmatrixȱ fürȱ dasȱ ReadȬWriteȬModell.ȱ EineȱTransaktionȱmöchteȱeineȱReadȬȱoderȱWriteȬOperationȱausführen.ȱInȱdenȱSpalȬ tenȱwirdȱangezeigt,ȱobȱbereitsȱeinȱLockȱdurchȱeineȱandereȱTransaktionȱgesetztȱist.ȱ „Ok“ȱ gibtȱ nunȱ an,ȱ dassȱ dieȱ anforderndeȱ Transaktionȱ einenȱ Lockȱ setzenȱ darf.ȱ „Wait“ȱ zeigtȱ an,ȱ dassȱ dieȱ Transaktion,ȱ dieȱ denȱ Lockȱ anfordert,ȱ solangeȱ wartenȱ muss,ȱbisȱdasȱObjektȱnichtȱmehrȱvonȱeinerȱanderenȱTransaktionȱgesperrtȱist.ȱ Tabelleȱ6Ȭ1:ȱLockȬKompatibilitäsmatrixȱ Durch beliebige andere Transaktion bereits gesetzter Lock Lock-Anforderung
Read-Lock
Write-Lock
Kein Lock
Read
Ok
Wait
Ok
Write
Wait
Wait
Ok
ȱ
Optimierungen des Two-Phase-Locking NachteiligȱanȱSperrverfahrenȱsindȱderȱhoheȱOverheadȱzurȱVerwaltungȱderȱSperrenȱ undȱ dieȱ Möglichkeitȱ vonȱ Deadlocks.ȱ Einigeȱ Optimierungenȱ wieȱ dasȱ ZweiȬ VersionenȬLockingȱundȱhierarchischeȱLocksȱsindȱinȱ(Grayȱ1993)ȱbeschrieben.ȱȱ Imȱ ZweiȬVersionenȬLockingȱ werdenȱ exklusiveȱ Locksȱ bisȱ zumȱ Commitȱ verzögert.ȱ Leseoperationenȱ werdenȱ nurȱ aufȱ „committed“ȱ Objekteȱ zugelassen.ȱ Nebenȱ denȱ bereitsȱ bekanntenȱ Read/WriteȬLocksȱ wirdȱ hierȱ einȱ CommitȬLockȱ benötigt,ȱ derȱ fürȱ alleȱ geändertenȱ Objekteȱ einerȱ Transaktionȱ gesetztȱ wird,ȱ wennȱ dieȱ CommitȬ Bearbeitungȱ durchgeführtȱ wird.ȱ Beiȱ derȱ Vergabeȱ vonȱ Locksȱ sindȱ folgendeȱ KonȬ fliktregelnȱzuȱbeachten:ȱ – ReadȬLocksȱwerdenȱimmerȱgewährt,ȱaußerȱdasȱzuȱsperrendeȱObjektȱwirdȱgeȬ radeȱdurchȱeinenȱCommitȬLockȱgesperrt.ȱInȱdiesemȱFallȱmussȱgewartetȱwerȬ den,ȱbisȱderȱCommitȬLockȱfreigegebenȱist.ȱ – WriteȬLocksȱ werdenȱ gewährt,ȱ wennȱ dasȱ zuȱ sperrendeȱ Objektȱ nichtȱ bereitsȱ durchȱeinenȱWriteȬȱoderȱCommitȬLockȱgesperrtȱist.ȱ – BeimȱCommitȱwirdȱversucht,ȱalleȱWriteȬLocksȱinȱCommitȬLocksȱumzuwanȬ deln.ȱIstȱeinȱObjektȱdurchȱeinenȱReadȬLockȱgesperrt,ȱmussȱdieȱCommitȬBearȬ beitungȱverzögertȱwerden,ȱbisȱdieȱTransaktion,ȱdieȱdenȱReadȬLockȱhält,ȱbeȬ endetȱist.ȱ
ȱ
243
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
VorteilȱdesȱVerfahrensȱist,ȱdassȱTransaktionenȱnurȱinȱderȱrelativȱkurzenȱCommitȬ Bearbeitungȱblockiertȱwerdenȱkönnen.ȱAndererseitsȱkönnenȱReadȬLocksȱdieȱComȬ mitȬBearbeitungȱbehindern.ȱ HierarchischeȱLockverfahrenȱsindȱ insbesondereȱ beiȱ Transaktionslastenȱ mitȱ einerȱ MiȬ schungȱausȱvielenȱkurzenȱundȱwenigȱlangenȱTransaktionenȱsinnvollȱundȱzwarȱbeiȱ hierarchischȱ angeordnetenȱ Objektenȱ wieȱ zumȱ Beispielȱ Datenbankenȱ mitȱ Tabellenȱ undȱ Sätzen.ȱ Langȱ andauerndeȱ Transaktionenȱ könnenȱ ihreȱ Absicht,ȱ inȱ Zukunftȱ Objekteȱ zuȱ lesenȱ oderȱ zuȱ verändernȱ durchȱ spezielleȱ Locksȱ bekanntgeben.ȱ Nebenȱ ReadȬȱundȱWriteȬLocksȱwerdenȱzusätzlichȱIntentionȬReadȬȱundȱIntentionȬWriteȬLocksȱ unterschieden.ȱ IntentionȬLocksȱ werdenȱ gesetzt,ȱ wennȱ eineȱ Transaktionȱ beabsichtigt,ȱ inȱ Zukunftȱ einȱ Objektȱ zuȱ lesenȱ oderȱ zuȱ ändern.ȱ Beabsichtigtȱ zumȱ Beispielȱ eineȱ Transaktionȱ eineȱ ganzeȱ Tabelleȱ oderȱ vieleȱ Sätzeȱ ausȱ einerȱ Tabelleȱ zuȱ lesen,ȱ soȱ setztȱ sieȱ einenȱ IntentionȬReadȬLockȱaufȱdieȱTabelle.ȱDadurchȱwerdenȱnebenläufigeȱTransaktionenȱ anȱ derȱ Ausführungȱ vonȱ WriteȬOperationenȱ aufȱ dieȱ Tabelleȱ gehindertȱ undȱ dieȱ Transaktionȱwirdȱnichtȱblockiert.ȱ
Zeitmarkenverfahren BeimȱZeitmarkenverfahrenȱwirdȱjederȱTransaktionȱvomȱTransaktionsmanagerȱeinȱ netzweitȱeindeutigerȱZeitstempelȱzugeordnet,ȱ derȱ beimȱ Zugriffȱ amȱ Objektȱ hinterlegtȱ wird.ȱNebenläufigeȱTransaktionenȱwerdenȱdurchȱdieȱZeitstempelȱzeitlichȱgeordnet.ȱ ImȱeinfachstenȱZeitmarkenverfahrenȱwerdenȱkeineȱtemporärenȱKopienȱvonȱObjekȬ tenȱunterstützt.ȱGreiftȱeineȱTransaktionȱaufȱeinȱObjektȱlesendȱoderȱschreibendȱzu,ȱ wirdȱ dasȱ Originalobjektȱ mitȱ demȱ Zeitstempelȱ derȱ Transaktionȱ markiert.ȱ Derȱ Zugriffȱistȱnurȱerlaubt,ȱwennȱfolgendeȱBedingungenȱerfülltȱwerden:ȱ – EineȱWriteȬOperationȱaufȱeinȱObjektȱistȱnurȱzulässig,ȱwennȱdieȱletzteȱReadȬȱ undȱdieȱletzteȱWriteȬOperationȱaufȱdasȱObjektȱvonȱeinerȱälterenȱTransaktionȱ ausgeführtȱwurden.ȱErfolgteȱderȱletzteȱZugriffȱdurchȱeineȱjüngereȱTransaktiȬ on,ȱwirdȱdieȱOperationȱabgewiesen.ȱ – EineȱReadȬOperationȱaufȱeinȱObjektȱistȱnurȱzulässig,ȱwennȱdieȱletzteȱWriteȬ OperationȱaufȱdasȱObjektȱdurchȱeineȱältereȱTransaktionȱausgeführtȱwurde.ȱȱ Istȱ dieȱ jeweiligeȱ Bedingungȱ nichtȱ erfüllt,ȱ stehtȱ eineȱ Transaktionȱ inȱ Konfliktȱ mitȱ anderenȱ Transaktionenȱ undȱ wirdȱ abgebrochen.ȱ Dieȱ Verwendungȱ desȱ OriginalobȬ jektsȱhatȱzurȱFolge,ȱdassȱzuȱeinerȱZeitȱnurȱeineȱTransaktionȱZugriffȱaufȱeinȱObjektȱ habenȱkann.ȱȱ Erweiterungenȱ diesesȱ Verfahrensȱ sehenȱ temporäreȱKopienȱ derȱ Objekteȱ vor,ȱ dieȱ neȬ benläufigeȱ Zugriffeȱ mehrererȱ Transaktionenȱ nachȱ bestimmtenȱ Regelnȱ erlauben.ȱ NebenläufigeȱZugriffeȱwerdenȱerlaubt,ȱwennȱsieȱnichtȱinȱKonfliktȱzueinanderȱsteȬ hen,ȱwasȱebenfallsȱüberȱdenȱZeitstempelȱerkanntȱwird.ȱȱ
244 ȱ
4.2ȱȱGrundlagenȱ
Optimistische Verfahren InȱoptimistischenȱVerfahrenȱwirdȱwährendȱderȱAusführungȱvonȱOperationenȱnichtȱ aufȱ Konfliktsituationenȱ geachtet.ȱ Optimistischeȱ Verfahrenȱ prüfenȱ erstȱ amȱ Endeȱ einerȱ Transaktionȱ (beiȱ derȱ CommitȬBehandlung),ȱ obȱ Konflikteȱ mitȱ nebenläufigenȱ Transaktionenȱauftreten.ȱEineȱTransaktionȱwirdȱinȱdreiȱPhasenȱausgeführt:ȱ – InȱeinerȱLesephaseȱwerdenȱalleȱObjekte,ȱdieȱverändertȱoderȱgelesenȱwerdenȱinȱ einemȱ temporärenȱ Speicherȱ abgelegt.ȱ Jedeȱ Transaktionȱ hatȱ einenȱ eigenenȱ Speicherbereich.ȱ Daȱ nurȱ Objekteȱ imȱ Zustandȱ committedȱ verwendetȱ werden,ȱ sindȱAnomalienȱwieȱdirtyȱreadȱnichtȱmöglich.ȱ – Inȱ einerȱ Validierungsphaseȱ (beiȱ Ausführungȱ einesȱ CommitȬAufrufes)ȱ wirdȱ überȱeineȱfestgelegteȱStrategieȱgeprüft,ȱobȱKonflikteȱmitȱanderenȱTransaktioȬ nenȱauftreten.ȱWennȱja,ȱwirdȱentschieden,ȱdassȱdieȱzuȱbeendendeȱoderȱeineȱ andereȱTransaktionȱzurückgesetztȱwird.ȱ – SchließlichȱwirdȱinȱeinerȱSchreibphaseȱeinȱdauerhaftesȱSpeichernȱallerȱtempoȬ rärenȱWriteȬOperationenȱausgeführt.ȱ Dieȱ Validierungȱ nutztȱ Read/WriteȬKonfliktregelnȱ undȱ setztȱ eineȱ zeitlichȱ aufsteiȬ gende,ȱ eindeutigeȱ Nummerierungȱ derȱ Transaktionenȱ voraus.ȱ Eineȱ Transaktionȱ beendetȱihreȱLesephaseȱerst,ȱnachdemȱalleȱTransaktionenȱmitȱniedrigererȱNummerȱ ihreȱ Lesephaseȱ beendetȱ haben.ȱ Validierungsverfahrenȱ wieȱ RückwärtsȬȱ undȱ VorȬ wärtslesenȱsindȱmöglich.ȱȱ NachteilȱderȱoptimistischenȱVerfahrenȱist,ȱdassȱsieȱzumȱ„Verhungern“ȱvonȱTransȬ aktionenȱ führenȱ können,ȱ wennȱ dieseȱ immerȱ wiederȱ aufgrundȱ vonȱ Konfliktenȱ zuȬ rückgesetztȱ werden.ȱ Erweiterteȱ Verfahrenȱ zurȱ Vermeidungȱ dieserȱ Problematikȱ sindȱinȱderȱangegebenenȱLiteraturȱausgeführt.ȱȱ Schlägtȱ eineȱ Transaktionȱ einmalȱ fehl,ȱ soȱ kannȱ beispielsweiseȱ inȱ derȱ ValidieȬ rungsphaseȱeinȱSperrenȱallerȱObjekteȱdieserȱTransaktionȱerfolgen,ȱumȱdieseȱinȱderȱ WiederholungȱinȱjedemȱFallȱsicherȱdurchführenȱzuȱkönnen.ȱDaȱderȱAufwand,ȱeineȱ Transaktionȱvollständigȱneuȱauszuführen,ȱbeträchtlichȱist,ȱistȱdiesesȱVerfahrenȱnurȱ sinnvoll,ȱ wennȱ wenigeȱ Konflikteȱ auftretenȱ können.ȱ Dieȱ Validierungȱ kannȱ überȱ einenȱ zentralenȱ Knotenȱ oderȱ verteiltȱ vorgenommenȱ werden.ȱ Deadlocksituationenȱ könnenȱbeiȱdiesemȱVerfahrenȱnichtȱauftreten.ȱ
Deadlocks Ähnlichȱ wieȱinȱ lokalerȱ Umgebungȱkannȱ esȱdurchȱdasȱ Verwendenȱ vonȱ Sperrenȱ inȱ verteiltenȱ Transaktionenȱ zuȱ Deadlocksituationenȱ kommen,ȱ dieȱ entwederȱ vermieȬ denȱ oderȱ erkanntȱ undȱ aufgelöstȱ werdenȱ müssen.ȱ Deadlocksȱ könnenȱ bekanntlichȱ dadurchȱ vermiedenȱ werden,ȱ dassȱ eineȱ derȱ vierȱ Bedingungen,ȱ dieȱ fürȱ eineȱ DeadȬ lockȬSituationȱ erfülltȱ seinȱ müssen,ȱ durchbrochenȱ wird.ȱ Dieseȱ vierȱ Bedingungenȱ sind:ȱ – MutualȱExclusionȱ(gegenseitigerȱAusschluss)ȱfürȱdieȱbenötigtenȱBetriebsmitȬ telȱ
ȱ
245
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ – VerteilteȱProzesseȱbelegenȱBetriebsmittelȱundȱfordernȱweitereȱan.ȱ – KeinȱEntzugȱeinesȱBetriebsmittelsȱistȱmöglich.ȱ – Zweiȱ oderȱ mehrereȱ verteilteȱ Prozesseȱ wartenȱ inȱ einerȱ verkettetenȱ Listeȱ (inȱ einerȱSchleife,ȱcircularȱwaiting)ȱaufȱweitereȱBetriebsmittel.ȱ
Eineȱ Möglichkeitȱ zurȱ DeadlockȬVermeidungȱ istȱ es,ȱ alleȱ Sperrenȱ beiȱ TransaktionsȬ beginnȱanzufordernȱundȱdannȱerstȱdieȱOperationenȱauszuführen,ȱwennȱalleȱSperȬ renȱgesetztȱsind.ȱKönnenȱeineȱoderȱmehrereȱSperrenȱnichtȱgesetztȱwerden,ȱwerdenȱ alleȱanderenȱauchȱwiederȱfreigegebenȱundȱdieȱTransaktionȱwirdȱnichtȱausgeführt.ȱ DiesesȱVerfahrenȱwirdȱaberȱseltenȱeingesetzt.ȱȱ ZurȱDeadlockȬErkennungȱundȱderenȱAuflösungȱwirdȱinȱderȱPraxisȱhäufigȱeinȱeinȬ fachesȱ aberȱ robustesȱ Verfahren,ȱ dasȱ aufȱ Zeitüberwachungȱ beruht,ȱ verwendet.ȱ WennȱeineȱTransaktionȱeinȱObjektȱnichtȱbearbeitenȱkann,ȱweilȱesȱvonȱeinerȱanderenȱ Transaktionȱ geradeȱ gesperrtȱ wird,ȱ wirdȱ maximalȱ eineȱ bestimmteȱ Zeitȱ (TimeoutȬ Zeit)ȱgewartet.ȱNachȱAblaufȱderȱTimeoutȬZeitȱwirdȱdieȱTransaktionȱzurückgesetzt.ȱ ProblematischȱanȱdiesemȱVerfahrenȱistȱdieȱrichtigeȱWahlȱderȱWartezeit,ȱdaȱsieȱunȬ mittelbareȱ Auswirkungȱ aufȱ denȱ Durchsatzȱ einesȱSystemsȱ hat.ȱ Beiȱ diesemȱ VerfahȬ renȱ kannȱ esȱ vorkommen,ȱ dassȱ Transaktionenȱ abgebrochenȱ werden,ȱ dieȱ nichtȱ zwangsläufigȱ zuȱ einemȱ Deadlockȱ führen.ȱ Hierȱ handeltȱ esȱ sichȱ umȱ einenȱ sog.ȱ unpräzisenȱDeadlockȬErkennungsȬAlgorithmus.ȱ Server 2 T1
O2
Server 1 T2
O1
Server 3 T3 Ox
Ty
wird gehalten wartet
Ty Ox
O3
Ty = Transaktion Ox = Objekt
ȱ
Abbildungȱ4Ȭ9:ȱDeadlockȱinȱeinemȱverteiltenȱSystemȱ
Präziseȱ DeadlockȬErkennungsȬAlgorithmenȱ erkennenȱ dagegenȱ echteȱ Deadlocks,ȱ sindȱ aberȱ fürȱ verteilteȱ Anwendungenȱ inȱ praktischenȱ Implementierungenȱ kaumȱ eingesetzt.ȱEineȱpräziseȱErkennungȱvonȱDeadlocksȱistȱzumȱBeispielȱüberȱdieȱVerȬ waltungȱvonȱWaitȬforȬGraphenȱmöglich.ȱÜberȱdieseȱGraphenȱwirdȱermittelt,ȱwelȬ cheȱObjekteȱvonȱwelchenȱTransaktionenȱgesperrtȱwerdenȱundȱwelcheȱTransaktioȬ nenȱaufȱwelcheȱObjekteȱwarten.ȱIstȱimȱGraphenȱeinȱZyklusȱvorhanden,ȱsoȱbestehtȱ
246 ȱ
4.2ȱȱGrundlagenȱ einȱDeadlock.ȱEsȱgibtȱverschiedeneȱTechniken,ȱWaitȬforȬGraphenȱinȱverteiltenȱSysȬ temenȱzurȱDeadlockȬErkennungȱzuȱverwenden.ȱEineȱMöglichkeitȱist,ȱeinenȱKnotenȱ alsȱ DeadlockȬDetectorȱ einzusetzen,ȱ derȱ vonȱ denȱ anderenȱ Knotenȱ dieȱ lokalenȱ WaitȬ forȬGraphenȱ empfängt.ȱ Ausȱ allenȱ lokalenȱ WaitȬforȬGraphenȱ kannȱ derȱ DeadlockȬ Detectorȱ Zyklenȱ ermittelnȱ undȱ beiȱ Bedarfȱ Maßnahmenȱ zurȱ DeadlockȬAuflösungȱ einleitenȱ(zumȱBeispielȱeinenȱAbbruchȱeinerȱTransaktion).ȱNachteileȱderȱMethodeȱ sindȱschlechteȱVerfügbarkeitȱundȱhoheȱNetzbelastung.ȱȱ Betrachtenȱ wirȱ denȱ WaitȬforȬGraphenȱ ausȱ Abbildungȱ 4Ȭ9ȱ mitȱ dreiȱ nebenläufigenȱ TransaktionenȱundȱdreiȱverschiedenenȱKnotenȱ(Serversystemen),ȱaufȱdenenȱObjekȬ teȱverwaltetȱwerden.ȱHierȱistȱimȱGraphenȱeineȱSchleifeȱerkennbar,ȱdieȱeinenȱDeadȬ lockȱanzeigt.ȱDieȱTransaktionȱT1ȱwartetȱnämlichȱaufȱdasȱObjektȱO2ȱwährendȱesȱO1ȱ sperrtȱ(vereinfacht:ȱohneȱRücksichtȱaufȱdieȱArtȱderȱSperre),ȱdieȱTransaktionȱT2ȱwarȬ tetȱ aufȱ dasȱ Objektȱ O3ȱ währendȱ esȱ O2ȱ hältȱ undȱ dieȱ Transaktionȱ T3ȱ wartetȱ aufȱ dasȱ ObjektȱO1ȱwährendȱesȱO3ȱsperrt.ȱ Besser,ȱaberȱschwierigerȱzuȱimplementierenȱsindȱMethodenȱfürȱeineȱverteilteȱDeadȬ lockȬErkennung,ȱinȱderȱmehrereȱKnotenȱinvolviertȱsind.ȱEinȱBeispielȱhierfürȱistȱderȱ sog.ȱ EdgeȬChasingȬȱ oderȱ PathȬPushingȬAlgorithmus.ȱ Inȱ diesemȱ Verfahrenȱ wirdȱ keinȱ globalerȱ WaitȬforȬGraphȱ aufgebaut,ȱ sondernȱ dieȱ beteiligtenȱ Komponentenȱ tauȬ schenȱ Informationenȱ überȱ dieȱ ihnenȱ bekanntenȱ Kantenȱ ausȱ (sog.ȱ ProbeȬNachȬ richten).ȱȱ
4.2.5
Logging und Recovery
Inȱ diesemȱ Abschnittȱ werdenȱ dieȱ beidenȱ engȱ zusammenhängendenȱ Funktionenȱ LoggingȱundȱRecovery,ȱdieȱfürȱeinȱTransaktionssystemȱessentiellȱsind,ȱerläutert.ȱ
Grundlegendes MitȱRecoveryȱistȱderȱWiederanlaufȱnachȱeinemȱFehlerȱgemeint.ȱAlleȱTransaktionen,ȱ dieȱ zumȱ Zeitpunktȱ einesȱ Fehlersȱ schonȱ abgeschlossenȱ waren,ȱ müssenȱ auchȱ einenȱ Fehlerfallȱ „überleben“.ȱ Diesȱ trifftȱ inȱ Abbildungȱ 4Ȭ10ȱ aufȱ dieȱ Transaktionenȱ T1,ȱ T2ȱ undȱT3ȱzu.ȱTransaktionen,ȱdieȱnochȱaktivȱwaren,ȱmüssenȱvollständigȱzurückgesetztȱ werdenȱ(sieheȱdieȱTransaktionenȱT4ȱundȱT5).ȱEinȱRücksetzmechanismusȱmussȱalsoȱ sicherstellen,ȱdassȱdieȱStatusveränderungenȱderȱnochȱnichtȱabgeschlossenenȱTransȬ aktionenȱimȱGesamtsystemȱnichtȱwirksamȱwerden.ȱ AlsȱLoggingȱwirdȱdasȱVerfahrenȱbezeichnet,ȱdasȱinȱTransaktionssystemenȱzurȱVerȬ waltungȱ redundanterȱ Informationȱ überȱ Änderungsoperationenȱ verwendetȱ wird.ȱ DieseȱRedundanzȱwirdȱbeiȱderȱBearbeitungȱvonȱFehlerfällenȱzumȱWiederherstellenȱ einesȱkonsistentenȱZustandsȱbenötigt.ȱDieȱSoftwarekomponente,ȱdieȱdieseȱAufgabeȱ übernimmt,ȱwirdȱalsȱLoggingmanagerȱbezeichnetȱundȱmussȱinȱjedemȱKnotenȱeinesȱ verteiltenȱSystemsȱvorhandenȱsein.ȱDieȱredundanteȱInformationȱwirdȱinȱeinemȱLogȱ aufȱ einemȱ nichtȬflüchtigenȱ Speicherȱ mitprotokolliert,ȱ soȱ dassȱ sieȱ nachȱ einemȱ SysȬ
ȱ
247
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
temausfallȱnochȱvorhandenȱist.ȱZugriffeȱaufȱdasȱLogȱsindȱnurȱüberȱdieȱDiensteȱdesȱ Loggingmanagersȱmöglich.ȱ ImȱDTPȬModellȱderȱX/Openȱ(DistributedȱTransactionȱModel)ȱmussȱjederȱRessourȬ cenmanagerȱseinȱprivatesȱLogȱverwaltenȱ(DTPȱ1991).ȱInȱ(Grayȱ1993)ȱwirdȱeinȱVorȬ schlagȱgemacht,ȱderȱinȱjedemȱKnotenȱeinenȱLoggingmanager,ȱaufȱdenȱderȱTransakȬ tionsmanagerȱundȱalleȱRessourcenmanagerȱgleichermaßenȱzugreifen,ȱbevorzugt.ȱȱ DasȱLogȱwirdȱsequentiellȱmitȱLogsätzenȱgefüllt.ȱJederȱLogsatzȱwirdȱeindeutigȱidenȬ tifiziertȱ (zumȱ Beispielȱ durchȱ eineȱ LogȬSequenceȬNumberȱ oderȱ LSN).ȱ Wannȱ einȱ LogsatzȱvonȱwelcherȱKomponenteȱgeschriebenȱwerdenȱmussȱundȱwelcheȱInformaȬ tionȱdieserȱSatzȱenthält,ȱhängtȱdavonȱab,ȱwelcheȱRecoveryȬTechnikȱverwendetȱwird.ȱ DieȱzeitlicheȱReihenfolge,ȱinȱderȱOperationenȱausgeführtȱwerden,ȱmussȱsichȱauchȱ imȱLogȱwiderspiegeln.ȱFallsȱalsoȱeineȱTransaktionȱT1ȱeinȱObjektȱO1ȱverändert,ȱbevorȱ eineȱTransaktionȱT2ȱeineȱÄnderungȱamȱObjektȱO2ȱvornimmt,ȱmussȱdieseȱReihenfolȬ geȱ auchȱ inȱ denȱ zugehörigenȱ Logsätzenȱ gelten,ȱ wasȱ ebenȱ durchȱ eineȱ sequentielleȱ VerwaltungȱdesȱLogsȱerreichtȱwird.ȱȱ T1 T2 T3 T4 T5 t
Fehler: Systemabsturz
ȱ
Abbildungȱ4Ȭ10:ȱSzenarioȱeinesȱSystemfehlersȱnachȱ(Vossenȱ1993)ȱ
DerȱRecoverymanagerȱistȱdieȱSoftwarekomponente,ȱdieȱaufȱeinemȱKnotenȱbeiȱeinemȱ Transaktionsabbruchȱ oderȱ beiȱ einemȱ Restartȱ einesȱ Systemsȱ aufgerufenȱ wird,ȱ umȱ dieȱ Konsistenzȱ wiederherzustellen.ȱ Erȱ brauchtȱdieȱ Diensteȱ desȱ Loggingmanagers,ȱ umȱseineȱAufgabenȱzuȱerledigen,ȱdamitȱerȱanhandȱderȱgeschriebenenȱLogsätzeȱdieȱ ZuständeȱderȱzuletztȱbearbeitetenȱTransaktionenȱnachvollziehenȱkann.ȱȱ Einȱ Problemȱ beimȱ Recoveryȱ bildenȱ realeȱbeziehungsweiseȱpersistenteȱ Operationen.ȱ DiesȱsindȱOperationen,ȱdieȱbeiȱderȱAusführungȱsofortȱwirksamȱwerdenȱundȱnichtȱ mehrȱzurückzusetzenȱsind,ȱwieȱzumȱBeispielȱdasȱVerändernȱeinesȱHardwareschalȬ ters.ȱRealeȱOperationenȱdürfenȱvomȱzuständigenȱRessourcenverwalterȱerstȱausgeȬ führtȱwerden,ȱwennȱdieȱCommitȬEntscheidungȱgetroffenȱist.ȱ Zurȱ Kommunikationȱ derȱ beteiligtenȱ Komponentenȱ werdenȱ Protokolleȱ benötigt,ȱ welcheȱdieȱMöglichkeitȱbieten,ȱbeiȱFehlernȱeineȱKoordinationȱüberȱdasȱtatsächlicheȱ ErgebnisȱeinerȱTransaktionȱdurchzuführen.ȱGrayȱ(Grayȱ1993)ȱunterscheidetȱhierzuȱ lokaleȱ undȱ verteilteȱ RecoveryȬProtokolle,ȱ wobeiȱ dieȱ lokalenȱ Protokolleȱ fürȱ dieȱ KomȬ munikationȱ derȱ Komponentenȱ innerhalbȱ einesȱ Knotenȱ eingesetztȱ werden,ȱ wähȬ
248 ȱ
4.2ȱȱGrundlagenȱ rendȱ dieȱ verteiltenȱ Protokolleȱzurȱ Kommunikationȱüberȱ einȱ Netzwerkȱ verwendetȱ werden.ȱ Umȱ eineȱ Änderungsoperationȱ imȱ Fehlerfallȱ zurücksetzenȱ zuȱ können,ȱ mussȱ vorȱ derenȱ Ausführungȱ einȱ Logsatzȱ mitȱ demȱ altenȱ Wertȱ desȱ Objektsȱ (BeforeȬImage)ȱ geȬ schriebenȱ werden.ȱ Dieseȱ Technikȱ istȱ auchȱ alsȱ WALȱ (writeȱaheadȱlog)ȱ bekannt.ȱ Dasȱ kontinuierlicheȱ Schreibenȱ derȱ Logginginformationȱ aufȱ einenȱ dauerhaftenȱ HinterȬ grundspeicherȱ belastetȱ dieȱ Performanceȱ einesȱ Systems,ȱ weshalbȱ verschiedeneȱ ErȬ setzungsȬȱundȱEinbringstrategienȱzurȱOptimierungȱentwickeltȱwurden.ȱȱ Einbringstrategienȱ legenȱ denȱ Zeitpunktȱ derȱ Schreibzugriffeȱ fürȱ Daten,ȱ dieȱ bereitsȱ committedȱsind,ȱaufȱdenȱnichtȬflüchtigenȱSpeicherȱfest.ȱHierzuȱgehören:ȱ – Eineȱ bekannteȱ Strategieȱ wirdȱ alsȱ NoforceȬStrategieȱ bezeichnet.ȱHierȱ wirdȱ amȱ EndeȱeinerȱTransaktionȱkeinȱSchreibenȱderȱÄnderungsoperationenȱaufȱeinenȱ nichtȬflüchtigenȱSpeicherȱgefordert.ȱDieȱÄnderungenȱwerdenȱasynchronȱgeȬ sichert,ȱwasȱaberȱimȱFehlerfallȱNachteileȱbeimȱRecoveryȱhat.ȱ – Beiȱ derȱ sog.ȱ Force9ȬStrategieȱ wirdȱ amȱ Endeȱ einerȱ Transaktionȱ dasȱ Schreibenȱ derȱÄnderungsoperationenȱaufȱeinenȱnichtȬflüchtigenȱSpeicherȱgefordert.ȱȱ Ersetzungsstrategienȱlegenȱfest,ȱwannȱDaten,ȱdieȱnochȱnichtȱ„committed“ȱsind,ȱȱaufȱ nichtȬflüchtigenȱSpeicherȱgeschriebenȱwerdenȱdürfen.ȱManȱunterscheidet:ȱ – DieȱSteal10ȬStrategieȱerlaubtȱes,ȱdassȱDatenȱbereitsȱgeschriebenȱwerdenȱdürfen,ȱ wennȱsieȱnochȱnichtȱcommittedȱsind.ȱ – ImȱGegensatzȱdazuȱdürfenȱbeiȱderȱNostealȬStrategieȱDatenȱnichtȱgeschriebenȱ werden,ȱwennȱsieȱnochȱnichtȱcommittedȱsind.ȱȱ Dieȱ unterschiedlichenȱ Optimierungenȱ fürȱ dasȱ „Einbringen“ȱ undȱ „Ersetzen“ȱ derȱ Datenȱ erfordernȱ imȱ RecoveryȬFallȱ bestimmteȱ Strategien,ȱ dieȱ imȱ nächstenȱ Absatzȱ diskutiertȱwerden.ȱ
Undo/Redo-Verfahren DieȱlokalenȱRecoveryȬProtokolleȱunterscheidenȱsichȱdurchȱdieȱMaßnahmen,ȱdieȱimȱ RecoveryȬFallȱ zuȱ ergreifenȱ sind,ȱ umȱ bereitsȱ ausgeführteȱ Aktionenȱ rückgängigȱ zuȱ machenȱoderȱerneutȱauszuführen.ȱSieȱsindȱauchȱunterȱderȱBezeichnungȱUndoȬȱundȱ RedoȬProtokolleȱbekannt:ȱ – EinȱRedoȬProtokollȱistȱerforderlich,ȱwennȱeineȱTransaktionȱbeendetȱwerdenȱ kann,ȱ nochȱ bevorȱ alleȱ Operationen,ȱ dieȱ bereitsȱ committedȱ sind,ȱ dauerhaftȱ ausgeführtȱ wurden.ȱ Diesȱ istȱ dieȱ Folgeȱ einerȱ NoforceȬEinbringstrategie.ȱ Dasȱ SchreibenȱderȱÄnderungenȱwirdȱalsoȱbeiȱTransaktionsendeȱnichtȱerzwungen.ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ
Engl.:ȱtoȱforceȱ=ȱerzwingen.ȱ
9
ȱ Engl.:ȱtoȱstealȱ=ȱentwenden.ȱ
10
ȱ
249
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ Nachȱ einemȱ Fehlerȱ kannȱ esȱ dannȱ aberȱ passieren,ȱ dassȱ einigeȱ Operationenȱ erneutȱauszuführenȱsind.ȱ – EinȱUndoȬMechanismusȱmussȱunterstütztȱwerden,ȱwennȱinȱeinerȱTransaktiȬ onȱ bereitsȱ Operationenȱ ausgeführtȱ (aufȱ nichtȬflüchtigenȱ Speicherȱ geschrieȬ ben),ȱ alsoȱ persistentȱ gemachtȱ werden,ȱ bevorȱ dieȱ Transaktionȱ inȱ denȱ ComȬ mittedȬZustandȱübergeht.ȱDiesȱkannȱbeiȱVerwendungȱderȱStealȬErsetzungsȬ strategieȱvorkommen.ȱImȱFehlerfallȱistȱesȱhierȱmöglich,ȱdassȱeineȱTransaktiȬ onȱzurückgesetztȱwirdȱundȱdaherȱnochȱÄnderungenȱvonȱObjektenȱwirksamȱ bleiben,ȱdieȱbeimȱRestartȱzurückgenommenȱwerdenȱmüssen.ȱ
Mussȱ einȱ RecoveryȬProtokollȱ eineȱ UndoȬȱ undȱ eineȱ RedoȬLogikȱ unterstützen,ȱ umȱ imȱ Fehlerfallȱ wiederȱ einenȱ konsistentenȱ Zustandȱ herzustellen,ȱ soȱ wirdȱ esȱ alsȱ UnȬ do/RedoȬProtokollȱ bezeichnet.ȱ Istȱ zurȱ Konsistenzerhaltungȱ wederȱ eineȱ UndoȬȱ nochȱ eineȱ RedoȬLogikȱ notwendig,ȱ wirdȱ dasȱ RecoveryȬProtokollȱ alsȱ NoȬUndo/NoȬRedoȬ Protokollȱbezeichnet.ȱDementsprechendȱkönnenȱnochȱdieȱProtokolleȱUndo/Redoȱundȱ NoȬUndo/Redoȱauftreten.ȱ DieȱRecoveryȬPerformanceȱwirdȱdurchȱsehrȱgroßeȱLogsȱbeeinträchtigt.ȱDaȱdasȱLogȱ mitȱderȱZeitȱstarkȱanwachsenȱkann,ȱmussȱeinȱMechanismusȱexistieren,ȱderȱdessenȱ Größeȱ begrenzt.ȱ Ausȱ diesemȱ Grundȱ unterstützenȱ DBMSȱ häufigȱ Sicherungspunkteȱ oderȱCheckpoints.ȱDiesȱsindȱspezielleȱLogsätze,ȱdieȱbeiȱeinemȱRestartȱdieȱSucheȱimȱ Logȱ nachȱ offenenȱ oderȱ erneutȱ durchzuführendenȱ Transaktionenȱ begrenzen.ȱ Eineȱ ausführlicheȱEinführungȱinȱdieȱVerwendungȱvonȱCheckpointsȱistȱinȱ(Grayȱ1993)ȱzuȱ finden.ȱ Force: Erzwingen des Schreibens der „committed“ Änderungen
Unforce: Schreiben von Änderungen im Zustand „committed“ nach commit möglich
ÆRedo notwendig begin
commit t
Steal: Schreiben der „non-committed“ Änderungen vor commit möglich
Nosteal: Nur Änderungen im Zustand „committed“ dürfen geschrieben werden
Æ Undo notwendig
ȱ
Abbildungȱ4Ȭ11:ȱStealȬȱundȱNostealȱ–ȱUndoȱundȱRedoȱ
Inȱ einemȱ DBMSȱ wirdȱ derȱ Teilȱ desȱ Logs,ȱ derȱ nichtȱ mehrȱ fürȱ aktuellȱ ablaufendeȱ Transaktionenȱbenötigtȱwird,ȱzyklischȱaufȱeinȱanderesȱSpeichermediumȱ(zumȱBeiȬ spielȱandereȱPlatteȱoderȱMagnetband)ȱarchiviert.ȱDieserȱausgelagerteȱTeilȱwirdȱnurȱ nochȱ benötigt,ȱ wennȱ durchȱ einenȱ Plattencrashȱ dieȱ Datenbankȱ oderȱ Teileȱ davonȱ zerstörtȱ werden.ȱ Inȱ einemȱ Restartverfahrenȱ könnenȱ dieȱ bereitsȱ ausgeführtenȱ TransaktionenȱausȱdemȱArchivȱnachgefahrenȱ(redo)ȱwerden.ȱDasȱdirektȱzugreifbaȬ reȱ Logȱ wirdȱ fürȱ schnelleȱ Wiederanlaufverfahrenȱ nachȱ einemȱ Systemcrash,ȱ nachȱ
250 ȱ
4.3ȱȱKoordinationsprotokolleȱundȱverteiltesȱRecoveryȱ Absturzȱ einerȱ Anwendungȱ oderȱ beiȱ einemȱ vonȱ einerȱ Anwendungȱ gefordertenȱ Rollbackȱ einerȱ Transaktionȱ verwendet.ȱ Abbildungȱ 4Ȭ11ȱ zeigtȱ nochmalsȱ dieȱ ZuȬ sammenhängeȱzwischenȱdenȱErsetzungsȬȱundȱEinbringstrategienȱundȱdenȱRecoveȬ ryȬVerfahren.ȱ AbschließendȱzuȱdieserȱkurzenȱBetrachtungȱderȱLoggingȬȱundȱRecoveryȬVerfahrenȱ kannȱfestgehaltenȱwerden,ȱdassȱdieseȱengȱmitȱdemȱTransaktionsmechanismusȱzuȬ sammenspielen.ȱ Insbesondereȱ inȱ DBMSȱ hatȱ manȱ hierȱ eineȱ Vielzahlȱ vonȱ OptimieȬ rungenȱentwickelt,ȱdieȱinȱKombinationȱeingesetztȱwerden.ȱ
4.3 Koordinationsprotokolle und verteiltes Recovery BeiȱeinerȱverteiltenȱTransaktionȱwirdȱangenommen,ȱdassȱdieseȱvonȱeinemȱKnotenȱ beziehungsweiseȱ einemȱ Prozessȱ diesesȱ Knotensȱ angestoßenȱ wird,ȱ derȱ auchȱ alsȱ Koordinatorȱ(superior,ȱcoordinator)ȱdieȱgesamteȱverteilteȱTransaktionȱkontrolliert.ȱ AlleȱKnoten,ȱdieȱanȱderȱTransaktionȱteilnehmen,ȱwerdenȱalsȱTeilnehmerȱ(subordiȬ nate,ȱparticipant)ȱbezeichnet.ȱFürȱdieȱKoordinationȱwerdenȱalsȱFreigabeȬȱbzw.ȱKoȬ ordinationsprotokolleȱ(auchȱCommitȬProtokolleȱgenannt)ȱunterȱanderemȱdasȱOneȬ PhaseȬ,ȱ dasȱ TwoȬPhaseȬȱ undȱ dasȱ ThreeȬPhaseȬCommitȬProtokollȱ (2PCȱ undȱ 3PC)ȱ verȬ wendet.ȱDieȱAbstimmungȱzwischenȱKoordinatorȱundȱTeilnehmernȱgeschiehtȱdabeiȱ inȱeinerȱoderȱinȱmehrerenȱPhasen.ȱȱ
4.3.1
Two-Phase-Commit-Protokoll
Beimȱ 2PCȬProtokollȱ sendetȱ derȱ Koordinatorȱ inȱ derȱ erstenȱ Phaseȱ (PrepareȬPhase)ȱ einenȱRequestȱ(PrepareȬRequest)ȱanȱalleȱTeilnehmerȱeinerȱTransaktion,ȱdamitȱdieseȱ sichȱ aufȱ dasȱ Transaktionsendeȱ vorbereiten.ȱ Dieȱ Teilnehmerȱ antwortenȱ (votieren)ȱ mitȱ ȈreadyȈȱ oderȱ ȈnotȬreadyȈ,ȱ jeȱ nachdem,ȱ obȱ sieȱ dieȱ Transaktionȱ erfolgreichȱ zuȱ Endeȱführenȱkönnenȱoderȱnicht.ȱVotiertȱeinȱTeilnehmerȱmitȱȈnotȬreadyȈ,ȱsetztȱerȱdieȱ innerhalbȱ derȱ Transaktionȱ ausgeführtenȱ Operationenȱ selbstständigȱ zurück.ȱ Nurȱ wennȱ alleȱ Teilnehmerȱ mitȱ ȈreadyȈȱ antworten,ȱ wirdȱ vomȱ Koordinatorȱ dieȱ zweiteȱ Phaseȱ eingeleitet,ȱ umȱ dieȱ Transaktionȱ erfolgreichȱ zuȱ beenden.ȱ Andernfallsȱ setztȱ derȱKoordinatorȱdieȱTransaktionȱzurück,ȱindemȱerȱallenȱTeilnehmern,ȱdieȱmitȱȈreaȬ dyȈȱantworteten,ȱeinenȱAbortȬRequestȱsendet.ȱȱ Wennȱ einȱ Teilnehmerȱ ȈreadyȈȱ meldet,ȱ mussȱ erȱ inȱ derȱ Lageȱ sein,ȱ dieȱ Transaktionȱ ausȱseinerȱSichtȱzuȱbeendenȱoderȱzurückzusetzen,ȱjeȱnachdemȱwieȱsichȱderȱKoorȬ dinatorȱentscheidet.ȱEineȱeinmalȱgetroffeneȱEntscheidungȱdarfȱwederȱvomȱKoordiȬ natorȱnochȱvonȱeinemȱTeilnehmerȱzurückgenommenȱwerden.ȱȱ Inȱ derȱ zweitenȱ Phaseȱ sendetȱ derȱ Koordinatorȱ einenȱ CommitȬRequest,ȱ umȱ dieȱ Transaktionȱabzuschließen.ȱDieȱTeilnehmerȱnehmenȱdenȱRequestȱentgegen,ȱführenȱ ihnȱ ausȱ undȱ beantwortenȱ ihnȱ entsprechend.ȱ Beiȱ derȱ Abwicklungȱ desȱ Protokollsȱ sindȱzuȱjederȱZeitȱFehlerȱ(etwaȱdurchȱNachrichtenverluste)ȱvorstellbar.ȱDieseȱFehȬ lerȱkönnenȱdazuȱführen,ȱdassȱeinȱTeilnehmerȱoderȱKoordinatorȱeineȱNachricht,ȱaufȱ
ȱ
251
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
dieȱ erȱ wartet,ȱ nichtȱ oderȱ nichtȱ sofortȱ erhält.ȱ Deshalbȱ sindȱ Timerȱ zurȱ Begrenzungȱ derȱ Wartezeitȱ erforderlich.ȱ Einȱ Knotenȱ sollȱ nichtȱ durchȱ andereȱ Knotenȱ blockiertȱ werden.ȱImȱFalleȱeinesȱSystemabsturzesȱmussȱeinȱTeilnehmerȱoderȱderȱKoordinaȬ torȱüberȱeinȱLogȱverfügenȱkönnen,ȱausȱdemȱerȱdenȱZustandȱderȱTransaktionȱerfahȬ renȱ kann.ȱ Daherȱ istȱ esȱ notwendig,ȱ dassȱ bestimmteȱ Informationenȱ währendȱ derȱ Koordinierungȱprotokolliertȱwerden.ȱ Anwendung
Koordinator
Teilnehmer 1
Teilnehmer 2
Commit Prepare-Request Phase 1
Prepare-Request ready
Log CommitEntscheidung
Log „ready“ ready
Log „ready“
Commit-Request Commit-Request
Phase 2
ok
Log „committed“ ok
Log „committed“
Log Ergebnis ok
ȱ Abbildungȱ4Ȭ12:ȱOrdnungsgemäßerȱ2PCȬProtokollablaufȱmitȱzweiȱTeilnehmernȱ
DerȱpositiveȱAblaufȱeinerȱ2PCȬKoordinationȱmitȱzweiȱTransaktionsteilnehmernȱistȱ imȱSequenzdiagrammȱinȱAbbildungȱ4Ȭ12ȱdargestellt.ȱDieȱbetroffeneȱAnwendungsȬ komponenteȱbeendetȱmitȱeinemȱCommitȬAufrufȱaktivȱdieȱTransaktionȱundȱistȱbisȱ zumȱEndeȱderȱKoordinationȱblockiert.ȱDerȱzuständigeȱKoordinatorȱführtȱdasȱ2PCȬ Protokollȱ mitȱ denȱ beidenȱ Teilnehmernȱ aus.ȱ Fürȱ dieȱ Koordinationȱ sindȱ insgesamtȱ achtȱNachrichtenȱerforderlich.ȱ InȱAbbildungȱ4Ȭ13ȱistȱderȱFehlerfallȱdargestellt,ȱdassȱTeilnehmerȱ2ȱseineȱOperatioȬ nenȱnichtȱerfolgreichȱzuȱEndeȱführenȱkann.ȱErȱliefertȱalsȱErgebnisȱderȱPhaseȱ1ȱ„notȱ ready“,ȱworaufȱsichȱderȱKoordinatorȱfürȱdenȱAbbruchȱderȱTransaktionȱentscheidetȱ undȱdiesȱdemȱTeilnehmerȱȱ1ȱmitteilt.ȱDasȱSchreibenȱderȱLoggingȬInformationenȱistȱ inȱ denȱ beidenȱ Abbildungenȱ nurȱ angedeutetȱ undȱ auchȱ vonȱ derȱ Implementierungȱ undȱentsprechendenȱOptimierungenȱabhängig,ȱdasȱGrundprinzipȱwirdȱaberȱdamitȱ beschrieben.ȱȱ
252 ȱ
4.3ȱȱKoordinationsprotokolleȱundȱverteiltesȱRecoveryȱ
Anwendung
Koordinator
Teilnehmer 1
Teilnehmer 2
Commit Prepare-Request Phase 1
Prepare-Request ready
Log CommitEntscheidung
Phase 2
Log „ready“ not ready
Log „not ready“
Abort-Request
ok
Log „aborted“
Log Ergebnis „aborted“ Aborted
ȱ Abbildungȱ4Ȭ13:ȱFehlerhafterȱ2PCȬProtokollablaufȱ
Esȱ istȱ nunȱ möglich,ȱ dassȱ zuȱ jederȱ Zeitȱ einȱ SystemȬȱ oderȱ Netzausfallȱ vorkommenȱ kannȱ undȱ dasȱ Transaktionssystemȱ daraufȱ mitȱ einerȱ Wiederanlaufstrategieȱ reagieȬ renȱmuss.ȱDieseȱwirdȱdurchȱdenȱKoordinatorȱinitiiert.ȱKommtȱz.B.ȱderȱKoordinatorȱ nichtȱ mehrȱ zumȱ Laufenȱ oderȱ erȱ istȱ vomȱ Netzwerkȱ abgeschnittenȱ oderȱ aberȱ esȱ istȱ einȱ Teilnehmerȱ vonȱ denȱ anderenȱ abgeschnitten,ȱ soȱ befindetȱ sichȱ mindestensȱ einȱ TeilnehmerȱinȱeinemȱunsicherenȱZustandȱundȱkannȱauchȱmöglicheȱSperren,ȱdieȱerȱ fürȱnichtȱabgeschlosseneȱTransaktionenȱgesetztȱhat,ȱnichtȱfreigeben.ȱ Esȱ istȱ auchȱ möglich,ȱ dassȱ einȱ Teilnehmerȱ beiȱ Ausfallȱ einerȱ Netzverbindungȱ eineȱ heuristischeȱ Entscheidungȱ überȱ dieȱ Beendigungȱ derȱ Transaktionȱ trifft,ȱ wieȱ diesȱ etwaȱimȱvonȱderȱOSIȱgenormtenȱCCRȱServiceȱElementȱvorgesehenȱist11.ȱIstȱdieȱVerȬ bindungȱzumȱKoordinatorȱwiederȱda,ȱmussȱdiesemȱaberȱdieȱEntscheidungȱmitgeȬ teiltȱwerden.ȱHatȱdieserȱbereitsȱandersȱentschieden,ȱliegtȱeineȱInkonsistenzȱvor.ȱ Imȱ2PCȬProtokollȱbestehtȱdieȱMöglichkeit,ȱdassȱTransaktionen,ȱdieȱnachȱeinerȱReaȬ dyȬAntwortȱ aufȱ einenȱ CommitȬRequestȱ derȱ Phaseȱ 2ȱ warten,ȱ nichtȱ zuȱ Endeȱ geȬ brachtȱ werdenȱ könnenȱ undȱ damitȱ Datenobjekteȱ etwaȱ durchȱ Sperrenȱ blockieren.ȱ DiesȱistȱdannȱderȱFall,ȱwennȱderȱKoordinatorȱnachȱderȱPhaseȱ1ȱausgefallenȱist.ȱDasȱ 2PCȬProtokollȱ wirdȱ daherȱ auchȱ alsȱ blockierendesȱ CommitȬProtokollȱ bezeichnet.ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ ZuȱOSIȱCCRȱsieheȱweiterȱunten.ȱ
11
ȱ
253
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
DerȱZustandȱeinesȱTeilnehmers,ȱinȱdemȱerȱblockiertȱistȱundȱaufȱdieȱEntscheidungȱ desȱKoordinatorsȱwartet,ȱwirdȱauchȱalsȱunsichererȱZustandȱbezeichnet.ȱ
4.3.2
Three-Phase-Commit-Protokoll
Imȱ 2PCȬProtokollȱ könnenȱ sichȱ nebenläufigeȱ Transaktionenȱ blockieren.ȱ Diesenȱ Mangelȱ versuchtȱ dasȱ relativȱ seltenȱ implementierteȱ 3PCȬProtokollȱ (ThreeȬPhaseȬ Commit)ȱzuȱbeheben.ȱEsȱistȱeineȱechteȱErweiterungȱzumȱ2PCȬProtokoll,ȱinȱderȱdieȱ Phaseȱ1ȱidentischȱzumȱ2PCȱist.ȱImȱ3PCȬProtokollȱwirdȱaberȱnachȱderȱerstenȱPhaseȱ eineȱPhaseȱzurȱEntscheidungsvorbereitungȱeingeschoben.ȱ Teilnehmer 2
Teilnehmer 1
Koordinator
Anwendung Commit
Prepare-Request Prepare-Request Phase 1
ready
Log „ready“ (prepared)
Log „ready“ Phase 2
ready
Log „ready“ (prepared)
Precommit-Request Precommit-Request
Log Ergebnis „precommit“
ready-to-commit
Log „precommitted“ ready-to-commit
Log „precommitted“
Commit-Request
Phase 3
Commit-Request
Log Ergebnis „committed“
committed
Log „committed“ committed
Log „committed“
committed
ȱ Abbildungȱ4Ȭ14:ȱOrdnungsgemäßerȱ3PCȬProtokollablaufȱ
DieȱEntscheidungsphaseȱwirdȱihrerseitsȱwiederȱinȱzweiȱPhasenȱaufgeteilt:ȱ – Nachȱ einerȱ erfolgreichȱ verlaufendenȱ Phaseȱ 1ȱ habenȱ alleȱ Teilnehmerȱ demȱ Koordinatorȱmitȱ„ready“ȱgeantwortet.ȱSieȱbefindenȱsichȱnunȱinȱeinemȱunsiȬ cherenȱZustandȱundȱwartenȱaufȱweitereȱAnweisungenȱdesȱKoordinators.ȱ – DaraufhinȱsendetȱderȱKoordinatorȱeinenȱ„PrecommitȬRequest“ȱanȱalleȱTeilȬ nehmer.ȱWennȱeinȱTeilnehmerȱdieseȱNachrichtȱerhält,ȱweißȱer,ȱdassȱalleȱanȬ derenȱTeilnehmerȱmitȱ„ready“ȱvotiertȱhaben.ȱErȱistȱalsoȱnichtȱunsicher.ȱȱ – DerȱKoordinatorȱentscheidetȱaberȱnochȱnichtȱaufȱ„Commit“,ȱweißȱaber,ȱdassȱ erȱdiesȱtunȱwird,ȱwennȱerȱnichtȱabstürzt.ȱ – JederȱTeilnehmerȱsendetȱeineȱAntwortȱ„readyȬtoȬcommit“ȱanȱdenȱKoordinaȬ tor.ȱȱ
254 ȱ
4.3ȱȱKoordinationsprotokolleȱundȱverteiltesȱRecoveryȱ – WennȱderȱKoordinatorȱalleȱAntwortenȱerhaltenȱhat,ȱverschicktȱerȱdenȱComȬ mitȬRequest,ȱdenȱdieȱTeilnehmerȱihrerseitsȱbeantworten.ȱ BeiȱAusfallȱdesȱKoordinatorsȱwährendȱderȱCommitȬPhaseȱ(Phaseȱ2ȱundȱ3)ȱwirdȱeinȱ Terminierungsprotokollȱangewendet,ȱinȱdemȱdieȱverbleibendenȱTeilnehmerȱeinenȱ neuenȱKoordinatorȱwählen.ȱAufȱdiesesȱsollȱhierȱnichtȱweiterȱeingegangenȱwerden.ȱ WeitereȱErläuterungenȱzumȱ3PCȬProtokollȱfindenȱsichȱinȱ(Vossenȱ1993)ȱundȱ(BernȬ steinȱ1987).ȱȱ
4.3.3
One-Phase-Commit-Protokoll
Beimȱ EinȬPhasenȬCommitȬProtokollȱ (1PC)ȱ wirdȱ dieȱ PrepareȬPhaseȱ weggelassen,ȱ wobeiȱ esȱ hierȱ auchȱ wiederȱ mehrereȱ Variantenȱ gibt.ȱ Dieȱ einfachsteȱ Variante,ȱ dieȱ auchȱ imȱ DTPȬModellȱ unterstütztȱ wird,ȱ istȱ inȱ Abbildungȱ 4Ȭ15ȱ dargestellt.ȱ Derȱ KoȬ ordinatorȱ schicktȱ einfachȱ anstelleȱ einesȱ PrepareȬRequestȱ sofortȱ einenȱ CommitȬ Request,ȱ derȱ vomȱ Teilnehmerȱ beantwortetȱ wird.ȱ Derȱ Teilnehmerȱ schließtȱ daraufȬ hinȱdieȱTransaktionȱvollständigȱabȱundȱschreibtȱimȱErfolgsfallȱdieȱgeändertenȱDaȬ tenȱaufȱeinenȱpersistentenȱSpeicher.ȱ Teilnehmer
Koordinator
Anwendung ... Commit
Log CommitEntscheidung
Commit-Request
ready Log „committed“
Log „ready“ Transaktion abschließen
ȱ Abbildungȱ4Ȭ15:ȱKlassischer,ȱfehlerfreierȱ1PCȬProtokollablaufȱ
Eineȱ andereȱ Varianteȱ desȱ 1PCȬProtokollsȱ sollȱ ebenfallsȱ kurzȱ vorgestelltȱ werden:ȱ Bereitsȱ mitȱ derȱ letztenȱ Operationȱ einerȱ Transaktionȱ kannȱ derȱ Teilnehmerȱ auchȱ aufgefordertȱwerden,ȱschonȱvorabȱinȱdenȱZustandȱpreparedȱzuȱwechseln.ȱDerȱTeilȬ nehmerȱ votiertȱ daraufhinȱ entwederȱ „ready“ȱ oderȱ „abort“.ȱ Fürȱ dieȱ eigentlicheȱ CommitȬBehandlungȱwirdȱsomitȱebenfallsȱnurȱnochȱeineȱPhaseȱbenötigt.ȱ DasȱTransaktionssystemȱmussȱbeimȱ1PCȬProtokollȱbeiȱderȱAusführungȱvonȱOperaȬ tionenȱ dieȱ Möglichkeitȱ bieten,ȱ zuȱ jederȱ Zeitȱ eineȱ CommitȬBehandlungȱ einleitenȱ können,ȱ esȱ istȱ alsoȱ eineȱ entsprechendeȱ Schnittstelleȱ fürȱ dasȱ AnwendungsproȬ grammȱvorzusehen.ȱ
ȱ
255
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Beimȱ1PCȬProtokollȱreduziertȱsichȱinȱverteilterȱUmgebungȱentsprechendȱauchȱdieȱ AnzahlȱderȱzuȱsendendenȱNachrichten,ȱdieȱfürȱdieȱKoordinierungȱerforderlichȱsind.ȱ Beiȱ einerȱ großenȱ Anzahlȱ anȱ Transaktionenȱ istȱ diesȱ durchausȱ einȱ wichtigerȱ LeisȬ tungsaspekt.ȱ Allerdingsȱ istȱ diesesȱ CommitȬProtokollȱ nurȱ dannȱ wirklichȱ sinnvollȱ (undȱ dannȱ aberȱ auchȱ nützlich),ȱ wennȱ anȱ derȱ Transaktionȱ lediglichȱ einȱ TransaktiȬ onsteilnehmerȱbeteiligtȱist.ȱ Teilnehmer
Koordinator
Anwendung ...
Letzte Operation
Letzte Operation + Prepare-Request ready
Log „ready“
Log CommitEntscheidung Commit Log „committed“
Commit-Request ok
Log „committed“
ȱ Abbildungȱ4Ȭ16:ȱEinȱandererȱ1PCȬProtokollablaufȱ
4.3.4
Vergleich und Optimierungsvarianten
Dasȱ 2PCȬProtokollȱ istȱ zweifelsohneȱ dasȱ bedeutendsteȱ CommitȬProtokoll.ȱ Nachȱ (Ramamrithamȱ1997)ȱundȱ(Stamosȱ1993)ȱgibtȱesȱmehrereȱVariationenȱdiesesȱProtoȬ kolltypsȱmitȱunterschiedlichstenȱOptimierungen:ȱ – 2PCȱmitȱpresumedȱabortȱoptimiertȱzumȱBeispielȱdieȱAnzahlȱderȱSchreibzugrifȬ feȱ aufȱ dasȱ Log.ȱ Derȱ Koordinatorȱ schreibtȱ nurȱ CommitȬRecordsȱ inȱ dieȱ LogȬ Dateiȱ undȱ keineȱ AbortȬRecords.ȱ Derȱ Koordinatorȱ nimmtȱ beiȱ diesemȱ ProtoȬ kollȱbeiȱeinemȱWiederanlaufȱnachȱeinemȱAbsturzȱan,ȱdassȱTransaktionen,ȱfürȱ dieȱkeinȱCommitȬSatzȱimȱLogȱgefundenȱwerdenȱkann,ȱzurückzusetzenȱsind.ȱȱ – Weitereȱ Optimierungenȱ sindȱ presumedȱ nothing,ȱ presumedȱ commitȱ undȱ earlyȱ prepare.ȱ Beiȱ presumedȱ commitȱ werdenȱ imȱ Gegensatzȱ zuȱ presumedȱ abortȱ nurȱ AbortȬRecordsȱ geschrieben.ȱ Dasȱ Verhaltenȱ imȱ RecoveryȬFallȱ istȱ hierȱ genauȱ umgekehrt.ȱ Fürȱ eineȱ detaillierteȱ Beschreibungȱ dieserȱSpezialfälle,ȱinsbesonȬ dereȱderȱFehlerbehandlungȱwirdȱaufȱdieȱangegebeneȱLiteraturȱverwiesen.ȱ Betrachtetȱ manȱ dieȱ verschiedenenȱ CommitȬProtokolleȱ imȱ Vergleich,ȱ soȱ kannȱ manȱ nebenȱdemȱAufwandȱfürȱdasȱSchreibenȱdesȱLogsȱauchȱdasȱNachrichtenaufkommenȱ fürȱdieȱCommitȬBehandlungȱbeiȱdenȱeinzelnenȱVariantenȱbetrachten.ȱȱ DieȱTabelleȱ4Ȭ2ȱgibtȱhierȱeineȱÜbersichtȱüberȱdasȱNachrichtenaufkommenȱbeiȱdenȱ „Standardformen“ȱ derȱ 1PCȬ,ȱ2PCȬȱundȱ 3PCȬProtokolle.ȱ Inȱ derȱ Tabelleȱ wirdȱ mitȱ nȱ
256 ȱ
4.3ȱȱKoordinationsprotokolleȱundȱverteiltesȱRecoveryȱ dieȱAnzahlȱderȱbeteiligtenȱKnotenȱangegeben,ȱwobeiȱeinerȱdavonȱderȱKoordinatorȱ ist.ȱ Tabelleȱ4Ȭ2:ȱNachrichtenaufkommenȱbeiȱCommitȬProtokollenȱ CommitProtokoll
Allgemeine Formel
Beispiel 1 (n=2)
Beispiel 2 (n=10)
Beispiel 3 (n=11)
1PC
2 * (n-1)
2
18
20
2PC
4 * (n-1)
4
36
40
3PC
6 * (n-1)
6
54
60
ȱ
Optimierungenȱ sindȱ inȱ derȱ Tabelleȱ nichtȱ berücksichtigt.ȱ Eineȱ Optimierungȱ wäreȱ beispielsweise,ȱdassȱreinȱlesendeȱTeilnehmerȱinȱderȱPhaseȱ2ȱnichtȱmehrȱkommuniȬ zierenȱmüssen,ȱdaȱsieȱohnehinȱkeineȱVeränderungenȱvorgenommenȱhaben.ȱ
4.3.5
Zustandsautomaten für Commit-Protokolle
CommitȬProtokolleȱ sindȱ imȱ Allgemeinenȱ rechtȱ komplexeȱ KommunikationsprotoȬ kolle,ȱ dieȱ imȱ ISO/OSIȬReferenzmodellȱ derȱ Schichtȱ 7ȱ undȱ imȱ TCP/IPȬReferenzȬ modellȱderȱSchichtȱ5ȱzuzuordnenȱsind.ȱKommunikationsprotokolleȱwerdenȱhäufigȱ alsȱerweiterte,ȱkommunizierende,ȱendlicheȱAutomaten,ȱsog.ȱCEFSMȱ(CommunicaȬ tingȱExtendedȱFiniteȱStateȱMachine)ȱbeschrieben.12ȱ SowohlȱderȱKoordinatorȱalsȱauchȱeinȱTeilnehmerȱeinerȱTransaktionȱkannȱinȱeinemȱ Zustandsautomatenȱ beschriebenȱ werden.ȱ Wirȱ wollenȱ anȱ dieserȱ Stelleȱ dieȱ ZuȬ standsautomatenȱ fürȱ dasȱ 2PCȬProtokollȱ exemplarischȱ undȱ vereinfachtȱ darstellen.ȱ InȱAbbildungȱ4Ȭ17ȱsindȱjeweilsȱeinȱKoordinatorȬȱundȱeinȱTeilnehmerknotenȱdargeȬ stellt,ȱ dieȱ mitȱ einerȱ2PCȬProtokollinstanzȱausgestattetȱ sind.ȱ DieseȱProtokollinstanȬ zenȱnutzenȱeinȱTranssportsystemȱ(heuteȱmeistȱTCPȱoderȱUDP)ȱzurȱKommunikatiȬ on.ȱInȱdenȱKnotenȱsindȱauchȱSoftwarekomponenten,ȱdieȱdenȱeigentlichenȱKoordiȬ natorȱ sowieȱdenȱ Teilnehmerȱ repräsentieren.ȱ Beideȱnutzenȱ jeweilsȱ denȱ imȱ Bildȱ beȬ zeichnetenȱ2PCȬSAPȱ(ServiceȱAccessȱPoint),ȱumȱdieȱDiensteȱderȱ2PCȬInstanzenȱzuȱ verwenden.ȱȱ Dieȱ beidenȱ 2PCȬInstanzenȱ tauschenȱ 2PCȬNachrichtenȱ (PDUs)ȱ aus.ȱ Diesȱ sindȱ u.a.ȱ eineȱ2PCȬPrepareȬRequestȬPDUȱundȱeineȱ2PCȬCommitȬRequestȬPDUȱmitȱdenȱentspreȬ chendenȱAntworten.ȱInȱdenȱNachrichtenȱwerdenȱmeistȱnebenȱderȱeigenenȱIdentifiȬ kationȱderȱTransaktionskontextȱbzw.ȱeinȱglobalȱeindeutigerȱTransaktionsȬIdentifierȱ übertragen,ȱderȱanȱdenȱTransaktionskontextȱgebundenȱist.ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 12
ȱ Einȱ CEFSMȱ erhältȱ vonȱ seinerȱ Umgebungȱ Eingangssignaleȱ wieȱ ankommendeȱ NachrichȬ tenȱvonȱPartnerautomatenȱoderȱDienstanforderungenȱhöhererȱSchichten,ȱdieȱerȱinȱAktiȬ onenȱbearbeitet.ȱDieȱBeschreibungȱkannȱu.a.ȱinȱSDLȱ(SpecificationȱandȱDescriptionȱLanȬ guage)ȱerfolgen.ȱ
ȱ
257
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ Teilnehmerknoten
Koordinatorknoten
Koordination
Koordinator
Teilnehmer
2PC-SAP
2PC-Protokollinstanz (Koordinator)
2PC-SAP 2PC-PDUs
2PC-Protokollinstanz (Teilnehmer)
T-SAP
T-SAP
Transportsystem (z.B. TCP)
ȱ Abbildungȱ4Ȭ17:ȱEinordnungȱdesȱ2PCȬProtokollsȱinȱdenȱKommunikationsstackȱ
Alleȱ beteiligtenȱ Instanzenȱ könnenȱ mitȱ Zustandsautomatenȱ modelliertȱ werden.ȱ JederȱAutomatȱistȱnatürlichȱmitȱeinemȱZeitgeberȱ(Timer)ȱausgestattet,ȱumȱgewisseȱ TimerȬEventsȱzuȱerhalten.ȱManȱbenötigtȱderartigeȱMechanismen,ȱumȱaufȱfehlendeȱ NachrichtenȱnachȱeinerȱbestimmtenȱZeitȱreagierenȱzuȱkönnen.ȱDieserȱAspektȱwirdȱ aberȱ hierȱ vernachlässigt.ȱ Exemplarischȱsollenȱinȱdiesemȱ Abschnittȱ dieȱ vereinfachȬ tenȱAutomatenȱderȱbeidenȱ2PCȬInstanzenȱdargestelltȱwerden.ȱDieȱbeidenȱAutomaȬ tenȱsindȱnurȱeinȱBeispielȱfürȱeineȱ2PCȬImplementierungȱfürȱdieȱAbwicklungȱflacherȱ TransaktionenȱohneȱOptimierungen.ȱ DerȱKoordinatorautomatȱunseresȱBeispielsȱausȱAbbildungȱ4Ȭ18ȱhatȱsiebenȱZustänȬ de.ȱImȱZustandȱInitȱistȱdieȱTransaktionȱerzeugt,ȱderȱTransaktionskontextȱistȱpropaȬ giertȱundȱesȱwerdenȱOperationenȱ(imȱBildȱvernachlässigt)ȱausgetauscht.ȱImȱpositiȬ venȱ Fallȱ ruftȱ dieȱ Anwendung,ȱ welcherȱ derȱ Transaktionskontextȱ zugeordnetȱ ist,ȱ einenȱ CommitȬDienstȱ amȱ 2PCȬSAPȱ auf.ȱ Daraufhinȱ wirdȱ anȱ alleȱ Teilnehmerȱ eineȱ PrepareȬRequestȬPDUȱ gesendetȱ undȱ esȱ wirdȱ inȱ denȱ Zustandȱ Preparingȱ gewechselt.ȱ InȱdemȱZustandȱverbleibtȱderȱAutomatȱsoȱlange,ȱbisȱalleȱPrepareȬResponseȬPDUsȱderȱ Teilnehmerȱ eingesammeltȱ wurden.ȱ Kommenȱ dieseȱ nichtȱ alleȱ inȱ einerȱ bestimmtenȱ Zeitspanneȱan,ȱoderȱsendetȱeinȱTeilnehmerȱ„notȱready“,ȱwirdȱdieȱTransaktionȱabȬ gebrochen,ȱalsoȱinȱdenȱZustandȱAbortingȱversetzt.ȱ Würdeȱ nunȱ eineȱAntwortȱnichtȱ gleichȱ kommen,ȱ soȱ wäreȱ einȱ erneutesȱ Sendenȱ derȱ PrepareȬRequestȬPDUȱ nachȱ einerȱ definiertenȱ Zeitȱ sinnvoll.ȱ Dasȱ könnteȱ manȱ auchȱ nochȱmehrmalsȱwiederholen,ȱbevorȱdieȱTransaktionȱnegativȱbeendetȱwürde.ȱÄhnȬ lichesȱgiltȱfürȱdieȱCommitȬBehandlung.ȱManȱsieht,ȱdassȱdieȱFehlerbehandlungȱdenȱ Zustandsautomatenȱaufbläht.ȱ
258 ȱ
4.3ȱȱKoordinationsprotokolleȱundȱverteiltesȱRecoveryȱ Init
Aufruf von Commit; Sende Prepare-Request
Aufruf von Rollback; Sende Rollback-Request
Empfangen eines Abort-Request; Sende RollbackRequest
Preparing
Empfangen eines AbortRequest oder eines PrepareResponse (not ready); Sende Rollback-Request
Empfangen eines Prepare-Response (ready); Speichere Ergebnis Empfangen des letzten Prepare-Response(ready); Speichere Ergebnis und sende Commit-Request
Committing
Empfangen eines Commit-Response; Speichere Ergebnis
Empfangen eines Rollback-Response; Speichere Ergebnis
Aborting
Rollback
Empfangen eines Rollback-Response; Speichere Ergebnis Empfangen des letzten Rollback-Response; Speichere Ergebnis
Empfangen des letzten Commit-Response; Speichere Ergebnis
Empfangen des letzten Rollback-Response; Speichere Ergebnis
Aborted
Committed
ȱ Abbildungȱ4Ȭ18ȱVereinfachterȱ2PCȬKoordinatorautomatȱ
BrichtȱdieȱAnwendungȱvonȱsichȱausȱdieȱTransaktionȱmitȱeinemȱRollbackȬAufrufȱab,ȱ soȱwirdȱanȱalleȱTeilnehmerȱeineȱRollbackȬRequestȬPDUȱgesendetȱundȱesȱwerdenȱdieȱ AntwortenȱimȱZustandȱRollbackȱeingesammelt.ȱȱ Weiterhinȱ kannȱ esȱ sein,ȱ dassȱ einȱ Teilnehmerȱ vorzeitigȱ eineȱ Transaktionȱ abbrichtȱ undȱdiesȱdemȱKoordinatorȱmitteilt.ȱInȱdiesemȱFallȱwirdȱderȱZustandȱAbortingȱeinȬ genommen.ȱAlleȱanderenȱTeilnehmerȱwerdenȱebenfallsȱabgebrochen.ȱSowohlȱvomȱ Zustandȱ Rollbackȱ alsȱ auchȱ vomȱ Zustandȱ Abortingȱ wirdȱ anschließendȱ inȱ denȱ ZuȬ standȱAbortedȱgewechselt.ȱ DerȱKoordinatorȱmussȱfürȱjedeȱeinzelneȱTransaktion,ȱdieȱerȱerzeugtȱhat,ȱeinenȱderȬ artigenȱZustandsautomatenȱverwalten.ȱ Derȱ Teilnehmerautomatȱ istȱ etwasȱ einfacher.ȱ Imȱ Zustandȱ Initȱ werdenȱ alleȱ ankomȬ mendenȱOperationenȱaufȱdieȱnebenläufigȱgenutztenȱRessourcenȱbearbeitet.ȱSobaldȱ eineȱ PrepareȬRequestȬPDUȱ empfangenȱ wird,ȱ wirdȱ eineȱ PrepareȬResponseȬPDUȱ geȬ sendetȱundȱesȱwirdȱderȱZustandȱPreparedȱeingenommen.ȱInȱdiesemȱZustandȱkannȱ derȱ Teilnehmerȱ nichtȱ mehrȱ alleineȱ entscheiden,ȱ obȱ erȱ dieȱ Transaktionȱ zuȱ Endeȱ führtȱoderȱabbricht.ȱErȱistȱunsicherȱüberȱdenȱAusgangȱderȱTransaktion.ȱDasȱweitereȱ VorgehenȱentscheidetȱderȱKoordinator.13ȱȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 13
ȱ AusgenommenȱsindȱheuristischeȱEntscheidungen.ȱ
ȱ
259
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Empfang eines Prepare-Request; Sende PrepareResponse (ready)
Prepared
Init Empfang eines Prepare-Request; Sende PrepareResponse (not ready) Empfange RollbackRequest; Speichere Ergebnis und sende Rollback-Response
Operationen werden verarbeitet
Empfang eines RollbackRequest; Sende Rollback-Response
Aborted
Empfang eines CommitRequest; Speichere Ergebnis und sende Commit-Response
Committed
ȱ Abbildungȱ4Ȭ19:ȱVereinfachterȱ2PCȬTeilnehmerautomatȱ
Vomȱ Zustandȱ Preparedȱ kommtȱ derȱ Teilnehmerȱ überȱ denȱ Empfangȱ einerȱ CommitȬ RequestȬPDUȱinȱdenȱZustandȱCommitted.ȱAufȱdieseȱPDUȱreagiertȱerȱmitȱeinerȱComȬ mitȬResponseȬPDU.ȱ Fallsȱ derȱ Teilnehmerȱ einenȱ PrepareȬRequestȱ nichtȱ positivȱ beantȬ wortenȱkann,ȱsendetȱerȱeineȱPrepareȬResponseȬPDUȱ(notȱready)ȱundȱgehtȱinȱdenȱZuȬ standȱAborted.ȱ Ankommendeȱ RollbackȬRequestȬPDUsȱ quittiertȱ derȱ Teilnehmer,ȱ protokolliertȱ sieȱ undȱgehtȱdirektȱinȱdenȱZustandȱAborted.ȱDerȱTeilnehmerȱmussȱnatürlichȱnachȱdemȱ CommitȬȱoderȱeinemȱAbortȬResponseȱalleȱevtl.ȱgesetztenȱSperrenȱfreigeben.ȱ Esȱsollȱnochȱerwähntȱwerden,ȱdassȱalleȱwesentlichenȱZustandsänderungen,ȱdieȱeinȱ RecoveryȬVorgangȱ benötigt,ȱ persistentȱ geloggtȱ werdenȱ müssen.ȱ Diesȱ giltȱ sowohlȱ fürȱdenȱTeilnehmerȱalsȱauchȱfürȱdenȱKoordinator.ȱDabeiȱistȱdieȱunterstützteȱRecoȬ veryȬStrategieȱvonȱBedeutung.ȱNichtȱdargestelltȱwurdeȱderȱRecoveryȬFall,ȱinȱdemȱ dieȱ erneutȱ gestarteteȱ Komponenteȱ seinenȱ Zustandȱ ausȱ demȱ Logfileȱ undȱ demȱ Netzwerkȱerfragenȱmuss,ȱumȱdannȱTransaktionen,ȱdieȱnochȱimȱZustandȱPrepared,ȱ Preparingȱ oderȱ Committingȱ sind,ȱ weiterȱ bearbeitenȱ zuȱ können.ȱ Eineȱ vollständigeȱ BeschreibungȱderȱZustandsautomatenȱeinesȱ2PCȬProtokollsȱwirdȱsehrȱkomplex.ȱ DerȱTeilnehmerȱmussȱfürȱjedeȱnebenläufigeȱTransaktion,ȱdieȱaufȱseineȱRessourcenȱ zugreift,ȱeinenȱZustandsautomatenȱderȱdargestelltenȱFormȱverwalten.ȱDieȱSummeȱ derȱZuständeȱallerȱkooperierendenȱZustandsautomatenȱzuȱeinerȱTransaktionȱstelltȱ denȱaktuellenȱGesamtzustandȱderȱTransaktionȱdar.ȱ
260 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ
4.4 Standards der Transaktionsverarbeitung 4.4.1
OSI-Transaktionsprotokolle
Inȱ diesemȱ Abschnittȱ wirdȱ einȱ kurzerȱ Überblickȱ überȱ dieȱ vonȱ derȱ ISOȱ definiertenȱ OSIȬTransaktionsstandardsȱgegeben.ȱDiesȱistȱzumȱeinenȱOSIȱCCRSEȱundȱzumȱanȬ derenȱ OSIȱ TPSE,ȱ dasȱ auchȱ kurzȱ alsȱ OSIȱ TPȱ (Transactionȱ Processing)14ȱbezeichnetȱ wird.ȱUmȱ dieseȱ inȱ derȱ Schichtȱ 7ȱ desȱ ISO/OSIȬReferenzmodellsȱangesiedeltenȱProȬ tokolleȱ undȱ Diensteȱ zuȱ verstehen,ȱ wirdȱ vorabȱ eineȱ Einführungȱ inȱ dieȱ StrukturieȬ rungȱ derȱ ISO/OSIȬAnwendungsschichtȱ gegeben.ȱ Dieserȱ OSIȬStandardȱ istȱ inȱ (KerȬ nerȱ1993)ȱausführlichȱbeschrieben.ȱ
Die OSI-Anwendungsschicht Imȱ Rahmenȱ derȱ ISOȬStandardisierungsbemühungenȱ wurdenȱ internationaleȱ StanȬ dardsȱfürȱdasȱTransaktionsmanagementȱkommunizierenderȱAnwendungsprozesseȱ entwickelt.ȱ Esȱ handeltȱ sichȱ dabeiȱ umȱ dieȱ Serviceȱ Elementeȱ CCRSEȱ undȱ TPSEȱ mitȱ denȱ dazugehörigenȱ Protokollen,ȱ dieȱ beideȱ derȱ Schichtȱ siebenȱ desȱ ISO/OSIȬ Referenzmodellsȱ zuzuordnenȱ sind.ȱ Zunächstȱ sollenȱ dieȱ Grundlagenȱ derȱ OSIȬ Anwendungsschichtȱ dargestelltȱ werden,ȱ umȱ anschließendȱ einenȱ Überblickȱ überȱ dieȱbeidenȱStandardsȱgebenȱzuȱkönnen.ȱ OSIȬStandardsȱsindȱfürȱoffeneȱSystemeȱentwickelt.ȱDarunterȱverstehtȱmanȱkeinȱkonȬ kretesȱ Rechnersystem,ȱ sondernȱ einȱ Modellȱ einesȱ Systems,ȱ dessenȱ Komponentenȱ denȱOSIȬStandardsȱgehorchen.ȱEinȱrealesȱoffenesȱSystemȱbestehtȱausȱRechnern,ȱSoftȬ ware,ȱPeripherie,ȱÜbertragungsmedienȱundȱeinemȱSatzȱvonȱOSIȬStandardsȱfürȱdieȱ KommunikationȱmitȱanderenȱrealenȱoffenenȱSystemen.ȱDasȱOSIȬArchitekturmodellȱ normtȱnurȱdieȱInteraktionen,ȱnichtȱaberȱdieȱlokaleȱImplementierungȱinȱeinemȱreaȬ lenȱ System.ȱ ȈOffenheitȈȱ wirdȱ alsoȱ nurȱ durchȱ dieȱ genormtenȱ KommunikationsmeȬ chanismenȱunterstützt.ȱFürȱjedeȱderȱSchichtenȱ1ȱbisȱ6ȱdesȱISO/OSIȬReferenzmodellsȱ istȱeinȱbestimmtesȱDienstelementȱ(ServiceȱElement)ȱzurȱNutzungȱdurchȱdieȱdarüberȬ liegendeȱ Schichtȱ definiert.ȱ Einȱ Dienstelementȱ bestehtȱ ausȱ einemȱ oderȱ mehrerenȱ Dienstenȱ (Services),ȱ dieȱ wiederumȱ alsȱ Dienstprimitiveȱ (Serviceȱ Primitives)ȱ definiertȱ werden.ȱ Zurȱ Nachrichtenübertragungȱ sindȱ fürȱ jedeȱ Schichtȱ Protokolleȱ definiert.ȱ Einȱaktives,ȱfunktionsfähigesȱElementȱeinerȱSchichtȱwirdȱalsȱEntityȱ(oderȱInstanz15)ȱ bezeichnet,ȱderȱtatsächlichȱablaufendeȱCodeȱeinerȱEntityȱalsȱInvocation.ȱȱ
ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ OSIȬTPȱistȱsehrȱstarkȱmitȱdemȱSNAȬProtokollȱLU6.2ȱvonȱIBMȱvergleichbar.ȱ
14
ȱ Derȱengl.ȱBegriffȱEntityȱkannȱauchȱimȱDeutschenȱmitȱInstanzȱübersetztȱwerden.ȱȱ
15
ȱ
261
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ ALU (lokal) AE SAO ROSE SACF ASCE OSI-Schichten 1-6
ACSE AE ALU SAO SACF ROSE
Association Control Service Element Application Entity Application Layer User Single Association Object Single Association Control Function Remote Operation Service Element
ȱ
Abbildungȱ4Ȭ20:ȱBeispielȱfürȱeinenȱAnwendungsprozessȱmitȱeinemȱSAOȱ
Imȱ OSIȬSprachgebrauchȱ bestehtȱ eineȱ verteilteȱ Anwendungȱ ausȱ AnwendungsproȬ zessen,ȱ dieȱ miteinanderȱ kommunizieren.ȱ Einȱ Anwendungsprozessȱ verwendetȱ dieȱ DiensteȱseinesȱlokalenȱoffenenȱSystemsȱinkl.ȱderȱSchichtenȱ1ȱbisȱ6.ȱErȱenthältȱeinenȱ lokalenȱTeil,ȱderȱaußerhalbȱderȱNormierungȱliegtȱ(auchȱApplicationȱLayerȱUserȱoderȱ ALUȱgenannt)ȱundȱeinenȱTeil,ȱderȱBestandteilȱdesȱoffenenȱSystemsȱistȱ(Applicationȱ Entity,ȱAE).ȱDaȱdieȱSchichtȱsiebenȱdurchȱdieȱVielfaltȱderȱmöglichenȱAnwendungenȱ sehrȱkomplexȱist,ȱkannȱsieȱnichtȱdurchȱeinenȱeinzigenȱDienstȱrepräsentiertȱwerden.ȱ Stattdessenȱ werdenȱ mehrereȱ Basiselemente,ȱ dieȱ ApplicationȱServiceȱElementsȱ (ASE)ȱ definiert.ȱ Standardisierteȱ ASEsȱ sindȱ zumȱ Beispielȱ FTAM,ȱ ACSE,ȱ ROSE,ȱ CMISE,ȱ CCRSEȱ undȱ TPSE.ȱ Eineȱ Anwendungȱ wähltȱ einenȱ Satzȱ vonȱ ASEsȱ zurȱ Erfüllungȱ ihrerȱ Aufgabenȱ aus.ȱ Zusammenȱ mitȱ einerȱ Singleȱ Associationȱ Controlȱ Functionȱ (SACF),ȱ dieȱ fürȱ dieȱ Koordinationȱ verantwortlichȱ ist,ȱ bildetȱ einȱ Satzȱ vonȱ ASEsȱ einȱ Singleȱ Associationȱ Objectȱ (SAO).ȱ Abbildungȱ 4Ȭ20ȱ zeigtȱ einenȱ Anwendungsprozessȱ mitȱeinemȱSAOȱbestehendȱausȱROSEȱundȱACSE.ȱ Zweiȱ AEsȱ könnenȱ miteinanderȱ kommunizieren,ȱ wennȱ sieȱ dasȱ gleicheȱ SAOȱ verȬ wenden.ȱ Eineȱ Kommunikationsbeziehungȱ derȱ Schichtȱ 7ȱ wirdȱ alsȱ Assoziationȱ beȬ zeichnet.ȱ Assoziationenȱ werdenȱ durchȱ ACSEȱ (Associationȱ Controlȱ Serviceȱ EleȬ ment)ȱverwaltet,ȱdasȱvonȱdenȱmeistenȱanderenȱASEsȱverwendetȱwird.ȱEinȱAEȱkannȱ beliebigȱ vieleȱ SAOsȱ verwenden,ȱ wobeiȱ einȱ SAOȱ wiederumȱ ausȱ ASEsȱ undȱ SAOsȱ bestehenȱ kann.ȱ Dieȱ Koordinationȱ mehrererȱ SAOsȱ regeltȱ eineȱ übergeordneteȱ CF.ȱ Eineȱ konkreteȱ Ausprägungȱ beziehungsweiseȱ einȱ tatsächlichȱ ablaufenderȱ Codeȱ einesȱAEȱheißtȱApplicationȱEntityȱInvocationȱ(AEI).ȱȱ
OSI CCRSE OSIȬCCRSEȱ (Commitment,ȱConcurrencyȱandȱRecoveryȱServiceȱElement)ȱ wurdeȱ inȱ denȱ 80erȱ Jahrenȱ spezifiziertȱ undȱ bietetȱ Diensteȱ undȱ entsprechendeȱ Protokolleȱ zurȱ KoȬ ordinationȱ verteilterȱ Transaktionen.ȱ CCRSEȱ istȱ einȱ ASEȱ undȱ verwendetȱ alsȱ KomȬ munikationsbasisȱACSEȱundȱdamitȱeinenȱvollständigenȱOSIȬStack.ȱEineȱTransaktiȬ onȱistȱdabeiȱalsȱMengeȱvonȱAktionenȱbeschrieben,ȱdieȱunterȱEinhaltungȱderȱACIDȬ Eigenschaftenȱausgeführtȱwerden.ȱCCRSEȱdientȱderȱKoordinationȱeinfacherȱAssoȬ
262 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ ziationen.ȱ Fürȱ dieȱ Abwicklungȱ mehrererȱ Assoziationenȱ durchȱ einenȱ AnwenȬ dungsprozessȱistȱeineȱübergreifendeȱCFȱmitȱderȱBezeichnungȱCCRCEȱ(Commitment,ȱ ConcurrencyȱandȱRecoveryȱCoordinationȱElement)ȱ erforderlich,ȱfürȱ dieȱ keineȱNormieȬ rungȱvorliegt.ȱCCRSEȱverwendetȱfürȱdieȱFunktionseinheitenȱ(AnwendungsprozesȬ se),ȱ dieȱ sichȱ anȱ einerȱ Transaktionȱ beteiligenȱ auchȱ dieȱ Bezeichnungȱ Knotenȱ (node).ȱ UmȱVerwirrungenȱzuȱvermeiden,ȱverwendenȱwirȱhierȱjedochȱdenȱBegriffȱAnwenȬ dungsprozess.ȱCCRSEȱbietetȱeinȱ2PCȬProtokollȱ(Varianteȱpresumedȱabort)ȱzurȱKoorȬ dinierungȱ verteilterȱ Transaktionenȱ an,ȱ dasȱ dieȱ Anwendungsprozesseȱ verwendenȱ könnenȱ undȱ fordert,ȱ dassȱ dieȱ überȱ CCRSEȱ kooperierendenȱ Prozesseȱ dieȱ ACIDȬ Eigenschaftenȱ einhaltenȱ sollen.ȱ Durchȱ dasȱ 2PCȬProtokollȱ unterstütztȱ CCRSEȱ nurȱ dieȱAtomaritätseigenschaft,ȱnichtȱaberȱdieȱanderenȱdreiȱEigenschaftenȱeinerȱACIDȬ Transaktion,ȱderȱBegriffȱCCRȱistȱalsoȱetwasȱirreführend.ȱ Mechanismenȱ zurȱ Behandlungȱ nebenläufigerȱ Zugriffeȱ aufȱ Objekte,ȱ zurȱ KonsisȬ tenzerhaltungȱundȱzurȱpersistentenȱSpeicherungȱsindȱnichtȱgenormtȱundȱunterlieȬ genȱ demȱ lokalenȱ Teilȱ einesȱ Anwendungsprozessesȱ (alsoȱ demȱ ALU).ȱ Derȱ ImpleȬ mentiererȱeinerȱverteiltenȱTransaktionsanwendungȱmussȱalsoȱselbstȱgeeigneteȱLoȬ ckingȬ,ȱ LoggingȬȱ undȱ RecoveryȬMechanismenȱ entwickeln,ȱ umȱ dieȱ ACIDȬ Eigenschaftenȱ erfüllenȱ zuȱ können.ȱ Dieȱ Regelnȱ fürȱ dieȱ Kommunikationȱ undȱ dasȱ VerhaltenȱderȱPartnerȱistȱinȱCCRSEȱdefiniert.ȱ Derȱ Prozess,ȱ derȱ eineȱ verteilteȱ Transaktionȱ initiiert,ȱ wirdȱ alsȱ Superiorȱ bezeichnetȱ undȱderȱausführendeȱProzessȱalsȱSubordinate.ȱDerȱprinzipielleȱAblaufȱeinerȱTransȬ aktionȱzwischenȱ zweiȱ Anwendungsprozessenȱ siehtȱ wieȱfolgtȱ ausȱ (vgl.ȱAbbildungȱ 4Ȭ21):ȱȱ – DerȱSuperiorȱstartetȱeineȱTransaktionȱmitȱdemȱDienstȬAufrufȱCȬBEGIN,ȱundȱ sendetȱanschließendȱzusammengehörendeȱOperationenȱanȱdenȱSubordinate.ȱ Dieȱ Transaktionȱ wirdȱ globalȱ eindeutigȱ überȱ einenȱ Atomicȱ Actionȱ Identifierȱ verwaltet,ȱsoȱdassȱparallelȱablaufendeȱTransaktionenȱunterschiedenȱwerdenȱ können.ȱFürȱdieȱeigentlichenȱOperationenȱwerdenȱkeineȱDiensteȱangeboten.ȱ HierfürȱsindȱdieȱDiensteȱeinerȱanderenȱASEȱzuȱverwenden.ȱȱ – BeiȱTransaktionsendeȱleitetȱerȱinȱderȱPhaseȱ1ȱdieȱCommitȬBehandlungȱ(überȱ CȬPREPARE)ȱein.ȱDerȱSubordinateȱbestätigtȱseineȱBereitschaftȱzumȱCommitȱ (CȬREADY)ȱoderȱteiltȱdemȱSuperiorȱüberȱCȬREFUSEȱmit,ȱdassȱerȱdieȱTransȬ aktionȱnichtȱerfolgreichȱbeendenȱkann.ȱDieȱCommitȬBehandlungȱkannȱauchȱ vomȱSubordinateȱdurchȱdirektenȱAufrufȱvonȱCȬREADYȱinitiiertȱwerden.ȱȱ – Inȱ derȱ zweitenȱ Phaseȱ ȱ werdenȱ alleȱ Subordinatesȱ derȱ Transaktionȱ vomȱ zuȬ ständigenȱ Superiorȱ überȱ CȬCOMMITȱ aufgefordert,ȱ dieȱ Transaktionȱ dauerȬ haftȱzuȱmachen.ȱȱ – Derȱ Subordinateȱ bestätigtȱ diesȱ überȱ CȬDONE.ȱ Inȱ Fehlerfällenȱ kannȱ dieȱ Transaktionȱ überȱ entsprechendeȱ Diensteȱ (CȬROLLBACK,ȱ CȬRESTART)ȱ zuȬ rückgesetztȱwerden.ȱȱ
ȱ
263
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Anwendung
Superior
Subordinate 1
Subordinate 2
… Commit C-PREPARE Phase 1
C-PREPARE C-READY
Log CommitEntscheidung
Log „ready“ C-READY
Log „ready“
C-COMMIT C-COMMIT
Phase 2
C-DONE
Log „committed“ C-DONE
Log „committed“
Log Ergebnis ok
ȱ Abbildungȱ4Ȭ21:ȱTypischerȱAblaufȱderȱCCRSEȬKommunikationȱ
CCRSEȱunterstütztȱheuristischeȱEntscheidungenȱvonȱunsicherenȱSubordinates.ȱDerȱ SubordinateȱdarfȱjedochȱdieȱTransaktionȱerstȱabschließen,ȱwennȱderȱSuperiorȱvonȱ derȱEntscheidungȱunterrichtetȱwurde.ȱDaȱderȱSuperiorȱzuȱeinerȱanderenȱEntscheiȬ dungȱ kommenȱ kann,ȱ sindȱ durchȱ heuristischeȱ Entscheidungenȱ Inkonsistenzenȱ möglich.ȱDeshalbȱschreibtȱCCRSEȱvor,ȱdassȱdieȱEntscheidungenȱvomȱAnwenderȱzuȱ treffenȱsind.ȱ Mitȱ CCRCEȱ kannȱ einȱ Superiorȱ mehrereȱ Assoziationenȱ gleichzeitigȱ bedienen,ȱ alsoȱ mehrereȱ Subordinatesȱ inȱ eineȱ Transaktionȱ einbeziehen.ȱ Dieȱ Subordinatesȱ könnenȱ wiederumȱihrerseitsȱalsȱSuperiorsȱandereȱSubordinatesȱmitȱeinbeziehen,ȱwodurchȱ einȱ dynamischerȱ Aktionsbaumȱ entsteht.ȱ Dieȱ Knotenȱ desȱ Baumesȱ sindȱ dieȱ AnwenȬ dungsprozesseȱ mitȱ denȱ entsprechendenȱ Dienstelementen.ȱ Dieȱ Kantenȱ werdenȱ alsȱ Transaktionszweigeȱ (Transactionȱ Branches)ȱ bezeichnetȱ undȱ stellenȱ dieȱ Aktionenȱ beziehungsweiseȱTeiltransaktionenȱdar.ȱJedeȱOperationȱgehtȱaberȱvonȱderȱWurzelȱ desȱBaumesȱaus,ȱalsoȱvomȱursprünglichenȱSuperior.ȱCCRCEȱistȱverantwortlichȱfürȱ dieȱKoordinationȱderȱbeteiligtenȱAnwendungsprozesse,ȱwieȱetwaȱfürȱdasȱÜbermitȬ telnȱ derȱ CȬBEGINsȱ zuȱ allenȱ Subordinatesȱ undȱ dieȱ Bearbeitungȱ derȱ CȬREADYȬ Antworten.ȱAbbildungȱ 4Ȭ22ȱzeigtȱ einenȱ Aktionsbaum,ȱ beiȱ demȱ einȱAnwendungsȬ prozessȱ alsȱ Superiorȱ auftritt,ȱ derȱ mitȱ zweiȱ weiterenȱ Anwendungsprozessenȱ (SuȬ bordinates)ȱeineȱTransaktionȱausführt.ȱNebenȱCCRSEȱwerdenȱdieȱServiceȱElementeȱ ROSEȱundȱACSEȱverwendet.ȱ ȱ
264 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ ALU (lokal) AE CCRCE SAO CCRSE
SACF
CCRSE
ROSE
ROSE
ACSE
ACSE
Transaction branches
AE
SACF
AE SAO
SAO CCRSE
CCRSE
SACF
SACF
ROSE
ROSE
Anwendungsprozesse als Subordinates
ACSE
ALU (lokal)
ACSE AE ALU ROSE SAO SACF CCRCE CCRSE
Anwendungsprozess als Superior
SAO
ACSE
ALU (lokal)
Association Control Service Element Application Entity Application Layer User Remote Operation Sevice Element Single Association Object Single Association Control Funktion Commitment, Concurrency and Recovery Coordination Element Commitment, Concurrency and Recovery Service Element
ȱ Abbildungȱ4Ȭ22:ȱAktionsbaumȱmitȱeinemȱSuperiorȱundȱSubordinatesȱ
OSI TPSE TPSEȱ (ISOȱ 1992aȱ undȱ ISOȱ 1992b)ȱ beinhaltetȱ dieȱ Diensteȱ vonȱ CCRSEȱ undȱ CCRCEȱ undȱführtȱalsȱwesentlicheȱErweiterungȱdenȱBegriffȱdesȱDialogsȱein.ȱDasȱTransaktiȬ onsprotokollȱwirdȱmitȱOSIȱTPȱbezeichnet.ȱEinȱDialogȱistȱeineȱüberȱeinerȱAssoziatiȬ onȱ liegendeȱ Kommunikationsbeziehungȱ zwischenȱ zweiȱ TPSUIsȱ (Transactionȱ ProȬ cessingȱServiceȱUserȱInvocation),ȱalsoȱzweierȱTPSEȬBenutzer.ȱTPSEȱbietetȱmehrereȱ Dienste,ȱ dieȱ zuȱ siebenȱ Funktionseinheitenȱ zusammengefasstȱ sindȱ (ȈDialogueȈ,ȱ ȈSharedȱControlȈ,ȱȈPolarizedȱControlȈ,ȱȈHandshakeȈ,ȱȈCommitȈ,ȱȈChainedȱTransacȬ tionsȈ,ȱȈUnchainedȱTransactionsȈ).ȱFürȱdieȱBenutzungȱderȱFunktionseinheitenȱgelȬ tenȱ verschiedeneȱ Regeln.ȱ Beispielsweiseȱ mussȱ dieȱ Funktionseinheitȱ ȈDialogueȈȱ immerȱverwendetȱwerden,ȱwährendȱȈSharedȱControlȈȱundȱȈPolarisedȱControlȈȱsichȱ gegenseitigȱausschließen.ȱDieȱwesentlichenȱDiensteȱsindȱinȱdenȱFunktionseinheitenȱ ȈDialogueȈȱundȱȈCommitȈȱenthalten.ȱ TPSEȱ verwendetȱ zurȱ Definitionȱ einerȱ Transaktionȱ dieȱ Begriffeȱ vonȱ CCRSE.ȱ Einȱ Superiorȱ istȱ verantwortlichȱ fürȱ dieȱ Transaktion,ȱ dieȱ Subordinatesȱ führenȱ sieȱ ausȱ
ȱ
265
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
undȱ könnenȱ wiederumȱ andereȱ Subordinatesȱ inȱ dieȱ Transaktionȱ einbeziehen.ȱ Dieȱ beteiligtenȱ Anwendungsprozesseȱ beziehungsweiseȱ derenȱ TPSUIsȱ bildenȱ einenȱ Dialogbaum.ȱDieȱKnotenȱdesȱBaumesȱbildenȱdieȱTPSUIsȱundȱdieȱKantenȱstellenȱdieȱ Dialogbeziehungenȱdar.ȱȱ WährendȱderȱAusführungȱeinerȱTransaktionȱbildetȱsichȱdynamischȱeinȱTransaktiȬ onsbaum,ȱbeiȱdemȱdieȱKnotenȱwiederumȱdieȱTPSUIsȱundȱdieȱKantenȱdieȱTeiltransȬ aktionenȱ(TransactionȱBranches)ȱdarstellen.ȱBeiȱVerwendungȱderȱFunktionseinheitȱ ȈChainedȱTransactionsȈȱwirdȱzumȱDialogȱimplizitȱeinȱneuerȱTransaktionszweigȱimȱ Transaktionsbaumȱerzeugt.ȱ DialogȬȱ undȱ Transaktionsbaumȱ könnenȱ alsoȱ durchausȱ voneinanderȱ abweichen.ȱ Überȱ einenȱ Dialogbaumȱ könnenȱ auchȱ gleichzeitigȱ mehrereȱ Transaktionsbäumeȱ entstehen.ȱ Eineȱ TPSUIȱ kannȱ zuȱ einerȱ Zeitȱ nurȱ anȱ einerȱ Transaktionȱ beteiligtȱ sein.ȱ DieȱTPSUI,ȱwelcheȱdieȱTransaktionȱeinleitet,ȱvergibtȱeineȱglobalȱeindeutigeȱTransȬ aktionsidentifikationȱ (entsprichtȱ demȱ AtomicȱActionȱIdentifierȱ ausȱ CCRSE)ȱ undȱ istȱ auchȱ fürȱ dieȱ Beendigungȱ derȱ Transaktionȱ verantwortlich.ȱ Inȱ derȱ Regelȱ sindȱ DiaȬ logbäumeȱwesentlichȱlanglebigerȱalsȱTransaktionsbäume. ȱ
TPSEȱ bietetȱ wieȱ CCRSEȱ nurȱ Unterstützungȱ zurȱ Erzielungȱ derȱ AtomaritätseigenȬ schaft,ȱ nichtȱ jedochȱ fürȱ dieȱ anderenȱ ACIDȬEigenschaften.ȱ Dieȱ Erfüllungȱ dieserȱ Transaktionsanforderungenȱ liegtȱ außerhalbȱ derȱ OSIȬSicht.ȱ Fürȱ denȱ RecoveryȬFallȱ giltȱinȱPhaseȱ1ȱwieȱbeiȱCCRSEȱpresumedȱabort.ȱBeiȱderȱFehlerbehandlungȱsindȱauchȱ heuristischeȱEntscheidungenȱderȱSubordinatesȱzulässig.ȱInȱPhaseȱ2ȱistȱeinȱzusätzliȬ cherȱMechanismusȱzuȱFehlerbehebungȱmöglich.ȱBeiȱAusfallȱeinerȱAssoziationȱstelltȱ TPSEȱeinenȱTPȬChannelȱalsȱweitereȱAssoziationȱzurȱFehlerbehebungȱzurȱVerfügung.ȱ ÜberȱdieseȱAssoziationȱistȱTPSEȱimȱGegensatzȱzuȱCCRSEȱinȱderȱLage,ȱnachȱeinemȱ AssoziationsabbruchȱeinȱvollständigesȱRecoveryȱdurchzuführen.ȱ EinemȱTPSUȱwerdenȱdieȱTPȬDiensteȱvomȱTPSPȱ(TransactionȱProcessingȱServiceȱProȬ vider)ȱ geliefert.ȱ Derȱ TPSPȱ istȱ alsȱ globalerȱ ServiceȬProviderȱ zuȱ sehen,ȱ derȱ fürȱ jedeȱ TPSUIȱ eineȱ TPPMȱ (Transactionȱ Processingȱ Protocolȱ Machine)ȱ bereitstelltȱ undȱ fürȱ jedeȱ AEIȱ eineȱ CPMȱ (Channelȱ Protocolȱ Machine).ȱ Eineȱ AEIȱ entsprichtȱ inȱ derȱ Regelȱ einerȱoderȱmehrerenȱTPSUIs,ȱdieȱjeweilsȱeinȱoderȱmehrereȱSAOsȱ(SingleȱAssociationȱ Object)ȱenthält.ȱ Einȱ SAOȱ istȱ fürȱ eineȱ Assoziationȱ mitȱ einerȱ PartnerȬTPSUIȱ verantȬ wortlichȱ undȱ bestehtȱ seinerseitsȱ wiederumȱ ausȱ einerȱ CFȱ (SACF,ȱ SingleȱAssociationȱ ControlȱFunction)ȱundȱmehrerenȱASEsȱ(ACSE,ȱTPASE,ȱCCRSE,ȱ...).ȱZurȱKoordinieȬ rungȱmehrererȱSAOsȱenthältȱeineȱAEȱeineȱübergeordneteȱCFȱ(MACF,ȱMultipleȱAsȬ sociationȱControlȱFunction).ȱȱ Abbildungȱ4Ȭ23ȱzeigtȱeineȱBeispielȬTPSUIȱinnerhalbȱeinerȱAEIȱmitȱzweiȱSAOs,ȱwoȬ beiȱdieȱTPPMȱundȱdieȱCPMȱnichtȱdargestelltȱwerden.ȱ
266 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ AEI MACF SAO TPASE
ACSE AEI CCRSE MACF SACF SAO TPASE
SAO SACF
TPASE
CCRSE
CCRSE
ACSE
ACSE
SACF
Association Control Service Element Application Enity Invocation Commitment, Concurrendy and Recovery Service Element Multiple Association Control Function Single Association Control Function Single Association Object Transaction Processing Application Service Element
ȱ Abbildungȱ4Ȭ23:ȱTPSUIȱmitȱzweiȱSAOsȱfürȱzweiȱDialogeȱ
4.4.2
Das DTP-Modell
InȱdiesemȱAbschnittȱwirdȱdasȱDTPȬModellȱeinführendȱbeschrieben.ȱDiesesȱModellȱ repräsentiertȱdenȱwohlȱderzeitȱwichtigstenȱStandardȱfürȱdieȱverteilteȱTransaktionsȬ verarbeitung.ȱ ȱ Eineȱ ausführlicheȱ Beschreibungȱ desȱ Modellsȱ undȱ seinerȱ StandardȬ APIsȱfindetȱsichȱinȱ(DTPȱ1991).ȱ
Überblick Dasȱ DTPȬModellȱ (Distributedȱ Transactionȱ Model)ȱ wurdeȱ fürȱ dieȱ Entwicklungȱ loȬ kalerȱ undȱ verteilterȱ Transaktionsanwendungenȱ konzipiertȱ undȱ wirdȱ heuteȱ vorȬ wiegendȱzurȱIntegrationȱheterogenerȱDatenbanksystemeȱeingesetzt.ȱAlleȱgängigenȱ DBMSȱunterstützenȱdasȱDTPȬModellȱundȱbietenȱentsprechendeȱSchnittstellenȱan.ȱ Umȱ dasȱ Modellȱ inȱ einenȱ Standardȱ zuȱ überführen,ȱ hatȱ dieȱ X/Open16ȱihrȱ ReferenzȬ modellȱ mitȱ konkretenȱ Schnittstellenȱ ausgestattet.ȱ Derȱ Standardȱ beschreibtȱ jedochȱ nicht,ȱwieȱdieȱeinzelnenȱlogischenȱKomponentenȱdesȱReferenzmodellsȱaufȱeinȱkonȬ kretesȱ Transaktionsverarbeitungssystemȱ umgesetztȱ werden.ȱ Dasȱ DTPȬModellȱ beȬ inhaltetȱfolgendeȱTeilkonzepte:ȱȱ – Transaktionsmodelle:ȱ Dasȱ DTPȬModellȱ unterstütztȱ nurȱ dasȱ TransaktionsmoȬ dellȱ derȱ Flatȱ Transactions,ȱ keineȱ Nestedȱ Transactions.ȱ Weiterhinȱ kannȱ derȱ Transaktionsinitiatorȱ vorȱ demȱ Beginnȱ jederȱ Transaktionȱ wählen,ȱ obȱ erȱ dasȱ Modellȱ derȱ Chainedȱ Transactionsȱ oderȱ aberȱ sog.ȱ Unchainedȱ Transactionsȱ verȬ wendenȱwill.ȱȱ – Interoperabilität:ȱDasȱDTPȬModellȱunterstütztȱverteilteȱTransaktionenȱaufȱBaȬ sisȱdesȱProtokollsȱOSIȱTP.ȱȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ X/OpenȱwurdeȱinȱOpenȱGroupȱumbenannt.ȱ
16
ȱ
267
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ – Zuordnungȱ vonȱ Anwendungsprogrammenȱundȱ Transaktionen:ȱ Dasȱ DTPȬModellȱ erlaubtȱjedemȱThreadȱeinesȱAnwendungsprogrammsȱdesȱTransaktionsinitiaȬ torsȱmax.ȱeineȱaktiveȱTransaktionȱzuȱeinemȱZeitpunkt.ȱEineȱImplementationȱ desȱ Modellsȱ kannȱ aberȱ entwederȱ einȱ oderȱ mehrereȱ aktiveȱ Transaktionenȱ jeȱ Prozessȱerlauben.ȱȱ
Architektur und Standardschnittstellen Dieȱ imȱ DTPȬModellȱ beschriebeneȱ logischeȱ Architekturȱ einesȱ Transaktionssystemsȱ kenntȱvierȱverschiedeneȱKomponenten:ȱ – Anwendungsprogrammeȱ(AP),ȱdieȱTransaktionenȱabwickelnȱ – Ressourcenmanagerȱ(RM)ȱzurȱ Bearbeitungȱ vonȱ Objekten.ȱ Beispielsweiseȱ istȱ imȱDTPȬModellȱeinȱDBMSȱalsȱRessourcenmanagerȱzurȱVerwaltungȱvonȱDaȬ tenbankobjektenȱzuȱsehen.ȱ – Transaktionsmanagerȱ(TM)ȱzurȱVerwaltungȱderȱTransaktionskontexteȱlokaȬ lerȱundȱverteilterȱTransaktionenȱ – Spezielleȱ Ressourcenmanagerȱ zurȱ Kommunikationȱ zwischenȱ denȱ anȱ einerȱ TransaktionȱbeteiligtenȱKnotenȱ(CommunicationȱResourceȱManager,ȱCRM).ȱ BeiȱverteiltenȱTransaktionenȱistȱderȱCRMȱderȱStellvertreterȱfürȱalleȱentfernȬ tenȱRMs,ȱdieȱanȱderȱTransaktionȱbeteiligtȱsind.ȱ DBMSȱ alsȱ Ressourcenmanagerȱ könnenȱ anȱ einerȱ globalenȱTransaktionȱ beteiligtȱ sein,ȱ dieȱ vonȱ einemȱ demȱ XAȬStandardȱ entsprechendenȱ Transaktionsmanagerȱ koordiȬ niertȱwird.ȱ Dieȱ Implementierungȱ derȱ Komponentenȱ wirdȱ imȱ Modellȱ nichtȱ festgelegt.ȱ Dieȱ KommunikationȱderȱCRMsȱuntereinanderȱerfolgtȱüberȱdasȱvonȱderȱISOȱgenormteȱ 2PCȬTransaktionsprotokollȱOSIȱTP,ȱwasȱaufȱjedemȱKnotenȱeinenȱkomplettenȱOSIȬ Stackȱvoraussetzt.ȱȱ Dieȱ Schnittstellenȱ zwischenȱ denȱ Komponentenȱ sindȱ inȱ SchnittstellenspezifikatioȬ nenȱgenormt.17:ȱ – DieȱTXȬSchnittstelleȱzwischenȱAPȱundȱTMȱ – DieȱXAȬSchnittstelleȱzwischenȱTMȱundȱRMȱalsȱHerzstückȱdesȱDTPȬModellsȱ – Dieȱ XA+ȬSchnittstelleȱ zwischenȱ TMȱ undȱ CRMȱ alsȱ Erweiterungȱ derȱ XAȬ Schnittstelleȱ – DieȱXAPȬTPȬSchnittstelleȱzwischenȱCRMȱundȱOSIȱTPȱ – Dreiȱ Schnittstellenȱ zurȱ Nutzungȱ verschiedenerȱ KommunikationsparadigȬ menȱzwischenȱAPȱundȱCRM,ȱundȱzwarȱfürȱRemoteȱProcedureȱCallsȱ(TxRPC),ȱ PeerȬtoȬPeerȬKommunikationȱ (CPIȬC)ȱ undȱ fürȱ dieȱ ClientȬServerȬKommuniȬ kationȱ(XATMIȬSchnittstelle)ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ DieȱSchnittstellenȱsindȱinȱ(DTPȱ1991,ȱDTPȱ1992,ȱDTPȱ1993a,ȱDTPȱ1993b,ȱDTPȱ1993c,ȱDTPȱ 1993d,ȱDTPȱ1993e,ȱDTPȱ1993f)ȱbeschrieben.ȱ
17
268 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ EinȱAP,ȱeinȱTMȱundȱeinȱoderȱmehrereȱRMsȱwerdenȱzuȱeinerȱInstanzȱ(Instance)ȱzuȬ sammengefasst.ȱ Eineȱ verteilteȱ Anwendungȱ bestehtȱ ausȱ zweiȱ oderȱ mehrerenȱ InȬ stanzen,ȱ wobeiȱ jederȱ Instanzȱ nochȱ einȱ CRMȱ hinzugefügtȱ wird.ȱ ȱ Eineȱ Instanzȱ istȱ somitȱeineȱkonkreteȱImplementierungȱdesȱModellsȱundȱenthältȱeinȱkonkretesȱAP,ȱ einenȱkonkretenȱTMȱundȱeinenȱoderȱmehrereȱkonkreteȱRMsȱ(sieheȱAbbildungȱ4Ȭ24).ȱȱ AP
RM1 … RMn
TM
ȱ Abbildungȱ4Ȭ24:ȱInstanzȱimȱDTPȬModellȱ
MehrereȱInstanzen,ȱdieȱdenȱgleichenȱTMȱverwenden,ȱwerdenȱzuȱeinerȱTMȬDomainȱ (Transaktionsdomäne)ȱzusammengefasst.ȱEsȱwirdȱsowohlȱdieȱWeitergabeȱvonȱTransȬ aktionsgrenzenȱ anȱ fremdeȱ Transaktionsdomänenȱ alsȱ auchȱ dieȱ Übernahmeȱ vonȱ TransaktionsgrenzenȱausȱfremdenȱTransaktionsdomänenȱunterstützt.ȱ DerȱZugriffȱaufȱdieȱRMsȱerfolgtȱüberȱdieȱvonȱdiesenȱzurȱVerfügungȱgestelltenȱAPIs,ȱ zumȱBeispielȱüberȱSQLȱfürȱdenȱZugriffȱaufȱrelationaleȱDatenbanken.ȱX/OpenȱDTPȱ unterstütztȱfürȱjedenȱRMȬTypȱeineȱbeliebigeȱAnzahlȱvonȱInstanzen.ȱDerȱTMȱweistȱ jederȱInstanzȱeinesȱRMsȱeinenȱeindeutigenȱIdentifikatorȱzuȱundȱgibtȱmitȱjedenȱAufȬ rufȱanȱderȱXAȬSchnittstelleȱdiesenȱimȱParameterȱrmidȱmit.ȱ Dieȱ Schnittstellenspezifikationenȱ beschreibenȱ dieȱ Funktionsaufrufeȱ meistȱ inȱ derȱ Spracheȱ Cȱ oderȱ COBOLȱ undȱ gebenȱ detaillierteȱ Implementierungshinweise.ȱ Auchȱ dieȱEinbringungȱeigenerȱCRMsȱzurȱUnterstützungȱspeziellerȱKommunikationsproȬ tokolleȱwidersprichtȱnichtȱdemȱDTPȬModell.ȱ AP1
RM1 …
TM
RMn AP2
…
ȱ Abbildungȱ4Ȭ25:ȱTransaktionsdomäneȱimȱDTPȬModellȱ
ȱ
269
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Fürȱ dasȱ Verständnisȱ desȱ Zusammenspielsȱ derȱ Komponentenȱ istȱ derȱ Begriffȱ desȱ ThreadȬofȬControlȱ (kurz:ȱ Thread)ȱ vonȱ besondererȱ Bedeutung.ȱ Beiȱ derȱ Abwicklungȱ einerȱTransaktionȱmüssenȱAP,ȱTM,ȱCRMsȱundȱRMsȱdasȱgleicheȱVerständnisȱüberȱ denȱ Transaktionskontextȱ haben.ȱ Diesesȱ gemeinsameȱ Verständnisȱ wirdȱ auchȱ loȬ gischȱ alsȱ ThreadȬofȬControlȱ bezeichnet.ȱ Überȱ dieȱ Implementierungȱ einesȱ ThreadȬofȬ Controlȱ machtȱ dasȱ DTPȬModellȱ keineȱ Aussage.ȱ Amȱ einfachstenȱ istȱ natürlichȱ eineȱ ImplementierungȱinȱeinemȱBetriebssystemprozess.ȱ WeiterhinȱistȱderȱBegriffȱdesȱTransactionȱBranchesȱfürȱdasȱVerständnisȱwichtig.ȱEinȱ Transactionȱ Branchȱ kannȱ innerhalbȱ einerȱ globalenȱ Transaktionȱ erzeugtȱ werdenȱ undȱistȱTeilȱeinerȱglobalenȱTransaktion.ȱErȱhatȱeinenȱTransactionȱBranchȱIdentifier,ȱ derȱ wiederumȱ dieȱ Identifikationȱ fürȱ dieȱ übergreifendeȱ globaleȱ Transaktionȱ beinȬ haltet.ȱ Inȱ Abbildungȱ 4Ȭ26ȱ istȱ eineȱ globaleȱ Transaktionȱ mitȱ dreiȱ Transactionȱ BranȬ chesȱausȱSichtȱderȱAnwendngȱAP1ȱdargestellt.ȱ AP1
Transaction Branch 1
RM1
Transaction Branch 2 Transaction Branch 3
AP2
RM2
AP3
RM3
ȱ Abbildungȱ4Ȭ26:ȱBeispielȱeinesȱTransactionȱBranchesȱimȱDTPȬModellȱ
Abbildungȱ 4Ȭ27ȱ zeigtȱ dieȱ Komponentenȱ undȱ Schnittstellenȱ desȱ DTPȬModellsȱ imȱ Überblick,ȱwobeiȱdieȱPfeileȱuniȬȱbzw.ȱbidirektionaleȱDienstschnittstellenȱdarstellen.ȱ Imȱ Bildȱ sindȱzweiȱanȱ einerȱ Transaktionȱbeteiligteȱ Knotenȱ ersichtlich.ȱ Derȱ Knoten,ȱ inȱ demȱ dieȱ Transaktionȱ initiiertȱ wirdȱ (Transaktionsinitiator),ȱ wirdȱ auchȱ Superiorȱ Nodeȱ genannt,ȱ derȱ anȱ derȱ Transaktionȱ teilnehmendeȱ Knotenȱ dagegenȱ Subordinateȱ Node.ȱ Werdenȱ verteilteȱ RMsȱ inȱ derȱ Transaktionȱ verwendet,ȱ soȱ müssenȱ auchȱ CRMsȱundȱ entfernteȱ APsȱ involviertȱ werden.ȱ Derȱ CRMȱ arbeitetȱ alsȱ lokalerȱ Stellvertreterȱ undȱ beauftragtȱ dieȱ entferntenȱ TMsȱ mitȱ derȱ CommitȬBearbeitungȱ fürȱ ihreȱ Knoten.ȱ Derȱ lokaleȱ TMȱ führtȱ dieȱ Ergebnisseȱ derȱ lokalenȱ RMsȱ undȱ derȱ entferntenȱ TMsȱ zusamȬ menȱundȱentscheidetȱüberȱdenȱAusgangȱderȱTransaktion.ȱEinȱentfernterȱRMȱkannȱ nichtȱdirekt,ȱsondernȱnurȱüberȱeinȱaufȱdemȱKnotenȱliegendesȱAPȱverwendetȱwerȬ den.ȱȱ ImȱDTPȬModellȱsindȱkeineȱStandarddiensteȱfürȱLogging,ȱConcurrencyȱControlȱundȱ Recoveryȱ beschrieben.ȱ Wennȱ einȱ DBMSȱ alsȱ RMȱ fungiert,ȱ stelltȱ dasȱ keinȱ großesȱ Problemȱdar,ȱdaȱdieseȱDiensteȱohnehinȱimȱDBMSȱintegriertȱsind.ȱWirdȱaberȱeinȱRMȱ neuȱ entwickelt,ȱ müssenȱ auchȱ dieseȱ Diensteȱ mitȱ implementiertȱ werden.ȱ Einȱ RMȱ
270 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ mussȱselbstȱfürȱdieȱNebenläufigkeitskontrolleȱbeimȱZugriffȱaufȱseineȱObjekteȱsorȬ gen,ȱsofernȱerȱkonkurrierendeȱZugriffeȱerlaubt.ȱWeiterhinȱmussȱerȱdieȱpersistenteȱ Speicherungȱ derȱ Objekteȱ selbstȱ organisierenȱ undȱ erȱ istȱ fürȱ dasȱ Loggingȱ undȱ dasȱ Recoveryȱverantwortlich.ȱEineȱspezielleȱLoggingȬȱundȱRecoveryȬStrategieȱwirdȱimȱ DTPȬModellȱnichtȱbevorzugt,ȱsieȱmussȱaberȱdasȱ2PCȬProtokollȱausreichendȱunterȬ stützen.ȱ Superior Node
Subordinate Node
AP z.B. SQL
TX
AP TxRPC XATMI CPI-C
TM RM
XA+
z.B. SQL
CRM
XA
RM
TX
TM
TxRPC XATMI CPI-C
XA+
XAP-TP
XAP-TP
OSI TP
AP CPI-C CRM OSI TP RM SQL TM TxRPC TX XA XA+ XAP-TP XATMI
CRM
XA
OSI TP
Application Program Common Programming Interface for Communication Communication Resource Manager Open Systems Interconnection Transaction Processing Resource Manager Structured Query Language Transaction Manager Transactional Remote Procedure Call Interface zwischen AP und TM Interface zwischen RM und TM Interface zwischen CRM und TM X/Open Transaction Processing API Application/Transaction Management Interface
ȱ Abbildungȱ4Ȭ27:ȱKomponentenȱundȱSchnittstellenȱdesȱDTPȬModellsȱ
Eineȱ Besonderheitȱ desȱ2PCȬProtokollsȱistȱ dieȱ Möglichkeitȱ einesȱRM,ȱ selbstständigȱ eineȱ heuristischeȱ Entscheidungȱ überȱ denȱ Ausgangȱ einerȱ Transaktionȱ zuȱ treffen.ȱ Diesȱ istȱ zumȱ Beispielȱ dannȱ sinnvoll,ȱ wennȱ dieȱ Kommunikationȱ mitȱ demȱ TMȱ fürȱ längereȱ Zeitȱ unterbrochenȱ wird.ȱ Inȱ diesemȱ Fallȱ kannȱ derȱ RMȱ selbstständigȱ eineȱ Transaktionȱbeenden,ȱohneȱdasȱErgebnisȱzuȱkennen.ȱDieȱEntscheidungȱmussȱaberȱ aufbewahrtȱundȱnachȱWiederaufnahmeȱderȱVerbindungȱmitȱdemȱTMȱabgestimmtȱ werden.ȱ
ȱ
271
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Die TX-Schnittstelle Dieȱ TXȬSchnittstelleȱ wirdȱ einemȱ APȱ zurȱ Verfügungȱ gestellt,ȱ umȱ Transaktionenȱ abzuwickeln.ȱ Alleȱ Aufrufeȱ anȱ derȱ TXȬSchnittstelleȱ einesȱ APȱ werdenȱ blockierendȱ ausgeführt,ȱ dasȱ APȱ wartetȱ alsoȱ aufȱ dasȱ Ergebnis.ȱ Dieȱ Operationenȱ derȱ TXȬ Schnittstelleȱ werdenȱ inȱ derȱ Regelȱ überȱ eineȱ Bibliothekȱ bereitgestellt.ȱ Dieȱ TXȬ Schnittstelleȱ wurdeȱ inȱ Cȱ definiert.ȱ Wieȱ manȱ anȱ demȱ folgendenȱ Codeausschnittȱ erkennenȱkann,ȱenthältȱTXȱimȱWesentlichenȱOperationen,ȱdieȱesȱeinemȱAPȱermögȬ lichen,ȱTransaktionsklammernȱzuȱsetzen.ȱ … struct tx_info_t { XID xid; COMMIT_RETURN when_return; TRANSACTION_CONTROL transaction_control; TRANSACTION_TIMEOUT transaction_timeout; TRANSACTION_STATE transaction_state; }; typedef struct tx_info_t TXINFO; extern int tx_begin(void); extern int tx_close(void); extern int tx_commit(void); extern int tx_info(TXINFO *); extern int tx_open(void); extern int tx_rollback(void); extern int tx_set_commit_return (COMMIT_RETURN); extern int tx_set_transaction_control (TRANSACTION_CONTROL); extern int tx_set_transaction_timeout (TRANSACTION_TIMEOUT); …
Fürȱ jedeȱ Transaktionȱ werdenȱ überȱ denȱ Datentypenȱ TXINFOȱ Informationenȱ wieȱ eineȱ globaleȱ Identifikationȱ (XID)ȱ undȱ derȱ Transaktionsstatusȱ verwaltet.ȱ Dieseȱ InȬ formationenȱ könnenȱ überȱ dieȱ Funktionȱ tx_infoȱ abgefragtȱ werden.ȱ Einȱ APȱ kannȱ auchȱ überȱ dieȱ Funktionȱ tx_set_tranasction_timeoutȱ eineȱ Zeitbegrenzungȱ fürȱ eineȱ Transaktionȱvorgeben.ȱ
Die XA-Schnittstelle DaȱdasȱXAȬInterfaceȱimȱDTPȬModellȱeineȱbesonderereȱBedeutungȱhat,ȱsollȱesȱhierȱ kurzȱ erläutertȱ werden.ȱ Weitereȱ Informationenȱ zuȱ denȱ anderenȱ Schnittstellenȱ (TxRPC,ȱ XATMI,ȱ CPIȬC,ȱ XA+,ȱ XAPȬTP)ȱ sindȱ derȱ angegebenenȱ Literaturȱ zuȱ entȬ nehmen.ȱ EinȱRMȱstelltȱgemäßȱXAȬSchnittstellenspezifikationȱeineȱexterneȱVariableȱdesȱTypsȱ xa_switch_tȱ alsȱ Schnittstelleȱ fürȱ denȱ TMȱ zurȱ Transaktionskoordinationȱ bereit.ȱ Dieȱ
272 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ Strukturȱsiehtȱvereinfachtȱwieȱfolgtȱausȱ(CȬNotation)ȱundȱenthältȱimȱWesentlichenȱ ZeigerȱaufȱdieȱFunktionenȱderȱXAȬSchnittstellen:ȱ struct xa_switch_t { … int (*xa_open_entry)(char *, int, long); int (*xa_close_entry)(char *, int, long); int (*xa_start_entry)(XID *, int, long); int (*xa_end_entry)(XID *, int, long); int (*xa_rollback_entry)(XID *, int, long); int (*xa_prepare_entry)(XID *, int, long); int (*xa_commit_entry)(XID *, int, long); int (*xa_recover_entry)(XID *, long, int, long); int (*xa_forget_entry)(XID *, int, long); int (*xa_complete_entry)(int *, int *, int, long); };
Dieȱ definiertenȱ Funktionenȱ desȱ XAȬInterfaceȱ werdenȱ typischerweiseȱ blockierendȱ aufgerufen,ȱ esȱ gibtȱ aberȱ auchȱ dieȱ Möglichkeitȱ derȱ nichtȬblockierendenȱ (asynchroȬ nen)ȱ Ausführung.ȱ Einȱ Transaktionsmanagerȱ nutztȱ dieȱ XAȬRoutinenȱ derȱ RMsȱ beiȱ BedarfȱnachȱvorgegebenenȱRegeln:ȱ – DieȱRoutineȱxa_openȱwirdȱverwendet,ȱumȱeineȱVerbindungȱzumȱRMȱaufzuȬ bauenȱundȱxa_closeȱwirdȱzumȱAbbauȱeinerȱVerbindungȱaufgerufen.ȱDieȱVerȬ bindungȱbeziehtȱsichȱdabeiȱaufȱdenȱThread.ȱNachȱdemȱStartȱfordertȱz.B.ȱeinȱ TPȬMonitorȱ denȱ Transaktionsmanagerȱ auf,ȱ alleȱ Ressourcenmanagerȱ (RMs)ȱ zuȱöffnen,ȱdieȱinȱeinerȱGruppeȱvonȱAnwendungsservernȱdefiniertȱsind.ȱDerȱ Transaktionsmanagerȱ übergibtȱ dieȱ xa_openȬAufrufeȱ anȱ dieȱ RessourcenmaȬ nager,ȱdamitȱdieseȱfürȱdieȱDTPȬVerarbeitungȱinitialisiertȱwerdenȱkönnen.ȱImȱ RahmenȱdieserȱStartprozedurȱführtȱderȱTransaktionsmanagerȱeineȱResynchȬ ronisationȱ(resync)ȱdurch,ȱumȱalleȱunbestätigtenȱTransaktionenȱaufzulösen.ȱ – DieȱRoutinenȱxa_startȱundȱȱxa_endȱwerdenȱbenutzt,ȱumȱeinemȱRMȱmitzuteiȬ len,ȱ dassȱ einȱ Threadȱ seineȱ Arbeitȱ fürȱ eineȱ Transaktion,ȱ gemäßȱ DTPȬModellȱ fürȱ einenȱ sog.ȱ Transactionȱ Branchȱ (Transaktionsverzweigung)ȱ alsȱ Teilȱ einerȱ globalenȱTransaktion,ȱbeginntȱbzw.ȱbeendet.ȱEinȱTransactionȱBranchȱwirdȱinȬ nerhalbȱeinesȱThreadȬofȬControlȱausgeführt,ȱdenȱalleȱBeteiligtenȱkennenȱmüsȬ sen.ȱ Einȱ Transactionȱ Branchȱ (wirȱ bleibenȱ imȱ Folgendenȱ vereinfachendȱ beiȱ demȱ Begriffȱ Transaktion)ȱ wirdȱ durchȱ eineȱ globalȱ eindeutigeȱ Identifikation,ȱ dieȱsog.ȱXIDȱgekennzeichnet.ȱ – DieȱRoutinenȱxa_prepare,ȱxa_rollbackȱundȱxa_commitȱwerdenȱfürȱdieȱTransakȬ tionskoordinierungȱ(2PC)ȱbenötigt.ȱDerȱTransaktionsmanagerȱkannȱeineȱeinȬ phasigeȱ (1PCȬProtokoll)ȱ anstelleȱ derȱ zweiȬphasigenȱ Festschreibungȱ durchȬ führen,ȱ wennȱ nurȱ einȱ Ressourcenmanagerȱ beteiligtȱ istȱ oderȱ wennȱ einȱ ResȬ sourcenmanagerȱ antwortet,ȱ dassȱ seineȱ Transaktionsverzweigungȱ imȱ reinenȱ Lesemodusȱarbeitet.ȱȱ
ȱ
273
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ – Dieȱ Routineȱ xa_recoverȱ ermöglichtȱ esȱ einemȱ TM,ȱ währendȱ derȱ InitialisieȬ rungsphaseȱvomȱRMȱeineȱListeȱderȱTransaktionenȱzuȱerhalten,ȱdieȱvonȱdieȬ semȱheuristischȱbeendetȱwurden.ȱȱ – Durchȱ xa_forgetȱ kannȱ derȱ RMȱ veranlasstȱ werden,ȱ dieseȱ Transaktionenȱ zuȱ vergessen,ȱd.h.ȱerȱmussȱsichȱkeineȱInformationenȱmehrȱfürȱdieseȱaufbewahȬ ren.ȱȱ – Zurȱ Durchführungȱ derȱ Resynchronisationȱ (imȱ RecoveryȬFall)ȱ setztȱ derȱ TransaktionsmanagerȱeinenȱAufrufȱxa_recoverȱanȱjedenȱRessourcenmanagerȱ mindestensȱeinmalȱab,ȱumȱunbestätigteȱTransaktionenȱzuȱidentifizieren.ȱDerȱ Transaktionsmanagerȱ vergleichtȱ dieȱ Antwortenȱ mitȱ denȱ Informationenȱ imȱ eigenenȱ Protokoll,ȱ umȱ zuȱ bestimmen,ȱ obȱ dieȱ Ressourcenmanagerȱ angewieȬ senȱwerdenȱsollen,ȱeineȱxa_commitȬOperationȱoderȱeineȱxa_rollbackȬOperationȱ fürȱdieseȱTransaktionenȱdurchzuführen.ȱWennȱeinȱRessourcenmanagerȱseineȱ Entscheidungȱ fürȱ eineȱ unbestätigteȱ Transaktionȱ aufgrundȱ einerȱ heuristiȬ schenȱ Operationȱ durchȱ denȱ Administratorȱ bereitsȱ festgeschriebenȱ oderȱ rückgängigȱ gemachtȱ hat,ȱ setztȱ derȱ Transaktionsmanagerȱ einenȱ Aufrufȱ xa_forgetȱanȱdiesenȱRessourcenmanagerȱab,ȱumȱdieȱResynchronisationȱabzuȬ schließen.ȱ – Dieȱ Routineȱ xa_completeȱ dientȱ schließlichȱ demȱ Zweck,ȱ asynchroneȱ Aufrufeȱ derȱobenȱangegebenenȱDiensteȱzuȱbeenden.ȱ
DemȱRMȱstehenȱseinerseitsȱzweiȱRoutinenȱzurȱVerfügung,ȱdieȱimȱTransaktionsmaȬ nagerȱimplementiertȱundȱzugänglichȱgemachtȱwerdenȱmüssen:ȱ – Dieȱ Routineȱ ax_regȱ dientȱ zumȱ dynamischenȱ Registrierenȱ einerȱ Transaktionȱ beimȱTM.ȱSieȱwirdȱbenutzt,ȱwennȱeinȱRMȱdynamischȱbekanntgibt,ȱdassȱeinȱ ThreadȱeinerȱAnwendungȱeineȱOperationȱanȱihnȱgeschicktȱhat.ȱBeimȱAufrufȱ wirdȱdieȱglobaleȱTransaktionsȬIdȱübergeben.ȱDerȱTransaktionsmanagerȱteiltȱ daraufhinȱdemȱRMȱimȱReturnwertȱmit,ȱobȱeineȱBeteiligungȱdesȱRMȱanȱdieserȱ TransaktionȱüberȱdenȱTMȱkoordiniertȱwirdȱoderȱnicht.ȱWirdȱeineȱXIDȱüberȬ geben,ȱ soȱ mussȱ derȱ RMȱ anȱ derȱ koordiniertenȱ Transaktionȱ teilnehmen.ȱ Beiȱ jederȱ neuenȱ Transaktionȱ mussȱ sichȱ derȱ RMȱ erneutȱ mitȱ ax_regȱ registrieren.ȱ ImȱanderenȱFall,ȱalsoȱwennȱderȱTMȱgeradeȱkeineȱglobaleȱTransaktionȱkenntȱ (NULLXIDȱwirdȱzurückgegeben),ȱführtȱderȱRMȱdieȱOperationenȱaußerhalbȱ einerȱvomȱTMȱkoordiniertenȱTransaktionȱaus.ȱȱ – Dieȱ Routineȱax_unregȱ dientȱ dazu,ȱ einemȱ TMȱ mitzuteilen,ȱ dassȱAktionenȱ eiȬ nesȱ RM,ȱ dieȱ sichȱ außerhalbȱ einerȱ bekanntenȱ Transaktionȱ befanden,ȱ abgeȬ schlossenȱ sind.ȱ Erstȱ wennȱ derȱ RMȱ nachȱ derȱ Teilnahmeȱ anȱ einerȱ „exterȬ nen“ȱTransaktionȱdieȱRoutineȱax_unregȱaufruft,ȱkannȱihnȱderȱTMȱwiederȱinȱ eineȱTransaktionȱmitȱeinbeziehen.ȱBisȱdahinȱlässtȱerȱdasȱinvolvierteȱAPȱkeineȱ neueȱglobaleȱTransaktionȱstartenȱundȱesȱdarfȱauchȱkeinȱandererȱRMȱanȱderȱ laufendenȱglobalenȱTransaktionȱteilnehmen.ȱDiesȱkönnteȱzuȱInkonsistenzenȱ führen.ȱ
274 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ Abbildungȱ 4Ȭ28ȱ zeigtȱ dieȱ Einbettungȱ derȱ XAȬRoutinenȱ inȱ denȱ TransaktionsmanaȬ gerȱundȱinȱeinenȱRessourcenmanager.ȱ xa_open
ax_reg
xa_close ax_unreg
xa_start xa_complete xa_prepare xa_commit xa_rollback xa_recover xa_end xa_forget
XA-fähiger TM (TM-Code)
Protokoll nicht standardisiert
X-fähiger RM (RM-Code)
ȱ
Abbildungȱ4Ȭ28:ȱZusammenspielȱzwischenȱTMȱundȱRMȱüberȱXAȱ
InȱderȱRegelȱinvolviertȱeinȱTMȱalleȱüberȱxa_openȱangemeldetenȱRMsȱinȱeineȱTransȬ aktion.ȱ axȬAufrufeȱ durchȱ denȱ RMȱ sindȱ dannȱ sinnvoll,ȱ wennȱ einȱ RMȱ nurȱ seltenȱ benutztȱ wird.ȱ Durchȱ Nutzungȱ dieserȱ Funktionȱ kannȱ nämlichȱ vermiedenȱ werden,ȱ dassȱ einȱ RMȱ inȱ eineȱ Transaktionȱ verwickeltȱ wird,ȱ fürȱ dieȱ erȱ garȱ nichtsȱ tunȱ muss.ȱ DieȱFestlegungȱderȱNutzungȱvonȱax_regȱundȱax_unregȱwirdȱinȱeinerȱVariablenȱdesȱ Typsȱxa_switch_tȱimȱAttributȱflagsȱgetroffen.ȱDieȱdynamischeȱRegistrierungȱistȱfleȬ xiblerȱ fürȱ denȱ RMȱ undȱ wirdȱ vonȱ einigenȱ DBMSȱ genutztȱ (z.B.ȱ vonȱ IBMȱ DB2).ȱ Einȱ RMȱ registriertȱ sichȱ beimȱ TMȱ nurȱ dannȱ mitȱ Hilfeȱ einesȱ ax_regȬAufrufs,ȱ wennȱ derȱ RMȱeineȱAnforderungȱfürȱseineȱRessourceȱempfängt.ȱȱ Fürȱ dieȱ statischeȱ Registrierungȱ istȱ esȱ erforderlich,ȱ dassȱ derȱ Transaktionsmanagerȱ (fürȱ jedeȱ Transaktionȱ =ȱ Transactionȱ Branch)ȱ dieȱ Folgeȱ vonȱ Aufrufenȱ xa_start,ȱ xa_begin,...,ȱ xa_endȱ anȱ alleȱ registriertenȱ Ressourcenmanagerȱ absetzt.ȱ Diesȱ giltȱ unȬ abhängigȱ davon,ȱ obȱ derȱ einzelneȱ Ressourcenmanagerȱ innerhalbȱ derȱ Transaktionȱ verwendetȱ wirdȱ oderȱ nicht.ȱ Diesesȱ Vorgehenȱ istȱ nichtȱ sehrȱ effizient,ȱ wennȱ nichtȱ ohnehinȱjederȱRessourcenmanagerȱanȱjederȱTransaktionȱbeteiligtȱist.ȱDerȱGradȱderȱ IneffizienzȱistȱproportionalȱzurȱAnzahlȱderȱdefiniertenȱRessourcenmanager.ȱ DieȱBereitstellungȱeinerȱBibliothekȱdurchȱjedenȱHerstellerȱeinesȱRMȱerlaubtȱes,ȱdassȱ dasȱ Transaktionsprotokoll,ȱ überȱ dasȱ TMȱ undȱ RMȱ kommunizieren,ȱ vomȱ RMȬ HerstellerȱentwickeltȱwirdȱundȱkeinemȱStandardȱentsprechenȱmuss.ȱ
ȱ
275
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
BeiȱderȱProgrammierungȱeinerȱAnwendungȱ(AP)ȱmussȱbeachtetȱwerden,ȱdassȱderȱ Verbindungsaufbauȱ undȱ dasȱ Setzenȱ derȱ Transaktionsgrenzenȱ implizitȱ erfolgt.ȱ Esȱ dürfenȱ daherȱ keineȱ RMȬDiensteȱ fürȱ dieseȱ Zweckeȱ (z.B.ȱ dbconnectȱ undȱ beginȱ bzw.ȱ commitȱwork)ȱverwendetȱwerden.ȱFürȱdenȱZugriffȱaufȱdieȱDatenȱeinesȱRMȱbenutztȱ dieȱ Anwendungȱ ansonstenȱ dieȱ üblichenȱ Schnittstellen,ȱ dieȱ dieserȱ bereitstelltȱ (z.B.ȱ EmbeddedȱSQLȱoderȱOracleȱCallȱInterface).ȱ Thread
TM Vor erster Transaktion
RM 1
RM 2
xa_open xa_open
Initialisierungen Initialisierungen
tx_begin
xa_start xa_start
tx_commit
xa_prepare Log „ready“ xa_prepare
2 PC
Log CommitEntscheidung Log Ergebnis
xa_commit
Log „ready“ Log „committed“
xa_commit xa_end
Log „committed“
xa_end
ok Nach letzter Transaktion
xa_close xa_close
ȱ Abbildungȱ4Ȭ29:ȱKommunikationȱzwischenȱTMȱundȱRMȱ(statischesȱRegistrieren)ȱ
Werdenȱ vonȱ einemȱ Objektserverȱ mehrereȱ RMsȱ benutzt,ȱ dürfenȱ dieȱ XAȬLibrariesȱ derȱ verschiedenenȱ Herstellerȱ natürlichȱ nichtȱ miteinanderȱ kollidieren,ȱ d.h.ȱ esȱ dürȬ fenȱz.B.ȱSymboleȱinnerhalbȱderȱverschiedenenȱBibliothekenȱnichtȱdoppeltȱvergebenȱ sein.ȱEinheitlicheȱRegelungenȱzurȱVergabeȱexternerȱNamenȱfürȱVariableȱwurdenȱinȱ derȱSpezifikationȱnichtȱeingeführtȱundȱsindȱdaherȱdenȱImplementierernȱüberlassen.ȱ Inȱ Abbildungȱ 4Ȭ29ȱ istȱ derȱ Ablaufȱ derȱ Kommunikationȱ zwischenȱ TMȱ undȱ RMȱ beiȱ statischerȱ Registrierungȱ dargestellt.ȱ Derȱ TMȱ initialisiertȱ dieȱ RMsȱ mitȱ demȱ Aufrufȱ xa_openȱ undȱ beendetȱ dieȱ Bearbeitungȱ mitȱ xa_close.ȱ Dazwischenȱ könnenȱ beliebigȱ vieleȱ Transaktionenȱ ausgeführtȱ werden.ȱ Eineȱ (globale)ȱ Transaktion,ȱ anȱ derȱ einȱ oderȱmehrereȱlokaleȱRMsȱbeteiligtȱsind,ȱwirdȱimȱPrinzipȱwieȱfolgtȱabgewickelt:ȱ – Einȱ APȱ setztȱ einenȱ Funktionsaufrufȱ tx_beginȱ anȱ denȱ TMȱ ab,ȱ derȱ daraufhinȱ eineȱglobaleȱTransaktionsȬIdȱ(XID)ȱgeneriertȱundȱalleȱdemȱAPȱhinzugebunȬ denenȱ RMsȱ mitȱ Hilfeȱ derȱ XAȬSchnittstelleȱ (xa_start)ȱ überȱ denȱ Beginnȱ einerȱ Transaktionȱinformiert,ȱalsoȱdenȱTransaktionskontextȱpropagiert.ȱ
276 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ – DasȱAPȱführtȱnunȱüberȱdieȱspezifischenȱRMȬSchnittstellenȱseineȱOperationenȱ aus.ȱ – UmȱdieȱTransaktionȱzuȱbeenden,ȱruftȱdasȱAPȱdieȱFunktionȱtx_commitȱimȱErȬ folgsfallȱ bzw.ȱ tx_rollbackȱ zumȱ Zurücksetzenȱ derȱ Transaktionȱ auf.ȱ Beiȱ tx_commitȱwickeltȱderȱTMȱeinȱ2PCȬProtokollȱmitȱallenȱRMsȱabȱundȱübergibtȱ demȱAPȱdasȱErgebnis.ȱ TM
Thread
RM 1 Initialisierungen
tx_begin Operation
xa_reg
XID als Returnwert tx_commit
xa_prepare
Log „ready“
Weitere RMs... 2 PC Log CommitEntscheidung
xa_commit
Log „committed“
Log Ergebnis
ȱ Abbildungȱ4Ȭ30:ȱDynamischesȱRegistrierenȱanȱeinerȱTransaktionȱ
Derȱ Ablaufȱ einerȱ dynamischenȱ Transaktionsteilnahmeȱ unterȱ Verwendungȱ derȱ Routinenȱax_regȱistȱinȱderȱAbbildungȱ4Ȭ30ȱskizziert.ȱWieȱdieȱAbbildungȱzeigt,ȱwirdȱ derȱ RMȱ inȱ einerȱ Transaktionȱ erstȱ aktiv,ȱ wennȱ erȱ vonȱ einemȱ Anwendungsthreadȱ eineȱOperationȱempfängt.ȱErȱerkundigtȱsichȱdaraufhinȱbeimȱTM,ȱobȱdieȱTransaktiȬ onskoordinationȱ überȱ ihnȱ erfolgtȱ oderȱ nicht.ȱ Imȱ Beispielȱ koordiniertȱ derȱ TMȱ dieȱ Transaktion,ȱdaȱeineȱgültigeȱXIDȱanȱdenȱRMȱübergebenȱwird.ȱ Abbildungȱ4Ȭ31ȱzeigtȱeinȱSzenario,ȱanȱdemȱeinȱRMȱ(RMȱ1)ȱaußerhalbȱeinerȱbekannȬ tenȱglobalenȱTransaktionȱfürȱeinenȱThreadȬofȬControlȱaktivȱist.ȱDerȱTMȱsperrtȱdieseȱ Transaktionȱ fürȱ andereȱ RMsȱ undȱ lässtȱ dasȱ APȱ anȱ keinerȱ weiterenȱ Transaktionȱ mehrȱteilnehmen,ȱsolangeȱbisȱderȱbetroffeneȱRMȱsichȱmitȱax_unregȱzurückmeldet.ȱ
ȱ
277
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ Thread
TM
RM 1 Initialisierungen
Operation xa_reg Kein anderer RM darf sich an dieser Transaktion beteiligen
NULLXID als Returnwert
Weitere Operationen … commit xa_unreg TM lässt AP erst jetzt wieder in einer globalen Transaktion arbeiten
RM beendet Arbeit an der Transaktion und meldet dies dem TM
ȱ Abbildungȱ4Ȭ31:ȱRMȱarbeitetȱaußerhalbȱeinerȱglobalenȱTransaktionȱ
Unterstützung verteilter Transaktionen DaȱdieȱAusführungȱverteilterȱTransaktionenȱimȱDTPȬModellȱrechtȱkomplexȱistȱundȱ mehrereȱKomponentenȱinvolviertȱsind,ȱsollȱsieȱinȱdiesemȱAbschnittȱnochmalsȱkurzȱ erläutertȱwerden.ȱFürȱdieȱDurchführungȱvonȱverteiltenȱTransaktionenȱmüssenȱdieȱ TMȱmehrererȱTransaktionsdomänenȱkooperieren.ȱDiesȱbedeutet,ȱdassȱderȱübergeȬ ordneteȱTMȱdieȱihmȱuntergeordnetenȱTMȱundȱRMȱbenutzt.ȱWasȱdieȱTransaktionsȬ steuerungȱbetrifft,ȱdienenȱdieȱinȱdenȱverschiedenenȱTransaktionsdomänenȱbeteiligȬ tenȱCRMȱimȱWesentlichenȱderȱWeiterleitungȱderȱAufrufeȱderȱübergeordnetenȱTMȱ anȱdieȱuntergeordnetenȱRM.ȱ Derȱ untergeordneteȱ TMȱ steuertȱ dieȱ inȱ seinerȱ Transaktionsdomäneȱ gelegenenȱ KomponentenȱentsprechendȱdemȱFortschrittȱdesȱ2PCȬProtokollsȱderȱübergeordneȬ tenȱ Transaktionȱ (Greulichȱ 1997).ȱ PrepareȬȱ undȱ CommitȬAufrufeȱ durchȱ denȱ übergeȬ ordnetenȱTMȱwerdenȱanȱdenȱuntergeordnetenȱTMȱweitergeleitet.ȱAufȱdieseȱWeiseȱ pflanztȱ sichȱ derȱ jeweiligeȱ Aufrufȱ vomȱ TM,ȱ mitȱ demȱ dieȱ verteilteȱ Transaktionȱ beȬ gonnenȱwurdeȱ(=ȱWurzelȱdesȱAbhängigkeitsbaumsȱinȱAbbildungȱ4Ȭ32ȱlinks)ȱbisȱzuȱ denȱ verschiedenenȱ RMȱ (=ȱ Blätterȱ desȱ Abhängigkeitsbaums)ȱ fort.ȱ Nachȱ Empfangȱ derȱAntwortȱderȱadressiertenȱRMsȱwirdȱdasȱTransaktionsergebnisȱdemȱübergeordȬ netenȱ TMȱ zurückgereicht.ȱ Aufȱ dieseȱ Weiseȱ wirdȱ inȱ jedemȱ untergeordnetenȱ TMȱ eineȱTeilentscheidungȱundȱvomȱinitiierendenȱTMȱzuletztȱdieȱGesamtentscheidungȱ überȱ denȱ Transaktionsausgangȱ gefällt.ȱ Dasȱ Gesamtergebnisȱ erhältȱ schließlichȱ derȱ Transaktionsinitiator.ȱFallsȱbeiȱeinemȱRMȱeineȱheuristischeȱEntscheidungȱgetroffenȱ wurde,ȱmussȱnochȱeinȱForgetȬAufrufȱanȱalleȱbeteiligtenȱRMȱpropagiertȱwerden.ȱȱ
278 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ
ȱ Abbildungȱ4Ȭ32:ȱGlobaleȱTransaktionȱimȱDTPȬModellȱnachȱ(Greulichȱ1997)ȱ
Imȱ Falleȱ einesȱ Systemausfallsȱ währendȱ derȱ Koordinationȱ sorgtȱ derȱ TMȱ fürȱ dieȱ Fortsetzungȱ derȱ Verarbeitung.ȱ Nachdemȱ sichȱ alleȱ vomȱ Systemausfallȱ betroffenenȱ Komponentenȱ selbstständigȱ wiederhergestelltȱ haben,ȱ erkundigtȱ sichȱ derȱ TMȱ beiȱ allenȱihmȱbekanntenȱRM/CRMȱnachȱnichtȱabgeschlossenenȱTransaktionen.ȱDiesȱtutȱ er,ȱ indemȱ erȱ mitȱ Hilfeȱ derȱ Funktionȱ xa_recover(...)ȱ eineȱ Listeȱ allerȱ Transaktionenȱ bzw.ȱXIDsȱderȱbetroffenenȱTransaktionenȱanfordert.ȱImȱAnschlussȱdaranȱsteuertȱerȱ mitȱHilfeȱdesȱ2PCȬProtokollsȱdenȱAusgangȱdieserȱTransaktionen.ȱȱ Daȱ dieserȱ Vorgangȱ beiȱ tiefenȱ Transaktionsbäumenȱ relativȱ komplexȱ werdenȱ kann,ȱ sindȱinȱderȱPraxisȱmeistȱnurȱsehrȱflacheȱHierarchienȱvorzufinden.ȱDerȱüberwiegenȬ deȱ Einsatzȱ desȱ DTPȬModellsȱ istȱ dieȱ Anbindungȱ einesȱ DBMSȱ anȱ einenȱ TransaktiȬ onsmonitorȱ oderȱ Transaktionsmanager.ȱ Einȱ CRMȱ wirdȱ inȱ derȱ Praxisȱ nurȱ seltenȱ eingesetzt.ȱ
4.4.3
OMG/CORBA-Transaktionsmodell
Überblick Derȱ Objectȱ Transactionȱ Serviceȱ (OTS)ȱ istȱ einerȱ derȱ imȱ Kontextȱ derȱ OMAȱ spezifiȬ ziertenȱCORBAȬServices.ȱErȱbietetȱCORBAȬObjektenȱgemäßȱOMAȱdieȱMöglichkeit,ȱ aufȱfestgelegteȱWeiseȱverteilteȱTransaktionenȱdurchzuführen.ȱȱ DieȱOMGȱwarȱsichȱbewusst,ȱdassȱOTSȱdaraufȱangewiesenȱist,ȱmitȱanderenȱTransakȬ tionsverarbeitungssystemenȱzusammenzuarbeiten.ȱDeswegenȱhatȱsieȱdieȱArchitekȬ turȱvonȱOTSȱverträglichȱmitȱdemȱDTPȬModellȱgemacht.ȱOTSȱliegenȱdaherȱimȱKernȱ dieȱgleichenȱKonzepteȱzugrunde.ȱȱ
ȱ
279
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
DieȱOMGȱhatȱdenȱHerstellernȱfürȱdieȱImplementierungȱderȱFunktionalitätȱvonȱOTSȱ gewisseȱFreiräumeȱgelassen.ȱMancheȱTeileȱderȱFunktionalitätȱsindȱzwingendȱvorȬ geschriebenȱundȱmancheȱoptional.ȱEinigeȱBeispieleȱhierzuȱsind:ȱ – DieȱSpezifikationȱvonȱOTSȱschreibtȱfürȱjedeȱImplementierungȱzwingendȱeinȱ Verfahrenȱ vor,ȱ dasȱ esȱ erlaubt,ȱ verteilteȱ Transaktionenȱ unterȱ Beteiligungȱ mehrererȱ OTSȬTransaktionsdomänen18ȱdurchzuführen.ȱ Eineȱ TransaktionsdomäȬ neȱvonȱOTSȱkannȱsichȱüberȱmehrereȱSystemeȱerstrecken.ȱDeswegenȱkönnenȱ undȱ dürfenȱ dieȱ verwendetenȱ Verfahrenȱ keinerleiȱ Annahmenȱ überȱ dieȱ VerȬ teilungȱ derȱ beteiligtenȱ Objekte,ȱ wieȱ beispielsweiseȱ überȱ gemeinsameȱ AdȬ ressräume,ȱmachen.ȱȱ – Dieȱ Spezifikationȱ siehtȱ fürȱ OTSȱ sowohlȱ dasȱ Transaktionsmodellȱ derȱ Flatȱ TransactionsȱalsȱauchȱdasȱderȱNestedȱTransactionsȱvor.ȱDieȱUnterstützungȱvonȱ NestedȱTransactionsȱistȱjedochȱoptional.ȱȱ – OTSȱ erlaubtȱ dieȱ flexibleȱ Kontrolleȱ darüber,ȱ obȱ einȱ aufgerufenesȱ Objektȱ anȱ einerȱ Transaktionȱ beteiligtȱ werdenȱ sollȱ oderȱ nicht.ȱ Jedeȱ Implementierungȱ mussȱdieȱbeidenȱinȱderȱSpezifikationȱbeschriebenenȱVerfahrenȱzurȱKontrolleȱ undȱPropagierungȱvonȱTransaktionenȱunterstützen.ȱDiesȱsindȱdieȱdirekteȱundȱ dieȱindirekteȱKontextpropagierung19.ȱ – Dieȱ Spezifikationȱ vonȱ OTSȱ erlaubtȱ Implementierungenȱ mitȱ einemȱ Ausführungspfad20,ȱaberȱauchȱmitȱoptionalȱmehrerenȱAusführungspfadenȱjeȱObȬ jektȱderȱtransaktionalenȱAnwendung.ȱȱ OTSȱ unterstütztȱ alsoȱ flacheȱ undȱ geschachtelteȱ Transaktionen,ȱ wobeiȱ letztereȱ fürȱ eineȱ Implementierungȱ optionalȱ sind.ȱ Fürȱ eineȱ Transaktionȱ geltenȱ dieȱ ACIDȬ EigenschaftenȱinȱvollemȱUmfang.ȱDasȱCommitȬProtokollȱistȱeinȱ2PCȬProtokoll,ȱdasȱ heuristischeȱEntscheidungenȱvonȱTeilnehmernȱunterstützt.ȱNurȱdieȱDienstschnittȬ stelleȱ desȱ 2PCȬProtokolls,ȱ nichtȱ dieȱ Implementierungȱ derselbenȱ istȱ imȱ Standardȱ vorgegeben.ȱ Einȱ 2PCȬProtokollȱ wurdeȱ durchȱ dieȱ OMGȱ nochȱ nichtȱ formalȱ spezifiȬ ziert.ȱ Diesȱ bedeutet,ȱ dassȱ dieȱ OTSȬImplementierungenȱ verschiedenerȱ Herstellerȱ derzeitȱnichtȱunbedingtȱmiteinanderȱkommunizierenȱkönnen.ȱ
Architektur des Transaction Service (OTS) Dieȱ Spezifikationȱ derȱ Schnittstellenȱ vonȱ OTSȱ bestehtȱ ausȱ zweiȱ Teilenȱ bzw.ȱ IDLȬ Modulen:ȱ Imȱ Modulȱ CosTransactionsȱ sindȱ dieȱ fürȱ transaktionalenȱ Anwendungenȱ wichtigenȱDatentypen,ȱExceptionsȱundȱSchnittstellenȱfestgelegt.ȱImȱModulȱCosTSȬ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ DerȱBegriffȱentsprichtȱderȱVerwendungȱimȱDTPȬModell.ȱ
18
ȱ Direkteȱ undȱ indirekteȱ Kontextpropagierungȱ deutetȱ grundsätzlichȱ an,ȱ obȱ derȱ Kontextȱ direktȱdurchȱdasȱAnwendungsprogrammȱoderȱindirektȱdurchȱOTSȱpropagiertȱwird.ȱDieȱ KontextpropagierungsvariantenȱwerdenȱnochȱweiterȱuntenȱinȱdiesemȱAbschnittȱerörtert.ȱ
19
ȱ Derȱ Begriffȱ desȱ Ausführungspfadesȱ istȱ imȱ Wesentlichenȱ einȱ Synonymȱ fürȱ denȱ Begriffȱ „ThreadȬofȬControl“.ȱ
20
280 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ Portabilityȱ werdenȱ dieȱ fürȱ dieȱ Kooperationȱ vonȱ OTSȱ undȱ ORBȱ notwendigenȱ Schnittstellenȱbeschrieben.ȱZuȱdenȱimȱModulȱCosTransactionsȱdefiniertenȱDatentyȬ penȱgehörenȱu.a:ȱȱ – Datentypen,ȱ dieȱ derȱ Kooperationȱ mitȱ derȱ transaktionalenȱ Anwendungȱ dieȬ nen.ȱȱ – Datentypen,ȱ dieȱ derȱ Unterstützungȱ derȱ Interoperabilitätȱ mitȱ anderenȱ OTSȬ Implementationenȱdienen.ȱDieseȱGruppeȱumfasstȱdieȱDefinitionȱderȱDatenȬ typenȱotid_t,ȱTransIdentityȱundȱPropagationContext.ȱ ExceptionsȱwerdenȱbeiȱOTSȱdazuȱverwendet,ȱFehlerȱzuȱmelden.ȱDieȱvonȱOTSȱdefiȬ niertenȱ Exceptionsȱ könnenȱ inȱ dreiȱ Gruppenȱ eingeteiltȱ werden:ȱ StandardȬ Exceptions,ȱheuristischeȱExceptionsȱundȱsonstigeȱExceptions.ȱ DerȱTransactionȱServiceȱkenntȱfolgendeȱKomponenten:ȱ – TransactionalȱClientȱ(TC)ȱ – TransactionalȱObjectsȱ(TO)ȱ – RecoverableȱObjectsȱ(RO)ȱ – TransactionalȱServersȱ – RecoverableȱServersȱ Derȱ TCȱ istȱ eineȱ ClientȬAnwendung,ȱ dieȱ innerhalbȱ vonȱ Transaktionenȱ Methodenȱ vonȱTOsȱbeziehungsweiseȱROsȱaufruft.ȱEinȱTransactionalȱServerȱverwaltetȱeinȱoderȱ mehrereȱTOs,ȱwobeiȱeinȱTOȱeinfachȱeinȱObjektȱist,ȱdasȱanȱeinerȱTransaktionȱbeteiȬ ligtȱ ist.ȱ TOsȱ verwendenȱ ihrerseitsȱ ROsȱ mitȱ ACIDȬEigenschaften,ȱ dieȱ vonȱ RecoveȬ rableȱServernȱverwaltetȱwerden.ȱEineȱTransaktionȱkannȱvieleȱMethodenȱbeliebigerȱ TOsȱundȱROsȱaufrufen.ȱDieȱCommitȬBearbeitungȱführtȱderȱTransactionȱServiceȱinȱ derȱRegelȱnachȱAufforderungȱdurch.ȱȱ Transactional Client
IDLMethodenaufrufe
Transactional Server
Recoverable Server RO
RO
RO
TO TransactionFactory Control Terminator
Current
Current Coordinator Control RecoveryCoordinator
Object Transaction Service (OTS)
Resource Synchronisation SubTransactionAwareResource
Kontext
ȱ Abbildungȱ4Ȭ33:ȱKomponentenȱdesȱCORBAȱTransactionȱServiceȱ
Abbildungȱ4Ȭ33ȱ zeigtȱdieȱtypischeȱAnwendungȱdesȱTransactionȱServiceȱmitȱeinemȱ TC,ȱderȱinnerhalbȱvonȱTransaktionenȱmitȱeinemȱRecoverableȱServerȱkommuniziert.ȱ DerȱTransaktionskontextȱwirdȱimplizitȱvonȱOTSȱmitȱdenȱApplicationȱRequestsȱanȱ denȱ Recoverableȱ Serverȱ übertragen.ȱ Recoverableȱ undȱ Transactionalȱ Serversȱ sindȱ
ȱ
281
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
nurȱ abstrakteȱ Komponentenȱ undȱ könnenȱ inȱ konkretenȱ Implementierungenȱ vonȱ Transaktionsanwendungenȱauchȱzusammenfallen.ȱDerȱTransaktionskontextȱistȱanȱ denȱThreadȬofȬControlȱgebunden,ȱderȱsieȱinitiiert.ȱOTSȱbietetȱdieȱMöglichkeit,ȱdenȱ Transaktionskontextȱ implizitȱ anȱ dieȱ beteiligtenȱ Objekteȱ weiterzureichen.ȱ Einȱ ObȬ jektȱkannȱsichȱaberȱdenȱKontextȱeinerȱTransaktionȱauchȱexplizitȱbesorgenȱundȱdieȱ Koordinatorrolleȱübernehmen.ȱ OTSȱ bietetȱ seineȱ Diensteȱ alsȱ Methodenȱ überȱ definierte,ȱ inȱ IDLȱ spezifizierteȱ InterȬ facesȱan,ȱvonȱdenenȱdieȱwichtigstenȱTransactionFactory,ȱCurrent,ȱResourceȱundȱCoorȬ dinatorȱ sind.ȱ Dieȱ imȱ OTSȱ unterstütztenȱ Schnittstellenȱ sindȱ alleȱ inȱ IDLȱ spezifiziertȱ undȱsollenȱnachfolgendȱnurȱkurzȱȱerläutertȱwerdenȱ(Greulichȱ1997):ȱ DieȱCurrentȬSchnittstelle:ȱDasȱCurrentȬInterfaceȱ(auchȱalsȱCurrentȬPseudoȬObjectȱ bezeichnet)ȱ istȱ einfacherȱ zuȱ bedienenȱ alsȱ dasȱ weiterȱ untenȱ erwähnteȱ TransactionȬ FactoryȬInterfaceȱundȱsetztȱaufȱdiesemȱauf.ȱEsȱerlaubtȱTCs,ȱsichȱexplizitȱalsȱKoordiȬ natorȱ anȱ Transaktionenȱ zuȱ beteiligenȱ undȱ stelltȱ dazuȱ dieȱ notwendigenȱ DienstpriȬ mitiveȱ bereitȱ (begin,ȱ commit,ȱ rollback).ȱ Dieȱ Vereinfachungȱ bestehtȱ darin,ȱ dassȱ dieȱ AnwendungȱbeiȱVerwendungȱderȱCurrentȬSchnittstelleȱvomȱdirektenȱKontextmaȬ nagementȱ entlastetȱ wird.ȱ Diesȱ wirdȱ dadurchȱ erreicht,ȱ dassȱ dieȱ Implementierungȱ eineȱ Assoziationȱ zwischenȱ demȱ aufrufendenȱ Ausführungspfadȱ undȱ einerȱ SubȬ transaktionȱbzw.ȱTransaktionȱherstellt.ȱAlleȱAufrufeȱvonȱOperationenȱderȱCurrentȬ SchnittstelleȱbeziehenȱsichȱimplizitȱaufȱdieȱaktuellȱmitȱdemȱAusführungspfadȱassoȬ ziierteȱ Transaktion.ȱ Damitȱeinȱ Ausführungspfadȱ dieȱBeteiligungȱ vonȱ Objektenȱanȱ Transaktionenȱ flexibelȱ kontrollierenȱ kann,ȱ unterstütztȱ dieȱ CurrentȬSchnittstelleȱ auchȱ Operationen,ȱ dieȱ esȱ erlauben,ȱ dieȱ Zuordnungȱ zwischenȱ Ausführungspfadȱ undȱ Transaktionȱ zuȱ kontrollieren.ȱ Beispielsweiseȱ kannȱ einȱ Ausführungspfadȱ dieȱ AssoziationȱmitȱseinerȱSubtransaktionȱbzw.ȱTransaktionȱzeitweiseȱsuspendieren.ȱ DieȱControlȬSchnittstelle:ȱDieȱControlȬSchnittstelleȱwirdȱvonȱObjektenȱunterstützt,ȱ dieȱ eineȱ bestimmteȱ Subtransaktionȱ repräsentieren.ȱ Entsprechendȱ bietenȱ dieȱ vonȱ derȱControlȬSchnittstelleȱbereitgestelltenȱOperationenȱZugriffȱaufȱdieȱObjekte,ȱwelȬ cheȱdieȱzugehörigeȱTransaktionȱsteuernȱ(CoordinatorȬȱundȱTerminatorȬObjekt).ȱȱ Dieȱ TransactionFactoryȬSchnittstelle:ȱ Dieȱ TransactionFactoryȬSchnittstelleȱ stelltȱ folgendeȱOperationenȱbereit:ȱ – Beginnenȱ vonȱ TopȬLevelȬTransaktion:ȱ Dieȱ dafürȱ bereitgestellteȱ Operationȱ createȱ wirdȱ vonȱ Transactionalȱ Clientsȱ dazuȱ benutzt,ȱ TopȬLevelȬTransaktioȬ nenȱzuȱerzeugen.ȱȱ – ErzeugenȱvonȱRepräsentationenȱvonȱbereitsȱbegonnenenȱTransaktionen:ȱDieȱ fürȱdieseȱAufgabeȱbereitgestellteȱOperationȱrecreateȱdientȱdazu,ȱdieȱinnerhalbȱ derȱTransaktionsdomäneȱbereitsȱexistierendeȱRepräsentation,ȱeventuellȱauchȱ einerȱimportiertenȱTransaktion,ȱzuȱerfragen.ȱȱ Beideȱ Operationenȱ liefernȱ alsȱ Ergebnisȱ einȱ Control-Objektȱ alsȱ Repräsentationȱ fürȱ dieȱentsprechendeȱTransaktion.ȱȱ
282 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ Dieȱ TerminatorȬSchnittstelle:ȱ Dieseȱ Schnittstelleȱ dientȱ dazu,ȱ eineȱ bestimmteȱ Transaktionȱ zuȱ beendenȱ oderȱ abzubrechen.ȱ Deswegenȱ wirdȱ jedesȱ Objekt,ȱ dasȱ dieȱ TerminatorȬSchnittstelleȱ unterstützt,ȱ implizitȱ mitȱ einerȱ bestimmtenȱ Transaktionȱ bzw.ȱSubtransaktionȱassoziiert.ȱ Dieȱ TerminatorȬSchnittstelleȱ wirdȱzwarȱ typischerȬ weiseȱvonȱTransactionalȱClientsȱverwendet,ȱkannȱaberȱprinzipiellȱvonȱjedemȱanȱderȱ TransaktionȱbeteiligtenȱObjektȱbenutztȱwerden.ȱȱ Dieȱ CoordinatorȬSchnittstelle:ȱ Überȱ dieseȱ Schnittstelleȱ registriertȱ einȱ Recoverableȱ ServerȱdieȱROsȱalsȱRessourcenȱinnerhalbȱeinerȱTransaktion.ȱȱ Dieȱ CoordinatorȬSchnittstelle:ȱ Dieseȱ Schnittstelleȱ definiertȱ dieȱ Operationen,ȱ dieȱ vonȱeinemȱCommitȬKoordinatorȱeinerȱTransaktionȱunterstütztȱwerdenȱmüssenȱundȱ stelltȱfolgendeȱOperationenȱbereit:ȱȱ – Operationenȱ zumȱ Erfragenȱ desȱ Zustandsȱ derȱ Transaktionȱ undȱ ihrerȱ BezieȬ hungȱzuȱanderenȱTransaktionenȱ – OperationenȱfürȱdieȱdynamischeȱRegistrierungȱ – EineȱOperationȱzurȱRegistrierungȱvonȱSynchronizationȬObjektenȱ – OperationenȱzumȱErzeugenȱvonȱuntergeordnetenȱTransaktionenȱ – EineȱOperationȱzurȱEinflussnahmeȱaufȱdenȱZustandȱderȱTransaktionȱ Dieȱ RessourceȬSchnittstelle:ȱ Dieseȱ Schnittstelleȱ wirdȱ vonȱ einemȱ ROȱ verwendet,ȱ umȱdasȱCommitȬProtokollȱmitȱdemȱTransactionȱServiceȱabzuwickeln.ȱEsȱstelltȱunȬ terȱanderemȱdieȱOperationenȱprepare,ȱrollbackȱundȱcommitȱbereit,ȱdieȱvomȱTransacȬ tionȱServiceȱaufgerufenȱwerden.ȱDaȱjedesȱObjekt,ȱdasȱdirektȱdaranȱteilnehmenȱwill,ȱ eineȱeigeneȱRessourceȬSchnittstelleȱbereitstellenȱmuss,ȱkannȱeinȱRessource-Objektȱalsȱ RepräsentantȱvonȱDatenȱbetrachtetȱwerden,ȱdieȱalsȱTeilȱderȱentsprechendenȱTransȬ aktionȱmanipuliertȱwerden.ȱȱ Dieȱ RecoveryCoordinatorȬSchnittstelle:ȱ Jedesȱ Objektȱ mitȱ RecoveryCoordinatorSchnittstelleȱsymbolisiertȱdenȱ Zustandȱeinesȱ bestimmten,ȱ anȱ einerȱ Subtransaktionȱ beteiligtenȱ Ressource-Objekts.ȱ Dieȱ RecoveryCoordinatorȬSchnittstelleȱ stelltȱ nurȱ dieȱ Operationȱ replay_completionȱ bereit.ȱ Sieȱ dientȱ dazu,ȱ inȱ besonderenȱ RecoveryȬFällenȱ dieȱerneuteȱSteuerungȱdesȱTransaktionsausgangsȱanȱdasȱmitȱderȱOperationȱmitgeȬ lieferteȱRessourceȬObjektȱanzufordern.ȱȱ DieȱSynchronizationȬSchnittstelle:ȱOTSȱunterstütztȱeinȱVerfahren,ȱwelchesȱTranȬ sactionalȱ Objectsȱ erlaubt,ȱ unmittelbarȱ vorȱ undȱ nachȱ einemȱ Transaktionsabschlussȱ informiertȱzuȱwerden.ȱEinȱObjekt,ȱdasȱdiesesȱProtokollȬFeatureȱnutzenȱwill,ȱmussȱ dieȱ SynchronizationȬSchnittstelleȱ bereitstellen.ȱ Sieȱ umfasstȱ nurȱ zweiȱ Operationen,ȱ dieȱ vonȱ OTSȱ zwecksȱ derȱ Benachrichtigungȱ unmittelbarȱ vorȱ undȱ nachȱ demȱ AbȬ schlussȱoderȱAbbruchȱderȱTransaktionȱaufgerufenȱwerden.ȱȱ Dieȱ SubTransactionAwareRessource-Schnittstelle:ȱ Recoverableȱ Objects,ȱ dieȱ geȬ schachtelteȱ Transaktionenȱ unterstützen,ȱ könnenȱ sichȱ vomȱ Abschlussȱ vonȱ SubȬ transaktionenȱinformierenȱlassen.ȱWennȱeinȱObjektȱdiesȱmöchte,ȱdannȱkannȱesȱstattȱ der Ressource-ȱ dieȱ davonȱ abgeleiteteȱ SubTransactionAwareResource-Schnittstelleȱ beȬ reitstellen.ȱ Sieȱ umfasst,ȱ nebenȱ denȱ Operationenȱ derȱ RessourceȬSchnittstelle,ȱ zweiȱ
ȱ
283
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Operationen,ȱdieȱvonȱOTSȱzwecksȱderȱBenachrichtigungȱvomȱAbschlussȱvonȱSubȬ transaktionenȱaufgerufenȱwerden.ȱȱ DieȱTransactionalObjectȬSchnittstelle:ȱDieseȱSchnittstelleȱstelltȱkeinerleiȱOperatioȬ nenȱbereit.ȱEinȱTransactionalȱObject,ȱdessenȱSchnittstelleȱvonȱderȱSchnittstelleȱTransactionalObjectȱ abgeleitetȱ ist,ȱ zeigtȱ demȱ ORBȱ an,ȱ dassȱ erȱ dieȱ Transaktion,ȱ dieȱ mitȱ demȱaufrufendenȱAusführungspfadȱassoziiertȱist,ȱbehandelnȱmuss.ȱȱ ImȱFolgendenȱwerdenȱdieȱvereinfachtenȱIDLȬSpezifikationenȱderȱInterfacesȱCurrent,ȱ ResourceȱundȱCoordinatorȱdargestelltȱ(OMGȱ2001):ȱ interface Current { void begin(); void commit(); void rollback(); void rollback_only(); Status get_status(); string get_transaction_name(); void set_timeout(in unsigned long seconds); Control get_control(); Control suspend(); void resume(in Control which); }; interface Resource { Vote prepare(); void rollback(); void commit(); void commit_one_phase(); void forget(); }; interface Coordinator { Status get_status(); ... RecoveryCoordinator register_resource (in Resource r); ... void rollback_only(); ... };
Ablauf einer OTS-Transaktion EineȱtypischeȱOTSȬTransaktionȱwirdȱüblicherweiseȱwieȱfolgtȱabgewickelt:ȱ – Einȱ TC,ȱ derȱ auchȱ alsȱ Originatorȱ bezeichnetȱ wird,ȱ initiiertȱ eineȱ Transaktionȱ überȱeinȱObjektȱvomȱTypȱCurrent,ȱindemȱerȱdieȱMethodeȱbeginȱaufruft.ȱ
284 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ – Anschließendȱ setztȱ derȱ TCȱ beliebigeȱ Requestsȱ anȱ TOsȱ beziehungsweiseȱ diȬ rektȱanȱROsȱab,ȱwobeiȱderȱTransaktionskontextȱimplizitȱweitergereichtȱ(proȬ pagiert)ȱ wird.ȱ Dieȱ ROsȱ besorgenȱ sichȱ eineȱ Referenzȱ aufȱ dasȱ CoordinatorȬ Objektȱ mitȱ derȱ Methodeȱ Current::get_controlȱ undȱ registrierenȱ sichȱ überȱ dieȱ Methodeȱ Coordinator::register_resourceȱ beimȱ Transactionȱ Service.ȱ ROsȱ ȱ müsȬ senȱ ihreȱ Zustandsänderungenȱ währendȱ derȱ Transaktionȱ selbstȱ protokollieȬ renȱundȱsindȱauchȱfürȱdieȱSynchronisierungȱparallelerȱZugriffeȱverantwortȬ lich.ȱ – NachȱAusführungȱallerȱRequestsȱruftȱderȱTCȱdieȱMethodeȱcommitȱdesȱCurȬ rentȬInterfaceȱ auf.ȱ Daraufhinȱ wickeltȱ derȱ Transactionȱ Serviceȱ dasȱ CommitȬ ProtokollȱmitȱallenȱanȱderȱTransaktionȱregistriertenȱROsȱüberȱdasȱResourceȬ Interfaceȱ ab.ȱ Einȱ Abbruchȱ derȱ Transaktionȱ istȱ überȱ dieȱ Methodeȱ rollbackȱ durchȱ denȱ TCȱ jederzeitȱ möglich,ȱ woraufȱ derȱ Transactionȱ Serviceȱ dieȱ RollȬ backȬMethodeȱ allerȱ registriertenȱ ROsȱ aufruft.ȱ Auchȱ einȱ Recoverableȱ Serverȱ kannȱeineȱTransaktionȱabbrechenȱ(rollback_only).ȱ WirdȱdieȱVerbindungȱeinesȱROsȱzumȱTransactionȱServiceȱinȱderȱunsicherenȱPhaseȱ (nachȱdemȱVotierenȱinȱPhaseȱ1)ȱunterbrochen,ȱkannȱeinȱROȱauchȱeineȱheuristischeȱ EntscheidungȱüberȱdenȱAusgangȱderȱTransaktionȱtreffen.ȱDieseȱmussȱaberȱdauerȬ haftȱ gespeichertȱ werden,ȱ bisȱ derȱ Transactionȱ Serviceȱ dasȱ ROȱ überȱ dieȱ Operationȱ forgetȱauffordert,ȱdieȱTransaktionȱendgültigȱzuȱvergessen.ȱ
OTS-Transaktionskontext und -transfer DasȱKontextmanagementȱdientȱderȱErzeugung,ȱLöschung,ȱderȱAufbewahrungȱdesȱ Transaktionskontextsȱ sowieȱ derȱ Zuordnungȱ desȱ Transaktionskontextsȱ zuȱ einemȱ Aufrufȱ einesȱ Transactionalȱ Objects.ȱ Mitȱ derȱ Zuordnungȱ kannȱ derȱ Aufruferȱ einesȱ TransactionalȱObjectsȱdieȱBeteiligungȱanȱderȱTransaktionȱundȱdamitȱdenȱTransakȬ tionsinhaltȱ kontrollieren.ȱ Dieȱ Spezifikationȱ vonȱ OTSȱ beschreibtȱ entsprechendȱ denȱ beidenȱ verschiedenenȱ Formenȱ derȱ Repräsentationȱ einerȱ Transaktionȱ zweiȱ verȬ schiedeneȱ Artenȱ desȱ Kontextmanagementsȱ undȱ zwarȱ dasȱ bereitsȱ genannteȱ direkteȱ undȱdasȱindirekteȱKontextmanagement:ȱ – Beimȱ direktenȱ Kontextmanagementȱ wirdȱ dieȱ Transaktionȱ alsȱ Control-Objektȱ verwaltet.ȱ Dieȱ Verantwortungȱ dafürȱ liegtȱ beiȱ derȱ transaktionalenȱ AnwenȬ dung:ȱ Sieȱ mussȱ eigenverantwortlichȱ fürȱ dieȱ Erzeugung,ȱ Vernichtung,ȱ AufȬ bewahrungȱ undȱ Zuordnungȱ desȱ ControlȬObjektsȱ sorgen.ȱ Derȱ Transactionalȱ ClientȱerhältȱdasȱControlȬObjektȱeinerȱTransaktion,ȱindemȱerȱihreȱErzeugungȱ mitȱTransactionFactory.createȱanfordert.ȱ – Beimȱ indirektenȱ Kontextmanagementȱ wirdȱ dieȱ Transaktionȱ alsȱ Datentypȱ PropagationContextȱverwaltet.ȱDieȱVerantwortungȱfürȱseineȱErzeugung,ȱAufȬ bewahrung,ȱ Löschungȱ undȱ Zuordnungȱ liegtȱ nichtȱ beiȱ derȱ transaktionalenȱ Anwendung,ȱ sondernȱ beiȱ OTS.ȱ OTSȱ ordnetȱ jedemȱ Ausführungspfadȱ einesȱ ClientsȱoderȱObjektsȱimplizitȱeinenȱTransaktionskontextȱzu.ȱDieȱVerwaltungȱ desȱTransaktionskontextsȱistȱfürȱdieȱtransaktionaleȱAnwendungȱtransparent.ȱ
ȱ
285
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ Derȱ Transactionalȱ Clientȱ beginntȱ eineȱ Transaktion,ȱ indemȱ erȱ dieȱ Operationȱ Current.beginȱaufruft.ȱ
Beiȱ OTSȱ istȱ derȱ Transaktionskontextȱ alsȱ IDLȬDatentypȱ PropagationContextȱ spezifiȬ ziert.ȱDerȱTransaktionskontextȱwirdȱvonȱOTSȱfürȱjedeȱtransaktionaleȱAnwendungȱ verwaltetȱ undȱ enthältȱ alsȱ wichtigsteȱ Teileȱ dieȱ mitȱ derȱ Transaktionȱ assoziiertenȱ CoordinatorȬȱundȱTerminatorȬObjekte.ȱDavonȱzuȱunterscheidenȱistȱdieȱRepräsentatiȬ onȱderȱTransaktionȱalsȱControlȬObjekt.ȱDaȱsowohlȱderȱDatentypȱPropagationContextȱ alsȱauchȱdasȱControlȬObjektȱdieȱgleichenȱessentiellenȱDatenȱbeinhalten,ȱsindȱbeideȱ FormenȱfürȱdieȱVerwaltungȱvonȱTransaktionenȱgeeignet.ȱȱ ManȱsprichtȱbeiȱOTSȱvonȱKontexttransfer,ȱwennȱOTSȱȱdasȱaufgerufeneȱTransactionalȬ ObjectȱmitȱdemȱTransaktionskontextȱversorgt.ȱDiesȱerfolgtȱbeiȱOTSȱzurȱLaufzeit,ȱdaȱ dieȱanȱderȱTransaktionȱbeteiligtenȱObjekteȱnichtȱschonȱvorȱBeginnȱderȱTransaktionȱ bekanntȱ sind.ȱ Derȱ Transaktionskontextȱ oderȱ dasȱ entsprechendeȱ ControlȬObjektȱ mussȱmitȱjedemȱAufrufȱeinerȱOperationȱeinesȱTransactionalȱObjectsȱmitpropagiertȱ werden.ȱZweiȱArtenȱdesȱTransfersȱwerdenȱunterschieden:ȱ – Beimȱ explizitenȱ Kontexttransferȱ mussȱ derȱ Transactionalȱ Clientȱ denȱ Transferȱ desȱ Transaktionskontextsȱ explizitȱ veranlassen.ȱ Obȱ einȱ Transactionalȱ Objectȱ dasȱVerfahrenȱdesȱexplizitenȱKontexttransfersȱerfordert,ȱkannȱanȱderȱDefiniȬ tionȱseinerȱSchnittstelleȱinȱIDLȬSyntaxȱabgelesenȱwerden:ȱWennȱdieȱMethoȬ denȱ derȱ spezifischenȱ Schnittstelleȱ einesȱ Transactionalȱ Objectsȱ alsȱ letztenȱ Eingabeparameterȱ einȱ ControlȬObjektȱ erwarten,ȱ soȱ erfordertȱ seineȱ VerwenȬ dungȱinȱeinerȱTransaktionȱdenȱexplizitenȱKontexttransfer.ȱDasȱbedeutetȱfürȱ dieȱtransaktionaleȱAnwendung,ȱdassȱsieȱbeiȱjedemȱAufrufȱdiesesȱTransactioȬ nalȱ Objectsȱ denȱ letztenȱ Parameterȱ mitȱ demȱ passendenȱ ControlȬObjektȱ derȱ Transaktionȱ versorgenȱ muss,ȱ inȱ derenȱ Rahmenȱ esȱ verwendetȱ werdenȱ soll.ȱ DeswegenȱwirdȱderȱexpliziteȱKontexttransferȱmeistȱinȱVerbindungȱmitȱdemȱ direktenȱKontextmanagementȱverwendet.ȱȱ – Impliziterȱ Kontexttransferȱ bedeutet,ȱ dassȱ sichȱ derȱ Transactionalȱ Clientȱ nichtȱ umȱdenȱTransferȱdesȱTransaktionskontextsȱzuȱdenȱaufgerufenenȱTransactioȬ nalȱ Objectsȱ kümmernȱ muss.ȱ Dieseȱ Aufgabeȱ wirdȱ vomȱ ORBȱ übernommen,ȱ indemȱerȱdenȱmitȱdemȱaufrufendenȱAusführungspfadȱassoziiertenȱTransakȬ tionskontextȱ implizitȱ mitȱ denȱ Aufrufdatenȱ propagiert.ȱ Insbesondereȱ läuftȱ diesȱfürȱdieȱtransaktionaleȱAnwendungȱtransparentȱab.ȱȱ
Registrierung von Recoverable Objects OTSȱ kenntȱ nurȱ dasȱ Verfahrenȱ derȱ dynamischenȱ Registrierung21.ȱ Einȱ Recoverableȱ ObjectȱmussȱfürȱjedeȱTransaktionȱbzw.ȱSubtransaktionȱanȱderȱesȱteilnimmt,ȱgenauȱ einȱ Objektȱ mitȱ einerȱ RessourceȬSchnittstelleȱ beimȱ entsprechendenȱ CoordinatorȬ Objektȱ registrieren.ȱ Dasȱ entsprechendeȱ Coordinator-Objektȱ kannȱ dasȱ RecoverableȬ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ Dasȱ DTPȬModellȱ kannȱ auchȱ dieȱ statischeȱ Registrierungȱ zurȱ Initialisierungszeitȱ einerȱ Anwendung.ȱ
21
286 ȱ
4.4ȱȱStandardsȱderȱTransaktionsverarbeitungȱ Objektȱ ausȱ demȱ mitȱ demȱ Aufrufȱ propagiertenȱ Transaktionskontextȱ ermitteln.ȱ Einȱ regisȬtriertesȱObjektȱmitȱRessource-Schnittstelleȱnimmtȱamȱ2PCȬProtokollȱzurȱSteueȬ rungȱdesȱTransaktionsendesȱteil.ȱTransactionalȱObjects,ȱdieȱzugleichȱRecoverableȱObȬ jectsȱsind,ȱführenȱdieȱdynamischeȱRegistrierungȱdurch,ȱindemȱsieȱbeimȱCoordinatorObjektȱderȱentsprechendenȱTransaktionȱihrȱRessourceȬObjektȱregistrieren.ȱ
Transaktionsende und Recovery bei OTS Dasȱ Transaktionsendeȱ wirdȱ beiȱ OTSȱ überȱ eineȱ optimierteȱ Varianteȱ desȱ 2PCȬ Protokollsȱ durchgeführt.ȱ Zusätzlichȱ unterstütztȱ OTSȱ auchȱ heuristischeȱ EntscheiȬ dungenȱ derȱ Objekte,ȱ dieȱ eineȱ RessourceȬSchnittstelleȱ besitzen.ȱ Dasȱ 2PCȬProtokollȱ führtȱOTSȱmitȱjedemȱregistriertenȱObjektȱdurch.ȱHierzuȱruftȱOTSȱdieȱvonȱderȱResȬ sourceȬSchnittstelleȱdefiniertenȱOperationenȱentsprechendȱdemȱFortschrittȱdesȱ2PCȬ Protokollsȱ auf.ȱ Derȱ erfolgreicheȱ Ablaufȱ einerȱ Transaktionskoordinierungȱ istȱ mitȱ zweiȱRecoverableȱObjectsȱinȱAbbildungȱ4Ȭ34ȱdargestellt.ȱ Fallsȱ dieȱ RessourceȬSchnittstelleȱ nichtȱ direktȱ vomȱ Recoverableȱ Objectȱ unterstütztȱ wird,ȱ soȱ obliegtȱ esȱ demȱ RessourceȬObjekt,ȱ dieȱ einzelnenȱ Aufrufeȱ anȱ dasȱ entspreȬ chendeȱ Recoverableȱ Objectȱ weiterzuleiten.ȱ Etwaigeȱ heuristischeȱ Entscheidungenȱ meldenȱObjekteȱmitȱRessourceȬSchnittstelleȱihremȱAufruferȱmitȱHilfeȱderȱimȱModulȱ CosTransactionsȱdefiniertenȱheuristischenȱExceptions.ȱȱ
ȱ
287
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
CORBAClient
OTS
TO1
RO2
RO1
begin ()
createOrder () SQL.Insert (..) register _resource () return UpdateCustomer () SQL.Update (...) register _resource () return commit () prepare () prepare () prepared prepared commit () commit () committed ok
committed
ȱ Abbildungȱ4Ȭ34:ȱErfolgreicherȱ2PCȬVerlaufȱbeiȱOTSȱ
Bei einem Systemausfall wird versucht, die betroffeneȱ Transaktionȱ abzuschließen.ȱ ZuȬ nächstȱ stellenȱ alleȱ vomȱ Systemausfallȱ betroffenenȱ Objekteȱ soȱ weitȱ wieȱ möglichȱ ihrenȱaltenȱ Zustandȱ (vorȱdemȱ Systemausfall)ȱ wiederȱ her.ȱEinȱ Recoverableȱ Object,ȱ dasȱ dieȱ begonnenenȱ Transaktionenȱ nichtȱ selbstständigȱ abschließenȱ kann,ȱ fordertȱ mitȱ Hilfeȱ desȱ ihmȱ beiȱ derȱ Registrierungȱ zugeordnetenȱ RecoveryCoordinatorȬ Objektsȱ dieȱ erneuteȱ Durchführungȱ desȱ Transaktionsabschlussesȱ anȱ (replay_Ȭ completion(...)).ȱ Dabeiȱ übergibtȱ esȱ dieȱ Objektreferenzȱ anȱ dasȱ (neue)ȱ RessourceȬ Objekt,ȱ mitȱ demȱ derȱ Transaktionsabschlussȱ durchgeführtȱ werdenȱ soll.ȱ Damitȱ dasȱ Recoverableȱ Objectȱ auchȱ nachȱ demȱ Systemausfallȱ dasȱ passendeȱ RecoveryCoordiȬ natorȬObjektȱerreichenȱkann,ȱmussȱseineȱObjektreferenzȱpersistentȱsein.ȱDasȱbedeuȬ tet,ȱdassȱdasȱRecoveryCoordinatorȬObjektȱnachȱerfolgterȱWiederherstellungȱmitȱderȬ selbenȱObjektreferenzȱwieȱvorȱdemȱSystemausfallȱzuȱerreichenȱist.ȱȱ
288 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ
4.5 Transaktionsunterstützung in Middlewaretechnologien Inȱ DatenbankȬlastigenȱ ClientȬServerȬAnwendungen,ȱ dieȱ inȱ einerȱ zweischichtigenȱ Architekturȱ arbeitenȱ (Clientȱ greiftȱ direktȱ aufȱ denȱ Datenbankserverȱ zu)ȱ hatȱ derȱ ClientȱinȱderȱRegelȱdieȱTransaktionsklammerungȱimȱGriff.ȱErȱbestimmt,ȱwannȱeineȱ Datenbanktransaktionȱ beginntȱ undȱ endet.ȱ Beiȱ dreischichtigenȱ Architekturenȱ mitȱ Anwendungsservernȱ fürȱ dieȱ Geschäftslogikȱ hatȱ erȱ keinenȱ Einflussȱ darauf,ȱ daȱ erȱ nurȱRequestsȱabsetzenȱkann.ȱDiesȱführtȱzuȱeinerȱnichtȱunerheblichenȱVerschlechteȬ rungȱderȱTransaktionsprogrammierungȱundȱsollȱdeshalbȱkurzȱerwähntȱwerden.ȱȱ Eineȱ Transaktionssteuerungȱ wirdȱ demȱ Clientȱ bzw.ȱ demȱ Programmiererȱ nurȱ erȬ möglicht,ȱwennȱerȱȬȱetwaȱvonȱeinerȱMiddlewareȱanȱderȱProgrammierschnittstelleȱȬȱ entsprechendeȱDiensteȱfürȱdieȱTransaktionsklammerungȱ(begin,ȱcommit)ȱangebotenȱ bekommt.ȱWeiterhinȱimpliziertȱdiesȱinȱjedemȱFallȱeinenȱstatefulȱServer,ȱderȱimȱSesȬ sionzustandȱauchȱnochȱInformationenȱüberȱdenȱStandȱderȱTransaktionȱ(TransaktiȬ onskontext)ȱverwaltenȱmuss.ȱErȱkönnteȱdannȱeinenȱbeginȬRequestȱabsetzen,ȱmehreȬ reȱ operativeȱ Requestsȱ undȱ anschließendȱ denȱ commitȬRequest,ȱ umȱ eineȱ kompletteȱ Transaktionȱauszuführen.ȱDerȱServerȱmerktȱsichȱdieȱZuständeȱundȱnutztȱauchȱdieȱ IsolationseigenschaftenȱeinerȱDatenbankȱfürȱevtl.ȱSperrenȱaus.ȱEsȱgibtȱaberȱAusfallȬ situationen,ȱdieȱdazuȱführen,ȱdassȱeinȱClientȱnichtȱmehrȱweiß,ȱobȱnunȱseineȱTransȬ aktionȱ zuȱ Endeȱ gebrachtȱ wurdeȱ oderȱ nicht.ȱ Beispielsweiseȱ brauchtȱ nurȱ dieȱ AntȬ wortȬNachrichtȱaufȱdenȱcommitȬRequestȱverlorenȱgehen.ȱZudemȱistȱderȱClientrechȬ nerȱmeistȱkeinȱzuverlässigesȱSystemȱundȱkannȱseinenȱZustandȱdaherȱauchȱjederzeitȱ verlieren.ȱWasȱinȱdiesemȱFallȱderȱServerȱmachenȱmuss,ȱistȱnichtȱgeradeȱtrivial.ȱ Willȱ manȱ hierȱ eineȱ brauchbareȱ Transaktionssteuerung,ȱsollteȱ manȱ dieȱ TransaktioȬ nenȱ nichtȱ vomȱ Clientȱ steuernȱ lassen.ȱ Eineȱ entsprechendeȱ Middlewareȱ kannȱ dieseȱ Aufgabeȱübernehmen.ȱInȱjedemȱFallȱmussȱimȱServerȱeinȱSessionzustandȱverwaltetȱ werden,ȱ wennȱ manȱ Transaktionenȱ überȱ einenȱ Requestȱ hinausȱ ausführenȱ möchte.ȱ Aufȱ dieseȱ Thematikȱ istȱ wirdȱ imȱ Weiterenȱ mitȱ Bezugȱ zuȱ konkretenȱ MiddewareȬ Plattformenȱeingegangen.ȱ
4.5.1
Transaktionsunterstützung bei JEE/EJB
DieȱJavaȱEnterpriseȱEdition22ȱwirdȱvonȱSunȱMicrosystemsȱspezifiziertȱundȱdefiniertȱ einenȱSatzȱvonȱAPIsȱfürȱdieȱEntwicklungȱverteilterȱAnwendungenȱimȱJavaȬUmfeld.ȱ Einȱ wesentlicherȱ Bestandteilȱ vonȱ JEEȱ istȱ dieȱ EnterpriseȬJavaȬBeansȬSpezifikationȱ (EJB)ȱalsȱBasisȱfürȱverteilteȱKomponentensysteme.ȱDieȱTransaktionsunterstützungȱ wirdȱinȱJEEȱüberȱdieȱAPIȬStandardsȱJTAȱundȱJTSȱfestgelegt,ȱdieȱvorȱallemȱimȱEJBȬ Standardȱ angewendetȱ werden,ȱ Dieseȱ „Standards“ȱ werdenȱ inȱ diesemȱ Abschnittȱ betrachtet.ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ WirȱgehenȱhierȱvonȱJEEȱV5.0ȱaus,ȱsieheȱ(Krafzigȱ2005).ȱ
22
ȱ
289
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Überblick DieȱEJBȬArchitekturȱerlaubtȱdieȱNutzungȱvonȱlokalenȱundȱvonȱglobalenȱTransaktiȬ onen.ȱFürȱlokaleȱTransaktionenȱwerdenȱdieȱSchnittstellenȱdesȱjeweiligenȱRessourȬ cenmanagersȱ benutztȱ (z.B.ȱ SQLȬBefehleȱ überȱ JDBC).ȱ Fürȱ globaleȱ Transaktionenȱ benötigtȱ manȱ einenȱ Transaktionsmanager,ȱ derȱ Bestandteilȱ derȱ EJBȬApplicationȬ ServerȬInfrastrukturȱseinȱsollte.ȱÜberȱdiesenȱkönnenȱdannȱOperationenȱaufȱmehreȬ reȱ Ressourenmanagerȱ inȱ einerȱ Transaktionȱ geklammertȱ werden.ȱ Hierȱ könnteȱ sichȱ zumȱ Beispielȱ derȱ CORBAȱ Transactionȱ Serviceȱ (OTS)ȱ aberȱ auchȱ einȱ TransaktionsȬ monitorȱ wieȱ CICSȱ alsȱ Basismechanismusȱ anbieten,ȱ umȱ einemȱ EJBȬApplicationȬ ServerȱdieȱnötigenȱTransaktionsdiensteȱzurȱVerfügungȱzuȱstellen.ȱLokaleȱTransakȬ tionenȱ müssenȱ lautȱ Standardȱ vomȱ EJBȬServerȱ nichtȱ überȱ einenȱ TMȱ ausgeführtȱ werden.ȱSieȱkönnenȱauchȱdirektȱmitȱdemȱentsprechendenȱRMȱabgewickeltȱwerdenȱ (vgl.ȱAbbildungȱ4Ȭ35).ȱDiesȱistȱinsbesondereȱdannȱsinnvoll,ȱwennȱesȱnurȱeinenȱanȱ derȱTransaktionȱbeteiligtenȱRMȱgibt.ȱ Derȱ Anwendungsprogrammiererȱ mussȱ sichȱ nichtȱ umȱ dieȱ Transaktionsprotokolleȱ kümmern.ȱ Dieseȱ werdenȱ vomȱ EJBȬServerȬ/ContainerȬHerstellerȱ bereitgestellt.ȱ Erȱ übernimmtȱauchȱdieȱPropagierungȱdesȱTransaktionskontextesȱzwischenȱdenȱbeteiȬ ligtenȱKomponenten.ȱ EJB-Container
lokale Abwicklung
DBMS (RM)
EJBean DBMS (RM)
EJBean
TM
G lo
b
T ale
r an
sa k
ti o n
Message Queue (RM)
ȱ Abbildungȱ4Ȭ35:ȱAbwicklungȱlokalerȱundȱglobalerȱTransaktionenȱ
Fürȱ dieȱ Unterstützungȱ vonȱ Transaktionenȱ istȱ innerhalbȱ derȱ EJBȬArchitekturȱ dieȱ Javaȱ Transactionȱ APIȱ (JTA)ȱ alsȱ grundlegendeȱ Schnittstelleȱ bzw.ȱ alsȱ Satzȱ vonȱ Schnittstellenȱvorgesehenȱ(Sunȱ1999,ȱSunȱ1999b,ȱSunȱ2003,ȱSunȱ2007).ȱAlsȱTransakȬ tionsmodellȱ werdenȱ flacheȱ (imȱ Gegensatzȱ zuȱ CORBA/OTSȱ keineȱ geschachtelten)ȱ Transaktionenȱ unterstützt.ȱ JTSȱ (Javaȱ Transactionȱ Service)ȱ istȱ fürȱ Herstellerȱ vonȱ EJBȬApplicationȬServernȱgedacht,ȱumȱdieȱerforderlicheȱInfrastrukturȱfürȱdieȱTransȬ aktionsbehandlungȱ zuȱ implementieren,ȱ dieȱ EJBȬSpezifikationȱ fordertȱ allerdingsȱ nicht,ȱdassȱeinȱEJBȬContainerȱJTSȱeinsetzenȱmussȱ(Sunȱ1999b).ȱ DieȱEJBȬSpezifikationȱbeschreibtȱdreiȱMöglichkeitenȱTransaktionsgrenzenȱfestzuleȬ gen:ȱ Derȱ Clientȱ (clientȬmanagedȱ demarcation),ȱ derȱ Containerȱ (containerȬmanagedȱ demarcation)ȱ oderȱ dieȱ Beanȱ (beanȬmanagedȱ demarcation)ȱ selbstȱ setztȱ dieseȱ überȱ
290 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ entsprechendeȱ Aufrufeȱ derȱ Methodenȱ begin,ȱ commitȱ bzw.ȱ rollbackȱ anȱ einemȱ JTAȬ Interfaceȱ ab.ȱFürȱ eineȱ SessionȬBeanȱ mussȱ festgelegtȱ werden,ȱ obȱ sieȱ entwederȱ conȬ tainerȬmanagedȱoderȱbeanȬmanagedȱTransactionsȱunterstützt,ȱbeidesȱistȱnichtȱmöglich.ȱ EntityȬBeansȱkönnenȱnurȱcontainerȬmanagedȱTransactionsȱunterstützen.ȱ Beispielszenarioȱ 1:ȱ Betrachtenȱ wirȱ eineȱ Transaktion,ȱ dieȱ einȱ Clientȱ durchȱ Aufrufȱ einerȱMethodeȱ derȱBeanȱ B1ȱ initiiert,ȱ dieȱwiederumȱ eineȱ Methodeȱderȱ BeanȱB2ȱaufȬ ruft.ȱ Beanȱ B1ȱ ruftȱ Änderungsoperationenȱ inȱ zweiȱ Datenbankenȱ aufȱ (DBMS1ȱ undȱ DBMS2),ȱBeanȱB2ȱverändertȱDatenȱinȱderȱDatenbankȱDBMS3.ȱDerȱEJBȬContainerȱhatȱ dieȱAufgabe,ȱdieȱdreiȱDBMSȱinȱdieȱTransaktionȱzuȱinvolvieren,ȱalsoȱdenȱTransaktiȬ onskontextȱ überȱ einenȱ Transaktionsmanager,ȱ derȱ inȱ derȱ Infrastrukturȱ verfügbarȱ seinȱmuss,ȱzuȱpropagieren.ȱȱ Client
EJB-Container update
DBMS1
Bean B1 update
Bean B2
Propagation und 2PC
DBMS2 update
DBMS3
TM
ȱ Abbildungȱ4Ȭ36:ȱEJBȬTransaktionȱüberȱmehrereȱBeansȱinȱeinemȱEJBȬContainerȱ
Amȱ Endeȱ derȱ Transaktionȱ mussȱ erȱ dieȱ CommitȬBehandlungȱ überȱ denȱ TransaktiȬ onsmanagerȱdurchführen.ȱDieȱAbbildungȱ4Ȭ36ȱverdeutlichtȱdasȱSzenario.ȱ DerȱEJBȬContainerȱführtȱeinȱ2PCȬProtokollȱmitȱdenȱRMsȱaus,ȱwennȱdieȱTransaktionȱ beendetȱ werdenȱ soll.ȱ Jeȱ nachdem,ȱ welcheȱ Komponenteȱ dieȱ Transaktionsgrenzenȱ setztȱ (Client,ȱ EJBeanȱ oderȱ Container)ȱ wirdȱ dieȱ Transaktionȱ entwederȱ aktivȱ vomȱ Clientȱbzw.ȱderȱEnterpriseȬBeanȱbeendetȱoderȱaberȱderȱContainerȱleitetȱimplizitȱamȱ EndeȱderȱRequestbearbeitungȱundȱvorȱdemȱSendenȱdesȱErgebnissesȱanȱdenȱClientȱ dieȱCommitȬBehandlungȱein.ȱImȱletzterenȱFallȱpassiertȱpraktischȱdasȱganzeȱTransȬ aktionsȬHandlingȱ „behindȱ theȱ scenes“,ȱ ohneȱ dassȱ derȱ ClientȬȱ undȱ derȱ BeanȬ Programmiererȱdiesȱexplizitȱmitbekommen.ȱ Beispielszenarioȱ 2:ȱ Inȱ diesemȱ Szenarioȱ ruftȱ einȱ Clientȱ auchȱ eineȱ Methodeȱ einerȱ BeanȱB1,ȱdieȱwiederumȱeineȱMethodeȱderȱBeanȱB2ȱaufruft.ȱBeanȱB2ȱbefindetȱsichȱaberȱ inȱ einemȱ anderenȱ EJBȬContainerȱ einesȱ zweitenȱ EJBȬServers.ȱ Beideȱ Methodenȱ verȬ ändernȱ Datenȱ inȱ unterschiedlichenȱ Datenbanken.ȱ Amȱ Endeȱ derȱ Transaktionȱ istȱ eineȱ Abstimmungȱ zwischenȱ denȱ Transaktionsmanagernȱ derȱ beidenȱ EJBȬServerȱ notwendig,ȱdieȱauchȱfürȱdieȱPropagierungȱdesȱTransaktionskontextesȱsorgenȱmüsȬ sen.ȱ Imȱ EJBȬStandardȱ bzw.ȱ derȱ zuständigenȱ JTSȬSpezifikationȱ istȱ offenȱ gelassen,ȱ überȱ welchesȱProtokollȱdieȱverteiltenȱTransaktionsmanagerȱuntereinanderȱzumȱZweckeȱ
ȱ
291
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
derȱ Kontextpropagierungȱ undȱ Transaktionskoordinationȱ kommunizieren.ȱ Inȱ derȱ JEEȬSpezifikationȱwirdȱhierfürȱIIOPȱempfohlen.ȱ Manȱ setztȱ hierȱ eineȱ funktionsfähigeȱ Umgebungȱ wieȱ sieȱ inȱ CORBA/OTSȱ beschrieȬ benȱist,ȱvoraus.ȱDiesȱistȱaberȱinȱderȱPraxisȱeineȱnichtȱunerheblicheȱLücke,ȱdaȱEJBȬ ServerȱunterschiedlicherȱHerstellerȱsichȱnurȱschwerȱaufȱeinȱgemeinsamesȱProtokollȱ einigenȱ können.ȱ Meistȱ funktioniertȱ eineȱ überȱ Rechnergrenzenȱ hinwegȱ verteilteȱ Transaktionȱ daherȱ (wennȱ überhaupt)ȱ nurȱ inȱ einerȱ homogenenȱ EJBȬServerȬ LandschaftȱeinesȱHerstellers.ȱ Client
EJB-Container1
DBMS1
update
Bean B1
Propagation und 2PC
TM1 EJB-Container2 Bean B2
update
DBMS2
TM2
ȱ Abbildungȱ4Ȭ37:ȱEJBȬTransaktionȱüberȱmehrereȱEJBȬContainerȱ
Folgendeȱ Regelnȱ geltenȱ fürȱ dieȱ verschiedenenȱ Artenȱ vonȱ EnterpriseȬBeansȱ (sieheȱ Abbildungȱ4Ȭ38):ȱ – SessionȬBeansȱ(statefulȱundȱstateless)ȱundȱmessageȬdrivenȱBeansȱdürfenȱsoȬ wohlȱ beanȬȱ alsȱ auchȱ containerȬmanagedȱ sein.ȱ Fürȱ jedeȱ Beanȱ mussȱ aberȱ eineȱ Entscheidungȱ getroffenȱ werden,ȱ dieȱ fürȱ alleȱ Methodenȱ gilt.ȱ Eineȱ Mischungȱ istȱnichtȱzulässig.ȱ – EntityȬBeansȱ könnenȱ ausschließlichȱ überȱ dieȱ Varianteȱ containerȬmanagedȱ inȱ eineȱTransaktionȱeingebundenȱwerden.ȱ – Beiȱ zustandsbehaftetenȱ SessionȬBeansȱ istȱ esȱ möglich,ȱ dassȱ mehrereȱ MethoȬ denaufrufeȱ inȱ einerȱ Transaktionȱ ausgeführtȱ werdenȱ können.ȱ Dieȱ SessionȬ BeanȱbleibtȱsolangeȱimȱZustandȱ„BereitȱinȱTA“ȱbisȱdieȱTransaktionȱzuȱEndeȱ istȱundȱdarfȱauchȱnichtȱdeaktiviertȱwerden.ȱȱ
292 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ Entity Bean
Messagedriven Bean
Session Bean
Container-managed Transactions
Bean-managed Transactions
ȱ Abbildungȱ4Ȭ38:ȱMöglichkeitenȱderȱTransaktionskontrolleȱbeiȱEJBȱ
BetrachtenȱwirȱdenȱetwasȱvereinfachtenȱZustandsautomatenȱeinerȱzustandsbehafȬ tetenȱSessionȬBeanȱinȱAbbildungȱ4Ȭ39,ȱsoȱistȱzuȱerkennen,ȱdassȱeineȱSessionȬBean,ȱ dieȱ sichȱ inȱ einerȱ Transaktionȱ befindet,ȱ keinenȱ Zustandsübergangȱ zumȱ Zustandȱ „passiviert“ȱhat.ȱ Nicht existent
ejbRemove() ejbPassivate()
Class.newInstance() setSessionContext() ejbCreate()
Passiviert
ejbActivate()
Bereit Methodenaufrufe
begin() Systemausnahme
commit(), rollback()
Bereit in TA
Methodenaufrufe
ȱ Abbildungȱ4Ȭ39:ȱZustandsautomatȱeinerȱzustandsbehaftetenȱSessionȬBeanȱ
Nachȱ dieserȱ Einführungȱ sollȱ imȱ Weiterenȱ aufȱ dieȱ Standardschnittstellenȱ JTAȱ undȱ JTSȱeingegangenȱwerden.ȱAnschließendȱwerdenȱdieȱverschiedenenȱMöglichkeitenȱ derȱTransaktionsunterstützungȱbeiȱEJBȱnäherȱbesprochen.ȱ
4.5.2
Java Transaction API (JTA)
Dasȱ Javaȱ Transactionȱ APIȱ (JTA)ȱ liefertȱ höherwertigeȱ Transaktionsdienste,ȱ dieȱ ausȱ dreiȱTeilenȱbestehenȱ(Sunȱ1999a):ȱ
ȱ
293
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ – EineȱSchnittstelleȱfürȱAnwendungsprogrammierer,ȱmitȱdenenȱdieseȱTransakȬ tionsgrenzenȱ setzenȱ können.ȱ Sieȱ enthältȱ dieȱ klassischenȱ Methodenȱ begin,ȱ commitȱundȱrollback.ȱ – EinȱJavaȬMappingȱfürȱdasȱstandardisierteȱXAȬProtokollȱderȱOpenȱGroupȱfürȱ dieȱ Teilnahmeȱ anȱ globalenȱ Transaktionen,ȱ dieȱ vonȱ einemȱ TransaktionsmaȬ nagerȱkoordiniertȱwerden.ȱ – EineȱSchnittstelleȱfürȱeinenȱApplicationȬServer,ȱumȱmitȱeinemȱTransaktionsȬ managerȱ zuȱ kommunizieren.ȱ Dieseȱ Schnittstelleȱ istȱ fürȱ dieȱ TransaktionsabȬ wicklungȱ durchȱ denȱ ApplicationȬServerȱ (bzw.ȱ EJBȬContainer)ȱ notwendigȱ undȱwirdȱfürȱcontainerȬmanagedȱTransactionsȱverwendet.ȱ
JTAȱlehntȱsichȱstarkȱanȱdenȱXAȬStandardȱan.ȱDasȱJTAȬTransaktionsmodellȱsiehtȱdieȱ gleichenȱKomponentenȱwieȱdasȱXAȬModellȱvorȱ(AP,ȱTM,ȱRM,ȱCRM)ȱundȱergänztȱ dieȱ Rolleȱ desȱ ApplicationȬServers.ȱ JTAȱ wirdȱ vomȱ Herstellerȱ einesȱ EJBȬProduktesȱ implementiert.ȱ JTAȱ definiertȱ aberȱ keineȱ Kommunikationsmechanismenȱ fürȱ dieȱ Progagierungȱ vonȱ Transaktionenȱ undȱ fürȱ dieȱ verteilteȱ Transaktionskoordination.ȱ HierȱwirdȱaufȱdenȱJTSȬStandardȱverwiesen.ȱ WieȱinȱAbbildungȱ4Ȭ40ȱzuȱerkennenȱist,ȱsindȱinȱJTAȱimȱWesentlichenȱdreiȱSchnittȬ stellenȱ beschrieben.ȱ Diesȱ sindȱ dieȱ Interfacesȱ UserTransaction,ȱ TransactionManagerȱ undȱ XAResource.ȱ Überȱ dasȱ Interfaceȱ UserTransactionȱ kommuniziertȱ eineȱ AnwenȬ dungȱ (AP)ȱ mitȱ demȱ Transaktionsmanager.ȱ Dasȱ Interfaceȱ TransactionManagerȱ wirdȱ fürȱ dieȱ Kontextpropagierungȱ undȱ Transaktionskoordinationȱ zwischenȱ ApplicatiȬ onȬServerȱ undȱ Transaktionsmanagerȱ verwendet.ȱ Überȱ dasȱ Interfaceȱ XAResourceȱ wirdȱdasȱTransaktionshandlingȱzwischenȱRessourcenmanagernȱundȱeinemȱTransȬ aktionsmanagerȱ (Registrierung23ȱvonȱ RMs,ȱ Kontextpropagierungȱ undȱ KoordinatiȬ on)ȱgeregelt.ȱȱ Dieȱ Implementierungȱ desȱ Transaktionsmanagersȱ sowieȱ dieȱ KommunikationsmeȬ chanismenȱ werdenȱ vorausgesetzt.ȱ Wieȱ unschwerȱ zuȱ erkennenȱ ist,ȱ setztȱ dasȱ JTAȬ ModellȱaufȱdieȱXAȬKonzepteȱauf.ȱInȱRichtungȱRMȱwirdȱgemäßȱdemȱJEEȬStandardȱ entwederȱüberȱJDBCȱ(DBMSȬInterface)ȱoderȱJMSȱ(InterfaceȱzuȱMessageȬSystemen)ȱ kommuniziert.ȱ Einȱ APȱ entsprichtȱ entwederȱ einerȱ serverseitigenȱ EnterpriseȬBean,ȱ wasȱderȱStandardfallȱist,ȱoderȱaberȱeinerȱClientanwendung,ȱwelcheȱdieȱTransaktiȬ onsgrenzenȱ überȱ einȱ höherwertigesȱ Interfaceȱ selbstȱ definiert.ȱ Derȱ Protokollstackȱ zurȱKommunikationȱmitȱanderenȱInstanzenȱistȱnichtȱnäherȱfestgelegt.ȱ
ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ DasȱhierȱnichtȱweiterȱdiskutierteȱSubinterfaceȱTransactionȱstelltȱfürȱdieȱBekanntmachungȱ derȱBeteilungȱanȱeinerȱTransaktionȱhierȱz.B.ȱdieȱMethodeȱenlist()ȱzurȱVerfügung,ȱdieȱvomȱ RMȱaufgerufenȱwird.ȱ
23
294 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ EJB
AP
JTA UserTransaction
AS
JDBC, JMS
JTA Transaction Manager
RM
JTA XAResource
TM ("low-level" Transaktions-ServiceImplemenentierung z.B. mit OTS)
CRM Inbound Transactions
Protokollstack
Outbound Transactions
protokollspezifische Kommunikation AP AS CRM JTA RM TM
Application Program Application Server Communication Resource Manager Java Transaction API Resource Manager Transaction Manager
ȱ Abbildungȱ4Ȭ40:ȱKomponentenȱundȱSchnittstellenȱdesȱJTAȬȱundȱdesȱJTSȬModellsȱ
ClientȬmanagedȱ Transactions:ȱ Beiȱ derȱ Varianteȱ clientȬmanagedȱ benutztȱ derȱ EJBȬ Clientȱ zurȱ Begrenzungȱ derȱ Transaktionenȱ dasȱ JTAȬInterfaceȱ javax.transaction.Ȭ UserTransaction.ȱ Anzumerkenȱ ist,ȱ dassȱ dieȱ Verfügbarkeitȱ derȱ Schnittstelleȱ inȱ derȱ EJBȬSpezifikationȱnichtȱobligatorischȱgeregeltȱist.ȱDerȱStandardȱschreibtȱdieȱUnterȬ stützungȱalsoȱnichtȱzwingendȱvor.ȱȱ DerȱClientȬProgrammiererȱsetztȱinȱdiesemȱFallȱdieȱTransaktionsgrenzenȱsoȱwieȱerȱ esȱfürȱrichtigȱhältȱundȱkannȱdamitȱȬȱwieȱdiesȱdasȱSzenarioȱausȱAbbildungȱ4Ȭ41ȱzeigtȱ ȬȱauchȱMethodenȬübergreifendeȱTransaktionenȱformulieren.ȱ
ȱ
295
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
EJB-Server EJB-Container
EJB-Client
Bean2
Bean1
DBMS1
TM
begin() ok
begin
TA-Propagierung
Bean1.method1() ok
update
Bean2.method1()
update
ok
commit()
commit ok
committed
Koordination
Abbildungȱ4Ȭ41:ȱClientȬmanagedȱTransactionȱinȱEJBȬUmgebungȱ
ImȱSzenarioȱführtȱderȱClientȱeineȱTransaktionȱerfolgreichȱaus,ȱinȱderȱzweiȱEJBeansȱ beteiligtȱsind,ȱdieȱinȱeinemȱEJBȬContainerȱliegen.ȱDerȱinȱderȱInfrastrukturȱdesȱEJBȬ Serversȱ vorhandeneȱ TMȱ koordiniertȱ dieȱ Transaktion.ȱ Inȱ diesemȱ Fallȱ werdenȱ vonȱ beidenȱBeansȱÄnderungenȱinȱeinerȱDatenbankȱausgeführt.ȱInȱderȱAbbildungȱistȱderȱ Sachverhaltȱetwasȱvereinfachtȱdargestellt.ȱAuchȱdasȱverwendeteȱCommitȬProtokollȱ istȱ hierȱ nurȱ angedeutet.ȱ Inȱ diesemȱ Fallȱ könnteȱ derȱ TMȱ eineȱ 1PCȬKoordinierungȱ anstoßen,ȱdaȱnurȱeinȱDBMSȱbeteiligtȱist.ȱ Anzumerkenȱist,ȱdassȱderȱClientȬEntwicklerȱfürȱdasȱSetzenȱderȱTransaktionsgrenȬ zenȱ alleineȱ verantwortlichȱ ist.ȱ Beiȱ komplexerenȱ Anwendungenȱ kannȱ diesȱ eineȱ möglicheȱ Fehlerquelleȱ sein.ȱ Dasȱ Verhaltenȱ desȱ Systemsȱ beiȱ einemȱ Ausfallȱ desȱ ClientsȱwährendȱderȱCommitȬBehandlungȱistȱnichtȱeindeutigȱspezifiziert.ȱSoȱstelltȱ sichȱz.B.ȱdieȱFrage,ȱwieȱeinȱClientȱnachȱeinemȱRestartȱerkennenȱkann,ȱobȱdieȱTransȬ aktionȱerfolgreichȱbeendetȱwurdeȱoderȱetwaȱzurückgesetztȱwerdenȱmusste.ȱ BeanȬmanagedȱTransactions:ȱBeiȱderȱVarianteȱbeanȬmanagedȱTransactionsȱmussȱderȱ BeanȬProgrammiererȱdieȱTransaktionsgrenzenȱselbstȱprogrammieren.ȱHierzuȱnutztȱ erȱ dieȱ entsprechendenȱ JTAȬSchnittstellen.ȱ Dieȱ Transaktionsgrenzenȱ dürfenȱ nurȱ überȱ dasȱ Interfaceȱ UserTransactionsȱ gesetztȱ werdenȱ undȱ nichtȱ direktȱ überȱ dieȱ SchnittstellenȱzuȱdenȱRMȱ(etwaȱüberȱJDBC).ȱ ImȱFolgendenȱistȱeinȱBeispielcodeȱ(Pseudocode)ȱfürȱeineȱMethodenȬübergreifendeȱ TransaktionȱüberȱdreiȱMethodenȱdieȱbeanȬmanagedȱgesteuertȱwird,ȱdargestellt:ȱ public class MySessionEJB implements SessionBean { EJBContext ejbContext;
296 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ ... public void m1() { InitialContext initContext = new InitialContext() ; UserTrans = ejbContext.getUserTransactions(); userTrans.begin(); // Arbeit verrichten, Datenbankzugriffe ausführen } public void m2() { // Arbeit verrichten, Datenbankzugriffe ausführen } public void m3() { userTrans = ejbContext.getUserTransactions(); // Arbeit verrichten, Datenbankzugriffe ausführen UserTrans.commit(); } }
Derȱ Aufrufȱ derȱ Methodenȱ müssteȱ inȱ derȱ Reihenfolgeȱ m1,ȱ m2ȱ undȱ m3ȱ ausgeführtȱ werden.ȱ Inȱ Methodeȱ m1ȱ wirdȱ dieȱ Transaktionȱ überȱ dasȱ entsprechendeȱ JTAȬ Interfaceȱ initiiertȱ undȱ inȱ Methodeȱ m3ȱ wirdȱ dieseȱ beendet.ȱ Interessantȱ istȱ hierȱ dieȱ Frage,ȱwasȱderȱContainerȱmitȱderȱTransaktionȱmacht,ȱwennȱsichȱz.B.ȱnachȱAufrufȱ derȱMethodeȱm2ȱderȱClientȱbeendetȱoderȱabstürzt.ȱ ContainerȬmanagedȱ Transactions:ȱ Beiȱ derȱ Varianteȱ containerȬmanagedȱ sindȱ dieȱ Transaktionsgrenzenȱ wederȱ durchȱ denȱ ClientȬȱ nochȱ durchȱ denȱ BeanȬ Programmiererȱfestzulegen.ȱLediglichȱbeimȱDeploymentȱderȱEJBeanȱistȱdasȱTransȬ aktionsverhaltenȱjederȱeinzelnenȱMethodeȱanzugeben.ȱ Derȱ EJBȬContainerȱ entscheidetȱ beiȱ jedemȱ Methodenaufrufȱ einerȱ Beanȱ anhandȱ desȱ zugewiesenenȱ Transaktionsattributs,ȱ wieȱ sichȱ dieȱ Beanȱ währendȱ derȱ Transaktionȱ verhält.ȱManȱbezeichnetȱdieseȱVarianteȱauchȱalsȱdeklarativ.ȱInȱeinemȱTransaktionsȬ attributȱkannȱfürȱjedeȱMethodeȱimȱDeploymentȬDescriptorȱseparatȱfestgelegtȱwerȬ den,ȱ welcheȱ Transaktionsunterstützungȱ gewünschtȱ wird.ȱ Esȱ werdenȱ folgendeȱ Transaktionsatributeȱunterstützt:ȱ – – – – – –
„NotSupported“ȱ „Required“ȱ „Supports“ȱ „RequiresNew“ȱ „Mandatory“ȱ „Never“ȱȱ
DieȱBedeutungȱdieserȱWerteȱkannȱderȱEJBȬSpezifikationȱentnommenȱwerdenȱundȱ wirdȱhierȱkurzȱbeschrieben:ȱ
ȱ
297
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ – Wirdȱ fürȱ eineȱ Methodeȱ derȱ Wertȱ „NotSupported“ȱ angegeben,ȱ soȱ mussȱ derȱ EJBȬContainerȱbeiȱAufrufȱdieserȱMethodeȱdieȱTransaktionȱsuspendierenȱundȱ nachȱderȱAusführungȱderȱMethodeȱwiederȱreaktivieren.ȱ – Wirdȱ„Required“ȱangegeben,ȱsoȱmussȱeineȱTransaktionȱvorhandenȱsein.ȱIstȱ beimȱAufrufȱeinerȱRequiredȬMethodeȱkeinȱTransaktionskontextȱvorhanden,ȱ wirdȱerȱvomȱContainerȱangelegt.ȱIstȱeinȱKontextȱvorhanden,ȱsoȱläuftȱdieȱaufȬ gerufeneȱMethodeȱinȱdiesemȱKontextȱab.ȱ – BeiȱAngabeȱvonȱ„Supports“ȱmussȱkeineȱTransaktionȱdaȱsein,ȱeineȱvorhandeȬ neȱTransaktionȱistȱaberȱnichtȱweiterȱstörendȱundȱwirdȱunterstützt.ȱ – „RequiresNew“ȱerfordertȱeineȱneueȱTransaktion,ȱeinȱbestehenderȱTransaktiȬ onskontextȱ wirdȱ alsoȱ nichtȱ verwendet.ȱ Fürȱ dieȱ Ausführungȱ derȱ Methodeȱ wirdȱvomȱEJBȬContainerȱimmerȱeinȱneuerȱTransaktionskontextȱangelegt.ȱ – Istȱ „Mandatory“ȱ angegeben,ȱ mussȱ bereitsȱ beimȱ Aufrufȱ derȱ Methodeȱ einȱ Transaktionskontextȱ angelegtȱ sein.ȱ Vomȱ Containerȱ wirdȱ allerdingsȱ keinȱ neuerȱ Transaktionskontextȱ erzeugt,ȱ wennȱ zumȱ Aufrufzeitpunktȱ keinerȱ anȬ gelegtȱist.ȱ – Wirdȱ„Never“ȱverwendet,ȱsoȱdarfȱkeinȱTransaktionskontextȱvorhandenȱsein.ȱ Fallsȱ zumȱ Aufrufzeitpunktȱ dochȱ einȱ Transaktionskontextȱ vorhandenȱ ist,ȱ wirdȱvomȱEJBȬContainerȱeineȱExceptionȱgeworfen.ȱ
Alsȱ Standardvarianteȱ wirdȱ „Required“ȱ empfohlenȱ undȱ zwar,ȱ wennȱ möglich,ȱ durchgängigȱfürȱdieȱgesamteȱEJBȬAnwendung.ȱ EJB-Server EJB-Container
EJB-Client
Bean1
Bean1.method1()
Bean2
DBMS1
TM
begin TA-Propagierung update Bean2.method1() update commit Koordination committed
ok
ȱ Abbildungȱ4Ȭ42:ȱContainerȬmanagedȱTransactionȱinȱEJBȬUmgebungȱ
InȱAbbildungȱ4Ȭ42ȱistȱeinȱSzenarioȱfürȱeineȱTransaktionȱdargestellt,ȱdieȱdurchȱdenȱ Methodenaufrufȱ aufȱ Bean1ȱ initiiertȱ wird.ȱ Bean1ȱ nutztȱ ihrerseitsȱ Bean2ȱ undȱ beideȱ BeansȱverändernȱDatenȱinȱeinerȱDatenbank.ȱWirȱnehmenȱan,ȱdieȱbeidenȱMethodenȱ habenȱalsȱTransaktionsattributȱ„Required“ȱgesetzt,ȱd.h.ȱderȱContainerȱerzeugtȱeineȱ
298 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ TransaktionȱbeimȱerstenȱMethodenaufrufȱundȱbeendetȱdieseȱbevorȱdasȱErgebnisȱanȱ denȱClientȱzurückgegebenȱwird.ȱȱ Dieȱ Propagierungȱ desȱ Transaktionskontextesȱ sowieȱ dieȱ Koordinationȱ mitȱ demȱ DBMSȱwerdenȱvomȱEJBȬContainerȱinitiiertȱundȱdurchȱdenȱimȱEJBȬServerȱvorhanȬ denenȱ TMȱ ausgeführt.ȱ Lautȱ EJBȬSpezifikationȱ istȱ dieȱ Transaktionȱ nochȱ vorȱ derȱ ÜbergabeȱdesȱMethodenergebnissesȱanȱdenȱClientȱzuȱbeenden.ȱDerȱClientȱsiehtȱdieȱ Transaktionsgrenzenȱ nicht,ȱ derȱ Programmiererȱ mussȱsichȱaberȱüberȱ dieȱ Semantikȱ derȱMethodenȱimȱKlarenȱsein.ȱ Beiȱ Nutzungȱ einerȱ Methodeȱ einerȱ zustandslosenȱ SessionȬBeanȱ innerhalbȱ einerȱ TransaktionȱmussȱdieȱTransaktionȱbeendetȱwerden,ȱbevorȱdasȱErgebnisȱzumȱClientȱ gesendetȱwird,ȱdaȱdieȱSessionȬBeanȱanschließendȱnichtȱmehrȱverfügbarȱist.ȱ
4.5.3
Java Transaction Services (JTS)
JTSȱ spezifiziertȱ dieȱ Implementierungȱ einesȱ Transaktionsmanagers,ȱ derȱ externȱ dieȱ JTAȬInterfacesȱalsȱDienstȱbereitstelltȱundȱdieseȱinternȱaufȱCORBA/OTSȱ1.1ȱabbildetȱ (sieheȱ hierzuȱ Abbildungȱ 4Ȭ43).ȱ JTSȱ definiertȱ alsoȱ eineȱ JTAȬImplementierungȱ aufȱ BasisȱvonȱOTS.ȱEsȱistȱeinȱBindingȱfürȱCORBA/OTSȱ1.1ȱspezifiziert.ȱJTSȱistȱdaherȱanȱ Implementiererȱ vonȱ Transaktionsmanagernȱ undȱ EJBȬApplicationȬServerȱ gerichtetȱ undȱwirdȱvonȱdenȱHerstellernȱderȱEJBȬInfrastrukturenȱbenutzt,ȱumȱihreȱProdukteȱ zuȱimplementierenȱundȱinteroperabelȱzuȱmachen.ȱ Container
EJB-Server/-Container JTA
JTSImplementierung
TM OTSInterfaces
CORBA OTS 1.1
ȱ Abbildungȱ4Ȭ43:ȱJTSȱalsȱInterfaceȱzwischenȱeinemȱEJBȬServerȱundȱeinemȱTransaktionsȬ managerȱ
AlsȱTransaktionsmodellȱwerdenȱflacheȱTransaktionenȱ(OTSȬTerminologie:ȱTopȬLeȬ velȬTransaktionen)ȱ unterstützt,ȱ jedochȱ keineȱ geschachteltenȱ Transaktionen.ȱ CORȬ BA/OTSȱwirdȱalsoȱnichtȱvollständigȱausgenütztȱ Dieȱ Schnittstellenȱ undȱ dieȱ architektonischenȱ Zusammenhängeȱ derȱ JTSȬSpezifiȬ kationȱ sindȱ inȱ derȱ Abbildungȱ 4Ȭ44ȱ dargestellt.ȱ Einȱ JTSȬbasierterȱ TMȱ bildetȱ dieȱ
ȱ
299
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
TransaktionenȱinȱRichtungȱTransaktionsȬInfrastrukturȱaufȱCORBA/OTSȱab.ȱHierfürȱ implementiertȱ erȱ dieȱ JavaȬPackagesȱ org.omg.CosTransactionsȱ undȱ org.omg.CosȬ TSPortability.ȱ Erȱ bindetȱ verschiedeneȱ RMȱ entwederȱ überȱ dieȱ inȱ JTAȱ verfügbareȱ XARessourceȬSchnittstelleȱoderȱoptionalȱüberȱsog.ȱnativeȱAnbindungenȱdirektȱaufȱ BasisȱvonȱXAȱbzw.ȱCORBA/OTS.ȱ EinȱJTSȬunterstützenderȱTransaktionsmanagerȱhatȱfolgendeȱAufgaben:ȱ – Erȱ verwaltetȱ dieȱ Transaktionskontexteȱ allerȱ überȱ ihnȱ initiiertenȱ globalenȱ Transaktionen.ȱErȱerlaubtȱesȱauch,ȱdassȱmehrereȱJavaȬThreadsȱeinerȱJMVȱoȬ derȱ verschiedenerȱ JVMsȱ zuȱ einerȱ Zeitȱ inȱ dieselbeȱ Transaktionȱ verwickeltȱ sindȱundȱOperationenȱfürȱdieseȱausführen.ȱ – ErȱkommuniziertȱmitȱRessourcenmanagernȱzumȱZweckeȱderȱKontextȬPropaȬ gierungȱundȱderȱTransaktionskoordinationȱüberȱdasȱXAȬProtokollȱderȱOpenȱ Group.ȱ Dieȱ Anbindungȱ einesȱ RMȱ überȱ JTAȱ geschiehtȱ üblicherweiseȱ überȱ RessourceȬAdapter,ȱ welcheȱ dasȱ Mappingȱ vonȱ JTAȱ zumȱ proprietärenȱ RMȱ übernehmen.ȱJavaȬAnwendungenȱwerdenȱinȱderȱRegelȱüberȱeinenȱApplicaȬ tionȬServerȱinȱdieȱTransaktionȱinvolviertȱ(beanȬȱoderȱcontainerȬmanaged).ȱ – Erȱ kommuniziertȱ mitȱ anderenȱ Transaktionsmanagernȱ standardmäßigȱ überȱ dieȱDiensteȱvonȱCORBA/OTS.ȱHierȱwirdȱIIOPȱalsȱTransportprotokollȱfürȱdieȱ Transaktionspropagierungȱ empfohlen.ȱEineȱ weitereȱFestlegungȱ wirdȱ inȱ derȱ JTSȬSpezifikationȱaberȱnichtȱvorgenommen.ȱ OTSRM
XA-RM
Java Appl.
RM Resource Adapter
AS optional: org.omg.CosTransactions. Resource
javax.transaction. javax.transaction. TransactionManager xa.XAResource
Native XAUnterstützung
JTA-Unterstützung
optional: omg.org.CosTransactions. Resource
org.omg.CosTransactions. Resource
Java-to-OTS Mapping
JTS-basierter TM org.omg.CosTransactions org.omg.CosTSPortability
Anderer JTS-basierter oder sonstiger TM
ȱ Abbildungȱ4Ȭ44:ȱArchitekturȱeinerȱTMȬImplementierungȱaufȱBasisȱvonȱJTAȱ
Derȱ TMȱ unterstütztȱ dieȱ JTAȬSchnittstellenȱ (TransactionManager,ȱ Transactionȱ undȱ UserTransaction),ȱ umȱ einemȱ ApplicationȬServerȱ oderȱ einerȱ „standȬalone“ȱ AnwenȬ
300 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ dungȱ dieȱ Möglichkeitȱ zuȱ geben,ȱ Transaktionenȱ auszuführenȱ undȱ TransaktionsȬ grenzenȱzuȱsetzen.ȱ Damitȱ sichȱ einȱ CORBAȱ ORBȱ beimȱ JTSȱ TMȱ bekanntȱ machenȱ kann,ȱ implementiertȱ dieserȱ einȱ Interfaceȱ namensȱ javax.jts.TransactionServiceȱ mitȱ derȱ einzigenȱ Methodeȱ identifyORB.ȱ Einȱ ORBȱ nutztȱ dasȱ Interfaceȱ üblicherweiseȱ währendȱ derȱ InitialisieȬ rungsphase.ȱ Einȱ Vorschlagȱ fürȱ denȱ Ablaufȱ derȱ Initialisierungȱ istȱ inȱ derȱ JTSȬ Spezifikationȱ(Sunȱ1999b)ȱbeschrieben.ȱ
4.5.4
Transaktionsverarbeitung bei EJB 3.0
Beiȱ EJBȱ 3ȱ hatȱ sichȱ imȱ Vergleichȱ zuȱ EJBȱ 2.xȱ bezüglichȱ desȱ TransaktionsȬHandlingsȱ konzeptionellȱ nichtsȱ verändert.ȱ Manȱ kannȱ nachȱ wieȱ vorȱ deklarativesȱ CMTȱ oderȱȱ BMTȱ mitȱ expliziterȱ Programmierungȱ derȱ Transaktionsgrenzenȱ einsetzenȱ undȱ dieȱ JEEȬSchnittstelleȱJTAȱdientȱweiterhinȱalsȱBasis.ȱ Beiȱ Einsatzȱ vonȱ CMTȱ könnenȱ inȱ EJBȱ 3ȱ Methodenȱ oderȱ ganzeȱ BeanȬKlassenȱ auchȱ überȱ Annotationenȱ mitȱ demȱ Transaktionsattributȱ versehenȱ werden.ȱ Weiterhinȱ istȱ auchȱeineȱAngabeȱderȱTransaktionsattributeȱüberȱeinenȱDDȱmöglich.ȱDieȱTransakȬ tionsattributeȱ habenȱ sichȱ nichtȱ verändert.ȱ Alsȱ Notationȱ wirdȱ „@TransactionAttriȬ bute“ȱ bereitgestellt.ȱ Dieȱ Nutzungȱ vonȱ Annotationenȱ sollȱ anȱ einemȱ Beispielȱ verȬ deutlichtȱwerden:ȱ ...ȱ @Stateless @TransactionAttribute(NOT_SUPPORTED) public class ArticleMgrSessionBean implements ArticleMgrRemoteI { public void createArticle(…) {…} public vector findAllArticles() {…} @TransactionAttribute(REQUIRED) public void deleteArticle(…) {…} … }
Inȱ diesemȱ Beispielȱ giltȱ fürȱ dieȱ gesamteȱ EJBeanȱ ArticleMgrSessionBean,ȱ dassȱ keineȱ Transaktionenȱunterstütztȱwerdenȱ(NOT_SUPPORTED).ȱFürȱdieȱMethodeȱdeleteArȬ ticleȱ wirdȱ dieseȱ Einstellungȱ allerdingsȱ überȱ dieȱ Angabeȱ desȱ Transaktionsattributsȱ „REQUIRED“ȱüberdefiniert.ȱDiesȱbedeutet,ȱdassȱdieseȱMethodeȱimmerȱeineȱTransȬ aktionȱ fordert,ȱ dieȱ beiȱ jedemȱ Aufrufȱ Ȭȱ sofernȱ nochȱ nichtȱ imȱ Kontextȱ Ȭȱ vomȱ EJBȬ Containerȱ angelegtȱ wird.ȱ Überȱ einenȱ DeploymentȬDescriptorȱ wäreȱ eineȱ derartigeȱ Attributierungȱwieȱfolgtȱmöglich:ȱ
… Artikelmanager
ȱ
301
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ Artikelmanagement-Application
ArticleMgrSessionBean Bean für die Artikelverwaltung ArticleMgrSessionBean ArticleManagement.ArticleSessionBean
ArticleManagement.ArticleMgrSessionBeanHome
ArticleManagement.ArticleMgrSessionBeanRemote
Stateless Container
…
…
ArticleMgrSessionBean *
NotSupported
ArticleMgrSessionBean deleteArticle
Required
…
Inȱ diesemȱ Beispielȱ wirdȱ gezeigt,ȱ wieȱ manȱ alleȱ Methodenȱ einerȱ EJBeanȱ mitȱ demȱ gleichenȱ Transaktionsattributȱ ausstattenȱ undȱ eineȱ Ausnahmeȱ definierenȱ kann.ȱ Ohneȱ Angabeȱ einesȱ Transaktionsattributsȱ giltȱ „REQUIRED“ȱ alsȱ StandardeinstelȬ lung.ȱ Beiȱ messageȬdrivenȱ Beansȱ (sog.ȱ MDBs)ȱ kannȱ manȱ übrigensȱ nurȱ „REQUIȬ RED“ȱ oderȱ „NOT_SUPPORTED“ȱ verwenden,ȱ andereȱ Einstellungenȱ ergebenȱ keiȬ
302 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ nenȱSinn,ȱdaȱeineȱMDBȬTransaktionȱvonȱClient,ȱderȱsieȱinitiiertȱentkoppeltȱist.ȱDiesȱ giltȱauchȱfürȱEJBȱ2.1.ȱ
4.5.5
Transaktionsunterstützung bei JMS
WirȱhabenȱinȱKapitelȱ2ȱbereitsȱdieȱZuverlässigkeitsmaßnahmenȱerläutert,ȱdieȱJMSȱ ermöglicht.ȱJMSȱerlaubtȱdurchȱdieȱEinstellungȱeinesȱTransaktionsmodusȱdieȱDefiȬ nitionȱ vonȱ atomaren,ȱ lokalenȱ Transaktionen.ȱ Einȱ JMSȬClientȱ kannȱ dieȱ gesamteȱ Nachrichtenbearbeitungȱ(SendenȱundȱEmpfangen)ȱinnerhalbȱeinerȱJMSȬSessionȱinȱ atomareȱ Transaktionenȱ gliedern.ȱ Dieseȱ Transaktionsdefinitionȱ erhebtȱ aberȱ nichtȱ denȱAnspruchȱeinerȱACIDȬTransaktion,ȱdaȱdieȱanderenȱKorrektheitskriterienȱ(auȬ ßerȱ„A“)ȱnichtȱfestgelegtȱsind.ȱ JMSȬProviderȱ könnenȱ auchȱ optionalȱ (nichtȱ imȱ Standardȱ vorgeschrieben)ȱ anȱ einerȱ verteiltenȱ Transaktionȱ teilnehmen.ȱ Hierzuȱ wirdȱ vorgegeben,ȱ dassȱ dasȱ JTAȬAPI,ȱ undȱzwarȱspeziellȱdasȱXAResourceȬAPI,ȱunterstütztȱwird.ȱDieȱSpezifikationȱschreibtȱ diesȱ aberȱ fürȱ eineȱ JMSȬImplementierungȱ nichtȱ zwingendȱ vor.ȱ Schließlichȱ istȱ esȱ möglich,ȱdassȱeinȱJMSȬClientȱeineȱverteilteȱTransaktionȱdirektȱsteuert.ȱȱ
4.5.6
Transaktionsunterstützung bei .NET
DieȱTransaktionskonzepteȱvonȱ.NETȱ(.NETȱFramework)ȱundȱJEEȱähnelnȱsichȱstark.ȱ InȱdiesemȱFallȱhatȱvermutlichȱdieȱJavaȬGemeindeȱvomȱMicrosoftȱTransactionȱMaȬ nagerȱ(MTS)ȱprofitiert,ȱdenȱesȱschonȱeinigeȱZeitȱgibt.ȱ .NETȱunterstütztȱverteilteȱTransaktionenȱimȱKomponentenmodellȱ.NETȱEnterpriseȱ Services.ȱJedeȱKomponente,ȱdieȱTransaktionenȱunterstützenȱsoll,ȱistȱalsȱsog.ȱServicedȱ Componentȱ zuȱ implementieren,ȱ indemȱ sieȱ vonȱ derȱ Basisklasseȱ ServicedComponentȱ abgeleitetȱwird.ȱ Alleȱ Servicedȱ Componentsȱ werdenȱ inȱ Containernȱ verwaltet,ȱ dieȱ heuteȱ nochȱ überȬ gangsweiseȱ aufȱ dieȱ COM+ȬInfrastrukturȱ abgebildetȱ werden.ȱ Sieȱ werdenȱ inȱ einemȱ Katalog,ȱ demȱ sog.ȱ COM+ȬKatalogȱ mitȱ allȱ ihrenȱ Metadatenȱ registriertȱ undȱ damitȱ bekanntgemacht.ȱDiesȱübernimmtȱdasȱLaufzeitsystem,ȱalsoȱdieȱCLR.ȱȱ Transaktionenȱ sindȱ alsoȱ inȱ dieȱ .NETȱ Enterpriseȱ Servicesȱ (Namensraumȱ SysȬ tem.EnterpriseServices)ȱintegriert.ȱEinȱTeilȱderȱEnterpriseȱServicesȱistȱeinȱklassischerȱ Transaktionskoordinatorȱ fürȱ verteilteȱ Transaktionenȱ namensȱ MSȱ DTCȱ (Microsoftȱ DistributedȱTransactionȱCoordinator).ȱ ÄhnlichȱwieȱbeiȱJEE/EJBȱwerdenȱauchȱimȱ.NETȬKomponentenmodellȱautomatischeȱ Transaktionenȱ unterstützt,ȱ dieȱ vollständigȱ vomȱ Containerȱ abgewickeltȱ werden.ȱ WennȱalsoȱeineȱClientanwendungȱdieȱDiensteȱeinerȱKomponenteȱnutzt,ȱmerktȱsieȱ inȱderȱRegelȱnicht,ȱobȱdahinterȱeineȱTransaktionȱabläuftȱoderȱnicht.ȱDasȱSetzenȱderȱ Transaktionsgrenzenȱ übernimmtȱ derȱ Container.ȱ Dieȱ Komponenteȱ mussȱ lediglichȱ mitȱ Metadatenȱ beschriebenȱ werden,ȱ inȱ denenȱ einȱ Transaktionsattributȱ angegebenȱ ist.ȱ Diesȱ siehtȱ imȱ Codingȱ einerȱ Komponenteȱ beispielsweiseȱ wieȱ folgtȱ ausȱ (hierȱ inȱ C#),ȱwobeiȱMyComponentȱeinȱwillkürlicherȱNameȱeinerȱKomponenteȱist:ȱ
ȱ
303
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
[Transaction (TransactionOption.Required)] public class MyComponent : ServiceComponent, IMyComponent { // Implementierung der Methoden der Schnittstelle // IMyComponent public void m1() {…} public void m2() {…} }
Dieȱ Metainformationȱ wirdȱ mitȱ TransactionsOptionȱ angegeben.ȱ Dieȱ eigeneȱ KompoȬ nenteȱerbtȱvonȱderȱKlasseȱServiceComponentȱundȱimplementiertȱdieȱeigeneȱSchnittȬ stelleȱIMyComponent.ȱȱ Alsȱ Transaktionsattributeȱ sindȱ ähnlichȱ wieȱ beiȱ JEE/EJBȱ folgendeȱ Möglichkeitenȱ gegeben:ȱ – – – – – –
„NotSupported“ȱ „Required“ȱ „Supported“ȱ „RequiresNew“ȱ „Disabled“ȱ „Suppress“ȱ
Dieȱ Transaktionsattributeȱ geltenȱ imȱ Gegensatzȱ zuȱ JEE/EJBȱ fürȱ dieȱ ganzeȱ KompoȬ nente.ȱDieȱAttributeȱhabenȱfolgendeȱBedeutungȱ(Vastersȱ2002):ȱȱ – WirdȱfürȱeineȱKomponenteȱ„NotSupported“ȱangegeben,ȱsoȱkannȱdieseȱkeineȱ Transaktionenȱunterstützen.ȱErfolgtȱderȱAufrufȱeinerȱMethodeȱderȱKompoȬ nenteȱinȱeinemȱTransaktionskontext,ȱsoȱmussȱderȱContainerȱbeiȱAufrufȱdieȬ serȱ Methodeȱ einenȱ neuenȱ Kontextȱ ohneȱ Transaktionȱ erzeugen.ȱ Diesȱ istȱ dieȱ StandardeinstellungȱfürȱKomponenten.ȱ – BeiȱAngabeȱvonȱ„Supported“ȱunterstütztȱdieȱKomponenteȱauchȱdieȱAbwickȬ lungȱvonȱTransaktionen.ȱFallsȱimȱaktuellenȱKontextȱkeineȱTransaktionȱangeȬ legtȱist,ȱwirdȱdieȱaufgerufeneȱMethodeȱohneȱTransaktionsunterstützungȱausȬ geführt.ȱ – Wirdȱ„Required“ȱangegeben,ȱsoȱmussȱfürȱeineȱTransaktionȱwieȱbeiȱJEE/EJBȱ einȱ Transaktionskontextȱ vorhandenȱ sein.ȱ Istȱ beimȱ Aufrufȱ einerȱ RequiredȬ Methodeȱ keinȱ Transaktionskontextȱ vorhanden,ȱ wirdȱ einerȱ vomȱ Containerȱ angelegt.ȱȱ – „RequiresNew“ȱerfordertȱzwingendȱeineȱneueȱTransaktion,ȱeinȱbestehenderȱ Transaktionskontextȱ wirdȱ alsoȱ nichtȱ verwendet.ȱ Fürȱ dieȱ Ausführungȱ derȱ MethodeȱwirdȱvomȱContainerȱeinȱneuerȱTransaktionskontextȱangelegt.ȱ – Wirdȱ „Disabled“ȱ verwendet,ȱ wirdȱ einȱ aktuellȱ vorhandenerȱ TransaktionsȬ kontextȱ ignoriertȱ undȱinȱ einemȱ neuenȱ Kontextȱ ohneȱTransaktionsunterstütȬ zungȱausgeführt.ȱ
304 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ – Verwendetȱ manȱ „Suppress“24ȱwirdȱ nieȱ eineȱ Transaktionȱ benutzt,ȱ unabhänȬ gigȱdavon,ȱobȱbereitsȱeinȱTransaktionskontextȱvorhandenȱistȱoderȱnicht.ȱ Beispiel:ȱ Betrachtenȱ wirȱ denȱ Ablaufȱ einerȱ Transaktionȱ anȱ einemȱ Beispiel,ȱ inȱ demȱ einȱ.NETȬClientȱeineȱMethodeȱeinerȱKomponenteȱKomp1ȱaufruft,ȱdieȱalsȱTransaktiȬ onsattributȱ„Required“ȱgesetztȱhatȱ(Abbildungȱ4Ȭ45).ȱȱ .NET Enterprise Service Container .NET-Client K1.method1()
„Required“
„Required“ oder „Supported“
K1
K2
MS DTC
MS SQL Server
Kontext erzeugen TA-Propagierung
update K2.method1()
update
commit Enable Commit
Koordination
ok
committed
ȱ Abbildungȱ4Ȭ45:ȱVerteilteȱTransactionȱinȱ.NETȬUmgebungȱ
BeimȱAufrufȱwirdȱ(sofernȱnochȱnichtȱvorhanden)ȱüberȱdenȱDTCȱeinȱTransaktionsȬ kontextȱ angelegt.ȱ Dieȱ Methodeȱ führtȱ eineȱ UpdateȬOperationȱ anȱ einenȱ MSȱ SQLȬ Serverȱ aus,ȱ derȱ seinerseitsȱ denȱ aktuellenȱ Transaktionskontextȱ direktȱ vomȱ DTCȱ anfordert.ȱImȱBeispielȱruftȱdieȱMethodeȱausȱK1ȱeineȱweitereȱMethodeȱderȱKompoȬ nenteȱK2ȱauf.ȱDieseȱführtȱwiederȱeineȱUpdateȬOperationȱmitȱdemselbenȱSQLȱServerȱ aus.ȱ Daȱ dasȱ Transaktionsverhaltenȱ vonȱ K2ȱ mitȱ Transaktionsattributȱ „RequiȬ red“ȱ oderȱ „Supported“ȱ festgelegtȱ ist,ȱ wirdȱ derselbeȱ Transaktionskontextȱ verwenȬ det.ȱDerȱTransaktionskontextȱistȱdemȱSQLȱServerȱbereitsȱbekannt.ȱDerȱSQLȱServerȱ meldetȱdemȱDTC,ȱdassȱerȱinȱderȱLageȱist,ȱdieȱTransaktionȱerfolgreichȱzuȱbeenden.ȱ BevorȱderȱContainerȱdasȱErgebnisȱdesȱMethodenaufrufsȱanȱdenȱClientȱzurückȱsenȬ det,ȱkommuniziertȱerȱmitȱdemȱDTC,ȱumȱdieȱTransaktionȱzuȱEndeȱzuȱführen.ȱDieserȱ wickeltȱdieȱKoordinationȱohneȱweitereȱKommunikationȱmitȱdenȱKomponentenȱab.ȱ Welchesȱ CommitȬProtokollȱ zwischenȱ demȱ DTCȱ undȱ demȱ SQLȱ Serverȱ verwendetȱ wirdȱ undȱ wieȱ zwischenȱ denȱ beteiligtenȱ Systemenȱ dieȱ Transaktionspropagierungȱ stattfindet,ȱistȱnichtȱoffenȱgelegt.ȱȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 24
ȱ Engl.:ȱtoȱsuppressȱ=ȱausblenden.ȱ
ȱ
305
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Esȱistȱbeiȱ.NETȱEnterpriseȱServicesȱauchȱmöglich,ȱdassȱeinȱClientȱmehrereȱMethoȬ denaufrufeȱ innerhalbȱ einesȱ Transaktionskontextesȱ ausführt.ȱ Inȱ diesemȱ Fallȱ mussȱ derȱ Komponentenentwicklerȱ aberȱ dasȱ Transaktionsendeȱ explizitȱ programmieren,ȱ inȱ demȱ erȱ innerhalbȱ desȱ Kontextesȱ eineȱ Methodeȱ setCompleteȱ aufruft.ȱ Dazuȱ mussȱ aberȱauchȱdieȱStandardvorgehensweiseȱderȱautomatischenȱBeendigungȱnachȱdemȱ Methodenaufrufȱdeaktiviertȱwerden.ȱDiesȱgeschiehtȱüberȱdasȱSetzenȱeinesȱFlagsȱimȱ Kontextȱ(EnableCommitȱ=ȱfalse;).ȱAberȱauchȱbeiȱ.NETȱsollteȱmanȱaufȱdieseȱVarianteȱ nachȱ Möglichkeitȱ verzichten.ȱ Beiȱ Fehlernȱ währendȱ derȱ Transaktionsausführungȱ führtȱderȱContainerȱautomatischȱeinenȱRollbackȱdurch.ȱȱ Abschließendȱ sollȱ nochȱ erwähntȱ werden,ȱ dassȱ inȱ neuerenȱ .NETȬVersionenȱ (seitȱ .NETȱ 2.0)ȱ einȱ sog.ȱ Lightweightȱ Transactionȱ Managerȱ (LTM)ȱ eingeführtȱ wurde.ȱȱ LTMȱunterstütztȱlokaleȱundȱglobaleȱTransaktionen.ȱZurȱOptimierungȱderȱLeistungȱ kannȱ einȱ RMȱ (z.B.ȱ SQLȱ Serverȱ 2005)ȱ ankommendeȱ Transaktionenȱ zunächstȱ lokalȱ verwalten.ȱ Eineȱ lokaleȱ Transaktionȱ kannȱ zuȱ einerȱ globalenȱ Transaktionȱ erweitertȱ werden,ȱ wasȱaberȱ nurȱ notwendigȱ wird,ȱ wennȱ weitereȱRMsȱinvolviertȱ werden.ȱIstȱ diesȱ nichtȱ notwendigȱ erfolgtȱ derȱ Abschlussȱ derȱ Transaktionȱ mitȱ einemȱ 1PCȬ Protokoll.ȱWirdȱesȱnotwendig,ȱübernimmtȱderȱMSȱDTCȱdieȱTransaktionskoordinaȬ tion.ȱ Dieserȱ Mechanismusȱ wirdȱ alsȱ Promotableȱ Singleȱ Phaseȱ Enlistmentȱ (PSPE)ȱ beȬ zeichnet.ȱ
4.5.7
Transaktionen für Webanwendungen
Inȱ Webanwendungenȱ sendetȱ manȱ vomȱ WWWȬBrowserȱ fürȱ denȱ Aufrufȱ einesȱ serȬ verseitigenȱDienstesȱeinenȱHTTPȬRequest,ȱderȱüblicherweiseȱeineȱVerarbeitungȱimȱ Webserverȱanstößt.ȱDerȱWebserverȱbearbeitetȱdenȱRequestȱundȱsendetȱalsȱErgebnisȱ einenȱ HTTPȬResponseȱ zumȱ WWWȬBrowser.ȱ Diesenȱ synchronenȱ Vorgangȱ kannȱ manȱ mitȱ Hilfeȱ vonȱ AjaxȬTechnologien25ȱauchȱ asynchronȱ durchführen.ȱ Fürȱ dieȱ BeȬ arbeitungȱdesȱRequestsȱkannȱmanȱserverseitigȱbeliebigeȱMechanismenȱverwenden,ȱ jeȱnachdemȱinȱwelchemȱTechnologieumfeldȱmanȱsichȱbewegt.ȱ InȱderȱPraxisȱhatȱesȱsichȱbewährt,ȱjeȱHTTPȬRequestȱeineȱTransaktionȱdurchzufühȬ renȱ(sieheȱhierzuȱTransactionȬPerȬRequestȬPatternȱinȱBauerȱ2002).ȱDieȱTransaktionȱ beginntȱ nachȱ derȱ Ankunftȱ desȱ Requestsȱ undȱ wirdȱ kurzȱ vorȱ demȱ Absendenȱ derȱ ResponseȬNachrichtȱ abgeschlossen.ȱ Eineȱ Transaktion,ȱ derenȱ Grenzenȱ eineȱ ReȬ quest/ResponseȬBearbeitungȱ überschreitet,ȱ wirdȱ aufgrundȱ derȱ UnkontrollierbarȬ keitȱderȱClientsȱalsȱnichtȱbesondersȱsinnvollȱerachtet.ȱȱ Imȱ Serverȱ könnenȱ imȱ Rahmenȱ derȱ Transaktionȱ durchausȱ mehrereȱ RMsȱ beanȬ spruchtȱ werden.ȱ Obȱ eineȱ gemeinsameȱ Transaktionskoordinierungȱ durchgeführtȱ wird,ȱhängtȱvonȱderȱeingesetztenȱMiddlewareȱ(JEE/EJB,ȱ.NET,…)ȱab.ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ AjaxȱistȱeinȱAkronymȱfürȱAsynchronousȱJavaScriptȱandȱXMLȱundȱdientȱalsȱUnterstütȬ zungȱfürȱdieȱProgrammierungȱinteraktiverȱWebanwendungen.ȱ
25
306 ȱ
4.5ȱȱTransaktionsunterstützungȱinȱMiddlewaretechnologienȱ
4.5.8
Transaktionen für Webservice-basierte Anwendungen
Auchȱ fürȱ serviceorientierteȱ Architekturenȱ insbesondereȱ fürȱ Webservicesȱ wurdeȱ dasȱ Konzeptȱ derȱ Transaktionenȱ inȱ denȱ letztenȱ Jahrenȱ intensivȱ diskutiert.ȱ Einigeȱ Vorschlägeȱ zurȱ Nutzungȱ wurdenȱ bereitsȱ erarbeitet,ȱ allerdingsȱ hatȱ sichȱ nochȱ keinȱ StandardȱinȱdiesemȱUmfeldȱherauskristallisiert.ȱManȱbenötigtȱdannȱübergreifendeȱ Transaktionen,ȱ wennȱ mehrereȱ Webservicesȱ zurȱ Erreichungȱ einesȱ gemeinsamenȱ Zielsȱeingesetztȱwerdenȱsollen,ȱalsoȱgemeinsamȱatomarȱauszuführenȱsind.ȱȱ Serviceorientierteȱ Architekturenȱ innerhalbȱ vonȱ Unternehmenȱ (wirȱ bezeichnenȱ dieseȱ alsȱ „geschlossene“ȱ Architekturen)ȱ sindȱ ausȱ Transaktionssichtȱ heuteȱ imȱ WeȬ sentlichenȱ nichtsȱ anderesȱ alsȱ dieȱ bereitsȱ diskutiertenȱ Transaktionenȱ inȱ verteilterȱ Umgebung.ȱ Betrachtetȱ manȱ aberȱ „offene“ȱ Architekturen,ȱ beiȱ denenȱ eineȱ AnwenȬ dungȱ innerhalbȱ einerȱ Transaktionȱ Webservicesȱ unterschiedlichsterȱ Anbieterȱ überȱ dasȱ Internetȱ einbindenȱ möchte,ȱ ergibtȱ sichȱ eineȱ weitȱ komplexereȱ Situation.ȱ Nurȱ letztereȱsindȱfürȱunsereȱweitereȱBetrachtungȱinteressant,ȱdaȱȱgeschlosseneȱArchitekȬ turenȱprinzipiellȱnichtsȱNeuesȱimȱVergleichȱzuȱJEE/EJBȱusw.ȱmitȱsichȱbringen.ȱ Inȱ denȱ letztenȱ Jahrenȱ wurdenȱ einigeȱ Vorschlägeȱ zurȱ Anwendungȱ desȱ TransaktiȬ onskonzeptsȱinȱdiesemȱUmfeldȱgemacht.ȱImȱWesentlichenȱwerdenȱinȱdenȱStandarȬ disierungsvorschlägenȱheuteȱzweiȱAnsätzeȱdiskutiert:ȱ – AtomareȱTransaktionenȱmitȱallenȱACIDȬEigenschaftenȱ – Langlebigeȱ Transaktionenȱ mitȱ Aufweichungȱ derȱ klassischenȱ ACIDȬEigenȬ schaftenȱ Dieȱ Standardisierungsbemühungenȱ werdenȱ überwiegendȱ durchȱ dasȱ OASISȬ Konsortiumȱ (WWWȬ036)ȱ zusammengeführt.ȱ Fürȱ serviceorientierteȱ Umgebungenȱ existierenȱmehrereȱSpezifikationen,ȱdieȱalleȱalsȱGrundlageȱdasȱbekannteȱKoordinaȬ torȬTeilnehmerȬModellȱfavorisieren:ȱ – WSȬCoordinationȱ mitȱ denȱ Koordinationstypenȱ WSȬAtomicȬTransactionȱ undȱ WSȬBusinessȬActivityȱ (WSȬC,ȱ WSȬATȱ undȱ WSȬBA),ȱ sieheȱ hierzuȱ (OASISȱ 2007a,ȱOASISȱ2007aȱundȱ(OASISȱ2007c)ȱ – BusinessȱProcessȱTransactionȱ(BTP),ȱsieheȱ(OASISȱ2002)ȱȱ – Webȱ Servicesȱ Compositeȱ Applicationȱ Frameworkȱ (WSȬCAF),ȱ sieheȱ (Sunȱ 2005)ȱ Esȱ lässtȱ sichȱ grundsätzlichȱ festhalten,ȱ dassȱ inȱ diesenȱ Ansätzenȱ keineȱ neuenȱ KonȬ zepteȱvorgeschlagenȱwerden,ȱsondernȱdieȱbereitsȱbekanntenȱKonzepteȱderȱACIDȬ Transaktionȱ undȱ derȱ langlebigenȱ Transaktionenȱ aufȱ Webservicesȱ angewendetȱ werden.ȱ Eineȱ Transaktionȱ klammertȱ inȱ diesemȱ Fallȱ denȱ Aufrufȱ mehrererȱ logischȱ zusammenhängenderȱWebserviceȬOperationen.ȱ DaȱWebservicesȱauchȱevtl.ȱvonȱunterschiedlichenȱProvidernȱbereitgestelltȱwerden,ȱ istȱfürȱeineȱderartigeȱTransaktionȱmöglicherweiseȱeineȱKoordinationȱderȱbeteiligtenȱ Providerȱerforderlich.ȱJederȱWebserviceȬProviderȱsorgtȱfürȱsich,ȱdassȱdieȱauszufühȬ rendenȱ Operationenȱ denȱ Ansprüchenȱ einerȱ Transaktionslogikȱ genügen.ȱ Dieȱ einȬ
ȱ
307
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
zelnenȱ Ansätzeȱ sollenȱ kurzȱ skizziertȱ werden.ȱ Wirȱ beginnenȱ mitȱ demȱ WSȬ CoordinationȬAnsatzȱvonȱOASIS.ȱȱ WSȬCoordination:ȱ WSȬCoordinationȱ stelltȱ Basisdiensteȱ bereit,ȱ dieȱ dieȱ Verwaltungȱ vonȱ Transaktionskontextenȱ undȱ dieȱ Aktivierungȱ vonȱ Transaktionenȱ sowieȱ dieȱ Registrierungȱ vonȱ Teilnehmernȱ unterstützen.ȱ Dieȱ Spezifikationȱ istȱ soȱ allgemeinȱ gehalten,ȱ dassȱ verschiedeneȱ Koordinationstypenȱ möglichȱ sind.ȱ Inȱ derȱ Abbildungȱ 4Ȭ46ȱ istȱ dasȱ Zusammenspielȱ derȱ Komponentenȱ skizziert.ȱ Dieȱ Anwendungȱ AP1ȱ erzeugtȱzunächstȱeinenȱTransaktionskontextȱbeiȱihremȱKoordinatorȱAȱundȱsendetȱ anschließendȱ eineȱ Nachricht,ȱ alsoȱ denȱ Aufrufȱ einesȱ Webservices,ȱ anȱ dieȱ AnwenȬ dungȱAP2.ȱAP2ȱmachtȱihrerseitsȱdieȱTransaktionȱnunȱbeiȱihremȱKoordinatorȱBȱbeȬ kanntȱundȱregistriertȱdiese,ȱwobeiȱeinȱKoordinationsprotokollȱfestgelegtȱwird.ȱDieȬ sesȱwirdȱschließlichȱzwischenȱdenȱRegistrationȬServicesȱbeiderȱKoordinatorenȱausȬ getauscht.ȱ Anschließendȱ nutzenȱ sieȱ dasȱ abgestimmteȱ Protokoll.ȱ Imȱ Beispielȱ sindȱ bereitsȱ zweiȱ Koordinatorenȱ imȱ Einsatz,ȱ dieȱ beiȱ derȱ CommitȬBearbeitungȱ zusamȬ menarbeitenȱmüssen.ȱ AlsȱKoordinationstypenȱsindȱWSȬATȱundȱWSȬBAȱdefiniert.ȱBeideȱsetzenȱaufȱWSȬCȱ auf:ȱ – WSȬATȱ stelltȱ sog.ȱ Atomicȱ Transactionsȱ fürȱ klassische,ȱ kurzeȱ ACIDȬ Transaktionenȱ bereit.ȱ Dieȱ Koordinationȱ erfolgtȱ überȱ einȱ definiertesȱ 2PCȬ Protokoll,ȱ wobeiȱ zwischenȱ einemȱ volatilenȱ (fürȱ CacheȬResourcen)ȱ undȱ eiȬ nemȱdauerhaftenȱ(fürȱpersistenteȱRessourcen)ȱ2PCȱunterschiedenȱwird.ȱ – WSȬBAȱstelltȱsog.ȱBusinessȱActivitiesȱfürȱlanglebigeȱTransaktionenȱzurȱVerȬ fügung.ȱDurchȱdieȱAufweichungȱderȱIsolationseigenschaftȱbenötigtȱmanȱwieȱ beiȱ Sagasȱ (offenȱ geschachtelteȱ Transaktionen)ȱ Kompensationsoperationen.ȱ AuchȱbeiȱWSȬBAȱsindȱverschiedeneȱCompletionȬProtokolleȱspezifiziert,ȱumȱ TransaktionenȱzuȱEndeȱzuȱführen.ȱ Alleȱ WSȬC/AT/BAȬNachrichtenȱ sindȱ alsȱ XMLȬNachrichtenȱ spezifiziert.ȱ Dieȱ ProtoȬ kolleȱsindȱinȱFormȱvonȱZustandsautomatenȱdefiniert.ȱ BTPȱistȱebenfallsȱeinenȱInitiativeȱvonȱOASISȱfürȱloseȱgekoppelteȱAnwendungen.ȱInȱ BTPȱwerdenȱalsȱTransaktionsmodelleȱ„AtomicȱBusinessȱTransactions“ȱundȱ„Cohesiveȱ Businessȱ Transactions“ȱ definiert.ȱ Erstereȱ sindȱ verteilteȱ Transaktionenȱ nachȱ demȱ ACIDȬPrinzip,ȱ letztereȱ sindȱ offenȱ geschachtelteȱ Transaktionen.ȱ Derȱ Koordinatorȱ erzeugtȱdieȱTransaktionȱundȱruftȱinnerhalbȱdieserȱmehrereȱServicesȱinȱSubtransakȬ tionenȱauf.ȱWennȱeineȱSubtransaktionȱnichtȱerfolgreichȱverläuft,ȱkannȱderȱKoordiȬ natorȱ überȱ dieȱ weitereȱ Ausführungȱ bzw.ȱ denȱ Abbruchȱ entscheiden.ȱ Diesȱ mussȱ vomȱEntwicklerȱderȱHaupttransaktionȱbeiȱderȱProgrammierungȱfestgelegtȱwerden.ȱ DieȱACIDȬKorrektheitskriterienȱkönnenȱhierȱnichtȱerfülltȱwerden.ȱ WSȬCAFȱgliedertȱsichȱschließlichȱinȱdieȱRahmenwerkeȱWSȬContextȱ(WSȬCTX),ȱWSȬ CoordinationȬFrameworkȱ (WSȬCF)ȱ undȱ WSȬTransactionȬManagementȱ (WSȬTMX).ȱ Auchȱ beiȱ diesemȱ Ansatzȱ sindȱ sowohlȱ ACIDȬTransaktionenȱ alsȱ auchȱ langlebigeȱ TransaktionenȱmitȱKompensationsmechanismenȱspezifiziert.ȱȱ
308 ȱ
4.6ȱȱZusammenfassung,ȱpraktischeȱAnsätzeȱundȱAusblickȱ Ausȱ heutigerȱ Sichtȱ hatȱ wohlȱ WSȬC/AT/BAȱ dieȱ bestenȱ Aussichtenȱ aufȱ eineȱ allgeȬ meineȱ Anerkennung.ȱ Daȱ dieȱ Diskussionȱ aberȱ nochȱ inȱ vollemȱ Gangeȱ ist,ȱ sollȱ aufȱ eineȱweitereȱErläuterungȱderȱderzeitȱvorhandenenȱAnsätzeȱverzichtetȱwerden.ȱ 2: Anwendungsnachricht inkl. C1
1: C1 = CreateCC (Type Q) Koordinationskontext erzeugen
Activation Service
Registration Service
Protocol Service
AP2
4: Registrierung und Koordinationsprotokoll festlegen
5: Registrierung und Koordinationsprotokoll weitergeben
Abgestimmtes Koordinationsprotokoll
Registration Service
3: C2 = CreateCC (C1) (eigenen Kontext erzeugen)
AP1
Activation Service
Protocol Service
Coordinator A C1, C2 := Transaktionskontext Q := Koordinationstyp
Coordinator B
ȱ
Abbildungȱ4Ȭ46:ȱZusammenspielȱbeiȱWSȬCoordinationȱ
Esȱ seiȱ nochȱ angemerkt,ȱ dassȱ WebserviceȬTransaktionenȱ mitȱ ACIDȬEigenschaften,ȱ dieȱmehrereȱKoordinatorenȱeinbeziehen,ȱinȱderȱPraxisȱsehrȱschwerȱzuȱorganisierenȱ sind.ȱAuchȱderȱAufbauȱvonȱInfrastrukturenȱfürȱlanglebigeȱTransaktionenȱundȱdieȱ EntwicklungȱvonȱKompensationstransaktionenȱsindȱeinȱkomplexesȱUnterfangen.ȱȱ Daȱ dieȱ anȱ einerȱ Transaktionȱ beteiligtenȱ Webservicesȱ möglicherweiseȱ aufȱ völligȱ eigenständigȱ agierendenȱ Transaktionsplattformenȱ ablaufen,ȱ dieȱ nurȱ schwerȱ inȱ Einklangȱ zuȱ bringenȱ sind,ȱ istȱ derȱ praktischeȱ Einsatzȱ derȱ genanntenȱ Ansätzeȱ sehrȱ problematisch.ȱ Manȱ mussȱ sichȱ dieȱ Frageȱ stellen,ȱ obȱ dieȱ Umsetzungȱ einerȱ derȱ geȬ nanntenȱAnsätzeȱüberhauptȱpraxisrelevantȱist.ȱAktuellȱgibtȱesȱnochȱkeineȱverbreiȬ teteȱImplementierungȱhierfür.ȱ
4.6 Zusammenfassung, praktische Ansätze und Ausblick Esȱlässtȱsichȱfesthalten,ȱdassȱheutigeȱverteilteȱTransaktionssystemeȱbzw.ȱTransaktiȬ onsanwendungenȱmeistȱflacheȱTransaktionenȱundȱgelegentlichȱoffenȱgeschachelteȱ Transaktionenȱ unterstützen.ȱ Dieȱ vorherrschendenȱ Transaktionsstandardsȱ kümȬ mernȱsichȱentwederȱumȱdasȱCommitȬProtokollȱ(OSIȱTP),ȱwobeiȱ2PCȱundȱ1PCȱübȬ lichȱ sind,ȱ oderȱ umȱ dieȱ Schnittstellenȱ zwischenȱ denȱ beteiligtenȱ Partnernȱ (CORȬ BA/OTS,ȱ JTA,ȱ JTS).ȱ Beiȱ denȱ WebserviceȬTransaktionsansätzenȱ werdenȱ beideȱ AsȬ pekteȱ betrachtet.ȱ Aufgrundȱ derȱ Schwächeȱ imȱ 2PCȬModellȱ versuchtȱ manȱ häufig,ȱ
ȱ
309
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
Transaktionen,ȱ dieȱ überȱ vieleȱ Knotenȱ verteiltȱ sind,ȱ imȱ praktischenȱ Einsatzȱ mögȬ lichstȱzuȱvermeiden.ȱ HeuteȱüblichȱȱRessourcenmanagerȱsindȱvorȱallemȱDatenbankmanagementsystemeȱ (Oracle,ȱMSȱSQLȱServer,ȱIBMȱDB2,ȱ…)ȱundȱMessageȬQueueingȬSystemeȱ(WebspheȬ reȱ MQ,ȱ …).ȱ Allgemeinȱ anerkannteȱ Standardsȱ fürȱ dieȱ Nebenläufigkeitskontrolle,ȱ dasȱLoggingȱundȱdasȱRecoveryȱsindȱheuteȱsoȱgutȱwieȱnichtȱverfügbar.ȱAlsȱConcurȬ rencyȬControlȬMechanismusȱwirdȱinȱderȱRegelȱeinȱpessimistisches,ȱmeistȱstrengesȱ 2PLȬSperrkonzeptȱ eingesetzt,ȱ dasȱ heuteȱ inȱ vielenȱ Variantenȱ implementiertȱ wird.ȱ LoggingȬȱundȱRecoveryȬFunktionenȱimplementiertȱjederȱHerstellerȱfürȱsich,ȱnatürȬ lichȱ imȱ Einklangȱ mitȱ demȱ KoordinatorȬTeilnehmerȬModell.ȱ Auchȱ dieȱ heuteȱ verȬ fügbarenȱ Transaktionsmanagerȱ (CORBAȬbasiert,ȱ EJBȬbasiert,ȱ …)ȱ implementierenȱ ihreȱeigenenȱLoggingȬȱundȱRecoveryȬFunktionen.ȱ Message-QueuingSysteme
DBMS
Jboss MQ
Oracle
...
Websphere MQ
Transaktionsmonitore Encina ... CICS
DB2
Microsoft MSMQ
MS SQL Server unterstützen
nutzt
OSI TP
unterstützen
openUTM
...
unterstützen
WebserviceTransaktionsansätze
DTP-Modell
unterstützt unterstützt
unterstützt
.NET Enterprise Services und MTS
CORBA/OTS
nutzt
JEE JTA und JTS
ȱ Abbildungȱ4Ȭȱ47:AbhängigkeitenȱderȱverschiedenenȱTransaktionsansätzeȱ
AlsȱzentralesȱundȱwichtigstesȱTransaktionsmodellȱhatȱsichȱinȱderȱPraxisȱdasȱDTPȬ ModellȱderȱOpenȱGroupȱdurchgesetzt.ȱDieȱmeistenȱanderenȱAnsätzeȱunterstützenȱ dieȱ imȱ DTPȬModellȱ beschriebenenȱ Schnittstellen.ȱ Dieȱ amȱ weitestenȱ verbreiteteȱ DTPȬSchnittstelleȱ istȱ dasȱ XAȬInterfaceȱ zwischenȱ einemȱ Ressourcenmanagerȱ undȱ einemȱ Transaktionsmanager.ȱ XAȱ wirdȱ vonȱ praxisrelevantenȱ DatenbankmanageȬ mentsystemen,ȱApplicationȬServernȱundȱTransaktionsmonitorenȱunterstützt.ȱAuchȱ dieȱ OMGȱ legtȱ inȱ ihrerȱ OTSȬSpezifikationȱ dieȱ Zusammenarbeitȱ mitȱ DTPȬbasiertenȱ Lösungenȱ fest.ȱ Daȱ dieȱ meistenȱ Datenbankmanagementsystemeȱ schonȱ XAȱ unterȬ
310 ȱ
4.6ȱȱZusammenfassung,ȱpraktischeȱAnsätzeȱundȱAusblickȱ stützen,ȱ istȱ eineȱ XAȬAnbindungȱ dieserȱ Ressourcenmanagerȱ anȱ OTSȬImplementieȬ rungenȱ eineȱ naheliegendeȱ Lösung.ȱ Inȱ Abbildungȱ 4Ȭȱ 47ȱ sindȱ dieȱ Beziehungenȱ derȱ verschiedenenȱAnsätzeȱmitȱdemȱDTPȬModellȱalsȱzentralemȱModellȱgrafischȱdargeȬ stellt.ȱ Beiȱ Implementierungenȱ vonȱ Plattformenȱ fürȱ verteilteȱ Transaktionssystemeȱ findetȱ manȱauchȱhäufigȱCORBA/OTS.ȱDieserȱStandardȱgiltȱauchȱalsȱBasisȱfürȱdieȱImpleȬ mentierungȱ verteilterȱ Transaktionssystemeȱ imȱ JEE/EJBȬUmfeld.ȱ Praktischeȱ AnȬ wendungssysteme,ȱ dieȱ unterschiedlicheȱ EJBȬApplicationȬServerȱ verwendenȱ undȱ überȱmehrereȱheterogeneȱContainerȱverteilteȱTransaktionenȱeinsetzen,ȱsindȱaberȱinȱ derȱPraxisȱseltenȱanzutreffen.ȱFürȱdasȱtransaktionaleȱZusammenspielȱvonȱContaiȬ nernȱ unterschiedlicherȱ Herstellerȱ gibtȱ esȱ inȱ derȱ EJBȬSpezifikationȱ auchȱ nurȱ dieȱ Empfehlungȱ undȱ nichtȱ dieȱ Vorgabeȱ IIOPȱ alsȱ Protokollȱ fürȱ dieȱ KontextpropagieȬ rungȱ zuȱ verwenden.ȱ Diesȱ machtȱ einȱ Zusammenspielȱ unterschiedlicherȱ Containerȱ schwierig.ȱ Dieȱ Transaktionsansätzeȱ fürȱ WebserviceȬbasierteȱ Transaktionenȱ nutzenȱ dasȱ DTPȬ Modellȱ bzw.ȱ dieȱ XAȬSchnittstelleȱ natürlichȱ implizitȱ durchȱ dieȱ Verwendungȱ vonȱ Datenbanken.ȱ
Praktische Ansätze und Ausblick InȱderȱheutigenȱPraxisȱwerdenȱüberwiegendȱflacheȱTransaktionenȱgenutzt,ȱdieȱaberȱ inȱ denȱ meistenȱ Fällenȱ völligȱ ausreichen.ȱ Geschachtelteȱ Transaktionenȱ geltenȱ alsȱ sehrȱaufwändigȱinȱderȱImplementierung,ȱvorȱallemȱbeiȱderȱCommitȬBearbeitung.ȱȱ Dasȱ Zusammenspielȱ derȱ beteiligtenȱ Komponentenȱ istȱ insbesondereȱ beiȱ heterogeȬ nenȱProduktenȱrechtȱkomplexȱundȱfehleranfällig.ȱKompliziertȱwirdȱdasȱGanzeȱbeiȱ Fehlersituationenȱwieȱz.B.ȱdemȱAusfallȱeinesȱKoordinatorsȱwährendȱderȱCommitȬ Bearbeitungȱ (z.B.ȱ nachȱ derȱ Phaseȱ 1).ȱ Beispielsweiseȱ hatȱ manȱ immerȱ wiederȱ ProbȬ lemeȱ beiȱ XAȬbasiertenȱ verteiltenȱ Transaktionen,ȱ wennȱ dasȱ Zusammenspielȱ zwiȬ schenȱTMȱundȱRMȱinȱkritischenȱSituationenȱnichtȱfunktioniertȱundȱdadurchȱTransȬ aktionenȱundȱdamitȱauchȱSperrenȱ„hängen“ȱbleiben.ȱEsȱistȱheuteȱsicherȱschwierig,ȱ nahezuȱfehlerfreieȱRecoveryȬImplementierungenȱvorzufinden.ȱȱ Aufgrundȱ derȱ Komplexitätȱ derȱ Implementierungȱ verteilterȱ TransaktionsmiddleȬ wareȱsindȱfürȱdieȱAnwendungsentwicklungȱeherȱpragmatischeȱAnsätzeȱanzustreȬ ben,ȱ dieȱ nurȱ dieȱ notwendigstenȱ Featuresȱ verteilterȱ Transaktionenȱ ausnutzen.ȱ Esȱ sindȱheuteȱu.a.ȱfolgendeȱAnsätzeȱbeiȱderȱNutzungȱverteilterȱTransaktionenȱüblich:ȱ – VerteilteȱTransaktionenȱsindȱnurȱdannȱzuȱnutzen,ȱwennȱmanȱsieȱunbedingtȱ benötigtȱundȱdannȱsoȱeinfachȱwieȱmöglichȱzuȱgestaltenȱ(alsoȱflachȱundȱnichtȱ geschachtelt).ȱ – ACIDȬTransaktionenȱ sindȱ grundsätzlichȱ nurȱ fürȱ kurzeȱ Transaktionenȱ sinnȬ vollȱ einsetzbar.ȱ Zusammenhängendeȱ Operationen,ȱ dieȱ überȱ OrganisationsȬ grenzenȱ hinausgehen,ȱ sindȱ nichtȱ alsȱACIDȬTransaktionenȱ implementierbar.ȱ Hierȱ müssenȱ seriellȱ ausgeführteȱ Transaktionenȱ implementiertȱ werden.ȱ Alsȱ
ȱ
311
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ vorteilhafteȱLösungȱhatȱsichȱdieȱAufgliederungȱeinerȱlangenȱTransaktionȱinȱ kleinereȱTransaktionsschritteȱerwiesen.ȱDieȱZusammensetzungȱundȱdieȱReaȬ lisierungȱ evtl.ȱ notwendigerȱ Kompensationsoperationenȱ bleibenȱ aberȱ demȱ Anwendungsentwicklerȱüberlassen.ȱ – TransaktionenȱbeginnenȱüblicherweiseȱimȱServer,ȱdaȱdasȱSetzenȱvonȱTransȬ aktionsgrenzenȱ durchȱ einenȱ Client,ȱ derȱ imȱ Wesentlichenȱ derȱ Präsentationȱ dient,ȱ zuȱ unsicherȱ ist.ȱ Erȱ kannȱ nichtȱ dieȱ Rolleȱ einesȱ TransaktionskoordinaȬ torsȱübernehmen.ȱȱ – EinȱpragmatischerȱAnsatzȱsindȱ„serviceȬorientierteȱTransaktionen“ȱ(TransacȬ tionȬperȬRequestȬPattern).ȱ JeȱMethodenaufrufȱ gibtȱ esȱ nurȱ eineȱinȱsichȱ abgeȬ schlosseneȱ Transaktion,ȱ dieȱ imȱ Serverȱ abläuft.ȱ Wennȱ derȱ Methodenaufrufȱ einesȱ Clientsȱ abgearbeitetȱ ist,ȱ sollteȱ auchȱ dieȱ Transaktionȱ abgeschlossenȱ werden.ȱHierȱbleibtȱimmerȱnochȱdasȱProblem,ȱdassȱderȱClientȱggf.ȱaufgrundȱ einesȱNetzwerkausfallsȱdasȱMethodenergebnisȱ(Transaktionsergebnis)ȱnichtȱ mitbekommt.ȱ Inȱ dialogorientiertenȱ Anwendungenȱ istȱ fürȱ eineȱ evtl.ȱ AbkläȬ rungȱ desȱ Ergebnissesȱ einȱ entsprechenderȱ Dialogȱ vorzusehen.ȱ Dasȱ IsolatiȬ onsprinzipȱvonȱDatenbankenȱkannȱbeiȱdiesemȱAnsatzȱebenfallsȱnurȱteilweiseȱ genutztȱwerden.ȱNachȱjederȱMethodeȱwerdenȱdieȱObjektsperrenȱfreigegeben.ȱ Objekte,ȱ dieȱ methodenübergreifendȱ bearbeitetȱ werden,ȱ sindȱ zunächstȱ „opȬ timistisch“ȱ durchȱ dieȱ Anwendungȱ zuȱ „sperren“ȱ undȱ vorȱ einerȱ ÄnderungsȬ operationȱnochmalsȱimȱServerȱaufȱihrenȱUrsprungswertȱhinȱzuȱüberprüfen.ȱ Beiȱ Abweichungenȱ kannȱ dieȱ Änderungsoperationȱ nichtȱ ausgeführtȱ werdenȱ undȱesȱistȱeineȱAusnahmebehandlungȱdurchȱdieȱAnwendungȱerforderlich.ȱ
DieȱgenanntenȱpraktischenȱAnsätzeȱgeltenȱauchȱfürȱWebserviceȬorientierteȱTransȬ aktionen.ȱEineȱOperationȱeinesȱWebserviceȱsollteȱhöchstensȱeineȱACIDȬTransaktionȱ enthalten.ȱVerteilteȱTransaktionsmanager,ȱdieȱalsȱKoordinatorenȱinȱunternehmensȬ übergreifendenȱ Anwendungenȱ zusammenarbeiten,ȱ sindȱ imȱ Momentȱ nochȱ nichtȱ praxisrelevant.ȱAndereȱAnsätzeȱmüssenȱsichȱerstȱnochȱbewähren.ȱ EinȱsehrȱverbreiteterȱAnsatzȱistȱauchȱderȱEinsatzȱvonȱQueuedȱTransactions,ȱsofernȱ dasȱInteraktionsverhaltenȱeinerȱAnwendungȱdiesȱzulässt.ȱȱ Alsȱ pragmatischerȱ Ansatzȱ zurȱ Implementierungȱ vonȱ langlebigenȱ Transaktionenȱ kannȱ auchȱ einȱ abgewandeltesȱ QueuedȬTransactionsȬModellȱ verwendetȱ werden,ȱ beiȱdemȱdieȱQueuesȱinȱDatenbanktabellenȱsimuliertȱwerden.ȱManȱteiltȱdieȱlangenȱ Transaktionenȱ inȱ kurzeȱ ACIDȬTransaktionenȱ aufȱ undȱ schreibtȱ jeweilsȱ dieȱ ZwiȬ schenergebnisseȱpersistentȱinȱDatenbanktabellen.ȱDieȱnächsteȱACIDȬTransaktionȱinȱ derȱ Bearbeitungsketteȱ bearbeitetȱ dieȱ Zwischenergebnisseȱ weiter.ȱ Hierȱ gibtȱ manȱ bewusstȱdieȱIsolationseigenschaftȱaufȱundȱmussȱsichȱinȱderȱAnwendungsentwickȬ lungȱumȱeineȱgeeigneteȱStrategieȱzurȱLösungȱvonȱKonsistenzproblemenȱkümmern.ȱ InȱvielenȱFällenȱistȱdiesȱaberȱmöglich.ȱ Insbesondereȱ dieȱ Aufweichungȱ derȱ Isolationseigenschaftȱ lässtȱ sichȱ beiȱ ClientȬ ServerȬAnwendungenȱ inȱ derȱ Praxisȱ nurȱ schwerȱ vermeiden,ȱ wennȱ manȱ robusteȱ
312 ȱ
4.7ȱȱÜbungsaufgabenȱ Anwendungenȱentwickelnȱmöchte.ȱWieȱmanȱausȱdenȱgenanntenȱAnsätzenȱerkenȬ nenȱkann,ȱliegtȱdieȱEntscheidungȱfürȱdenȱrichtigenȱEinsatzȱvonȱTransaktionenȱundȱ fürȱKompensationsstrategienȱauchȱheuteȱnochȱbeimȱAnwendungsarchitektenȱbzw.ȱ beimȱSoftwareentwickler.ȱȱ DasȱTransaktionskonzeptȱwirdȱsicherȱeinȱwichtigesȱKonzeptȱfürȱverteilteȱInformaȬ tionssystemeȱ bleiben.ȱ Serviceorientierteȱ Architekturenȱ aufȱ Basisȱ vonȱ Webservicesȱ werdenȱwohlȱdieȱnächstenȱDiskussionenȱbestimmenȱundȱmanȱmussȱsichȱüberlegen,ȱ welcheȱ Transaktionsansätzeȱ hierfürȱ wirklichȱ gewinnbringendȱ sind.ȱ Hierȱ gibtȱ esȱ sicherȱgroßeȱkonzeptionelleȱUnterschiedeȱzwischenȱdemȱEinsatzȱvonȱWebservicesȱ inȱ geschlossenenȱ undȱ durchȱ einȱ Unternehmenȱ kontrollierbarenȱ Umgebungenȱ soȬ wieȱ demȱ globalen,ȱ unternehmensübergreifendenȱ Einsatzȱ vonȱ SOA.ȱ Esȱ bleibtȱ abȬ zuwarten,ȱ obȱ sichȱ einȱ Standardisierungsansatzȱ durchsetzenȱ wirdȱ undȱ welcheȱ BeȬ deutungȱerȱfürȱdieȱpraktischeȱAnwendungsentwicklungȱerlangt.ȱ
4.7 Übungsaufgaben 1. 2. 3. 4. 5. 6. 7. 8.
9. 10. 11. 12. 13. 14.
Welcheȱ Rolleȱ spieltȱ imȱ DTPȬModellȱ derȱ Transaktionsmanagerȱ undȱ welcheȱ SchnittstelleȱbietetȱerȱinȱRichtungȱAnwendungsprogrammȱ(AP)ȱan?ȱ WozuȱdientȱderȱCRMȱimȱDTPȬModell?ȱ WieȱstartetȱeinȱAPȱeineȱTransaktion?ȱ WasȱistȱimȱDTPȬModellȱeinȱThreadȱofȱControlȱbzw.ȱeinȱAusführungspfad?ȱ ErläuternȱSieȱdieȱbeidenȱPhasenȱdesȱ2PCȬProtokolls!ȱ Wasȱ bedeutetȱ imȱ 2PCȬProtokollȱ einȱ „unsichererȱ Zustand“,ȱ werȱ kannȱ ihnȱ einȬ nehmenȱundȱinȱwelcherȱSituationȱtrittȱerȱauf?ȱ Wieȱ wirdȱ üblicherweiseȱ eineȱ XAȬUnterstützungȱ durchȱ denȱ Herstellerȱ einesȱ DBMSȱrealisiert?ȱ Wasȱ passiertȱ beiȱ einerȱ 2PCȬKoordinierungȱ zwischenȱ einemȱ Koordinatorȱ undȱ zweiȱTeilnehmern,ȱwennȱeinȱTeilnehmerȱwährendȱderȱPhaseȱ1ȱ„ready“ȱanȱdenȱ Koordinatorȱmeldet,ȱderȱzweiteȱallerdingsȱ„notȱready“.ȱErläuternȱSieȱdenȱAbȬ laufȱanhandȱeinesȱSequenzdiagramms!ȱ SollteȱeinȱPCȬbasierterȱClientȱalsȱTransaktionskoordinatorȱdienen?ȱBegründenȱ SieȱIhreȱEntscheidung!ȱ Warumȱ istȱ einȱ persistenterȱ LoggingȬMechanismusȱ wieȱ z.B.ȱ nachȱ demȱ WALȬ PrinzipȱfürȱdieȱRealisierungȱvonȱ(verteilten)ȱACIDȬTransaktionenȱnotwendig?ȱ WozuȱmussȱeinȱTeilnehmerȱanȱeinerȱTransaktion,ȱderȱinȱderȱPhaseȱ1ȱeinerȱ2PCȬ Koordinationȱmitȱ„ready“ȱantwortet,ȱinȱderȱLageȱsein?ȱ WelcheȱAufgabeȱhatȱJTAȱinȱeinerȱJEE/EJBȬUmgebungȱundȱwelcheȱSchnittstelȬ lenȱstelltȱJTAȱzurȱVerfügung?ȱȱ WelchesȱTransaktionsmodellȱunterstütztȱEJB?ȱ Erläuternȱ Sieȱ denȱ Unterschiedȱ zwischenȱ beanȬmanaged,ȱ containerȬmanagedȱ undȱclientȬmanagedȱTransaktionen.ȱ
ȱ
313
4ȱ
Konzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ
15. Wieȱ kannȱ einȱ EJBȬClientȱ nachȱ einemȱ Ausfallȱ währendȱ einerȱ CommitȬBearȬ beitungȱ erfahren,ȱ obȱ dieȱ geradeȱ ausgeführteȱ Transaktionȱ erfolgreichȱ zuȱ Endeȱ geführtȱwurdeȱoderȱnicht?ȱ 16. Könnenȱ einȱ EJBȬContainerȱ undȱ einȱ .NETȬEnterpriseȬServicesȬContainerȱ eineȱ gemeinsameȱ Transaktionȱ ausführenȱ undȱ dieseȱ koordinieren?ȱ Begründenȱ Sieȱ IhreȱEntscheidung!ȱ 17. WarumȱfunktioniertȱdasȱstarreȱACIDȬKonzeptȱfürȱTransaktionenȱmitȱWebserȬ vicesȱ nicht?ȱ Welchesȱ Transaktionsmodellȱ würdenȱ Sieȱ fürȱ eineȱ WebserviceȬ basierteȱ Anwendung,ȱ dieȱ dreiȱ WebserviceȬOperationenȱ unterschiedlicherȱ Diensteproviderȱ inȱ einerȱ zusammenhängendenȱ (atomaren)ȱ Aktionsfolgeȱ nutȬ zenȱmuss,ȱvorschlagen?ȱ 18. WasȱsindȱimȱBTPȬTransaktionsstandardȱCohesiveȱBusinessȱTransactions?ȱ ȱ
314 ȱ
5 Architekturen verteilter betrieblicher Anwendungen EsȱistȱeineȱderȱschwierigstenȱAufgabenȱinȱderȱSoftwareentwicklung,ȱeineȱArchitekȬ turȱ zuȱ entwerfen,ȱ dieȱ denȱ Anforderungenȱ genügtȱ undȱ auchȱ eineȱ WeiterentwickȬ lungȱdesȱSystemsȱgestattet.ȱNebenȱdenȱtechnischenȱIdealenȱsindȱhierȱnatürlichȱanȬ dereȱAspekteȱwieȱdieȱvorhandeneȱEntwicklungszeit,ȱdieȱvorgegebenenȱWerkzeugeȱ undȱdasȱBudgetȱwichtigeȱEinflussfaktoren.ȱArchitekturenȱkönnenȱausȱverschiedeȬ nenȱBlickwinkelnȱbetrachtetȱwerden.ȱFachlicheȱAspekteȱeinerȱAnwendungsdomäȬ neȱspielenȱeineȱebensoȱgroßeȱRolleȱwieȱtechnischeȱFragestellungen.ȱDiesesȱKapitelȱ sollȱdieȱProblematikȱausȱtechnischerȱSichtȱdiskutierenȱundȱstelltȱdieȱITȬArchitekturȱ inȱdenȱVordergrund.ȱ DieȱüberwiegendeȱAnzahlȱanȱneuerenȱverteiltenȱSystemenȱnutztȱheuteȱvorwiegendȱ dasȱ ClientȬServerȬModell.ȱZwarȱ kannȱ manȱ auchȱ inȱbetrieblichenȱInformationssysȬ temenȱ nichtȱ jedenȱ Anwendungstypȱ aufȱ dasȱ Modellȱ abbilden,ȱ aberȱ dieȱ meistenȱ Anwendungssystemeȱwerdenȱsoȱgestaltet.ȱDeshalbȱwirdȱdiesesȱModellȱoftȱbeiȱderȱ ArchitekturdiskussionȱinȱdenȱMittelpunktȱderȱBetrachtungȱgerückt.ȱAberȱauchȱanȬ dereȱ Architekturvariantenȱ bzw.ȱ Architekturstileȱ sindȱ möglichȱ undȱ fürȱ bestimmteȱ Anwendungenȱsinnvoll.ȱ Nachȱ einerȱ grundsätzlichenȱ Einordnungȱ desȱ Begriffsȱ „ITȬArchitektur“ȱ inȱ dieȱ UnȬ ternehmensarchitekturȱ versuchenȱ wirȱ inȱ diesemȱ Kapitel,ȱ denȱ Architekturbegriffȱ mangelsȱeinerȱanerkanntenȱDefinitionȱüberȱmehrereȱDefinitionsversucheȱausȱtechȬ nischerȱSichtȱzuȱerläuternȱundȱgehenȱanschließendȱaufȱArchitekturstileȱundȱQualiȬ tätsmerkmaleȱvonȱArchitekturenȱein.ȱDanachȱdiskutierenȱwirȱSchichtenarchitektuȬ renȱundȱwieȱmanȱdieȱSchichtenȱimȱNetzwerkȱverteilenȱkann.ȱDieȱDatenzugriffsarȬ chitektur,ȱ eineȱ spezielleȱ Teilarchitektur,ȱ wirdȱ ebenfallsȱ betrachtet,ȱ daȱ dieseȱ insbeȬ sondereȱ beiȱ betrieblichenȱ Informationssystemenȱ vonȱ besondererȱ Bedeutungȱ ist.ȱ EbensoȱwerdenȱclientseitigeȱArchitekturaspekteȱinsbesondereȱbezogenȱaufȱdieȱAnȬ bindungȱ vonȱ Clientsystemenȱ anȱ dieȱ Serverseiteȱ sowieȱ serviceorientierteȱ Ansätzeȱ betrachtet.ȱ Unserȱ Hauptaugenmerkȱ liegtȱ aufȱ derȱ Verteilungȱ vonȱ Softwarebausteinenȱ inȱ verȬ teiltenȱ betrieblichenȱ Informationssystemen.ȱ ITȬArchitekturenȱ betrachtenȱ nebenȱ eiȬ nerȱ Bausteinzerlegungȱ auchȱ dieȱ fürȱ eineȱ Umsetzungȱ vorhandenenȱ Konzepteȱ undȱ TechnologienȱfürȱverteilteȱAnwendungssysteme.ȱOhneȱdasȱWissenȱüberȱKonzepteȱ undȱ Technologienȱ fälltȱ esȱ schwer,ȱ geeigneteȱ Architekturenȱ zuȱ entwerfen.ȱ Dasȱ GrundwissenȱausȱdenȱvorangegangenenȱKapitelnȱistȱdaherȱfürȱdieȱweitereȱDiskusȬ sionȱsehrȱhilfreich.ȱ
ȱ
315
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ
Zielsetzung des Kapitels Derȱ Studierendeȱ sollȱ verschiedeneȱ Aspekteȱ derȱ Gestaltungȱ vonȱ ITȬArchitekturenȱ fürȱ verteilteȱ Systemeȱ unterȱ Einsatzȱ vonȱ Technologienȱ undȱ Konzeptenȱ verteilterȱ Systemeȱ kennenlernenȱ undȱ aufȱ konkreteȱ Problemstellungenȱ anwendenȱ können.ȱ DabeiȱsollȱerȱvorȱallemȱinȱSoftwareschichtenȱdenkenȱkönnen.ȱ
Wichtige Begriffe Architekturstile,ȱ ITȬArchitektur,ȱ SoftwareȬArchitektur,ȱ Schichtenarchitektur,ȱ SerȬ viceȬorientierteȱ Architektur,ȱ SOA,ȱ Middleware,ȱ Applicationȱ Server,ȱ Container,ȱ PeerȬtoȬPeerȬArchitekturen,ȱ ObjectȬRelationalȬMappingȱ (ORM),ȱ JEEȬArchitektur,ȱ JDBC,ȱJavaȱPersistenceȱAPIȱ(JPA),ȱEntityȬManager,ȱContainerȬmanagedȱPersistencyȱ (CMP),ȱ BeanȬmanagedȬPersistencyȱ (BMP),ȱ Persistencyȱ Unit,ȱ Persistenzkontext,ȱ Datenzugriffsarchitektur,ȱclientseitigeȱArchitektur.ȱ
5.1 Begriffe und Definitionen Architekturȱ istȱ inȱ derȱ Informationstechnikȱ einȱ sehrȱ häufigȱ undȱ unterschiedlichȱ verwendeterȱ Begriff.ȱ Betrachtetȱ manȱ dieȱ Gesamtarchitekturȱ einesȱ Unternehmens,ȱ soȱkannȱmanȱverschiedeneȱArchitekturtypenȱerkennen,ȱdieȱzumȱeineȱfachlicheȱundȱ zumȱanderenȱeineȱtechnischȱSichtȱliefern.ȱKellerȱunterscheidetȱinȱderȱsog.ȱArchitekȬ turȬModellpyramideȱ verschiedeneȱ Architekturtypenȱ einesȱ Unternehmensȱ (Kellerȱ 2007),ȱdieȱimȱRahmenȱderȱDiskussionȱumȱUnternehmensarchitekturenȱ(Enterpriseȱ Architektur)ȱeineȱRolleȱspielenȱ(Abbildungȱ5Ȭ1):ȱ – Geschäftsarchitektur:ȱHierunterȱwirdȱdieȱSummeȱallerȱGeschäftsprozesseȱeinesȱ Unternehmensȱ verstanden.ȱ Dieȱ verantwortlichenȱ Instanzenȱ (Owner)ȱ dieserȱ ArchitektursichtȱsindȱdieȱFachȬȱoderȱOrganisationsabteilungen.ȱDieseȱArchiȬ tektursichtȱgibtȱAuskunftȱüberȱdieȱProzesse,ȱdieȱdurchȱITȱunterstütztȱwerdenȱ sollen.ȱ – FachȬȱundȱInformationsarchitektur:ȱDieseȱbeidenȱArchitekturtypenȱbeschreibenȱ dieȱfachlichenȱAspekteȱundȱdieȱfachlichenȱInformationsobjekte,ȱdieȱvonȱdenȱ Anwendungssystemenȱverwaltetȱwerden.ȱDieȱBeschreibungȱerfolgtȱhierȱreinȱ fachlich,ȱtechnischeȱAspekteȱwerdenȱnichtȱbetrachtet.ȱAnwendungssystemeȱ undȱderenȱZusammenspielȱundȱdieȱwichtigstenȱfachlichenȱServicesȱderȱSysȬ temeȱ werdenȱ beschrieben.ȱ Dieȱ Ownerȱ dieserȱ Architektursichtenȱ sindȱ dieȱ Fachabteilungen.ȱ – ITȬArchitekturȱ bzw.ȱ Anwendungsarchitektur:ȱ Dieserȱ Architekturtypȱ gibtȱ dieȱ technischeȱSichtȱaufȱeinȱAnwendungssystemȱwieder.ȱEineȱKomponentenzerȬ legungȱ wirdȱ hierȱ beschrieben.ȱ Dieȱ eingesetztenȱ technischenȱ Konzepte,ȱ eineȱ evtl.ȱ Schichtenaufteilungȱ sowieȱ auchȱ derȱ Einsatzȱ bestimmterȱ Technologienȱ werdenȱbetrachtet.ȱOwnerȱdiesesȱArchitekturtypsȱistȱdieȱITȬAbteilung.ȱ – Systemarchitekturȱ undȱ Infrastrukturarchitekur:ȱ Dieȱ Systemarchitekturȱ beȬ schreibtȱ dieȱ Zuordnungȱ derȱ Softwarekomponentenȱ zuȱ physikalischenȱ oderȱ
316 ȱ
5.1ȱȱBegriffeȱundȱDefinitionenȱ virtuellenȱ Hardwaresystemen.ȱ Manȱ bezeichnetȱ dieseȱ Architekturȱ auchȱ alsȱ ITȬBasisinfrastruktur.ȱDieȱInfrastrukturarchitekturȱgibtȱeinenȱÜberblickȱüberȱ alleȱBasissystemeȱwieȱNetzwerke,ȱServerrechnerȱundȱsystemnaheȱSoftwareȬ komponentenȱ (Betriebssysteme)ȱ einesȱ Unternehmensȱ sowieȱ derenȱ ZusamȬ menspiel.ȱ Inȱ Erweiterungȱ zurȱ reinenȱ Softwarebetrachtungȱ inȱ derȱ AnwenȬ dungsarchitekturȱ beziehtȱ manȱ inȱ dieȱ Systemarchitekturȱ auchȱ dieȱ HardwareȬ komponentenȱinȱdieȱArchitekturȱmitȱein,ȱesȱwirdȱalsoȱdasȱvollständigeȱSysȬ temȱundȱdasȱZusammenspielȱallerȱBausteineȱ(Hardware,ȱSoftware)ȱbetrachȬ tet.ȱOwnerȱdieserȱArchitektursichtenȱistȱdieȱITȬAbteilung.ȱ Wieȱ schonȱ dieȱ Definitionsversucheȱ zeigen,ȱ sindȱ dieȱ verschiedenenȱ ArchitekturtyȬ penȱ nichtȱ scharfȱ voneinanderȱ trennbar,ȱ gebenȱ aberȱgrundlegendeȱ Sichten,ȱ dieȱ fürȱ eineȱ unternehmensweiteȱ Betrachtungȱ sinnvollȱ undȱ nützlichȱ sind,ȱ wider.ȱ Unserȱ HauptaugenmerkȱliegtȱaufȱderȱAnwendungsȬȱbzw.ȱITȬArchitektur.ȱAuchȱdieȱFachȬȱ undȱ dieȱ Informationsarchitekturȱ alsȱ Schnittstellenȱ zwischenȱ denȱ reinȱ fachlichenȱ Geschäftsmodellenȱ undȱ derȱ technischenȱ Umsetzungȱ sindȱ fürȱ dieȱSchaffungȱganzȬ heitlicherȱLösungenȱwichtig.ȱȱ
Strategie Geschäftsarchitektur Facharchitektur und Informationsarchitektur Anwendungsarchitektur (IT-Architekturen) Systemarchitektur, Infrastrukturarchitektur (IT-Basisinfrastruktur)
ȱ Abbildungȱ5Ȭ1:ȱArchitekturtypenȱfürȱEnterpriseȱArchitekturenȱangelehntȱanȱKellerȱ2007ȱ
WirȱwollenȱinȱdiesemȱKapitelȱdieȱBegriffeȱITȬArchitekturȱbzw.ȱAnwendungsarchitekȬ turȱ weiterȱ erläuternȱ undȱ sprechenȱ inȱ Weiterenȱ vonȱ Softwarearchitekturȱ oderȱ nurȱ vonȱArchitektur.ȱBeziehenȱwirȱdieȱHardwareȬȱundȱSoftwareȱgleichermaßenȱinȱdieȱ Betrachtungȱein,ȱsoȱsprechenȱwirȱvonȱSystemarchitektur.ȱInformatikerȱhabenȱmehȬ rereȱDefinitionsversucheȱfürȱdenȱBegriffȱderȱArchitekturȱunternommen,ȱaberȱesȱhatȱ sichȱ keineȱ allgemeinȱ anerkannteȱ Definitionȱ etabliert.ȱ Daherȱ werdenȱ vorabȱ einigeȱ DefinitionenȱausȱverschiedenenȱSichtweisenȱdiskutiert.ȱ
ȱ
317
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ
Architektur als Aufbau eines Softwaresystems Nachȱ Kuhrmannȱ (Kuhrmannȱ 2004)ȱ beschreibtȱ eineȱ Architekturȱ denȱ Aufbauȱ einesȱ SoftwaresystemsȱeinschließlichȱallerȱSoftwarebauelementeȱundȱderenȱBeziehungenȱ (sieheȱ Abbildungȱ 5Ȭ2)ȱ untereinander.ȱ Einȱ Softwarebauelementȱ istȱ dabeiȱ einȱ mögȬ lichstȱinȱsichȱabgeschlossenesȱundȱevtl.ȱ(aberȱnichtȱzwingend)ȱauchȱeinȱwiederverȬ wendbaresȱ Softwarefragment,ȱ dasȱ seineȱ Funktionalitätȱ durchȱ eineȱ oderȱ mehrereȱ Schnittstellenȱ beschreibt.ȱEinȱ Softwarebauelementȱ kannȱ imȱ objektorientiertenȱSinȬ neȱz.B.ȱüberȱeineȱObjektklasseȱrealisiertȱsein,ȱimȱprozeduralenȱSinneȱüberȱeinȱMoȬ dulȱ undȱ inȱ derȱ komponentenorientiertenȱ Softwareentwicklungȱüberȱ eineȱ KompoȬ nente.ȱSehrȱwichtigȱfürȱeineȱguteȱArchitekturȱsindȱdieȱSchnittstellenȱderȱSoftwareȬ bauelemente.ȱTypischeȱArchitekturenȱverteilterȱAnwendungenȱwerdenȱweiterȱunȬ tenȱnochȱdiskutiert.ȱ SB4 SB2 SB1
SB5 SB3 SB6 SB = Softwarebaustein
ȱ
Abbildungȱ5Ȭ2:ȱITȬArchitekturȱbeschreibtȱBauelementeȱundȱBeziehungenȱ
Architektur als statische und dynamische Struktur eines Softwaresystems Andresenȱ definiertȱ SoftwareȬArchitekturȱ inȱ (Andresenȱ 2003)ȱ ähnlichȱ undȱ beziehtȱ dieȱDynamikȱeinesȱSystemsȱmitȱeinȱ(sieheȱAbbildungȱ5Ȭ3):ȱ„SoftwareȬArchitekturȱistȱ dieȱ Identifikation,ȱ Spezifikationȱ undȱ Dokumentationȱ sowohlȱ derȱ statischenȱ Strukturȱ alsȱ auchȱderȱdynamischenȱInteraktionȱeinesȱSoftwareȬSystems,ȱwelchesȱsichȱausȱKomponentenȱ undȱSystemenȱzusammensetzt.ȱDabeiȱwerdenȱsowohlȱdieȱEigenschaftenȱderȱKomponentenȱ undȱSystemeȱalsȱauchȱihreȱAbhängigkeitenȱundȱKommunikationsartenȱmittelsȱspezifischerȱ Sichtenȱ beschriebenȱ undȱ modelliert.ȱ SoftwareȬArchitekturȱ betrifftȱ alleȱ Artefakteȱ derȱ SoftȬ wareȬEntwicklung.“ȱ SB4
SB1
SB2
SB4
SB2 SB1
SB5 SB3 SB6 statisch
SB = Softwarebaustein
dynamisch
Abbildungȱ5Ȭ3:ȱITȬArchitekturȱbeschreibtȱdieȱstatischeȱundȱdynamischeȱStrukturȱ
318 ȱ
5.1ȱȱBegriffeȱundȱDefinitionenȱ
Architektur als Bauplan eines Softwaresystems DustdarȱbezeichnetȱSoftwareȬArchitekturȱalsȱBauplanȱfürȱeinȱSoftwaresystem,ȱderȱ dieȱwesentlichenȱElementeȱundȱTeileȱderȱSoftwareȱundȱdieȱwichtigstenȱInteraktionenȱ derȱTeileȱbeschreibt.ȱErȱräumtȱauchȱein,ȱdassȱeineȱeinzigeȱDarstellungȱfürȱdieȱSoftȬ wareȬArchitekturȱ nichtȱ möglichȱ ist.ȱ Vielmehrȱ sindȱ bestimmteȱ Aspekteȱ wieȱ dieȱ Kommunikation,ȱ Schichten,ȱ Moduleȱ undȱ Subsystemeȱ inȱ eigenenȱ Plänenȱ zuȱ beȬ schreibenȱ(Dustdarȱ2003).ȱManȱmussȱzudemȱunterscheiden,ȱobȱdieȱArchitekturȱnurȱ fürȱeinȱbestimmtesȱindividuellesȱEinzelsystemȱentwickeltȱwird,ȱfürȱeineȱReiheȱgleichȬ artigerȱSystemeȱoderȱgarȱalsȱReferenzarchitekturȱȱfürȱeineȱganzeȱGenerationȱähnliȬ cherȱSoftwareȬProdukteȱinnerhalbȱeinerȱSystemfamilieȱdienenȱsoll.ȱ
Architektur definiert sich über Schnittstellen AuchȱSiederslebenȱdiskutiertȱdenȱBegriffȱderȱSoftwarearchitekturȱausführlichȱundȱ stelltȱdabeiȱdieȱSchnittstellenȱinȱdenȱVordergrundȱderȱBetrachtung.ȱEineȱSoftwareȬ architekturȱ definiertȱ sichȱ überȱ dieȱ Schnittstellenȱ (sieheȱ Abbildungȱ 5Ȭ4):ȱ „Dieȱ SchnittstelleȱistȱeineȱderȱwichtigstenȱIdeenȱdesȱIngenieurwesensȱüberhaupt,ȱaberȱinȱderȱInȬ formatikȱ hatȱ sichȱ derȱ Begriffȱ nurȱ mühsamȱ undȱ bisȱ heuteȱ nochȱ nichtȱ vollständigȱ durchgeȬ setzt.“ȱSiederslebenȱ(Siederslebenȱ2004)ȱbemängeltȱzumȱThemaȱSchnittstellenȱaber,ȱdassȱesȱ „...ȱ bisȱ heuteȱ keineȱ allgemeinȱ akzeptierteȱ Artȱ derȱ Dokumentationȱ fürȱ derenȱ SemanȬ tikȱ...“ȱgibt.ȱ SB2
SB1
SB4
Schnittstelle
SB3 SB = Softwarebaustein
ȱ
Abbildungȱ5Ȭ4:ȱSchnittstellenȱimȱMittelpunktȱderȱITȬArchitekturȱȱ
Kern einer Architektur EinȱwichtigerȱAspektȱistȱnachȱSiederslebenȱauch,ȱdassȱeinȱAnwendungssystemȱumȱ einenȱAnwendungskernȱherumȱgebautȱwerdenȱsollteȱ(Abbildungȱ5Ȭ5)ȱundȱnatürlichȱ sollteȱ manȱ anwendungsspezifischeȱ Bausteineȱ vonȱ denȱ technischenȱ Bausteinenȱ weitgehendȱtrennen.ȱSiederslebenȱbeschreibtȱdiesȱinȱseinerȱQualitätssicherungsarchiȬ tekturȱnamensȱQuasarȱausführlich.ȱSoftwarebausteineȱeinerȱArchitekturȱwerdenȱimȱ sog.ȱBlutgruppenmodellȱinȱfünfȱGruppenȱeingeteilt,ȱdieȱalsȱ„BlutgruppenȱO,ȱA,ȱAT,ȱ RȱundȱTȱbezeichnetȱwerden.ȱTȬBausteineȱsindȱz.B.ȱBausteine,ȱdieȱvonȱderȱTechnikȱ undȱnichtȱvonȱderȱAnwendungȱabhängen,ȱAȬBausteineȱwerdenȱdurchȱdieȱAnwenȬ dungȱbestimmt,ȱsindȱaberȱvonȱderȱTechnikȱunabhängig,ȱOȬBausteineȱsindȱsowohlȱ vonȱ derȱ Technikȱ alsȱ auchȱ vonȱ derȱ Anwendungȱ unabhängig,ȱ ATȬBausteineȱ sindȱ technikȬȱ undȱ applikationslastigȱ undȱ daherȱ nichtȱ optimalȱ fürȱ eineȱ WiederverwenȬ
ȱ
319
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ dungȱgeeignet,ȱRȬBausteineȱtransformierenȱfachlicheȱObjekteȱinȱexterneȱRepräsenȬ tationenȱundȱwiederȱzurück.ȱ
Anwendungskern
ȱ Abbildungȱ5Ȭ5:ȱAnwendungskernȱalsȱMittelpunktȱderȱITȬArchitekturȱȱ
Architekturen für Produktlinien und Referenzarchitekturen Esȱsollȱnochȱerwähntȱwerden,ȱdassȱdieȱArchitekturȱfürȱeinȱindividuellesȱEinzelsysȬ temȱandersȱaussiehtȱalsȱeineȱArchitekturȱfürȱeineȱProduktlinieȱoderȱgarȱeineȱRefeȬ renzarchitektur.ȱ Nachȱ Dustdarȱ istȱ eineȱ Produktlinieȱ eineȱ Mengeȱ vonȱ SoftwareȬ intensivenȱSystemen,ȱdieȱsichȱeineȱgemeinsameȱMengeȱvonȱFeaturesȱundȱdieȱspeȬ ziellenȱAnforderungenȱvonȱMarktȬSegmentenȱteiltȱoderȱdieȱausȱeinerȱgemeinsamenȱ Mengeȱ vonȱ Komponentenȱ inȱ einerȱ vorgeschriebenenȱ Artȱ undȱ Weiseȱ entwickeltȱ wirdȱ(Dustdarȱ2003).ȱSoftwareȬProduktlinienȱundȱderenȱEntwicklungȱsindȱauchȱinȱ (Böckleȱ2004)ȱausführlichȱerläutert.ȱȱ Eineȱ Referenzarchitekturȱ zieltȱ dagegenȱ aufȱ denȱ Anwendungsbereichȱ –ȱ dieȱ sogeȬ nannteȱFachdomäneȱ–ȱabȱundȱhatȱalsȱZielȱderȱModellierungȱeineȱArchitektur,ȱnachȱ derenȱ Vorgabeȱ oderȱ Schabloneȱ eineȱ ganzeȱ Mengeȱ vonȱ SoftwareȬSystemenȱ inȱ derȱ entsprechendenȱFachdomäneȱerstelltȱwerdenȱkönnen.ȱ
Architektursichten ManȱsollteȱeineȱArchitekturȱausȱmehrerenȱSichtenȱ(Views)ȱbetrachten.ȱEineȱmögliȬ cheȱVorgabeȱoderȱEmpfehlung,ȱwieȱmanȱArchitekturenȱdokumentiert,ȱfindetȱmanȱ imȱ IEEEȬStandardȱ IEEEȱ STDȱ 1471Ȭ2000.ȱ Imȱ Standardȱ sindȱ vorȱ allemȱ Systemeȱ imȱ Fokus,ȱ beiȱ denenȱ Softwareȱ einenȱ wesentlichenȱ Einflussȱ aufȱ dasȱ Design,ȱ dieȱ KonȬ struktion,ȱdenȱEinsatzȱundȱaufȱsonstigeȱBelangeȱausübt.ȱȱ Inȱ diesemȱ Vorschlagȱ werdenȱ verschiedeneȱ Begriffeȱ wieȱ Viewȱ (Sicht),ȱ Stakeholderȱ (amȱSystemȱBeteiligte),ȱConcernsȱ(Aspekte)ȱusw.ȱerläutert.ȱEineȱSichtȱrepräsentiertȱ dabeiȱ einȱ Softwaresystemȱ ausȱ derȱ Perspektiveȱ einerȱ verwandtenȱ Mengeȱ vonȱ AsȬ pekten.ȱJedeȱSichtȱstelltȱganzȱspezifischeȱInformationenȱbereit.ȱDieȱeinzelnenȱSichȬ tenȱkönnenȱsichȱdabeiȱdurchausȱüberschneiden,ȱsindȱalsoȱnichtȱzwingendȱorthogoȬ nal.ȱWelcheȱSichtenȱdiesȱsind,ȱwirdȱimȱStandardȱnichtȱvorgegeben.ȱ NachȱDustdarȱunterscheidetȱmanȱbeispielsweiseȱfolgendeȱSichtenȱ(Dustdarȱ2003):ȱ – KonzeptionelleȱSicht:ȱ ȱ Inȱ dieserȱ Sichtȱ betrachtetȱ manȱ dasȱ Systemȱ nochȱ unabȬ hängigȱ vonȱ Implementierungsentscheidungen.ȱ Manȱ skizziertȱ dieȱ Entitätenȱ oderȱObjekteȱdesȱProblemraumsȱundȱderenȱBeziehungenȱzueinander.ȱȱ
320 ȱ
5.1ȱȱBegriffeȱundȱDefinitionenȱ – Modulsicht:ȱ ȱ Dieseȱ Sichtȱ zeigtȱ dieȱ Strukturȱ einesȱ Softwaresystemsȱ inȱ Formȱ vonȱ Modulenȱ (Subsystemen,ȱ Bausteinen)ȱ undȱ derenȱ Beziehungenȱ zueinanȬ der.ȱEineȱSchichtenorganisationȱderȱModuleȱkannȱhierȱerfolgen.ȱ – ProzessȬSicht:ȱȱDieseȱSichtȱbildetȱdieȱSichtȱaufȱausführbareȱEinheitenȱwieȱProȬ zesseȱundȱ Threadsȱ einesȱ Betriebssystemsȱab.ȱ Esȱ wirdȱ alsoȱ skizziert,ȱ inȱ welȬ chenȱAusführungsinstanzenȱdieȱEntitätenȱundȱObjekteȱablaufen.ȱ – PhysischeȱSicht:ȱȱDieseȱSichtȱbildetȱdieȱSoftwareelementeȱaufȱdieȱHardwareȱab.ȱ Sieȱ konzentriertȱ sichȱ auchȱ aufȱ nichtȬfunktionaleȱ Anforderungenȱ wieȱ dasȱ Leistungsverhalten,ȱAnforderungenȱanȱdieȱFehlertoleranz,ȱdieȱVerfügbarkeitȱ undȱ dieȱ Skalierbarkeit.ȱ Dieȱ Elementeȱ dieserȱ Sichtȱ sindȱ vorwiegendȱ physiȬ scheȱKomponenten.ȱ WieȱdieȱBeschreibungȱzeigt,ȱistȱeineȱvollständigeȱTrennungȱderȱSichtenȱnichtȱgegeȬ ben.ȱSieȱüberschneidenȱsichȱzumȱTeilȱundȱsindȱauchȱnichtȱpräziseȱdefiniert.ȱȱ Konzeptuelle Sicht
Modulsicht
Szenarien
ProzessSicht
Physische Sicht
ȱ
Abbildungȱ5Ȭ6:ȱArchitektursichtenȱnachȱ(Kruchtenȱ1995)ȱ
Imȱ sog.ȱ „4+1“ȬSichtenmodellȱ vonȱ Kruchtenȱ (Kruchtenȱ 1995)ȱ wirdȱ diesenȱ Sichtenȱ nochȱ eineȱ Sichtȱ aufȱ wichtigeȱ Szenarienȱ desȱ Systemsȱ hinzugefügt.ȱ Alsȱ Szenarienȱ sindȱ hierȱ UseȬCasesȱ oderȱ Sequenzenȱ vonȱ Interaktionenȱ zwischenȱ Objektenȱ oderȱ Prozessenȱ zuȱ verstehen.ȱ Dieseȱ Sichtenȱ sindȱ inȱ Abbildungȱ 5Ȭ6ȱ nochmalsȱ skizziert.ȱ DieȱSzenarienȱstehenȱimȱMittelpunktȱundȱwerdenȱinȱalleȱanderenȱSichtenȱmitȱeinȬ bezogen.ȱ Eineȱ andereȱ Sichtendarstellungȱ wirdȱ zumȱ Beispielȱ vonȱ Starkeȱ vorgeschlagenȱ undȱ unterscheidetȱ Laufzeitsichten,ȱ Bausteinsichten,ȱ Verteilungssichtenȱ undȱ KontextȬ sichten.ȱDieseȱvierȱSichtenȱwerdenȱggf.ȱumȱeineȱDatensichtȱergänztȱ(Starkeȱ2005):ȱ – Inȱ denȱ Bausteinsichtenȱ werdenȱ alleȱ Bausteineȱ desȱ Systemsȱ beschrieben.ȱ Alsȱ Bausteineȱverstehtȱmanȱhierȱu.a.ȱKlassen,ȱProzeduren,ȱPakete,ȱKomponentenȱ (nachȱUMLȬDefinition)ȱundȱSubsysteme.ȱDieȱSichtenȱbildenȱdieȱFunktionaliȬ tätȱ desȱ Systemsȱ aufȱ Softwarebausteineȱ ab,ȱ behandelnȱ alsoȱ eineȱ Zerlegungȱ desȱSystemsȱinȱeinzelneȱBausteine.ȱ – Inȱ denȱ Laufzeitsichtenȱ wirdȱ dieȱ Zusammenarbeitȱ derȱ einzelnenȱ Bausteineȱ skizziert,ȱwobeiȱsowohlȱDatenȬȱalsȱauchȱKontrollflüsseȱbeschriebenȱwerden.ȱ Dieseȱ Sichtenȱ dienenȱ alsoȱ vorwiegendȱ derȱ Beschreibungȱ dynamischerȱ AsȬ pekteȱdesȱSystems.ȱ
ȱ
321
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ – DieȱVerteilungssichtenȱskizzierenȱdieȱAblaufumgebungȱdesȱSystemsȱundȱbeȬ ziehenȱdieȱHardwarekomponentenȱmitȱein.ȱInȱdieserȱSichtȱwirdȱalsoȱdargeȬ stellt,ȱaufȱwelchenȱRechnersystemenȱbestimmteȱSoftwarebausteineȱablaufenȱ sollenȱundȱwieȱdieseȱRechnersystemeȱüberȱNetwzerkeȱmiteinanderȱverbunȬ denȱ sind.ȱ Manȱ bezeichnetȱ dieseȱ Sichtenȱ daherȱ auchȱ alsȱ Infrastruktursichten.ȱ SieȱsindȱauchȱfürȱdieȱBetreiberȱundȱSystemadministratorenȱvonȱBedeutung.ȱ – DieȱKontextsichtenȱsindȱSichtenȱhöhererȱAbstraktionsebenen,ȱdieȱdieȱanderenȱ SichtenȱimȱZusammenhangȱbetrachten.ȱȱ – Dieȱ Datensichtenȱ stellenȱ nachȱ Starkeȱ zwarȱ keineȱ eigenständigeȱ ArchitekturȬ sichtȱdar,ȱkönnenȱaberȱbeiȱsehrȱdatenzentriertenȱAnwendungenȱnützlichȱsein.ȱ DiesȱistȱbeiȱbetrieblichenȱInformationssystemenȱinȱderȱRegelȱderȱFall.ȱInȱdieȬ senȱ Sichtenȱ kannȱ beschriebenȱ werden,ȱ welcheȱ Datenȱ inȱ welchenȱ SoftwareȬ bausteinenȱbenötigtȱwerdenȱundȱwoȱdieseȱDatenȱgespeichertȱwerden.ȱ Kontextsichten
LaufzeitSichten
BausteinSichten
VerteilungsSichten
Datensichten
ȱ Abbildungȱ5Ȭ7:ȱArchitektursichtenȱnachȱ(Starkeȱ2005)ȱ
Notationen zur Beschreibung der Architektur BeiȱderȱBeschreibungȱvonȱArchitektursichtenȱistȱmanȱgenerellȱsehrȱfrei.ȱEsȱgibtȱkeiȬ neȱ festeȱ Notationsvorgabe.ȱ Nebenȱ inȱ derȱ Praxisȱ sehrȱ seltenȱ angewendetenȱ ArchiȬ tekturbeschreibungssprachenȱ(ADLs)ȱwieȱAcmeȱvonȱderȱCarnegieȱMellonȱUniverȬ sityȱ (Mehnertȱ 2006)ȱ verwendetȱ manȱ inȱ ersterȱ Linieȱ grafischeȱ Notationen,ȱ wobeiȱ sichȱinȱdenȱletztenȱJahrenȱUMLȱalsȱBeschreibungsspracheȱdurchgesetztȱhatȱ(Jeckleȱ 2004).ȱDieȱverschiedenenȱUMLȬNotationenȱermöglichenȱdieȱDarstellungȱmehrererȱ SichtenȱaufȱdieȱArchitekturȱ(Komponentensicht,ȱVerteilung,ȱstatisch,ȱdynamisch,...).ȱ Einȱ UMLȬVerteilungsdiagrammȱ skizziertȱ beispielsweiseȱ wohlȱ eherȱ eineȱ Sichtȱ aufȱ dieȱ Systemarchitekturȱ oderȱ dieȱ Prozesssicht,ȱ währendȱ einȱ UMLȬPaketdiagrammȱ dieȱ Modulsichtȱ imȱ Augeȱ hat.ȱ Allerdingsȱ gibtȱ esȱ fürȱ denȱ Einsatzȱ derȱ UMLȬ Diagrammtypenȱ keineȱ starrenȱ Regeln.ȱ Wichtigȱ ist,ȱ dassȱ dieȱ erzeugteȱ Grafikȱ denȱ gewünschtenȱEffekt,ȱnämlichȱdieȱDarstellungȱeinerȱbestimmtenȱSichtȱaufȱdasȱSysȬ tem,ȱgutȱunterstützt.ȱ DieȱTabelleȱ3Ȭ1ȱzeigtȱNutzungsmöglichkeitenȱvonȱUMLȬȱoderȱsonstigenȱDiagramȬ menȱ beiȱ derȱ Beschreibungȱ vonȱ Architektursichtenȱ nachȱ Dustdar,ȱ Kruchtenȱ undȱ Starke.ȱWieȱmanȱanhandȱderȱverwendbarenȱNotationenȱerkennenȱkannȱgibtȱesȱzwiȬ schenȱdenȱbeidenȱSichtenmodellenȱgroßeȱParallelitäten.ȱSoȱentsprichtȱdieȱkonzepȬ
322 ȱ
5.1ȱȱBegriffeȱundȱDefinitionenȱ tionelleȱSichtȱgemeinsamȱmitȱderȱModulsichtȱausȱ(Dustdarȱ2003)ȱinȱetwaȱdenȱBauȬ steinsichtenȱ ausȱ (Starkeȱ 2005),ȱ dieȱ Laufzeitsichtȱ undȱ vorȱ allemȱ dieȱ Kontextsichtȱ kannȱmitȱderȱSichtȱaufȱdieȱSzenarienȱnachȱdemȱ„4+1“ȬModellȱvonȱKruchtenȱvergliȬ chenȱwerden,ȱdieȱphysischeȱSichtȱundȱdieȱProzesssichtȱkönnenȱaufȱdieȱVerteilungsȬ sichtenȱabgebildetȱwerden.ȱLediglichȱfürȱdieȱDatensichtȱausȱ(Starkeȱ2005)ȱgibtȱesȱinȱ (Dustdarȱ2003)ȱkeineȱechteȱEntsprechung.ȱ Tabelleȱ5Ȭ1:ȱDiagrammeȱzurȱBeschreibungȱverschiedenerȱSichtenȱaufȱeineȱArchitekturȱ
Sichtenbezeichnungȱ MöglicheȱDiagrammeȱ KonzeptionelleȱSichtȱ UMLȬPaketdiagramme,ȱUMLȬKlassendiagramme,ȱ einfacheȱBlockdiagrammeȱȱ Modulsichtȱ
UMLȬKomponentendiagramme,ȱeinfacheȱȱBlockȬ diagrammeȱ
Prozesssichtȱ
UMLȬKomponentendiagrammeȱ
PhysischeȱSichtȱ
UMLȬVerteilungsdiagrammeȱ(UMLȱDeploymentȬ Diagramme)ȱ
Szenarienȱ
UMLȬUseȬCaseȬDiagramme,ȱUMLȬAktivitätsȬ diagramme,ȱUMLȬKollaborationsdiagrammeȱbzw.ȱ UMLȬKommunikationsdiagrammeȱ
Bausteinsichtȱ
UMLȬPaketdiagramme,ȱUMLȬKlassendiagramme,ȱ UMLȬKomponentendiagramme,ȱeinfacheȱBlockȬ diagrammeȱ
Laufzeitsichtȱ
UMLȬUseȬCaseȬDiagramme,ȱUMLȬAktivitätsȬ diagramme,ȱUMLȬKollaborationsdiagrammeȱbzw.ȱ UMLȬKommunikationsdiagrammeȱ
Verteilungssichtȱ
UMLȬVerteilungsdiagrammeȱ(UMLȱDeploymentȬ Diagramme)ȱ
Kontextsichtȱ
UMLȬUseȬCaseȬDiagramme,ȱUMLȬAktivitätsȬ diagramme,ȱUMLȬKollaborationsdiagrammeȱbzw.ȱ UMLȬKommunikationsdiagrammeȱundȱauchȱdieȱ DiagrammtypenȱderȱanderenȱSichtenȱ
Datensichtȱ
EntityȬRelationshipȬDiagramme,ȱUMLȬKlassenȬ diagrammeȱ
ȱ ManȱkannȱeineȱArchitekturȱamȱAnfangȱeinerȱProjektphaseȱschonȱsoȱexaktȱwieȱmögȬ lichȱdefinierenȱoderȱaberȱeineȱschrittweiseȱVorgehensweiseȱwählen.ȱDieȱersteȱVariȬ anteȱwirdȱinȱderȱsog.ȱMasterplanȬSchuleȱdesȱbekanntenȱSoftwareȱEngineeringȱInstiȬ tuteȱ (SEI)ȱ derȱ Carnegieȱ Mellonȱ Universityȱ empfohlen.ȱ Dieȱ zweite,ȱ eherȱ iterative,ȱ
ȱ
323
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ VarianteȱfolgtȱdemȱPrinzipȱderȱkleinenȱSchritteȱundȱentstandȱimȱUmfeldȱderȱagilenȱ Softwareentwicklung.ȱȱ Üblicherweiseȱ wirdȱ manȱbeiȱ derȱ Beschreibungȱ derȱArchitekturȱ inȱ derȱ Praxisȱeherȱ denȱ Wegȱ derȱ Verfeinerungȱ gehenȱ undȱ dieȱ verschiedenenȱ Sichtenȱ parallelȱ entwiȬ ckeln.ȱ Dieȱ Diagrammeȱ werdenȱ dannȱ vonȱ Iterationȱ zuȱ Iterationȱ immerȱ genauer.ȱ Wichtigȱistȱaber,ȱdassȱmanȱeineȱersteȱgrobeȱSichtȱaufȱdieȱArchitekturȱschonȱrelativȱ frühȱimȱProjektȱerstellt.ȱEinigeȱnützlicheȱHinweise,ȱwieȱmanȱlesbareȱundȱübersichtȬ licheȱArchitekturdiagrammeȱerstellt,ȱsindȱinȱ(Koningȱ2002)ȱzuȱfinden.ȱ
Resümee ManȱkannȱausȱdenȱDefinitionsversuchenȱableiten,ȱdassȱdasȱThemaȱArchitekturȱsehrȱ umfassendȱist.ȱManȱbefasstȱsichȱauchȱschonȱsehrȱlangeȱmitȱArchitekuren,ȱdasȱTheȬ maȱ istȱ alsoȱ nichtȱ neu.ȱ Wichtigeȱ Erkenntnisseȱ stammenȱ bereitsȱ ausȱ denȱ 70erȱ undȱ 80erȱJahrenȱ(Parnasȱ1984).ȱSystemȬȱundȱSoftwarearchitektenȱmüssenȱüberȱsehrȱvielȱ Erfahrungȱ inȱ Softwareentwicklungsprojektenȱ verfügen.ȱ Sieȱ müssenȱ ArchitekturȬ entscheidungenȱtreffenȱkönnen,ȱbeiȱdenenȱimplizitȱvieleȱRegelnȱangewendetȱwerȬ denȱmüssen.ȱArchitekturentscheidungenȱsindȱsehrȱwichtigeȱEntscheidungenȱinȱeiȬ nemȱEntwicklungsprojekt,ȱdieȱzumȱTeilȱumfangreicheȱAuswirkungenȱhaben.ȱEinerȱ vonȱ vielenȱ Aspektenȱ istȱ derȱ Aspektȱ derȱ Verteilungȱ vonȱ Softwarebausteinen.ȱ Wirȱ betrachtenȱ imȱ Folgendenȱ einigeȱ wichtigeȱ Architekturaspekteȱ insbesondereȱ mitȱ Blickȱaufȱverteilte,ȱbetrieblicheȱInformationssysteme.ȱ
5.2 Architekturstile und Architekturqualität 5.2.1
Architekturstile
ImȱLaufeȱderȱZeitȱhabenȱsichȱeinigeȱArchitekturstileȱfürȱITȬSystemeȱentwickelt.ȱAlȬ lerdingsȱistȱeineȱexakteȱDefinitionȱauchȱhierȱschwierig.ȱSchwierigkeitȱbereitetȱauchȱ dieȱUnterscheidungȱeinesȱArchitekturstilsȱvonȱderȱangewendetenȱTechnologie,ȱdaȱ dieȱ Architekturȱ oftȱ auchȱ durchȱ dieȱ Technologieȱ beeinflusstȱ wird.ȱ Architekturelleȱ StileȱbestimmenȱaberȱeineȱArtȱvonȱgrundlegender,ȱfundamentalerȱStrukturȱfürȱeinȱ System.ȱEinȱArchitekturstilȱverfügtȱüberȱbestimmteȱEigenschaftenȱundȱistȱdieȱBasisȱ oderȱVorlage,ȱalsoȱderȱgrobeȱBauplanȱfürȱeinȱkonkretesȱSoftwaresystem.ȱInȱ(Shawȱ 1996)ȱ istȱ einȱKatalogȱ vonȱmöglichenȱ Architekturstilenȱzuȱ finden.ȱ ManȱunterscheiȬ detȱhierȱu.a.ȱfolgendeȱStileȱ(sieheȱauchȱAbbildungȱ5Ȭ8:ȱ – Datenzentrierteȱ Architekturen:ȱ ȱ Hauptzielȱ diesesȱ Architekturstilsȱ istȱ dieȱ VerȬ waltungȱvonȱDatenȱundȱderȱZugriffȱaufȱdieȱDaten.ȱHierunterȱfallenȱsog.ȱReȬ positoriesȱundȱBlackboards.ȱRepositoriesȱsindȱpassiveȱDatenbehälter,ȱdieȱheuteȱ vorwiegendȱ inȱ Datenbankenȱ verwaltetȱ werden.ȱ Einȱ Blackboardȱ sendetȱ zuȬ demȱ Benachrichtigungenȱ aktivȱ anȱ interessierteȱ Clients,ȱ wennȱ sichȱ Datenȱ verändern.ȱ Dieȱ Abgrenzungȱ einerȱ BlackboardȬArchitekturȱ vonȱ einerȱ UnabȬ hängigenȬKomponentenȬArchitekturȱ (sieheȱ unten)ȱ kannȱ schwierigȱ sein.ȱ Wennȱ
324 ȱ
5.2ȱȱArchitekturstileȱundȱArchitekturqualitätȱ dieȱ Clientprogrammeȱ inȱ eigenenȱ Prozessenȱ ablaufen,ȱ handeltȱ esȱ sichȱ eherȱ umȱLetzteres.ȱ – DatenflussȬArchitekturen:ȱ ȱ Dieserȱ Architekturstilȱ entsprichtȱ demȱ klassischenȱ BatchȬStilȱ fürȱ dieȱ Jobverarbeitungȱ inȱ Großrechnernȱ oderȱ demȱ PipesȬandȬ FiltersȬStil,ȱwieȱerȱinȱUnixȬProgrammenȱzuȱfindenȱist.ȱ – CallȬandȬReturnȬArchitekturen:ȱȱHierunterȱverstehtȱmanȱdenȱklassischenȱRPC,ȱ HauptprogrammȬUnterprogrammȬStrukturen,ȱ objektorientierteȱ KommuniȬ kationȱundȱSchichtenȬArchitekturen.ȱ – UnabhängigeȱKomponentenȬArchitekturen:ȱ ȱ Eigenständigeȱ Peersȱ (Objekteȱ oderȱ Prozesse)ȱkommunizierenȱhierȱüberȱNachrichtenȱundȱzwarȱunabhängigȱmitȬ einander.ȱ Architekturstile
Datenzentrierte Architektur - Repositories - Blackboards
Datenfluss-Architektur - Jobverarbeitung - Unix-Shellsysteme
Call-and-ReturnArchitektur - Remote Procedure Call - OO-Kommunikation - EJB
Unabhängige Komponenten-Architektur - Unabhängige Peers
ȱ
Abbildungȱ5Ȭ8:ȱArchitekturstileȱnachȱ(Dustdarȱ2003)ȱȱ
Alleȱ genanntenȱ Architekturstileȱ sindȱ inȱ heutigenȱ betrieblichenȱ InformationssysteȬ menȱzuȱfinden.ȱArchitekturstileȱsolltenȱaberȱnichtȱalsȱDogmaȱverstandenȱwerden,ȱ sondernȱdienenȱeherȱzurȱgrobenȱEinordnungȱeinerȱArchitektur.ȱȱInȱderȱRegelȱistȱdieȱ Architekturȱ einesȱ Anwendungssystemsȱ kaumȱ genauȱ einemȱ Stilȱ zuzuordnen.ȱ Ausȱ derȱ Kombinationȱ undȱ derȱ Integrationȱ derȱ Stileȱ entstehenȱ wiederumȱ neueȱ heteroȬ geneȱStile:ȱ Beispielȱ1:ȱEinȱwebȬbasiertesȱShopȬSystemȱnutztȱmeistensȱmehrereȱStileȱundȱzwarȱ denȱdatenzentriertenȱStil,ȱdenȱCallȬandȬReturnȬStilȱundȱevtl.ȱauchȱdenȱDatenflussȬ Architekturstil.ȱ Beispielȱ 2:ȱ COBOLȬȱ oderȱ PL/1Ȭbasierteȱ CICSȬHostanwendungenȱ fürȱ Bankenȱ sindȱ meistȱ datenzentriert.ȱ Imȱ Zugeȱ derȱ ClientȬServerȬErweiterungȱ kommtȱ hierȱ aberȱ immerȱ mehrȱ derȱ CallȬandȬReturnȬStilȱ dazu.ȱ Meistȱ verfügenȱ dieseȱ Anwendungenȱ überȱeineȱDialogȬȱundȱeineȱBatchschnittstelle.ȱ Beispielȱ 3:ȱ Moderneȱ ClientȬServerȬAnwendungenȱ imȱ Bankenumfeldȱ verfügenȱ meistȱ überȱ einenȱ CallȬandȬReturnȬStil,ȱ aberȱ auchȱ Datenzentriertheitȱ istȱ üblichȱ geȬ nauȱsoȱwieȱderȱklassischeȱDatenflussȱfürȱdieȱNachtverarbeitung.ȱ
ȱ
325
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ
5.2.2
Qualitätseigenschaften
Umȱmessenȱbzw.ȱevaluierenȱzuȱkönnen,ȱobȱeineȱArchitekturȱgutȱoderȱschlechtȱist,ȱ benötigtȱ manȱ entsprechendeȱ Kriterienȱ bzw.ȱ Metrikenȱ oderȱ Qualitätsattribute.ȱ Dustdarȱ versucht,ȱ hierzuȱ einigeȱ Regelnȱ fürȱ dieȱ Bewertungȱ zuȱ definieren,ȱ vonȱ deȬ nenȱdieȱwichtigstenȱgenanntȱwerdenȱsollenȱ(Dustdarȱ2003):ȱ – PrinzipiellȱsollteȱdieȱSoftwareȬArchitekturȱeinȱGrundgerüstȱfürȱeineȱspätereȱ Implementierungȱfestlegen,ȱdasȱfürȱeineȱinkrementelleȱEntwicklungȱdesȱSysȬ temsȱverwendbarȱist.ȱ – Dieȱ SoftwareȬArchitekturȱ mussȱ inȱ einerȱ verständlichenȱ Formȱ undȱ gutȱ doȬ kumentiertȱsein,ȱsoȱdassȱsieȱalleȱBeteiligtenȱverstehenȱkönnen.ȱ – EineȱSoftwareȬArchitekturȱsollteȱquantitativȱundȱqualitativȱüberprüfbarȱsein.ȱ Quantitativeȱ Prüfungȱ bedeutetȱ z.B.ȱ dieȱ Prüfungȱ desȱ maximalȱ möglichenȱ Durchsatzesȱ oderȱ derȱ Antwortzeiten.ȱ Eineȱ qualitativeȱ Prüfungȱ berücksichȬ tigtȱKriterienȱwieȱdieȱPortabilitätȱundȱdieȱÄnderungsfreundlichkeit.ȱEsȱsollteȱ zudemȱ möglichȱ sein,ȱ überȱ dieȱ Architekturbeschreibungȱ möglicheȱ RessourȬ cenengpässeȱaufzudecken.ȱ – Hinsichtlichȱderȱ StrukturȱeinerȱArchitekturȱ solltenȱwohlbekannteȱ Konzepteȱ desȱSoftwareȱEngineeringȱeingehaltenȱwerden.ȱDasȱSystemȱsollteȱinȱBausteiȬ neȱ (Module)ȱ zerlegtȱ werden,ȱ derenȱ Zuständigkeitenȱ denȱ Prinzipienȱ desȱ InȬ formationȱ Hidingȱ folgenȱ undȱ damitȱ eineȱ Kapselungȱ vonȱ Datenȱ ermöglichen.ȱ WeiterhinȱsollteȱderȱwichtigeȱAspektȱderȱTrennungȱvonȱZuständigkeitenȱ(SepaȬ rationȱofȱConcerns)ȱbeachtetȱwerden,ȱumȱeineȱmöglichstȱloseȱKopplungȱbeiȱderȱ Entwicklungȱ derȱ einzelnenȱ Moduleȱ zuȱ erreichen.ȱ InfrastrukturȬSpezifikaȱ solltenȱ inȱ Modulenȱ gekapseltȱ sein.ȱ Schließlichȱ sollteȱ eineȱ Architekturȱ mögȬ lichstȱ nichtȱ vonȱ einerȱ bestimmtenȱ Versionȱ einesȱ Basisproduktsȱ oderȱ einesȱ Werkzeugsȱ abhängen,ȱ überȱ eineȱ hoheȱ Änderungsfreundlichkeitȱ verfügenȱ undȱnurȱmöglichstȱeinfacheȱundȱwenigeȱInteraktionsmusterȱzurȱKommunikaȬ tionȱzwischenȱdenȱBausteinenȱnutzen.ȱ Dieȱ letztenȱ Aspekteȱ betreffenȱ vorȱ allemȱ dieȱ imȱ Softwareȱ Engineeringȱ seitȱ langemȱ bekanntenȱ technischenȱ Grundprinzipenȱ InformationȱHidingȱ undȱ Kapselung,ȱ SeparaȬ tioȬofȬConcernsȱ undȱ loseȱ Kopplung,ȱ Unabhängigkeitȱ vonȱ Basisprodukten,ȱ ÄnderungsȬ freundlichkeitȱundȱEinfachheitȱ(soȱ einfachȱ wieȱ möglich).ȱDieseȱAspekteȱ hängenȱzumȱ Teilȱvoneinanderȱab.ȱ DasȱPrinzipȱdesȱSeparationȬofȬConcernsȱsollȱinȱAbbildungȱ5Ȭ9ȱnochmalsȱverdeutlichtȱ werden.ȱ Wieȱ inȱ demȱ skizziertenȱ Beispielȱ ersichtlichȱ ist,ȱ nutztȱ derȱ CustomerȬ ManagementȬSoftwarenbausteinȱ denȱ OrderȬManagementȬSoftwarenbausteinȱ überȱ eineȱ dedizierteȱ Schnittstelle.ȱ Interneȱ Änderungenȱ inȱ denȱ Softwarenbausteinenȱ bleibenȱverborgen.ȱ
326 ȱ
5.2ȱȱArchitekturstileȱundȱArchitekturqualitätȱ Order-Management Client
Order Order-Management nutzt Customer-Management!
OrderPos
Änderungen im CustomerManagement beeinflussen in der Regel das OrderManagement nicht!
Customer-Management
Customer
Address
ȱ Abbildungȱ5Ȭ9:ȱSeparationȱofȱConcernsȱ
Dasȱ Prinzipȱ derȱ hohenȱ Kohäsionȱ undȱ derȱ minimalenȱ Kopplungȱ vonȱ SoftwarebauȬ steinenȱsollȱ inȱ Abbildungȱ5Ȭ10ȱ verdeutlichtȱ werden.ȱDieȱinternenȱBausteineȱ Orderȱ undȱOrderPosȱdesȱOrderȬManagementȬBausteinsȱsowieȱdieȱinternenȱBausteineȱdesȱ CustomerȬManagementȬBausteinsȱ Customerȱ undȱ Addressȱ gehörenȱ zusammen,ȱ verȬ fügenȱalsoȱüberȱeineȱhoheȱKohäsion,ȱwährendȱzwischenȱdenȱ„großen“ȱBausteinenȱ nurȱeineȱgeringeȱKopplungȱvorliegt.ȱ Order-Management • Hohe Kohäsion der internen Bausteine einer Komponente!
Order
OrderPos • Geringe Kopplung der Komponenten untereinander!
• Bausteine mit ähnlichen Zuständigkeiten
• Explizite Schnittstelle trennt Fachlichkeit von Technik
Customer-Management
Customer
Address
ȱ Abbildungȱ5Ȭ10:ȱKohäsionȱundȱKopplungȱ
FürȱdieȱUmsetzungȱderȱKapselungȱwerdenȱhäufigȱMusterȱverwendet.ȱMusterȱ(PatȬ terns)ȱdienenȱdazu,ȱhäufigȱauftretendeȱEntwurfsproblemeȱundȱentsprechendeȱLöȬ sungsmöglichkeitenȱzuȱskizzeren.ȱManȱunterscheidetȱverschiedeneȱVariantenȱvonȱ Mustern.ȱ Architekturmusterȱ beziehenȱ sichȱ sehrȱ abstraktȱ aufȱ dieȱ Architekturȱ vonȱ Softwaresystemen.ȱEntwurfsmusterȱ(DesignȱPatterns)ȱsindȱkonkreterȱundȱbeziehenȱ
ȱ
327
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ sichȱaufȱdieȱProgrammierungȱbestimmterȱSachverhalte.1ȱTypischȱfürȱdieȱKapselungȱ vonȱ Geschäftslogikȱ überȱ Diensteȱ istȱ dasȱ Musterȱ Fassade,ȱ dasȱ imȱ Folgendenȱ kurzȱ skizziertȱwerdenȱsoll:ȱ FacadeȬPattern:ȱȱ EineȱFassadeȱ(FacadeȬPattern,ȱGamaȱ1995)ȱstelltȱeinȱeinheitlichesȱ Interfaceȱ fürȱ eineȱ Mengeȱ vonȱ Interfacesȱ einesȱ Teilsystemsȱ bereit.ȱ Fassadenȱ liefernȱ einȱ höherwertigesȱ Interfaceȱ fürȱ einȱ Teilsystemȱ undȱ ermöglichenȱ beiȱ richtigerȱ AnȬ wendungȱ eineȱ einfachereȱ Nutzung.ȱ Damitȱ wirdȱ auchȱ dieȱ Komplexitätȱ einesȱ SysȬ temsȱ reduziert,ȱ daȱ Abhängigkeitenȱ zwischenȱ Teilsystemenȱ aufȱ Fassadenȱ beȬ schränktȱ bleiben.ȱ Dieȱ Reduktionȱ derȱ Komplexitätȱ wirdȱ inȱ denȱ Abbildungenȱ (Abbildungȱ5Ȭ1ȱundȱAbbildungȱ5Ȭ12)ȱdeutlich.ȱ Objektklassen aus anderen Teilsystemen Objektklasse 8
Objektklasse 6 Objektklasse 7
Objektklasse 1 Objektklasse 4 Objektklasse 3 Objektklasse 2
Objektklasse 5 Teilsystem 1
ȱ Abbildungȱ5Ȭ11:ȱNutzungȱeinesȱSubsystemȱohneȱFassadeȱ
Fassadenȱ werdenȱ auchȱ inȱ komponentenorientiertenȱ Systemenȱ verwendet.ȱ Dieȱ Komponentenschnittstelleȱ istȱ grobkörnigerȱ alsȱ dieȱ Objektschnittstelleȱ derȱ einzelȬ nenȱ Objektklassenȱ einesȱ Subsystems.ȱ Nurȱ dieȱ Funktionen,ȱ dieȱ eineȱ Komponenteȱ anbietenȱmuss,ȱwerdenȱdurchȱdieȱFassadeȱnachȱaußenȱsichtbar,ȱdieȱinternenȱObjekȬ teȱwerdenȱverborgen.ȱDieȱFassadeȱkenntȱundȱnutztȱdieȱinternenȱObjektklassenȱzurȱ AusführungȱderȱFassadenȬMethoden.ȱ
ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 1
ȱ
EineȱFülleȱvonȱallgemeingültigenȱDesignȬPatternsȱistȱinȱ(Gammaȱ1995)ȱbeschrieben.ȱDieȱ AutorenȱwerdenȱauchȱalsȱGangȱofȱFourȱbezeichnet:ȱGamma,ȱHelm,ȱJohnsonȱundȱVlissiȬ des.ȱ
328 ȱ
5.2ȱȱArchitekturstileȱundȱArchitekturqualitätȱ Objektklassen aus anderen Teilsystemen Objektklasse 8
Objektklasse 6 Objektklasse 7
Fassade Objektklasse 1 Objektklasse 4 Objektklasse 3 Objektklasse 2
Objektklasse 5 Teilsystem 1
ȱ Abbildungȱ5Ȭ12:ȱNutzungȱeinesȱSubsystemȱmitȱFassadeȱ
Dieȱ konkreteȱ Problemstellungȱ sowieȱ derȱ Umfangȱ derȱ Aufgabenstellungȱ sindȱ fürȱ dieȱ ȱ zuȱ realisierendeȱ Architekturȱ entscheidend.ȱ Fürȱ kleineȱ Softwareprogramme,ȱ dieȱ nurȱ einmaligȱ verwendetȱ werden,ȱ wirdȱ manȱ sicherȱ andereȱ Maßstäbeȱ ansetzenȱ alsȱfürȱgroßeȱSysteme.ȱJeȱgrößerȱallerdingsȱeinȱSystemȱwird,ȱumsoȱwichtigerȱwirdȱ seineȱStrukturȱimȱVergleichȱzuȱdenȱverwendetenȱAlgorithmenȱundȱDatenstruktuȬ ren.ȱȱ Dieȱ Qualitätskriterienȱ geltenȱ imȱ Prinzipȱ sowohlȱ fürȱ lokaleȱ alsȱ auchȱ fürȱ verteilteȱ Anwendungssysteme.ȱBeiȱverteiltenȱSystemenȱwerdenȱdieȱArchitekturenȱmeistȱnurȱ nochȱ etwasȱ komplexer.ȱ Nachȱ (Dustdarȱ 2003)ȱ unterscheidetȱ manȱ sichtbareȱ undȱ nichtȱbeobachtbareȱQualitätsattribute.ȱ„Sichtbar“ȱbedeutet,ȱdassȱdasȱKriteriumȱbeiȱ derȱAusführungȱdesȱSystemsȱerkennbarȱist.ȱHierzuȱgehören:ȱ – – – – – –
Funktionsfähigkeitȱ Leistung,ȱSkalierbarkeitȱ Transaktionssicherheitȱ Sicherheitȱ(Authentifizierung,ȱAutorisierung,ȱVerschlüsselung)ȱ Verfügbarkeitȱ Usabilityȱ(Verwendbarkeit)ȱ
Nichtȱ beobachtbareȱ Qualitätsattributeȱ sindȱ dagegenȱ zurȱ Ausführungszeitȱ nichtȱ sichtbar.ȱ Zurȱ Prüfungȱ derȱ Kriterienȱ mussȱ manȱ dasȱ Systemȱ imȱ Detailȱ betrachten.ȱ FolgendeȱKriterienȱsindȱvonȱBedeutung:ȱ – – – – –
ȱ
StandardisierungȱundȱStrukturiertheitȱderȱSoftwareȱ(Prinzipienȱeinhaltend)ȱ Portabilitätȱ Wiederverwendbarkeitȱ Integrierbarkeitȱ Testbarkeitȱ
329
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ WeiterhinȱsollteȱnachȱDustdarȱbeiȱderȱBewertungȱeinerȱArchitekturȱaufȱdieȱEinhalȬ tungȱ vonȱ grundlegendenȱ Prinizipienȱ derȱ Softwareentwicklungȱ geachtetȱ werden.ȱ Hierzuȱnenntȱer:ȱ – – – – – –
SeparationȱofȱConcernsȱ Comprehensionȱ(intellektuelleȱBeherrschbarkeit)ȱ KorrektheitȱundȱVollständigkeitȱ Ersetzbarkeitȱ Buildabilityȱ Loseȱ Kopplung:ȱ schmaleȱSchnittstellen,ȱ wenigȱ verschiedeneȱ Datenelementeȱ anȱderȱSchnittstelle,ȱkeineȱSchichtensprüngeȱwennȱmöglichȱ – HoheȱKohäsionȱ(durchȱKapselungȱerreichbar)ȱ – VerringerungȱderȱKomplexitätȱ
Beiȱ größerenȱ Systemen,ȱ dieȱ ständigȱ weiterentwickeltȱ werden,ȱ istȱ auchȱ dieȱ ÄndeȬ rungsfreundlichkeitȱ (DesignȬforȬChange)ȱ vonȱ großerȱ Bedeutung.ȱ Wahrscheinlicheȱ ÄnderungenȱsolltenȱalsoȱschonȱimȱEntwurfȱberücksichtigtȱwerden.ȱDieȱDesignȬforȬ ChangeȬAnforderungȱwirdȱbestimmtȱdurchȱdieȱHäufigkeitȱderȱerforderlichenȱÄnȬ derungenȱderȱzuȱentwickelndenȱSoftware.ȱ Esȱ sollȱ nochȱ festgehaltenȱ werden,ȱ dassȱ eineȱ gründlicheȱ Bewertungȱ derȱ ArchitekȬ turqualitätȱeinesȱgrößerenȱSystemsȱsehrȱaufwändigȱistȱundȱauchȱdieȱProjekthistorieȱ mitȱeinbeziehenȱmuss.ȱEsȱgibtȱoftȱGründeȱimȱProjekt,ȱdieȱeineȱoptimaleȱArchitekturȱ behindernȱ(Zeitaspekt,ȱKostenaspekt).ȱEinȱArchitektȱsollteȱalsoȱdieȱArchitekturentȬ scheidungenȱ gründlichȱ dokumentieren,ȱ damitȱ erȱ dieseȱ späterȱ auchȱ rechtfertigenȱ kann.ȱ
5.3 Schichtenorientierte Architekturen 5.3.1
Schichtenarchitekturen
Nachȱ dieserȱ grundlegendenȱ Architekturbetrachtungȱ wollenȱ wirȱ unsȱ nunȱ schichȬ tenorientiertenȱ Architekturmusternȱ zuwenden.ȱ Insbesondereȱ beiȱ betrieblichenȱ InȬ formationssystemenȱ werdenȱ oftȱ mehrereȱ logischeȱ Ebenenȱ oderȱ Schichtenȱ (Layer)ȱ unterschieden.ȱ Heuteȱ sprichtȱ manȱ vonȱ mehrschichtigenȱ Architekturenȱ (TanenȬ baumȱ 2003).ȱ Einȱ Zielȱ istȱ esȱ hierbei,ȱ fürȱ mehrereȱ Anwendungssystemeȱ oderȱ auchȱ nurȱ Anwendungsbausteineȱ einesȱ Unternehmensȱ möglichstȱ dieselbeȱ BusinessȬ Logikȱ (Geschäftslogik)ȱ zuȱ verwendenȱ undȱ damitȱ dieȱ Widerverwendbarkeitȱ zuȱ fördrn.ȱ Darüberhinausȱ dientȱ dieȱ Schichtungȱ derȱ Reduzierungȱ derȱ Komplexität.ȱ Natürlichȱ mussȱ manȱ hierȱ bedenken,ȱ dassȱ eineȱ komplexeȱ Schichtenarchitekturȱ beiȱ kleinenȱ Anwendungenȱ Mehraufwandȱ imȱ Vergleichȱ zuȱ einerȱ eherȱ monolithischenȱ Architekturȱ bedeutet.ȱ Jedochȱ lohntȱ sichȱ dieȱ Aufteilungȱ auchȱ schonȱ beiȱ Systemenȱ mittlererȱGrößenordnungȱundȱinsbesondereȱdann,ȱwennȱesȱnichtȱeinȱeinmaligȱgeȬ nutztesȱProgrammȱwerdenȱsoll,ȱsondernȱweiterentwickeltȱwerdenȱmuss.ȱ
330 ȱ
5.3ȱȱSchichtenorientierteȱArchitekturenȱ
Anw.1
Anw.2
Anw.3
...
Anw.n
Business-Logik (Anwendungskern) Betriebssystemkernel und Datenhaltungssystem ȱ Abbildungȱ5Ȭ13:ȱTypischeȱAnwendungsarchitekturȱmitȱMiddlewareȱȱ
InȱAbbildungȱ5Ȭ13ȱistȱeineȱersteȱgrobeȱSchichteneinteilungȱskizziert,ȱdieȱeinȱSystemȱ inȱeinenȱAnwendungskernȱundȱdieȱ(ClientȬ)Anwendungen,ȱdieȱdiesenȱnutzen,ȱglieȬ dert.ȱDieȱeinzelnenȱAnwendungsbausteineȱundȱderȱAnwendungskernȱwerdenȱnaȬ türlichȱwiederȱvertikalȱinȱmehrereȱSchichtenȱbzw.ȱhorizontalȱinȱBausteineȱzerlegt,ȱ wieȱdiesȱexemplarischȱinȱAbbildungȱ5Ȭ14ȱangedeutetȱist.ȱDieȱvertikalenȱSchichtenȱ dienenȱ derȱ Wiederverwendbarkeitȱ undȱ manȱ kannȱ dieseȱ beispielsweiseȱ nochmalsȱ inȱanwendungsspezifischeȱundȱgenerischeȱBasisfunktionalitätȱeinteilen.ȱ GenerischeȱBasisfunktionalitätȱbeinhaltetȱeherȱtechnischeȱFunktionenȱwieȱz.B.ȱTraceȬȱ undȱ LoggingȬMechanismen,ȱ GUIȬBasisfunktionenȱ undȱ Zugriffsfunktionenȱ aufȱ Ressourcen.ȱ Sieȱ kannȱ fürȱ verschiedeneȱ Anwendungssystemeȱ eingesetztȱ werdenȱ undȱistȱunabhängigȱvonȱderȱAnwendungslogikȱzuȱsehen.ȱȱ Applikationsspezifischeȱ Basisfunktionenȱ sindȱ Funktionen,ȱ dieȱ fürȱ eineȱ spezielleȱ AnȬ wendungȱ undȱ einȱ Anwendungssystemȱ relevantȱ sindȱ undȱ nurȱ dortȱ sinnvollȱ nutzȬ barȱ sind.ȱ Dieȱ Wiederverwendbarkeitȱ istȱ alsoȱ imȱ Gegensatzȱ zuȱ generischenȱ BasisȬ funktionenȱ eingeschränkt.ȱ Typischeȱ applikationsspezifischeȱ Basisfunktionenȱ sindȱ z.B.ȱspezielleȱProtokollierungsmechanismen,ȱdieȱnurȱinȱeinemȱAnwendungssystemȱ gebrauchtȱwerdenȱoderȱanwendungsspezifischeȱKommunikationsfunktionen.ȱ BeiȱdenȱvertikalenȱFunktionenȱhandeltȱesȱsichȱumȱBasisfunktionalität,ȱdieȱoftȱlokalȱ inȱjedenȱAnwendungsprozessȱeingebundenȱwerden.ȱInȱAbbildungȱ5Ȭ14ȱsindȱdieseȱ Funktionenȱ sowohlȱ inȱ denȱ einzelnenȱ ClientȬAnwendungenȱ alsȱ auchȱ imȱ AnwenȬ dungskernȱzuȱfinden.ȱInȱderȱAbbildungȱistȱnunȱauchȱeineȱEinteilungȱinȱdreiȱgrobeȱ Schichtenȱdargestellt.ȱDiesȱsindȱdieȱPräsentationsȬ2,ȱdieȱApplikationsȬȱundȱdieȱDaȬ tenverwaltungsschicht.ȱDerȱAnwendungskernȱistȱdamitȱnochmalsȱinȱzweiȱSchichȬ tenȱunterteilt.ȱDieȱApplikationsschichtȱkümmertȱsichȱumȱdieȱBereitstellungȱderȱeiȬ gentlichenȱBusinessȬLogik,ȱwährendȱsichȱdieȱDatenverwaltungsschichtȱumȱdasȱLeȬ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ
2
DiesȱgiltȱfürȱAnwendungenȱmitȱeinemȱBenutzerinterface.ȱ
ȱ
331
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ senȱ undȱ Schreibenȱ derȱ Datenȱ aufȱ Datenbankenȱ bzw.ȱ umȱ denȱ Zugriffȱ aufȱ andereȱ RessourcenȱinȱanderenȱAnwendungssystemenȱkümmert.ȱ Clientanw. 1
Clientanw. 2
Clientanw. 3
Clientanw. n
AB
AB
AB
AB
GB
GB
GB
GB
Präsentation
...
S-Baustein 1
S-Baustein 2
S-Baustein 3
...
S-Baustein m
Applikationsspezifische Basisfunktionen (AB-Bausteine)
Applikation
Generische Basisfunktionen (GB-Bausteine)
Datenhaltung, Ressourcen
Anwendungskern
Datenverwaltung
AB-Baustein: Applikationsspezifische Basisfunktion GB-Baustein: Generische Basisfunktion S-Baustein: Service-Baustein
ȱ
Abbildungȱ5Ȭ14:ȱVerfeinerungȱderȱBusinessȬLogikȱ
Dieȱ angedeuteteȱ Zerlegungȱ desȱ Systemsȱ inȱ einzelneȱ Bausteineȱ machtȱ nochȱ keineȱ Aussageȱüberȱ dieȱVerteilung.ȱ Dieȱ horizontalenȱBausteineȱderȱBusinessȬLogikȱundȱ natürlichȱdieȱeinzelnenȱClientȬAnwendungenȱsindȱKandidatenȱfürȱeineȱVerteilung.ȱ Applikationsspezifischeȱ undȱ generischeȱ Basisfunktionenȱ werdenȱ meistȱ inȱ dieȱ ClientȬAnwendungenȱundȱdieȱServiceȬBausteineȱeingebunden.ȱ DieseȱAufteilungȱinȱdreiȱgrobeȱSchichtenȱundȱeineȱSeparierungȱȱwiederverwendbaȬ rerȱBasisfunktionalität,ȱdieȱwiederumȱausȱeinzelnenȱBausteinenȱbesteht,ȱfindetȱmanȱ inȱ derȱ Praxisȱ sehrȱ häufig.ȱ Ausgehendȱ vonȱ einerȱ derartigenȱ Zerlegungȱ einesȱ SysȬ temsȱinȱSchichtenȱkannȱmanȱeineȱVerteilungȱderȱKomponentenȱkonzipieren.ȱ
5.3.2
Schichtenverteilung in Client-Server-Architekturen
EinȱSoftwarearchitektȱentscheidetȱüberȱdieȱVerteilungȱderȱSoftwarebausteine.ȱEineȱ guteȱ Schichtenarchitekturȱ unterstütztȱ eineȱ möglicheȱ Verteilungȱ derȱ Bausteineȱ imȱ Netz.ȱ Manȱ kannȱ sichȱ überȱ dieȱ Sinnhaftigkeitȱ derȱ Schichtenanordnungȱ streiten.ȱ SinnvollȱistȱesȱaberȱauchȱohneȱVerteilung,ȱjedeȱlogischeȱSchichtȱsoȱzuȱspezifizierenȱ undȱ auchȱ zuȱ implementieren,ȱ dassȱ sieȱ ohneȱ großeȱ architektonischeȱ Anpassungenȱ aufȱ beliebigenȱ Maschinenȱ untergebrachtȱ werdenȱ kann.ȱ Dieȱ erstenȱ ClientȬServerȬ SystemeȱhattenȱmeistȱeineȱZweiteilungȱ(twoȬtiered)ȱinȱClientȬȱundȱServerteil.ȱManȱ sprichtȱ auchȱ vonȱ vertikalerȱ Verteilung,ȱ daȱ dieȱ logischȱ übereinanderȱ liegendenȱ
332 ȱ
5.3ȱȱSchichtenorientierteȱArchitekturenȱ SoftwareschichtenȱaufȱRechnersystemeȱverteiltȱwerden.ȱEsȱwirdȱpraktischȱeinȱverȬ tikalerȱSchnittȱdurchȱdieȱSchichtenarchitekturȱgemacht.ȱ Einȱ Schnittȱ durchȱ dieȱ Architekturȱ kannȱ inȱ vertikalerȱ Richtungȱ anȱ verschiedenenȱ Stellenȱ gemachtȱ werden.ȱ Folgendeȱ Verteilungsvarianten,ȱ dieȱ sichȱ ausȱ derȱ unterȬ schiedlichenȱPositionierungȱdesȱSchnittsȱergeben,ȱsindȱmöglich:ȱ – Imȱ Client,ȱ derȱ meistȱ auchȱ aufȱ einemȱ Clientrechnerȱ platziertȱ wird,ȱ liegtȱ einȱ TeilȱderȱBenutzerschichtȱundȱzwarȱderȱterminalabhängigeȱTeil.ȱImȱServerteilȱ liegenȱdieȱVerarbeitungsbausteineȱsowieȱdieȱDatenverwaltungsschicht.ȱȱDieȬ seȱVarianteȱistȱinȱAbbildungȱ5Ȭ15ȱ(a)ȱskizziert.ȱDerȱClientȱübernimmtȱhierȱleȬ diglichȱdieȱRolleȱeinesȱTerminals.ȱDieȱbekanntesteȱRealisierungȱdieserȱVariȬ anteȱ istȱ dasȱ XȬWindowsȬSystem,ȱ dasȱ amȱ MIT3ȱentwickeltȱ wurdeȱ undȱ sichȱ insbesondereȱ inȱ denȱ 90erȱ Jahrenȱ inȱ derȱ UnixȬWeltȱ starkȱ verbreitete.ȱ Heuteȱ lebtȱ dieseȱ Varianteȱ inȱ veränderterȱ Formȱ beiȱ Einsatzȱ vonȱ Terminaldienstenȱ bzw.ȱTerminalservernȱwiederȱauf.ȱ – EineȱweitereȱVarianteȱlegtȱdieȱgesamteȱBenutzerschnittstelleȱaufȱdenȱClientȬ rechnerȱ (sieheȱ Abbildungȱ 5Ȭ15ȱ (b)).ȱ Dieȱ Benutzerschnittstelleȱ istȱ meistȱ alsȱ grafischeȱ Oberfächeȱ dargestellt.ȱ Aufȱ derȱ Serverseiteȱ istȱ dieȱ ApplikationsȬȱ undȱ dieȱ Datenhaltungslogikȱ untergebracht.ȱ Dieseȱ Varianteȱ wirdȱ auchȱ alsȱ entfernteȱPräsentationȱbezeichnetȱ(Dadamȱ1996).ȱManȱsprichtȱinȱdiesemȱFallȱ auchȱvonȱeinemȱThinȬClient.ȱ – Varianteȱ (c)ȱ verschiebtȱ dieȱ Applikationsschichtȱ teilweiseȱ (Abbildungȱ 5Ȭ15ȱ (c))ȱ aufȱ denȱ Server.ȱ Typischesȱ Beispielȱ hierfürȱ istȱ dieȱ Programmierungȱ vonȱ Anwendungslogikȱ inȱ einerȱ Datenbankȱ mitȱ sog.ȱ Storedȱ Procedures..ȱ Diesȱ schafftȱmeistȱeineȱgewisseȱAbhängigkeitȱvonȱderȱspeziellenȱSyntaxȱderȱvomȱ Datenbankherstellerȱ bereitgestelltenȱ StoredȬProcedureȬSpracheȱ (Beispiel:ȱ OracleȱPL/SQLȱistȱkeinȱStandard).ȱProgrammteile,ȱdieȱdieȱEffizienzȱstarkȱbeȬ einflussen,ȱ aberȱ auchȱ gewisseȱ Integritätsbedingungen,ȱ dieȱ durchȱ sog.ȱ TrigȬ gerȱimplementiertȱwerden,ȱkönnenȱsoȱrealisiertȱwerden.ȱ – InȱderȱVarianteȱ(d)ȱwirdȱdieȱApplikationsschichtȱganzȱ(Abbildungȱ5Ȭ15ȱ (d))ȱ aufȱdenȱClientrechnerȱverlegt.ȱHierȱistȱesȱtypisch,ȱdassȱderȱAnwendungsteilȱ direktȱüberȱdasȱNetzwerkȱmitȱSQLȱaufȱdieȱentfernteȱDatenbankȱzugreift.ȱBeiȱ dieserȱVarianteȱsprichtȱmanȱvonȱeinemȱFatȬClient.ȱ – BeiȱderȱletztenȱVarianteȱ(sieheȱAbbildungȱ5Ȭ15ȱ (e))ȱliegtȱdieȱgesamteȱBenutȬ zeroberfläche,ȱ dieȱ Anwendungslogikȱ undȱ auchȱ einȱ Teilȱ derȱ Datenhaltungȱ (meistȱdieȱDatenbankzugriffsschicht)ȱimȱClient.ȱBeispielhaftȱfürȱAnwendunȬ gen,ȱdieȱdieseȱVarianteȱnutzen,ȱsindȱFileserverȬSysteme.ȱBeiȱdieserȱVarianteȱ sprichtȱmanȱauchȱvonȱeinemȱFatȬClient.ȱ DieseȱSchichtenaufteilungȱderȱVariantenȱ(c)ȱundȱ(d)ȱsindȱzwarȱheuteȱbeiȱgrößerenȱ Neuentwicklungenȱnichtȱmehrȱsoȱgebräuchlich,ȱaberȱnochȱinȱvielenȱAnwendungenȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ ȱ
3
XȬWindowsȱwurdeȱ1984ȱamȱMITȱ(MassachuesettsȱInstituteȱofȱTechnology)ȱentwickelt.ȱ
ȱ
333
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ vorzufinden.ȱSieȱ habenȱdenȱ Vorteil,ȱdassȱ derȱ Clientȱdirektȱ aufȱ dieȱ DatenbankȱzuȬ greifenȱkannȱundȱdamitȱhatȱderȱClientȬEntwicklerȱauchȱdieȱTransaktionssteuerungȱ imȱGriffȱundȱkannȱdieȱIsolationseigenschaftenȱderȱDatenbankȱnutzen.ȱ Esȱ istȱ sinnvoll,ȱ nebenȱ denȱ dreiȱ Schichtenȱ Präsentationsschicht4ȱ(BenutzeroberfläȬ che),ȱApplikationsschichtȱundȱDatenhaltungsschichtȱauchȱnochȱZugriffsschnittstelȬ lenȱ zuȱ definieren.ȱ Inȱ größerenȱ verteiltenȱ Anwendungssystemenȱ verwendetȱ manȱ heuteȱüblicherweiseȱdieȱVariantenȱ(a),ȱ(b)ȱundȱggf.ȱauchȱ(c).ȱ ErweitertȱwirdȱdieȱvertikaleȱVerteilungȱderȱSchichtenȱnochȱdadurch,ȱdassȱdieȱDaȬ tenverwaltungȱundȱdieȱApplikationslogikȱaufȱverschiedenenȱRechnersystemenȱinȬ stalliertȱwerden.ȱEsȱgibtȱalsoȱoftȱeinenȱeigenständigenȱRechner,ȱderȱalsȱDatenbankȬ serverȱdient.ȱWeiterhinȱwirdȱdieȱApplikationslogikȱbeiȱBedarfȱaufȱmehrereȱServerȬ rechnerȱverteilt,ȱindemȱmanȱdedizierteȱBausteineȱderȱBusinessȬLogikȱwieȱetwaȱeiȬ nenȱArtikelȬManagerȱoderȱeinenȱKundenȬManagerȱdefiniert.ȱȱ Günstigeȱ Kandidatenȱ fürȱ dieȱ Verteilungȱ sindȱ aberȱ auchȱ dieȱ horizontalenȱ ServiceȬ BausteineȱdesȱAnwendungskerns.ȱSieȱbildenȱinȱClientȬServerȬAnwendungenȱmeistȱ dieȱServer,ȱdieȱbestimmteȱServicesȱanbieten.ȱ Client-Maschine Präsentation
Präsentation
Präsentation
Applikation
Präsentation
Präsentation
Applikation
Applikation
Datenverwaltung
Präsentation
Applikation
Applikation
Applikation
Datenverwaltung
Datenverwaltung
Datenverwaltung
Datenverwaltung
Datenverwaltung
(d) Fat Client
(e) Fat Client
Server-Maschine (a) Terminal
(b) Thin Client
(c) Thick Client
Abbildungȱ5Ȭ15:ȱClientȬServerȬArchitekturvariantenȱnachȱ(Tanenbaumȱ2003)ȱ
Fürȱ größereȱ Webanwendungenȱ wirdȱ darüberhinausȱ nochȱ einȱ eigenerȱ WebserverȬ rechnerȱerforderlich,ȱderȱdieȱHTTPȬRequestsȱderȱWebȬClientsȱentgegennimmt.ȱDieȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 4
ȱ
WirȱsprechenȱhierȱnichtȱvonȱklassischenȱBatchanwendungen,ȱdieȱheuteȱimmerȱnochȱsehrȱ zahlreichȱinȱderȱPraxisȱvorhandenȱsind.ȱ
334 ȱ
5.3ȱȱSchichtenorientierteȱArchitekturenȱ ZugriffeȱderȱClientsȱaufȱdieȱServerschichtȱ(Applikationsschicht)ȱwerdenȱmeistȱüberȱ Middlewareȱunterstützt.ȱȱ DieȱFrageȱstelltȱsichȱnatürlich,ȱwannȱwelcheȱVerteilungȱsinnvollȱist.ȱAbȱwannȱrenȬ tierenȱsichȱz.B.ȱmehrschichtigeȱArchitekturenȱundȱwannȱistȱesȱbesserȱdieȱSchichtenȱ aufȱ wenigeȱ Rechnerȱ zuȱ konzentrieren?ȱ Dieseȱ Frageȱ lässtȱ sichȱ nichtȱ pauschalȱ beȬ antworten.ȱManȱmussȱsichȱimmerȱdenȱkonkretenȱFallȱgenauerȱanschauen.ȱHeutigeȱ Anwendungenȱ vorȱ allemȱ imȱ Webȱ nutzenȱ mehrstufigeȱ Architekturen.ȱ Imȱ WWWȱ wirdȱ häufigȱ dasȱ ModelȬViewȬControllerȬModellȱ (MVC)ȱ fürȱ dieȱ architektonischeȱ Gestaltungȱdesȱsog.ȱWebȬFrontendsȱverwendet.ȱDerȱControllerȱistȱdamitȱdieȱzentȬ raleȱ Komponenteȱ fürȱ dieȱ Ereignisbehandlungȱ aufȱ derȱ Präsentationsseite,ȱ erȱ läuftȱ aberȱaufȱeinemȱȱWebserver.ȱAufȱderȱ„BackendȬSeite“ȱwerdenȱfürȱdenȱServerzugriffȱ eineȱAnwendungsschichtȱsowieȱeineȱDatenhaltungsschichtȱbenötigt.ȱȱ
5.3.3
Middleware im Schichtenmodell
Wieȱ bereitsȱ erläutert,ȱ benötigenȱ verteilteȱ Systemeȱaufȱ denȱ beteiligtenȱ RechnersysȬ temenȱ einheitlicheȱ Kommunikationsmechanismen,ȱ umȱ Nachrichtenȱ austauschenȱ zuȱ können.ȱ Dieseȱ könnenȱ direktȱ aufȱ Basisȱ einesȱ Transportsystemsȱ oderȱ aufȱ einerȱ darüberliegendenȱMiddlewareȬSchichtȱaufgebautȱsein.ȱ Damitȱ Rechnersystemeȱ miteinanderȱ kommunizierenȱ können,ȱ istȱ einȱ gemeinsamȱ genutztesȱTransportsystemȱvonȱBedeutung.ȱDiesȱdecktȱdieȱSchichtenȱ1ȱbisȱ4ȱgemäßȱ OSIȬReferenzmodellȱ ab.ȱ Dasȱ vonȱ derȱ InternetȬGemeindeȱ entwickelteȱ TCP/IPȬ ReferenzmodellȱistȱheuteȱderȱDefactoȬStandardȱinȱderȱRechnerkommunikation.ȱEsȱ hatȱvierȱSchichten,ȱwobeiȱdieȱSchichtȱ3ȱ(InternetȬSchicht)ȱundȱdieȱSchichtȱ4ȱdieȱtraȬ gendenȱSchichtenȱsind.ȱInȱderȱSchichtȱ3ȱwirdȱnebenȱeinigenȱSteuerungsȬȱundȱAdȬ ressierungsprotokollenȱ imȱ Wesentlichenȱ dasȱ Protokollȱ IPȱ (Internetȱ Protocol)ȱ beȬ nutzt.ȱInȱSchichtȱ4ȱgibtȱesȱzweiȱStandardprotokolle.ȱDasȱmächtigere,ȱverbindungsȬ orientierteȱTCPȱ(TransmissionȱControlȱProtocol)ȱundȱdasȱleichtgewichtige,ȱverbinȬ dungsloseȱ UDPȱ (Userȱ Datagramȱ Protocol).ȱ TCPȱ gabȱ demȱ Referenzmodellȱ seinenȱ Namenȱ(Mandlȱ2008b).ȱ
ȱ
335
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ Rechnersystem A
Rechnersystem B
Rechnersystem C
Verteilte Anwendung
Middleware einschließlich Middleware-Dienste (logische Schicht)
Transportsystem
Transportsystem
Transportsystem
Betriebssystemkernel
Betriebssystemkernel
Betriebssystemkernel
Netzwerk
ȱ
Abbildungȱ5Ȭ16:ȱEinordnungȱvonȱMiddlewareȱnachȱ(Tanenbaumȱ2003)ȱ
Alleȱ Datenkommunikationsspezialistenȱ sehenȱ dieȱ Notwendigkeitȱ fürȱ einȱ TransȬ portsystem,ȱ wennȱ auchȱ dieȱ Funktionalitätȱ jeȱ nachȱ Protokolltypȱ hierȱ sehrȱ unterȬ schiedlichȱseinȱkann.ȱBeispielsweiseȱgibtȱesȱverbindungsorientierteȱ(wieȱTCP)ȱundȱ verbindungsloseȱ(wieȱUDP)ȱProtokolleȱmitȱrechtȱunterschiedlichenȱAnforderungen.ȱ InȱdenȱSchichtenȱ1ȱundȱ2ȱlegtȱsichȱdasȱTCP/IPȬReferenzmodellȱnichtȱfest.ȱHierȱwirdȱ dieȱAnbindungȱanȱdasȱNetzwerkȱgelöstȱundȱdiesȱkannȱeinȱLANȬ,ȱeinȱWANȬȱoderȱ einȱ MANȬZugriffȱ fürȱ jedesȱ beliebigeȱ Netzwerkȱ sein.ȱ Höhereȱ Diensteȱ fürȱ verteilteȱ AnwendungssystemeȱverwendenȱinȱderȱRegelȱUDPȱoderȱTCPȱalsȱTransportprotoȬ koll.ȱWirȱinteressierenȱunsȱhierȱvorwiegendȱfürȱdieȱEndsysteme.ȱZwischensystemeȱ wieȱRouterȱsindȱzwarȱfürȱgrößereȱNetzeȱunbedingtȱerforderlich,ȱausȱSichtȱderȱverȬ teiltenȱAnwendungȱoderȱderȱAnwendungsentwicklerȱaberȱtransparent.ȱȱ Dieȱ Zugriffsschnittstellenȱ aufȱ TCP/UDPȬDiensteȱ wieȱ dieȱ SocketsȬSchnittstelleȱ bieȬ tenȱdemȱAnwendungsprogrammiererȱrelativȱwenigȱKomfort.ȱHöhereȱKommunikaȬ tionsmechanismenȱbrauchenȱdaherȱzusätzlicheȱFunktionalität,ȱdieȱvonȱderȱSchichȬ tenanordnungȱherȱüberȱdemȱTransportsystemȱangesiedeltȱist.ȱManȱsprichtȱhierȱvonȱ KommunikationsȬMiddleware5ȱ(kurzȱ Middleware).ȱ Dieȱ Einordnungȱ derȱ MiddleȬ wareȱistȱinȱAbbildungȱ5Ȭ16ȱskizziert.ȱEineȱArbeitsdefinitionȱfürȱMiddleware,ȱsoȱwieȱ wirȱ sieȱ inȱ unseremȱ Zusammenhangȱ derȱ Kommunikationȱ inȱ verteiltenȱ Systemenȱ verstehen,ȱlautetȱwieȱfolgt:ȱ ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 5
ȱ
EsȱgibtȱauchȱMiddlewareȱfürȱandereȱZwecke,ȱz.B.ȱfürȱdenȱDatenbankzugriff.ȱ
336 ȱ
5.3ȱȱSchichtenorientierteȱArchitekturenȱ Definitionȱ Middleware:ȱ Middlewareȱ istȱ eineȱ Softwareschicht,ȱ dieȱ denȱ AnwenȬ dungenȱstandardisierte,ȱhöhereȱKommunikationsȬȱundȱsonstigeȱDiensteȱbereitstelltȱ undȱ damitȱ dieȱ transparenteȱ Kommunikationȱ vonȱ Softwarebausteinenȱ verteilterȱ Systemeȱunterstützt.ȱSieȱliegtȱvonȱderȱSchichtenanordnungȱzwischenȱdenȱverteiltenȱ AnwendungenȱundȱdemȱTransportsystemȱundȱistȱBestandteilȱeinesȱȱverteiltenȱSysȬ tems.ȱ Middlewareȱ verstecktȱ eineȱ möglicheȱ Heterogenitätȱ derȱ anȱ einemȱ verteiltenȱ SystemȱbeteiligtenȱRechnersystemeȱvorȱdenȱeigentlichenȱAnwendungskomponenȬ ten,ȱdieȱdieȱGeschäftslogikȱpräsentierenȱundȱstelltȱdenȱAnwendungenȱbzw.ȱderenȱ EntwicklernȱeineȱProgrammierschnittstelleȱzurȱVerfügung.ȱ MiddlewareȱbefindetȱsichȱalsoȱzwischenȱdenȱSoftwarebausteinenȱderȱAnwendungȱ undȱdemȱTransportsystem.ȱBausteineȱderȱMiddlewareȱsindȱaufȱjedemȱRechnersysȬ tem,ȱdassȱanȱeinemȱverteiltenȱSystemȱbeteiligtȱist,ȱzuȱinstallieren.ȱȱ Manȱ erwartetȱ vonȱ einerȱ Middlewareȱ dieȱ Unterstützungȱ einerȱ oderȱ mehrererȱ derȱ bereitsȱinȱKapitelȱ2ȱdiskutiertenȱKommunikationsparadigmenȱ(RPC,ȱVerteilteȱObȬ jekte,ȱverteilteȱKomponenten,ȱMessaging).ȱMiddlewareȬSysteme,ȱdieȱsichȱaufȱMesȬ sagingȱ spezialisieren,ȱ werdenȱ auchȱ alsȱ Messageȱ Orientedȱ Middlewareȱ (MOM)ȱ beȬ zeichnet.ȱ Weiterhinȱ sollteȱ eineȱ Middlewareȱ bestimmteȱ Standarddiensteȱ bereitstelȬ len.ȱEsȱgibtȱzwarȱkeineȱNormȱhierfür,ȱaberȱtypischȱsindȱnebenȱdenȱKommunikatiȬ onsdienstenȱjeȱnachȱAusprägungȱfolgendeȱStandarddienste:ȱ – VerzeichnisȬȱ oderȱ Namensdiensteȱ (Directoryȱ Service)ȱ zumȱ Auffindenȱ beȬ stimmterȱAdressenȱvonȱverteiltenȱBausteinenȱ – Transaktionsdiensteȱ (Transactionȱ Service)ȱ zurȱ Unterstützungȱ verteilterȱ Transaktionen.ȱ Diesȱ istȱ schonȱ einȱ „HighȬEnd“ȬService,ȱ derȱ nichtȱ vonȱ jederȱ Middlewareȱunterstütztȱwird.ȱ – Persistenzdienstȱ(PersistencyȱService)ȱfürȱdenȱZugriffȱaufȱdauerhaftȱgespeiȬ cherteȱInformationenȱz.B.ȱinȱDatenbanken.ȱDieserȱDienstȱwirdȱnurȱvonȱgröȬ ßerenȱ MiddlewareȬLösungen,ȱ oftȱ auchȱ alsȱ separateȱ DatenbankzugriffsȬ Middleware,ȱbereitgestellt.ȱ – Sicherheitsdienstȱ(SecurityȱService)ȱfürȱdieȱAuthentifizierungȱundȱAutorisieȬ rungȱderȱBenutzerȱsowieȱdieȱVerschlüsselungȱvonȱDatenȱ WeiterhinȱunterstütztȱMiddlewareȱoftȱauchȱdasȱDeploymentȱ(dieȱInbetriebnahme)ȱ einesȱSystems,ȱdieȱSkalierbarkeitȱundȱdieȱLastverteilungȱundȱstelltȱeineȱkompletteȱ InfrastrukturȱfürȱdenȱBetriebȱbereit.ȱ Beziehtȱ manȱ Middlewareȱ inȱ dieȱ Schichtenbetrachtungȱ einesȱ Referenzmodellsȱ mitȱ ein,ȱ ergibtȱ sichȱ inȱ etwaȱ folgendeȱ Schichtenbildungȱ gemäßȱ OSIȬReferenzmodellȱ (sieheȱ Abbildungȱ 5Ȭ17).ȱ Dieȱ Middlewareȱ liegtȱ alsoȱ oberhalbȱ derȱ Transportschichtȱ undȱ unterhalbȱ derȱ Verarbeitungsschicht.ȱ Dieȱ Instanzenȱ derȱ Middlewareȱ sindȱ aufȱ allenȱ Rechnersystemenȱ vorhandenȱ undȱ kommunizierenȱ überȱ einȱ eigenesȱ MiddleȬ wareȬProtokoll.ȱ
ȱ
337
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ
Applikationsprotokoll
Applikation Middleware
Middleware-Protokoll Transportprotokoll
Transport Netzwerk
Netzwerkprotokoll
Sicherung
Sicherungsprotokoll Bitübertragungsprotokoll
Physisch
6 5 4 3 2 1
Netzwerk
ȱ Abbildungȱ5Ȭ17:ȱReferenzmodellȱeinschließlichȱderȱMiddlewareȬSchichtȱnachȱ(TanenȬ baumȱ2003)ȱ
NachȱheutigemȱStandȱderȱTechnikȱsindȱMiddlewareȬbasierteȱverteilteȱSystemeȱȱfürȱ betrieblicheȱ Systemeȱ StateȬofȬtheȬArt.ȱ Einigeȱ MiddlewareȬProdukteȱ sindȱ weitgeȬ hendȱBetriebssystemȬunabhängig.ȱHierȱsindȱz.B.ȱEJBȬApplicationȬServerȱeinzuordȬ nen.ȱ Andereȱsindȱ aufȱ spezielleȱBetriebssystemeȱ fokussiertȱ (sieheȱMicrosoftȱ.NET).ȱ TrotzdemȱsprechenȱalleȱHerstellerȱvonȱderȱ„Offenheit“ȱihrerȱProdukte.ȱObȱdieȱProȬ dukteȱ nunȱ offenȱ imȱ Sinneȱ offenerȱ Systemeȱ sindȱ oderȱ nicht,ȱ kannȱ denȱ MarketingȬ AussagenȱnichtȱsoȱohneȱweiteresȱentnommenȱwerdenȱundȱhängtȱauchȱvonȱdenȱAnȬ forderungenȱ undȱ derȱ ITȬLandschaftȱ desȱ Anwendersȱ ab.ȱ Manȱ bezeichnetȱ MiddleȬ wareȱinȱderȱRegelȱalsȱ„offen“,ȱwennȱsieȱnichtȱnurȱvonȱeinemȱHerstellerȱangebotenȱ wirdȱundȱsichȱanȱetablierteȱStandardsȱhältȱ(Beispiel:ȱCORBAȬbasierte,ȱEJBȬbasierteȱ Middleware).ȱAberȱauchȱMicrosoftȱbietetȱseineȱMiddlewareȬPlattformenȱalsȱoffeneȱ Systemeȱan.ȱDieȱUnabhängigkeitȱvonȱeinemȱBetriebssystemȱistȱallerdingsȱschonȱeinȱ wichtigerȱ Aspekt,ȱ derȱ beiȱ MicrosoftȬProduktenȱ meistȱ nichtȱ gegebenȱ ist.ȱ Beiȱ EJBȬ basierterȱMiddlewareȱlegtȱmanȱsichȱallerdingsȱaufȱdieȱProgrammierspracheȱ(Java)ȱ fest,ȱdieȱbeiȱ.NETȱwiederumȱfreiȱausȱdemȱPoolȱderȱunterstütztenȱSprachenȱwählbarȱ ist.ȱ
5.4 Service-orientierte Architekturen 5.4.1
Grundlegendes
DerȱBegriffȱServiceorientierteȱArchitekturȱ(SOA),ȱauchȱalsȱdienstorientierteȱArchitekȬ turȱ bezeichnet,ȱ wirdȱinȱletzterȱ Zeitȱ vielȱdiskutiertȱ (Krafzigȱ2005).ȱ Eineȱgenaueȱ BeȬ griffsdefinitionȱ fehltȱ noch.ȱ Wirȱ sehenȱ esȱ alsȱ einȱ Architekturkonzept,ȱ anȱ andererȱ StelleȱwirdȱesȱauchȱinȱdenȱBereichȱderȱGeschäftsprozesseȱeingeordnet,ȱdaȱdieȱGeȬ schäftsprozesseȱ fürȱ ihreȱ Umsetzungȱ inȱ einerȱ ITȬUmgebungȱ Diensteȱ nutzen,ȱ dieȱ
338 ȱ
5.4ȱȱServiceȬorientierteȱArchitekturenȱ technischȱvonȱeinerȱSOAȬInfrastrukturȱbereitgestelltȱwerden.ȱWesentlicherȱVorteilȱ derȱ SOAȱ istȱ dieȱ Trennungȱ derȱ Implementierungȱ einesȱ Serviceȱ vonȱ seinerȱ ImpleȬ mentierung.ȱDadurchȱwirdȱeinȱServiceȱunahängigȱvonȱderȱPlattformȱundȱauchȱvonȱ derȱTechnologie.ȱ Einȱ Serviceȱ stelltȱ eineȱ vorgegebeneȱ Funktionalitätȱ bereit,ȱ dieȱ überȱ eineȱ standardiȬ sierteȱSchnittstelleȱverwendetȱwerdenȱkannȱundȱinȱeinemȱbeliebigenȱSoftwarebauȬ steinȱ (heuteȱ inȱ derȱ Regelȱ inȱ einerȱ Softwarekomponente)ȱ implementiertȱ wird.ȱ Dieȱ Implementierungenȱ benötigenȱ eineȱ Ablaufumgebungȱ (ServiceȬProvider).ȱ Manȱ kannȱ sichȱ dasȱ auchȱ soȱ vorstellen,ȱ dassȱ Geschäftsprozesseȱ durchȱ eineȱ Folgeȱ vonȱ Dienstaufrufenȱ modelliertȱ werden.ȱ Diesȱ nenntȱ manȱ gelegentlichȱ auchȱ „KompositionȱvonȱServices“.ȱDieȱKompositionȱresultiertȱinȱeinerȱAnwendung,ȱdieȱ einenȱGeschäftsprozessȱrealisiert.ȱDieȱeinzelnenȱDiensteȱsindȱidealerweiseȱloseȱgeȬ koppeltȱundȱhinterlassenȱnachȱderȱAbarbeitungȱkeinenȱZustandȱzurück.ȱ Serviceorientierteȱ Architekturenȱ nutzenȱ typischerweiseȱ dasȱ klassischeȱ ClientȬ ServerȬModell.ȱ Auchȱ inȱ serviceorientiertenȱ Architekturenȱ mussȱ einȱ Clientȱ dieȱ Diensteimplementierungenȱfinden.ȱDasȱallgemeineȱKonzeptȱstelltȱeinȱDienstregisȬ terȱ bereit,ȱ dasȱ derȱ Dienstelieferantȱ mitȱ Informationenȱ zuȱ denȱ angebotenenȱ DiensȬ tenȱbefüllt.ȱEinȱClientȱholtȱsichȱzunächstȱausȱdemȱDienstregisterȱdieȱInformationenȱ zumȱDienst,ȱmussȱalsoȱnichtȱwissen,ȱwoȱerȱgenauȱimplementiertȱistȱundȱkannȱmitȱ diesenȱInformationenȱdenȱDienstȱaufrufen.ȱȱ DasȱKonzeptȱderȱserviceorientiertenȱArchitekturȱwurdeȱauchȱinsbesondereȱmitȱdenȱ bereitsȱ erläutertenȱ Webservicesȱ wiederȱ aufgegriffen.ȱ Einȱ Diensterbringerȱ (Serviceȱ Provider)ȱ stelltȱ hierȱ Webservicesȱ bereit,ȱ welcheȱ dieȱ Diensteȱ darstellen.ȱ Einȱ Clientȱ ruftȱeinenȱWebserviceȱüberȱeinȱstandardisiertesȱProtokollȱ(hierȱSOAPȱmitȱXMLȱfürȱ dieȱ Präsentation)ȱ aufȱ undȱ dieȱ Webservicesȱ sindȱ inȱ einerȱ festgelegtenȱ Spracheȱ (WSDL)ȱbeschrieben.ȱȱ Beiȱ derȱ Implementierungȱ einesȱ Dienstesȱ kapseltȱ manȱ einenȱ zusammengehörigenȱ TeilȱeinerȱGeschäftslogik.ȱHeuteȱmussȱmanȱoftȱdavonȱausgehen,ȱdassȱGeschäftsloȬ gikȱ bereitsȱ inȱ einemȱ bestehendenȱ Anwendungssystemȱ programmiertȱ istȱ undȱ abȬ läuft,ȱd.h.ȱeineȱUmstellungȱaufȱeineȱSOAȬArchitekturȱverursachtȱzunächstȱzusätzliȬ chenȱ Aufwand.ȱ Dieserȱ Aufwandȱ mussȱ denȱ Vorteilen,ȱ dieȱ sichȱ durchȱ eineȱ KapseȬ lungȱderȱGeschäftslogikȱergeben,ȱgegenübergestelltȱwerden.ȱWirȱbetrachtenȱdaherȱ hierzuȱimȱFolgendenȱeinigeȱSOAȬNutzungsvarianten.ȱ
5.4.1
Architekturvarianten
Serviceorientierteȱ Architekturansätzeȱ gehorchenȱ prinzipiellȱ demȱ ClientȬServerȬ ModellȱundȱmanȱkannȱsieȱfürȱmehrereȱAufgabenstellungenȱnutzen.ȱDieȱeinfachsteȱ FormȱderȱNutzungȱistȱinȱAbbildungȱ5Ȭ18ȱ dargestellt.ȱSOAȱwirdȱinȱdiesemȱFallȱnurȱ fürȱeineȱAnwendungȱgenutzt,ȱumȱeinenȱAnwendungskernȱzuȱkapseln.ȱDieseȱFormȱ derȱ Nutzungȱ stelltȱ dieȱ Minimalnutzungȱ darȱ undȱ spiegeltȱ nichtȱ dieȱ Grundabsichtȱ
ȱ
339
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ vonȱSOAȱwider.ȱDieȱskizzierteȱSOAȬSchichtȱersetztȱeinenȱproprietärenȱDienstezuȬ gangȱundȱistȱdurchausȱeineȱsinnvolleȱAnwendungȱdesȱSOAȬKonzepts.ȱȱ Clientanwendung
Clientanwendung
… Service-Endpunkte
Naming
SOA-Dienste-Schicht Anwendung x
ȱ Abbildungȱ5Ȭ18:ȱSOAȬArchitekturen,ȱVarianteȱ1ȱ
EineȱfortgeschrittenereȱVarianteȱzeigtȱAbbildungȱ5Ȭ19.ȱHierȱwerdenȱbereitsȱmehreȬ reȱ Anwendungenȱ durchȱ eineȱ SOAȬSchichtȱ gekapselt.ȱ Neueȱ ClientȬAnwendungenȱ könnenȱ dieȱ bestehendenȱ Anwendungssystemeȱ überȱ dieȱ ServiceȬSchnittstelleȱ nutȬ zen.ȱUmȱmöglichstȱunabhängigȱvonȱProgrammierspracheȱundȱTechnologieȱzuȱsein,ȱ dürfenȱ anȱ derȱ Schnittstelleȱ keineȱ Sprachabhängigkeitenȱ wieȱ serialisierteȱ JavaȬ ObjekteȱanȱderȱSchnittstelleȱverwendetȱwerden. Clientanwendung
Clientanwendung
… Service-Endpunkte
Naming EJB-Anwendung
SOA-Dienste-Schicht Hostanwendung
Web-Anwendung
….
ȱ Abbildungȱ5Ȭ19:ȱSOAȬArchitekturen,ȱVarianteȱ2ȱ
Dieȱ aufwändigsteȱ SOAȬVarianteȱ istȱ inȱ Abbildungȱ 5Ȭ20ȱ skizziert.ȱ Dieȱ Abbildungȱ zeigtȱeineȱunternehmensübegreifendeȱArchitekturȱundȱstelltȱheuteȱwohlȱnochȱZuȬ kunftsmusikȱ dar.ȱ Mehrereȱ selbstständigȱ agierendeȱ DiensteȬProviderȱ stellenȱ fürȱ verschiedeneȱAnwendungenȱunterschiedlicheȱDiensteȱbereit.ȱFürȱeinenȱordnungsȬ gemäßenȱBetriebȱeinerȱderartigenȱArchitekturȱsindȱVerträgeȱzwischenȱdenȱServiceȬ Providernȱ undȱ denȱ Nutzernȱ notwendig,ȱ dieȱ dieȱ Qualitätȱ derȱ Diensteȱ (Qualityȱ ofȱ Service)ȱregeln.ȱ
340 ȱ
5.5ȱȱSpezielleȱArchitekturenȱverteilterȱSystemeȱ Clientanwendung
Clientanwendung
… Service-Endpunkte
Naming UDDI
SOADienste
Eigene Anwendung
SOADienste Anwendung von Dienstanbieter 1
SOADienste ….
Anwendung von Dienstanbieter n
ȱ Abbildungȱ5Ȭ20:ȱSOAȬArchitekturen,ȱVarianteȱ3ȱ
DieseȱArtȱvonȱSOAȬArchitekturȱistȱnichtȱfürȱalleȱAnwendungenȱgeeignet.ȱSehrȱunȬ ternehmenskritischeȱ Anwendungenȱ bleibenȱ sicherȱ bisȱ aufȱ absehbareȱ Zeitȱ inȱ derȱ vollständigenȱ Kontrolleȱ einesȱ Unternehmens.ȱ Welcheȱ Diensteȱ aufȱ dieseȱ Artȱ undȱ Weiseȱ tatsächlichȱ angebotenȱ werdenȱ können,ȱ istȱ nochȱ weitgehendȱ offen.ȱ Denktȱ manȱaberȱanȱdieȱheutigeȱInternetȬLandschaft,ȱsoȱlassenȱsichȱdurchausȱschonȱeinigeȱ Diensteȱfinden,ȱdieȱvonȱspeziellenȱProvidernȱangebotenȱwerdenȱkönnenȱundȱverȬ einzeltȱ auchȱ schonȱ angebotenȱ werden.ȱ Meistȱ handeltȱ esȱ sichȱ aberȱ heuteȱ umȱ AusȬ kunftsdienste,ȱ wieȱ etwaȱ Adressauskunftȱ oderȱ Bonitätsprüfung.ȱ Aberȱ auchȱ PayȬ mentȬGatewaysȱ fürȱ verschiedeneȱ Bezahlsystemeȱ imȱ EȬCommerceȱ werdenȱ schonȱ vielfachȱ überȱ Services,ȱ imȱ speziellenȱ überȱ WebserviceȬImplementierungen,ȱ angeȬ boten.ȱȱ
5.5 Spezielle Architekturen verteilter Systeme 5.5.1
Peer-to-Peer-Architekturen
Eineȱ rechtȱ neueȱ Architekturvariante,ȱ dieȱ alsȱ kombinierterȱ Stilȱ ausȱ unabhängigenȱ KomponentenȱundȱCallȬandȬReturnȬArchitekturȱbetrachtetȱwerdenȱkann,ȱistȱdieȱPeerȬ toȬPeerȬArchitektur.ȱ Dieȱ Verarbeitungȱ wirdȱ imȱ Gegensatzȱ zumȱ ClientȬ/ServerȬ ModellȱaufȱdieȱEndgeräteȱ(Peers)ȱverlagert.ȱȱ EinȱPeerȱistȱeinȱNetzknoten,ȱderȱsowohlȱalsȱClientȱalsȱauchȱalsȱServerȱagiert.ȱJederȱ PeerȱistȱalsoȱeinȱpotenziellerȱServerȱundȱstelltȱDiensteȱbereit.ȱDieȱPeersȱsindȱnichtȱ vonȱvornehereinȱbekannt,ȱwieȱdiesȱetwaȱbeiȱServernȱimȱClientȬServerȬUmfeldȱderȱ Fallȱist.ȱEinȱPeerȱverwaltetȱauchȱeigeneȱRessourcenȱundȱerlaubtȱdenȱZugriffȱdarauf.ȱ Daȱ PeerȬtoȬPeerȬArchitekturenȱ durchȱ dieȱ Anforderungenȱ ausȱ demȱ Internetȱ entȬ standenȱsind,ȱbezeichnetȱDustdarȱdieseȱArchitekturvarianteȱauchȱalsȱ„Internetȱaufȱ ApplikationsebeneȱüberȱdemȱInternet“ȱ(Dustdar,ȱ2003).ȱ BeiȱAnwendungȱ derȱ PeerȬtoȬPeerȬArchitekturȱ ergebenȱ sichȱaufgrundȱ derȱ FexibiliȬ tätȱ undȱ derȱ Möglichkeitenȱ derȱ Fehlertoleranzȱ einigeȱ Vorteileȱ imȱ Hinblickȱ aufȱ dieȱ Skalierbarkeit.ȱ Grundgedankeȱ derȱ Architekturvarianteȱ istȱ ohnehinȱ dieȱ SkalierbarȬ keitȱeinesȱSystems.ȱWennȱalsoȱeineȱdatenzentrierteȱClientȬServerȬArchitekturȱetwaȱ
ȱ
341
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ aufgrundȱimmenserȱBenutzerzahlenȱnichtȱmehrȱausreichendȱskalierbarȱist,ȱkönnteȱ eineȱPeerȬtoȬPeerȬArchitekturȱeineȱAlternativeȱdarstellen.ȱ SchillȱunterscheidetȱdreiȱVariantenȱvonȱPeerȬtoȬPeerȬSystemenȱ(Schillȱ2007):ȱ – Pureȱ (reine)ȱ PeerȬtoȬPeerȬSysteme,ȱ dieȱ überȱ keinenȱ zentralenȱ Serverȱ verfüȬ gen,ȱBeispiel:ȱFilesharingȬDienstȱGnutellaȱ – HybrideȱSysteme,ȱBeispiel:ȱFilesharingȬDienstȱNapsterȱ – SuperpeerȬSysteme,ȱ dieȱ überȱ spezielleȱ Peers,ȱ dieȱ sog.ȱ Superpeersȱ verfügen,ȱ Beispiel:ȱFilesharingȬDienstȱKaZaaȱ Auchȱ beiȱ PeerȬtoȬPeerȬSystemenȱ müssenȱ Dienstimplementierungen,ȱ dieȱ einzelneȱ Peersȱ bereitstellen,ȱ imȱ Netzwerkȱ gefundenȱ werden.ȱ Beiȱ reinenȱ PeerȬtoȬPeerȬ SystemenȱerfolgtȱdieȱSucheȱnachȱDienstenȱnichtȱüberȱeineȱzentraleȱInstanzȱ(zentraȬ lesȱVerzeichnis),ȱsondernȱbeispielsweiseȱüberȱdenȱsog.ȱFloodedȬRequestsȬAlgorithȬ mus,ȱ beiȱ demȱ dieȱ Dienstsucheȱ überȱ einenȱ Broadcastȱ direktȱ anȱ alleȱ NachbarȬPeersȱ erfolgt,ȱdieȱihrerseitsȱanȱihreȱNachbarnȱweiterverteilenȱusw.ȱȱ
Peer Peer
Peer
Peer Peer
Peer
Peer
Peer
Dienst im Dienstverzeichnis anfragen Peer nutzt Dienst eines anderen Peers
ȱ
Abbildungȱ5Ȭ21:ȱReineȱ(pur)ȱPeerȬtoȬPeerȬSystemeȱ
InȱihrerȱReinformȱ(sieheȱAbbildungȱ5Ȭ21)ȱverfügenȱPeerȬtoȬPeerȬSystemeȱüberȱfolȬ gendeȱEigenschaften:ȱ – Esȱ gibtȱ keineȱ zentraleȱ Koordination,ȱ dieȱ Peersȱ koordinierenȱ sichȱ vielmehrȱ verteilt.ȱ – EsȱgibtȱkeineȱzentraleȱDatenbasis,ȱkeinȱPeerȱkenntȱalsoȱalleȱRessourcenȱ(DaȬ tenȱbzw.ȱObjekte)ȱdesȱSystems.ȱDieseȱsindȱaufȱdieȱPeersȱverteilt.ȱ – Peersȱarbeitenȱautonom.ȱ – PeersȱundȱVerbindungenȱzwischenȱdenȱPeersȱmüssenȱnichtȱzuverlässigȱsein.ȱ BeiȱhybridenȱPeerȬtoȬPeerȬSystemenȱ(sieheȱAbbildungȱ5Ȭ22)ȱgibtȱesȱeinenȱzentralenȱ VerzeichnisserverȱfürȱdieȱDienstsuche.ȱPeersȱregistrierenȱsichȱdort.ȱDieȱzentraleȱInȬ frastrukturȱbietetȱdannȱnurȱbegrenzteȱMöglichkeitenȱderȱSkalierung.ȱ
342 ȱ
5.5ȱȱSpezielleȱArchitekturenȱverteilterȱSystemeȱ Dieȱ Varianteȱ mitȱ denȱ Superpeersȱ bildetȱ eineȱ Mischformȱ ȱ ausȱ derȱ reinenȱ undȱ derȱ hybridenȱVariante.ȱSuperpeersȱ(sieheȱAbbildungȱ5Ȭ23),ȱbietenȱspezielleȱInformatioȬ nenȱ oderȱ Diensteȱ an,ȱ dieȱ nichtȱ jedesȱ Peerȱ hat.ȱ Einigeȱ Superpeersȱ könnenȱ z.B.ȱ dieȱ InformationȱüberȱdieȱPeers,ȱwelcheȱDiensteȱanbieten,ȱbereitstellen.ȱDieseȱVarianteȱ istȱetwasȱbesserȱskalierbarȱalsȱdieȱhybrideȱForm.ȱȱ FürȱPeerȬtoȬPeerȬArchitekturenȱgibtȱesȱvielfältigeȱAnwendungsmöglichkeiten:ȱ – – – –
VerteilteȱDatenȬȱundȱVerzeichnisdiensteȱ KollaborativeȱSystemeȱ ParallelisierungȱvonȱrechenintensivenȱOperationenȱ ParallelisierungȱderȱBearbeitungȱgroßerȱDatenbestände,ȱz.B.ȱParallelisierungȱ vonȱBatchverarbeitungenȱoderȱNachtverarbeitungenȱ – Verteilteȱ Nutzungȱ vonȱ Ressourcen,ȱ dieȱ sonstȱ nichtȱ zugänglichȱ wärenȱ (MuȬ sikdateien,ȱVideos,…)ȱ – Generellȱ Systeme,ȱ dieȱ ausȱ Skalierungssichtȱ anȱ ihreȱ Grenzenȱ stoßen,ȱ daȱ sieȱ zentralȱorganisiertȱsindȱ Peer Peer
Peer
Zentraler Server
Peer
Peer
Dienstverzeichnis
... Peer
Peer
Peer
Dienst im Dienstverzeichnis anfragen Peer nutzt Dienst eines anderen Peers
ȱ
Abbildungȱ5Ȭ22:ȱHybrideȱPeerȬtoȬPeerȬSystemeȱ
Allerdingsȱ mussȱ manȱ bedenken,ȱ dassȱ inȱ betrieblichenȱ Informationssystemenȱ eineȱ zentrale,ȱ persistenteȱ Datenhaltungȱ oftȱ unbedingtȱ erforderlichȱ ist.ȱ Dieȱ AufgabenȬ stellungȱmussȱalsoȱeineȱVerteilungȱderȱRessourcenȱaufȱunabhängigeȱPeersȱzulassen.ȱȱ EsȱgibtȱauchȱschonȱBasissystemeȱzurȱEntwicklungȱvonȱPeerȬtoȬPeerȬSystemen.ȱEinȱ Beispielȱ hierfürȱ istȱ PȬGrid,ȱ eineȱ offeneȱ PeerȬtoȬPeerȬPlattform,ȱ dieȱ imȱ PȬGridȬ Projektȱ(WWWȬ029)ȱentwickeltȱwird.ȱBekannteȱPeerȬtoȬPeerȬSystemeȱausȱderȱPraȬ xisȱsindȱNapster,ȱGnutellaȱundȱFreenet.ȱȱ Napster:ȱ Napsterȱ warȱ dasȱ ersteȱ PeerȬtoȬPeerȬSystemȱ imȱ Internet.ȱ Aufgabeȱ vonȱ Napsterȱ warȱ dieȱ Bereitstellungȱ einerȱ Datenbankȱ mitȱ Musikdateien,ȱ dieȱ mitȱ IPȬ AdressenȱvonȱPeers,ȱaufȱdenenȱsieȱverfügbarȱwaren,ȱverküpftȱwurden.ȱDieȱSucheȱ erfolgteȱ aberȱ überȱ einenȱ NapsterȬServer.ȱ Insofernȱ istȱ Napsterȱ nurȱ einȱ hybridesȱ PeerȬtoȬPeerȬSystem.ȱWeitereȱInformationenȱsindȱinȱ(WWWȬ030)ȱzuȱfinden.ȱ
ȱ
343
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ Gnutella:ȱ Aufgabenstellungȱ vonȱ Gnutellaȱ istȱ dasȱ Tauschenȱ vonȱ Waren.ȱ Gnutellaȱ istȱeinȱreinesȱPeerȬtoȬPeerȬSystem.ȱEsȱhandeltȱsichȱumȱeineȱTauschbörse,ȱinȱderȱvorȱ allemȱDateienȱ(z.B.ȱAudiodateien)ȱausgetauschtȱwerden.ȱGnutellaȱverfügtȱüberȱeinȱ eigenesȱ Protokoll.ȱ Dieȱ Softwareȱ wurdeȱ imȱ Jahreȱ 2000ȱ imȱ Internetȱ freiȱ verfügbarȱ gemacht.ȱ Eineȱ Weiterentwicklungȱ (GnutellaȬ2)ȱ desȱ ursprünglichenȱ GnutellaȬ NetzwerksȱnutzenȱheuteȱweitȱmehrȱalsȱzweiȱMillionenȱNutzer.ȱWeiterführendeȱErȬ läuterungenȱzuȱGnutellaȱsindȱinȱ(WWWȬ031)ȱzuȱfinden.ȱ Freenet:ȱFreenetȱistȱeinȱSystemȱzurȱdezentralenȱSpeicherungȱvonȱPublikationenȱmitȱ einerȱSuchinfrastrukturȱzumȱAuffindenȱvonȱInhaltenȱüberȱdasȱInternet.ȱFreenetȱistȱ einȱreinesȱPeerȬtoȬPeerȬSystem.ȱWeitereȱAusführungenȱzuȱFreenetȱsindȱinȱ(WWWȬ 032)ȱzuȱfinden.ȱ Weitereȱ PeerȬtoȬPeerȬAnwendungenȱ wieȱ Chord,ȱ Pastryȱ undȱ Tapestryȱ sowieȱ PȬGridȱ könnenȱinȱ(Mahlmannȱ2007)ȱnachgelesenȱwerden.ȱ Peer Peer
Peer Peer Superpeer
Superpeer
Peer
Information
Verzeichnis
Superpeer
Peer
... Peer
Peer Verzeichnis
Peer Peer
Dienst im Dienstverzeichnis anfragen Peer nutzt Dienst eines anderen Peers
ȱ
Abbildungȱ5Ȭ23:ȱSuperpeerȱPeerȬtoȬPeerȬSystemeȱ
5.5.2
Push- und Event-basierte Architekturen
PushȬȱundȱEventȬArchitekturenȱbenötigtȱmanȱinȱersterȱLinieȱzumȱaktivenȱVerteilenȱ vonȱ Informationen.ȱ Währendȱ PushȬSystemeȱ eherȱ imȱ Gegensatzȱ zumȱ klassischenȱ PullȬVerfahrenȱ fürȱ eineȱ zeitgerechteȱ Verteilungȱ vorklassifizierterȱ Informationenȱ sorgenȱ soll,ȱ sindȱ EventȬArchitekturenȱ dazuȱ da,ȱ bestimmteȱ Ereignsseȱ oderȱ EreigȬ nismusterȱ beiȱ derenȱ Auftretenȱ anȱ Interessierteȱ zuȱ kommunizieren.ȱ Beideȱ Typenȱ vonȱ Architekturenȱ sindȱ sichȱ sehrȱ ähnlich.ȱ Einȱ Vergleichȱ derȱ Eigenschaftenȱ dieserȱ Spezialarchitekturenȱwirdȱinȱ(Dustdarȱ2003)ȱversucht.ȱ EinȱPushȬSystemȱbestehtȱausȱKonsumentenȱ(Subscribern)ȱundȱProduzentenȱ(PubiȬ shern),ȱ dieȱ überȱ Informationskanäleȱ miteinanderȱ verbundenȱ sind.ȱ Derȱ VerbinȬ dungsaufbauȱerfolgtȱüberȱeineȱSubscriptionsphase.ȱPushȬArchitekturenȱeignenȱsichȱ
344 ȱ
5.5ȱȱSpezielleȱArchitekturenȱverteilterȱSystemeȱ beispielsweiseȱ fürȱ Nachrichtenagenturenȱ wieȱ Reuters,ȱ dieȱ aktuelleȱ Nachrichtenȱ verteilen.ȱȱ BlackBerryȬSystem:ȱDasȱSystemȱvonȱderȱFirmaȱResearchȱinȱMotionȱ(RIM)ȱdientȱderȱ Verteilungȱ vonȱ EȬMailsȱ anȱ drahtloseȱ Geräteȱ überȱ einȱ speziellesȱ BlackBerryȬ Protokoll.ȱDieȱVerteilungȱerfolgtȱüberȱdenȱBlackBerryȱEnterpriseȱServer.ȱDerȱServerȱ mussȱ anȱ dasȱ Mailsystemȱ einesȱ Unternehmensȱ angebundenȱ werden,ȱ umȱ dieȱ EȬ Mailsȱentgegennehmenȱzuȱkönnen.ȱDerȱServerȱüberwachtȱdieȱeingehendenȱEȬMailsȱ undȱ leitetȱ dieseȱ anȱ einȱ RoutingȬSystem,ȱ dasȱ MobileȱRoutingȱCenterȱ derȱ Firmaȱ RIMȱ weiter,ȱwelchesȱdannȱdieȱVerteilungȱanȱdieȱBlackBerryȬHandheldsȱvornimmt.ȱWeiȬ tereȱInformationenȱfindenȱsichȱunterȱ(WWWȬ033).ȱ BeiȱEventȬbasiertenȱSystemenȱstehtȱeherȱdieȱKommunikationȱloseȱgekoppelter,ȱunȬ abhängigerȱKomponentenȱimȱVordergrund.ȱJederȱTeilnehmerȱkannȱEventsȱerzeuȬ genȱ undȱ anȱ dieȱ Infrastrukturȱ desȱ EventȬSystemsȱ weiterleiten.ȱ EventȬbasierteȱ SysȬ temeȱ eignenȱ sichȱ auchȱ fürȱ dieȱ Verteilungȱ vonȱ Börsenkursenȱ (sieheȱ ReutersȬ Informationssysteme).ȱ
5.5.3
Grid-Architekturen
DieȱIdeeȱvonȱGridsȱ(Gitter,ȱNetz)ȱistȱes,ȱComputerleistungȱwieȱStromȱ(PowerȱGridȱ =ȱStromnetz)ȱausȱderȱSteckdoseȱnurȱüberȱdasȱInternetȱoderȱIntranetȱbereitzustellen.ȱ Derȱ GridȬComputingȬAnsatzȱ ist,ȱ wasȱ dieȱ Verteilungȱ anbelangt,ȱ mitȱ demȱ PeerȬtoȬ PeerȬAnsatzȱverwandt.ȱNachȱ(Seidenfadenȱ2003)ȱhandeltȱesȱsichȱsogarȱumȱeinȱAnȬ wendungsgebietȱdesȱPeerȬtoȬPeerȬAnsatzes.ȱMassivȱverteilteȱRessourcenȱsollenȱfürȱ eineȱ bestimmteȱ Aufgabe,ȱ meistȱ fürȱ aufwändigeȱ Berechnungenȱ oderȱ dieȱ Analyseȱ vonȱ sehrȱ großenȱ Datenmengen,ȱ zurȱ Verfügungȱ gestelltȱ werden.ȱ Beispielsweiseȱ werdenȱ PCsȱausȱ demȱ HomeofficeȬBereichȱ inȱ Forschungsprojektenȱ überȱ dasȱ InterȬ netȱ zuȱ einemȱ Gridȱ verbunden,ȱ umȱ aufwändigeȱ Berechnungenȱ durchzuführen.ȱ DamitȱnutztȱmanȱdieȱimȱInternetȱimȱÜberflussȱvorhandeneȱRessourceȱ„CPU“,ȱdieȱ inȱ denȱ PCsȱ ohnehinȱ brachȱ liegt,ȱ sinnvollȱ aus.ȱ Nachȱ (Mahlmannȱ 2007)ȱ istȱ derȱ HauptunterschiedȱzuȱPeerȬtoȬPeerȬArchitekturen,ȱdassȱGridȬArchitekturenȱzentralȱ administriertȱwerden.ȱDieȱKoordinationȱeinerȱBerechnungȱimȱGridȱerfolgtȱzentralȱ durchȱeinenȱRechner.ȱ DieȱNutzungȱvonȱGridsȱfürȱbetrieblicheȱProblemeȱstehtȱnochȱamȱAnfangȱundȱbeȬ darfȱ weitererȱ Forschungsaktivitäten.ȱ Aberȱ auchȱ inȱ derȱ Praxisȱ sindȱ bereitsȱ einigeȱ Ansätzeȱ sichtbar.ȱ Beispielsweiseȱ versuchenȱ einigeȱ Großfirmenȱ komplexeȱ BatchȬ abläufe,ȱ dieȱ meistensȱ nachtsȱ ablaufen,ȱ durchȱ GridȬAnsätzeȱ zuȱ parallelisieren.ȱ Fürȱ dieȱ Zukunftȱ erwartetȱ man,ȱ dassȱ komplexereȱ Dienstleistungenȱ (GridȬServices)ȱ inȬ nerhalbȱeinesȱGridsȱangebotenȱwerden.ȱȱ EineȱStandardisierungsbemühungȱfürȱGridȬArchitekturenȱistȱdieȱOpenȱServiceȱGridȱ Architectureȱ (OSGA)ȱ desȱ GlobalȱGridȱForums,ȱ dieȱ aufȱ derȱ sog.ȱ OpenȱServiceȱGridȱInȬ frastructureȱ(OSGI)ȱbasiert.ȱGridsȱsindȱeineȱVarianteȱdesȱArchitekturstilsȱunabhängiȬ gerȱ Komponenten.ȱ Manȱ sprichtȱ vonȱ ServiceȬGrids,ȱ wennȱ alsȱ Kommunikationsbasisȱ
ȱ
345
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ eineȱWebserviceȬInfrastrukturȱverwendetȱwird.ȱDieȱWebservicesȱwerdenȱhierȱvonȱ denȱamȱGridȱbeteiligtenȱRechnersystemenȱangeboten.ȱWeitereȱInformationenȱzumȱ ThemaȱGridȬComputingȱsindȱinȱ(Schillȱ2007)ȱundȱ(Mahlmannȱ2007)ȱzuȱfinden.ȱInȬ teressantesȱzuȱverschiedenenȱGridȬForschungsprojektenȱkannȱmanȱinȱ(WWWȬ034)ȱ nachlesen.ȱ
5.6 Datenzugriffsarchitekturen BisherȱhabenȱwirȱdieȱgrobeȱSchichtenaufteilungȱeinerȱverteiltenȱAnwendungȱkenȬ nengelernt.ȱWieȱdieȱinterneȱArchitekturȱeinerȱSchichtȱrealisiertȱwerdenȱkann,ȱwurȬ deȱ bisherȱ wenigerȱ betrachtet.ȱ Dieȱ Frageȱ nachȱ einerȱ gutenȱ Umsetzungȱ hängtȱ starkȱ mitȱ derȱ Schnittstelle,ȱ dieȱ eineȱ Schichtȱ bereitstellt,ȱ zusammen.ȱ Aberȱ auchȱ derȱ AufȬ wandȱfürȱeineȱvollständigeȱKapselungȱmussȱbedachtȱwerden.ȱWirȱwollenȱaufgrundȱ ihrerȱ Bedeutungȱ fürȱ betrieblicheȱ Informationssystemeȱ dieȱ DatenhaltungsȬȱ oderȱ PersistenzschichtȱimȱWeiterenȱetwasȱnäherȱbetrachten.ȱ
5.6.1
Grundlegendes zum Datenbankzugriff
Inȱ datenzentriertenȱ betrieblichenȱ Informationssystemenȱ hatȱ manȱ esȱ meistensȱ mitȱ einerȱumfangreicherenȱDatenhaltungȱzuȱtun,ȱdieȱheuteȱinȱderȱRegelȱüberȱrelationaȬ leȱDatenbanksystemeȱabgewickeltȱwird.ȱGeradeȱbeimȱZugriffȱaufȱdieȱaufȱeinemȱexȬ ternenȱ Mediumȱ liegendenȱ Datenȱ entstehenȱ beiȱ größerenȱ Anwendungenȱ dieȱ meiȬ stenȱ Problemeȱ hinsichtlichȱ derȱ Leistung.ȱ Andererseitsȱ istȱ dieȱ DatenbankzugriffsȬ schnittstelleȱ möglichstȱ gutȱ inȱ dieȱ Architekturȱ einesȱ Softwaresystemsȱ einzubauen.ȱ Beiȱ derȱ Schichtenbetrachtungȱ habenȱ wirȱ unsȱ schonȱ mitȱ derȱ Einordnungȱ derȱ perȬ sistentenȱDatenhaltungȱbeschäftigtȱundȱhabenȱfestgestellt,ȱdassȱesȱsichȱinsbesondeȬ reȱfürȱgrößereȱSystemeȱlohnt,ȱdieseȱFunktionalitätȱinȱeinerȱeigenenȱSchichtȱzuȱkapȬ seln.ȱ Nunȱgibtȱ esȱaberȱ verschiedeneȱMöglichkeiten,ȱdiesȱ zuȱrealisieren.ȱ Imȱ WeiteȬ renȱwollenȱwirȱeinigeȱdieserȱMöglichkeitenȱbetrachtenȱundȱunsȱdannȱeinigenȱFallȬ beispielenȱfürȱdieȱRealisierungȱvonȱDatenbankzugriffsschnittstellenȱwidmen.ȱ
5.6.2
Object-Relational Mapping und deren Varianten
Relationaleȱ Datenbankenȱ bietenȱalsȱ Zugriffsspracheȱ inȱ derȱRegelȱ SQLȱ an.ȱ Diesȱistȱ eineȱ deskriptiveȱ Sprache,ȱ dieȱ nichtȱ ohneȱ weiteresȱ inȱ einerȱ prozeduralenȱ oderȱ obȬ jektorientiertenȱSpracheȱverwendetȱwerdenȱkann.ȱDieȱDatenorganisationȱerfolgtȱinȱ relationalenȱDatenbankenȱinȱFormȱvonȱTabellenȱundȱSpalten.ȱDaȱheutigeȱAnwenȬ dungenȱ meistȱ objektorientiertȱ programmiertȱ werden,ȱ entstehtȱ einȱ sog.ȱ Impedanceȱ Mismatch,ȱderȱüberȱeinenȱAbbildungsmechanismusȱ(sieheȱAbbildungȱ5Ȭ24)ȱausgeȬ glichenȱwird.ȱDieserȱwirdȱauchȱalsȱObjectȬRelationalȬMappingȱ(ORM)ȱbezeichnet.ȱȱ
346 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ
OO-Sprachen: Java,… Darstellung: Objekte
Objektmodell
Mapping
Relationenmodell
Deklarative Zugriffssprache: SQL Darstellung: Tabellen
ȱ Abbildungȱ5Ȭ24:ȱMappingȱzwischenȱObjektȬȱundȱRelationenmodellȱ
EsȱgibtȱmehrereȱKonzepte,ȱdieȱfestlegen,ȱwieȱmanȱObjektklassenȱaufȱTabellenȱbzw.ȱ ObjekteȱaufȱTupelȱinȱdenȱTabellenȱabbildenȱkann.ȱ MappingȱvonȱObjektklassenȱaufȱTabellen:ȱDieȱeinfachsteȱVarianteȱistȱes,ȱeineȱObȬ jektklasseȱaufȱeineȱTabelleȱabzubilden.ȱJedesȱObjektattributȱwirdȱeineȱSpalteȱinȱderȱ Tabelle.ȱ Einȱ Objektȱ wirdȱ einȱ Tupelȱ inȱ derȱ Tabelle.ȱ Dieȱ sprachabhängigenȱ ObjektȬ IdsȱderȱObjekteȱkönnenȱnichtȱdirektȱaufȱPrimärschlüsselȱinȱderȱDatenbankȱabgebilȬ detȱ werden.ȱ Vielmehrȱ istȱ eineȱ persistente,ȱ eindeutigeȱ ObjektȬIdȱ alsȱ künstlicherȱ Primärschlüsselȱsinnvoll.ȱDieserȱmussȱbeimȱMappingȱerzeugtȱwerden.ȱ Objektklasse
1:1
Tabelle
Klasse Æ Tabelle: Ein Objekt ergibt eine Zeile in der Tabelle
Object-id als künstlicher Key
Objektklasse 1 Objektklasse 2
Tabelle
Klasse 1 bis n Æ Tabelle: Mehrere Objekte ergeben eine Zeile in der Tabelle
Objektklasse n
ȱ Abbildungȱ5Ȭ25:ȱMappingȱvonȱKlassenȱaufȱTabellenȱ
Manȱ kannȱ aberȱ auchȱ mehrereȱ Objektklassenȱ aufȱ eineȱ Tabelleȱ abbilden.ȱ BeispielsȬ weiseȱkönnteȱeineȱKlasseȱKundeȱundȱeineȱzugehörigeȱKlasseȱAdresseȱaufȱeineȱTabelȬ leȱKundeȱabgebildetȱwerden,ȱwennȱeinȱKundeȱnurȱeineȱoderȱwenigeȱAdressenȱhat.ȱ Dieȱ Abbildungsvariantenȱ sindȱ inȱ Abbildungȱ 5Ȭ25ȱ skizziert.ȱ Eineȱ Verletzungȱ vonȱ NormalisierungsregelnȱwirdȱdabeiȱwegenȱeinerȱLeistungsoptimierungȱbewusstȱinȱ Kaufȱgenommen.ȱ MappingȱvonȱVererbungsbeziehungen:ȱVererbungsbeziehungenȱkönnenȱimȱRelaȬ tionenmodellȱnichtȱohneȱweiteresȱdargestelltȱwerden.ȱJeȱnachȱKomplexitätȱkönnenȱ
ȱ
347
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ Klassen,ȱdieȱinȱeinerȱVererbungshierarchieȱstehenȱaufȱeineȱoderȱmehrereȱTabellenȱ abgebildetȱwerden.ȱȱ Manȱ sprichtȱ vonȱ SingleȬTableȬInheritence,ȱ wennȱ alleȱ Klassenȱ einerȱ VererbungshieȬ rarchieȱ einschließlichȱ derȱ abstraktenȱ Klassenȱ aufȱ eineȱ Tabelleȱ abgebildetȱ werden.ȱ DieȱAttributeȱallerȱKlassenȱwerdenȱdannȱzuȱSpaltenȱdieserȱTabelle.ȱBeiȱClassȬTableȬ InheritenceȱwirdȱjedeȱObjektklasseȱderȱVererbungshierarchieȱaufȱeineȱTabelleȱabgeȬ bildet.ȱ Beiȱ ConcreteȬTableȬInheritenceȱ werdenȱ nurȱ dieȱ konkretenȱ undȱ nichtȱ dieȱ absȬ traktenȱ Klassenȱ aufȱeigeneȱ Tabellenȱabgebildet.ȱ Dieȱ verschiedenenȱ AbbildungstyȬ penȱsindȱinȱAbbildungȱ5Ȭ26ȱdargestellt.ȱ Single-Table-Inheritence Abstrakte Klasse
Objektklasse 1
Objektklasse 2
Tabelle
Attribute aller Klassen ergeben Spalten der Tabelle
Objektklasse 3
Class-Table-Inheritence Abstrakte Klasse
Objektklasse 1
Tabelle 1
Attribute Klasse 1
Tabelle 2
Attribute Klasse 2
Tabelle 3
Attribute Klasse 3
Tabelle 1
Attribute Klasse 1 und 2
Tabelle 2
Attribute Klasse 1 und 3
Objektklasse 2 Objektklasse 3
Concrete-Table-Inheritence Abstrakte Klasse
Objektklasse 1
Objektklasse 2 Objektklasse 3
ȱ Abbildungȱ5Ȭ26:ȱMappingȱvonȱVererbungsbeziehungenȱ
MappingȱvonȱAssoziationen:ȱAssoziationenȱzwischenȱObjektklassenȱmitȱderȱKarȬ dinalitätȱ 1:1ȱ bildetȱ manȱ amȱ bestenȱ überȱ Fremdschlüsselȱ ab.ȱ Dabeiȱ kannȱ jeȱ nachȱ Zugriffshäufigkeitȱ inȱ beidenȱ Tabellenȱ oderȱ nurȱ inȱ einerȱ einȱ Fremdschlüsselȱ defiȬ niertȱ werden.ȱ 1:nȬAssoziationenȱ kannȱ manȱ ebenfallsȱ überȱ einenȱ Fremdschlüsselȱ abbilden.ȱFürȱm:nȬAssoziationenȱbenötigtȱmanȱeineȱeigeneȱBeziehungstabelle,ȱdeȬ
348 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ renȱ Primärschlüsselȱ sichȱ ausȱ denȱ Primärschlüsselnȱ derȱ inȱ Beziehungȱ stehendenȱ Tabellenȱzusammensetzt.ȱDieȱSchlüsselbestandteileȱsindȱgleichzeitigȱFremdschlüsȬ sel,ȱdieȱaufȱdieȱjeweiligenȱTabellenȱverweisen.ȱ InȱAbbildungȱ5Ȭ27ȱsindȱdieȱdreiȱAssoziationstypenȱundȱdieȱentsprechendenȱMapȬ pingȬMöglichkeitenȱskizziert.ȱ 1:1-Assoziation Objektklasse 1
Tabelle 1
(1,1)
Fremdschlüssel
(1,1)
Tabelle 2
Objektklasse 2
Oder umgekehrt oder beides möglich
1:n-Assoziation Objektklasse 1
Tabelle 1
(1,*)
Fremdschlüssel
(1,1)
Tabelle 2
Objektklasse 2
m:n-Assoziation Tabelle 1 Objektklasse 1 Beziehungstabelle (1,*) (1,*)
Tab1_Tab2 Fremdschlüssel 1 Fremdschlüssel 2
Objektklasse 2
Tabelle 2
ȱ Abbildungȱ5Ȭ27:ȱMappingȱvonȱAssoziationenȱ
DieȱORMȬSchichtȱhatȱnebenȱdemȱMappingȱderȱObjekteȱaufȱTabellenȱnochȱandere,ȱ wichtigeȱAufgabenȱzuȱerledigen:ȱ – Derȱ Datenbankzugriffsmechanismusȱ mussȱ sichȱ zudemȱ umȱ dieȱ TransaktiȬ onssteuerungȱundȱdieȱNebenläufigkeitskontrolleȱkümmern.ȱBeiȱderȱTransakȬ tionssteuerungȱ gibtȱ esȱ verschiedeneȱ Ansätze.ȱEntwederȱ gibtȱ manȱdemȱ ProȬ grammiererȱdieȱMöglichkeit,ȱdieȱTransaktionsgrenzenȱselbstȱzuȱbestimmen,ȱ oderȱdasȱSetzenȱvonȱTransaktionsgrenzenȱwirdȱvomȱPersistenzmechanismusȱ automatischȱdurchgeführt.ȱDieȱNebenläufigkeitskontrolleȱwirdȱüblicherweiȬ seȱüberȱoptimistischesȱoderȱpessimistischesȱLockingȱdurchgeführt.ȱDazuȱgeȬ hörtȱauchȱdasȱSetzenȱdesȱIsolationslevels.ȱ
ȱ
349
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ – EineȱweitereȱAufgabeȱistȱdieȱGewährleistungȱvonȱmöglichstȱguterȱZugriffsȬ leistung.ȱDiesȱwird,ȱjeȱnachȱAnsatz,ȱauchȱüberȱspezielleȱCachingȬMechanisȬ menȱerreicht.ȱ – Weiterhinȱ istȱ dieȱ ORMȬSchichtȱ fürȱ dieȱ Erzeugungȱ derȱ Primärschlüsselȱ zuȬ ständig,ȱdieȱmeistȱüberȱeinenȱfortlaufendenȱZähler,ȱdieȱsog.ȱObjectȬIdȱgebilȬ detȱwird.ȱȱ – Schließlichȱ istȱ beiȱ komplexenȱ Objektnetzenȱ zuȱ entscheiden,ȱ wannȱ welcheȱ Datenȱ vonȱ derȱ Datenbankȱ gelesenȱ werdenȱ sollen.ȱ Manȱ unterscheidetȱ hierȱ üblicherweiseȱeinȱLazyȱoderȱeinȱEagerȱLoading.ȱBeiȱLazyȱLoadingȱwirdȱbeiȱeiȬ nemȱZugriffȱaufȱeinȱObjektȱerstȱeinmalȱnurȱdasȱObjektȱgelesenȱundȱalleȱObȬ jekte,ȱdieȱeineȱAssoziationȱmitȱdiesemȱhaben,ȱerstȱbeiȱBedarf.ȱBeiȱEagerȱLoaȬ dingȱwirdȱdasȱgesamteȱObjektnetzȱeingelesen.ȱ WelcheȱAufgabenȱdieȱDatenzugriffsschnittstelleȱnunȱtatsächlichȱübernimmt,ȱhängtȱ vonȱderȱImplementierungȱab.ȱORMȬProdukteȱunterstützenȱdenȱProgrammiererȱinȱ derȱRegelȱbeiȱdenȱgenanntenȱAufgaben.ȱImȱFolgendenȱdiskutierenȱwirȱeinigeȱMögȬ lichkeiten,ȱdenȱZugriffȱaufȱdieȱDatenbankȱzuȱkapselnȱundȱgehenȱdabeiȱauchȱaufȱdieȱ zugehörigenȱPatternsȱein,ȱdieȱinȱ(Fowlerȱ2006)ȱausführlichȱbeschriebenȱwerden.ȱZuȱ denȱ Patternsȱ gehörenȱ Activeȱ Records,ȱ Tableȱ Dataȱ Gatewayȱ undȱ Dataȱ Accessȱ Objectȱ (DAO),ȱRowȱDataȱGatewayȱundȱTableȱMapper.ȱ
Direkter Zugriff über die Fachklasse Nachȱ Starkeȱ istȱ dieȱ einfachsteȱ Varianteȱ desȱ Datenbankzugriffsȱ überȱ dieȱ BusinessȬ Logikȱselbstȱrealisierbarȱ(Starkeȱ2005).ȱEineȱFachklasseȱ(BusinessȬKlasse,ȱKlasseȱmitȱ Geschäftslogik)ȱ kümmertȱ sichȱ hierȱ eigenständigȱ umȱ denȱ SQLȬZugriffȱ aufȱ dieȱ DaȬ tenbankȱ (sieheȱ Abbildungȱ 5Ȭ28).ȱ Dieseȱ Vorgehensweiseȱ hatȱ denȱ Vorteil,ȱ dassȱ sieȱ rechtȱeinfachȱumzusetzenȱist.ȱZudemȱkannȱjederȱEntwicklerȱeinerȱFachklasseȱsichȱ direktȱmitȱdemȱoptimalenȱZugriffȱaufȱdieȱDaten,ȱdieȱerȱbenötigt,ȱbeschäftigen.ȱEineȱ OptimierungȱderȱZugriffeȱliegtȱalsoȱinȱderȱHandȱdesȱEntwicklersȱeinerȱFachklasse.ȱ DB
Fachklasse SQL
ȱ Abbildungȱ5Ȭ28:ȱDatenbankzugriffȱüberȱdieȱFachklasseȱ
DerȱZugriffȱaufȱdieȱDatenȱerfolgtȱhierȱimȱRahmenȱeinerȱClientȬServerȬArchitekturȱ überȱdieȱBusinessȬLogik,ȱeineȱgewisseȱKapselungȱderȱDatenzugriffeȱüberȱdieȱFachȬ klasseȱistȱalsoȱgegeben,ȱallerdingsȱistȱvonȱNachteil,ȱdassȱeineȱÄnderungȱdesȱDatenȬ bankschemasȱ immerȱ auchȱ eineȱ Änderungȱ derȱ Fachklasseȱ nachȱ sichȱ zieht.ȱ Dieserȱ Aspektȱwirdȱvielȱdiskutiert,ȱdaȱeinigeȱPraktikerȱderȱMeinungȱsind,ȱdassȱeineȱÄndeȬ rungȱ imȱ Schemaȱ meistensȱ auchȱ eineȱ Änderungȱ inȱ derȱ BusinessȬLogikȱ nachȱ sichȱ ziehtȱundȱdaherȱohnehinȱauchȱdieseȱundȱmeistensȱsogarȱauchȱnochȱdieȱPräsentatiȬ onslogikȱangepasstȱwerdenȱmuss.ȱ
350 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ InȱJavaȱwürdeȱmanȱdenȱZugriffȱaufȱdieȱDatenbankȱüberȱdasȱJDBCȬAPIȱ(JavaȱDataȬ baseȱConnectivity)ȱimplementierenȱ(Sunȱ2006a).ȱDiesȱistȱeineȱMöglichkeit,ȱinȱJavaȱ SQLȬBefehleȱanȱDatenbankenȱzuȱsenden.ȱDieȱAPIȱstelltȱMöglichkeitenȱzumȱAufbauȱ einerȱ Verbindungȱ undȱ fürȱ alleȱ notwendigenȱ Zugriffeȱ bereit.ȱ Queriesȱ werdenȱ inȱ FormȱvonȱStringsȱmitȱSQLȬAnweisungenȱanȱdieȱDatenbankȬEngineȱübergeben.ȱȱBeiȱ dieserȱ Zugriffsvarianteȱ mussȱ manȱ sichȱ alsoȱ inȱ derȱRegelȱ seineȱSQLȬAnweisungenȱ imȱCodeȱalsȱStringsȱaufbauenȱundȱdieseȱüberȱJDBCȬȱoderȱsonstigeȱMethodenȱanȱdieȱ SQLȬEngineȱweiterleiten.ȱInȱ.NETȱwürdeȱmanȱaufȱdenȱrechtȱähnlichenȱADO.NETȬ Mechanismusȱzurückgreifen.ȱ Article id preis beschreibung setPreis getPreis … insert update delete findArticleById findArticleByGroup
ȱ
Abbildungȱ5Ȭ29:ȱBeispielȱfürȱeinȱtypischesȱActiveȱRecordȱ
Dieserȱ Ansatzȱ kannȱ mitȱ demȱ Patternȱ ActiveȱRecordȱ (nachȱ Fowler)ȱ umgesetztȱ werȬ den.ȱ Objektklassen,ȱ dieȱ diesesȱ Patternȱ nutzen,ȱ stellenȱ anȱ derȱ Schnittstelleȱ sowohlȱ DatenzugriffsȬȱ alsȱ auchȱ BusinessȬLogikȬMethodenȱ zurȱ Verfügung.ȱ Dieȱ DatenȬ zugriffeȱwerdenȱgekapselt,ȱaberȱnichtȱvonȱderȱBusinessȬLogikȱsepariert.ȱManȱfindetȱ hierȱMethodenȱwieȱinsert,ȱupdate,ȱdelete,ȱfind,ȱSetterȬȱundȱGetterȬMethodenȱfürȱAttȬ ribute,ȱaberȱauchȱMethodenȱderȱGeschäftslogikȱwieȱfindAllArticleByIdȱoderȱfindArȬ ticleByGroupȱ(sieheȱhierzuȱdieȱBeispielklasseȱinȱAbbildungȱ5Ȭ29).ȱ
Einführung einer Persistenzschicht über Datenklassen BeiȱdieserȱVarianteȱkapselnȱDatenklassenȱdieȱZugriffeȱaufȱdieȱDatenbankȱundȱverȬ bergenȱsoȱdieȱSQLȬAnweisungenȱvorȱdenȱFachklassen.ȱManȱkannȱsichȱfürȱjedeȱTaȬ belleȱ eineȱ Datenklasseȱ vorstellen,ȱ aberȱ auchȱ eineȱ Datenklasseȱ fürȱ denȱ Zugriffȱ aufȱ mehrereȱTabellenȱistȱmöglichȱundȱbeiȱkomplexerenȱQueriesȱauchȱnotwendig.ȱ Nachȱ Starkeȱ erreichtȱ dieserȱ Ansatzȱ aberȱ auchȱ keineȱ vollständigeȱ Trennungȱ derȱ Anwendungslogikȱ vonȱ derȱ Persistenzschicht,ȱ daȱ einȱ Programmiererȱ einerȱ DatenȬ klasseȱ immerȱ nochȱ dieȱ Technikenȱ desȱ Datenbankzugriffsȱ beherrschenȱ muss.ȱ Vonȱ Vorteilȱ istȱ aber,ȱ dassȱ eineȱ Änderungȱ inȱ derȱ Datenklasseȱ nichtȱ unbedingtȱ aufȱ dieȱ Fachklasseȱ ausstrahlt.ȱ Zudemȱ hatȱ derȱ Entwicklerȱ auchȱ hierȱ dieȱ Optimierungȱ derȱ SQLȬZugriffeȱ inȱ derȱ Hand.ȱ DieseȱVarianteȱ eignetȱsichȱ rechtȱ gut,ȱwennȱ dieȱ DatenȬ bankzugriffeȱ überwiegendȱ aufȱ einzelneȱ Tabellenȱ abzielen.ȱ Nichtȱ soȱ gutȱ geeignetȱ sindȱdieseȱDatenklassen,ȱwennȱmanȱsehrȱvernetzteȱDatenstrukturenȱhat.ȱDieȱVerȬ netzungȱ mussȱ dannȱ eigenständigȱ durchȱ entsprechendeȱ Zugriffsklassen,ȱ alsoȱ speȬ zielleȱDatenklassenȱausprogrammiertȱwerden.ȱȱ
ȱ
351
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ DB
Datenklasse
Fachklasse Methoden
SQL
ȱ Abbildungȱ5Ȭ30:ȱDatenbankzugriffȱüberȱdieȱeigeneȱDatenklassenȱ
NachȱFowlerȱnutztȱmanȱfürȱdieseȱVarianteȱtypischerweiseȱdasȱTableȱDataȱGatewayȱ Patternȱ(Fowlerȱ2006).ȱEinȱTableȱDataȱGatewayȱkannȱalsȱOkjektklasseȱimplementiertȱ werden,ȱ dieȱ dieȱ typischenȱ Zugriffsmethodenȱ wieȱ insert,ȱ delete,ȱ updateȱ undȱ evtl.ȱ mehrereȱfindȬMethodenȱzumȱSuchenȱüberȱverschiedeneȱSuchkriterienȱ(findByName,ȱ findByOrderNumber,ȱ findByDateAndName,..)ȱ bereitstellt.ȱ Jeȱ Tabelleȱ wirdȱ eineȱ GateȬ wayȬKlasseȱverwendetȱundȱdieȱSuchmethodenȱliefernȱDatensätzeȱzurück,ȱdieȱdannȱ inȱderȱGeschäftslogikȱbearbeitetȱwerdenȱkönnen.ȱDieȱMethodenȱderȱKlasseȱerzeuȬ genȱ denȱ SQLȬCodeȱ meistȱ durchȱ Zusammensetzenȱ vonȱ SQLȬStrings.ȱ Kompliziertȱ wirdȱ esȱ meistens,ȱ wennȱ sehrȱ vieleȱ verschiedeneȱ SelectȬOperationenȱ erforderlichȱ sind.ȱDieȱEntwicklungȱvonȱDatenklassenȱkannȱalsoȱunterschiedlichȱkomplexȱsein,ȱ jeȱnachdem,ȱwelcheȱMethodenȱanȱderȱSchnittstelleȱangebotenȱwerden.ȱKommtȱweȬ nigȱ BusinessȬLogikȱ zumȱ Datenbankzugriffȱ hinzu,ȱ sindȱ dieȱ Fachlassenȱ auchȱ meistȱ nurȱ Durchreicherȱ derȱ Parameterȱ anȱ dieȱ Methodenȱ derȱ Datenklasse.ȱ Auchȱ hierȱ würdeȱmanȱdenȱZugriffȱaufȱdieȱDatenbankȱinȱJavaȱüberȱdasȱJDBCȬAPIȱimplemenȬ tieren.ȱInȱ.NETȱkannȱmanȱauchȱsog.ȱDatasetsȱnutzen.ȱInȱAbbildungȱ5Ȭ31ȱistȱeinȱBeiȬ spielȱfürȱeinȱTableȱDataȱGatewayȱmitȱeinigenȱMethodenȱskizziert.ȱ ArticleGateway … insert update delete findArticleById findArticleByGroup
ȱ
Abbildungȱ5Ȭ31:ȱBeispielȱfürȱeinȱtypischesȱTableȱDataȱGatewayȱ
EineȱweitereȱAlternativeȱstelltȱnachȱFowlerȱdasȱPatternȱRowȱDataȱGatewayȱdar.ȱHierȱ istȱ fürȱ jedeȱ einzelneȱ Tabellenzeileȱ einȱ Objektȱ alsȱ Gatewayȱ zurȱ Datenbankȱ vorgeseȬ hen.ȱEinȱRowȱDataȱGatewayȱverhältȱsichȱwieȱeinȱObjekt,ȱdasȱeinenȱDatensatzȱrepräȬ sentiert.ȱ Dieȱ zugehörigeȱ Objektklasseȱ enthältȱ nurȱ Datenzugriffsoperationenȱ fürȱ denȱZugriffȱaufȱdieȱTabelleȱundȱggf.ȱauchȱdieȱfindȬMethoden,ȱdieȱaberȱauchȱinȱeiȬ geneȱFinderȬKlassenȱausgelagertȱwerdenȱkönnen.ȱAnȱderȱSchnittstelleȱzumȱRowȱDaȬ taȱ Gatewayȱ sollteȱ imȱ Gegensatzȱ zumȱ Activeȱ Recordȱ keineȱ BusinessȬLogikȱ sichtbarȱ sein.ȱInȱAbbildungȱ5Ȭ31ȱistȱeinȱBeispielȱfürȱeinȱRowȱDataȱGatewayȱmitȱeinigenȱAttriȬ butenȱundȱMethodenȱskizziert.ȱ
352 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ ArticleRowDataGateway id preis ... insert update delete findArticleById findArticleByGroup
ȱ
Abbildungȱ5Ȭ32:ȱBeispielȱfürȱeinȱtypischesȱRowȱDataȱGatewayȱ
DieseȱMöglichkeitȱentsprichtȱinȱetwaȱdemȱEinsatzȱdesȱDAOȬPatternsȱȱ(DataȱAccessȱ Object)ȱinȱVerbindungȱmitȱdemȱDTOȬPatternȱ(DataȱTransferȱObject).ȱDieseȱVarianteȱ wirdȱ inȱ (Starkeȱ 2005)ȱ alsȱ MiniȬPersistenzschichtȱ bezeichnet.ȱ Wieȱ Abbildungȱ 5Ȭ33ȱ zeigtȱ nutztȱ eineȱ Fachklasseȱ DAOsȱ fürȱ denȱ Zugriffȱ aufȱ dieȱ Datenbank.ȱ Dieȱ DAOsȱ erzeugenȱ beiȱ SelectȬOperationenȱ DTOs,ȱ dieȱ derȱ Fachklasseȱ zurȱ weiterenȱ BearbeiȬ tungȱübergebenȱwerden.ȱDieȱDTOsȱsindȱeigenständigeȱObjektklassen,ȱdieȱvonȱderȱ Datenbankstrukturȱentkoppeltȱsind,ȱmitȱeinfachenȱMethodenȱzurȱBearbeitung.ȱ DieȱNutzungȱdesȱDTOȬPatternsȱentkoppeltȱdenȱZugriffȱaufȱdieȱDatenbankȱweiter,ȱ indemȱvonȱderȱDatenzugriffsschichtȱunabhängigeȱObjekteȱ(DTOs)ȱerzeugtȱwerden,ȱ dieȱ vonȱ denȱ Datenstrukturenȱ derȱ DAOsȱ entkoppeltȱ sind.ȱ Dieȱ ÄnderungsanfälligȬ keitȱderȱClientȬAnwendungenȱsinktȱdurchȱdenȱEinsatzȱdiesesȱPatterns.ȱAllerdingsȱ sindȱ DTOsȱ eineȱ zusätzlicheȱ Belastungȱfürȱ denȱ Programmierer.ȱSieȱ müssenȱ befülltȱ werden,ȱwasȱdenȱProgrammieraufwandȱenormȱerhöhtȱundȱsieȱverschlechternȱaufȬ grundȱständigerȱKopieraktivitätenȱdieȱLeistungsfähigkeitȱeinesȱSystems.ȱDieȱweiteȬ reȱEntkopplungȱdesȱDatenbankzugriffsȱstehtȱalsoȱimȱWiderspruchȱzurȱLeistungȱeiȬ nesȱSystemsȱundȱzumȱProgrammieraufwand.ȱAuchȱhierȱkommtȱderȱAspektȱhinzu,ȱ dassȱsichȱbeiȱeinerȱÄnderungȱdesȱDatenbankschemasȱohnehinȱmöglicherweiseȱeineȱ ÄnderungȱinȱallenȱSchichtenȱergibt.ȱDieȱtechnischeȱEntkopplungȱdesȱDatenzugriffsȱ istȱdaherȱaberȱgegeben.ȱ DAO kapselt die Datenquelle DB
DAO
Fachklasse nutzt
SQL
erzeugt
nutzt
DTO
ȱ Abbildungȱ5Ȭ33:ȱDatenbankzugriffȱüberȱdasȱDAOȬPatternȱ
DerȱEinsatzȱvonȱDTOsȱbringtȱzudemȱdenȱVorteil,ȱdassȱbeiȱentferntenȱAufrufenȱaufȱ dieȱ Fachklasseȱ inȱ verteiltenȱ Umgebungenȱ größereȱ Datenstrukturenȱ übertragenȱ
ȱ
353
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ werdenȱ undȱ nichtȱ fürȱ jedesȱ Attributȱ einȱ RemoteȬZugriffȱ erfolgenȱ muss.ȱ Diesȱ warȱ dieȱ eigentlicheȱ Ursacheȱ fürȱ dieȱ Erfindungȱ diesesȱ Patterns.ȱ DTOsȱ enthaltenȱ übliȬ cherweiseȱ auchȱ größereȱ Datenmengen.ȱ Geradeȱ fürȱ dieȱ Realisierungȱ serviceorienȬ tierterȱ Architekturen,ȱ beiȱ denenȱ unbedingtȱ eineȱ Entkopplungȱ vonȱ derȱ DatenhalȬ tungȱnotwendigȱist,ȱsindȱDTOsȱeinȱgutesȱKonzept,ȱdaȱsieȱsichȱrelativȱleichtȱaufȱeineȱ serviceorientierteȱSchnittstelleȱabbildenȱlassen.ȱ InȱJavaȱimplementiertȱmanȱfürȱeinȱDAOȱundȱauchȱfürȱeinȱDTOȱjeweilsȱeineȱeigeneȱ Klasse,ȱ wobeiȱ imȱ DAOȱ jeȱ nachȱ Architekturȱ entwederȱ aufȱ einzelneȱ Tabellenȱ oderȱ auchȱ aufȱ mehrereȱ Tabellenȱ zugegriffenȱ werdenȱ kann.ȱ Derȱ Zugriffȱ vomȱ DAOȱ aufȱ dieȱDatenbankȱkönnteȱinȱJavaȱwiederumȱüberȱJDBCȱerfolgen.ȱObwohlȱStarkeȱdieseȱ Varianteȱ desȱ Datenbankzugriffsȱ bereitsȱ alsȱ Persistenzschichtȱ bezeichnet,ȱ istȱ derȱ einzigeȱmarkanteȱUnterschiedȱzumȱTableȱDataȱGatewayȱdieȱNutzungȱvonȱDTOs,ȱdieȱ dieȱLeistungsfähigkeitȱvonȱRemoteȬZugriffenȱverbessernȱsollen.ȱ
Komplexere Persistenzschichten KomplexereȱPersistenzschichtenȱkümmernȱsichȱnebenȱdemȱMappingȱderȱDatenȱaufȱ ObjekteȱumȱweitereȱAspekteȱdesȱDatenzugriffsȱwieȱetwaȱumȱdieȱTransaktionssteuȬ erung,ȱumȱeineȱkomfortablereȱAbbildungȱvonȱVererbungsmechanismenȱundȱAssiȬ ziationenȱ zwischenȱ Objekten.ȱ Sieȱ dienenȱ imȱ Wesentlichenȱ dazu,ȱ dieȱ DatenbankȬ zugriffeȱ undȱ dasȱ ObjectȬRelationalȬMappingȱ fürȱ denȱ Entwicklerȱ nochȱ weiterȱ zuȱ vereinfachen.ȱ Heuteȱ werdenȱ vonȱ Herstellernȱ einigeȱ ORMȬToolsȱ angebotenȱ oderȱ dieseȱsindȱbereitsȱinȱApplicationȬServerȬProdukteȱintegriert.ȱ InȱJavaȱstehenȱmehrereȱMöglichkeitenȱzurȱVerfügung,ȱeineȱkomplexereȱPersistenzȬ schichtȱ zuȱ nutzen.ȱ Hierzuȱ gehörenȱ EJBȱ Entityȱ Beans,ȱ Hibernateȱ ȱ JDOȱ (Javaȱ Dataȱ Objects)ȱsowieȱJPAȱ(JavaȱPersistenceȱAPI).ȱImȱ.NETȬUmfeldȱgibtȱesȱz.B.ȱNhibernateȱ fürȱC#.NET.ȱWieȱmanȱsiehtȱgibtȱesȱauchȱhierȱnichtȱnurȱeineȱLösung.ȱȱ ORMȬToolsȱstellenȱmeistȱeinenȱSatzȱvonȱvordefiniertenȱInterfacesȱundȱKlassenȱbeȬ reit,ȱdieȱeinȱAnwendungsprogrammiererȱfürȱdenȱZugriffȱaufȱdieȱDatenbankȱnutzenȱ kann.ȱ Sieȱ sindȱ nichtȱ integralerȱ Bestandteilȱ derȱ Programmierspracheȱ sondernȱwerȬ denȱalsȱZusatzpaketeȱangeboten.ȱ Nebenȱ denȱ genanntenȱ Toolsȱ gibtȱ esȱ inȱ derȱ Praxisȱ auchȱ eineȱ Fülleȱ vonȱ eigenenȱ ORMȬTools,ȱ dieȱ innerhalbȱ vonȱ Projektenȱ entwickeltȱ wurden,ȱ alsȱ esȱ nochȱ keineȱ brauchbarenȱWerkzeugeȱaufȱdemȱMarktȱgab.ȱDaȱORMȬToolsȱdediziertȱdieȱAufgabeȱ desȱ Datenbankzugriffsȱ übernehmen,ȱ könnteȱ manȱ sichȱ vorstellen,ȱ dassȱ sieȱ einenȱ sehrȱ leistungsfähigenȱ Zugriffȱ aufȱ dieȱ Datenȱ gewährleisten.ȱ Dagegenȱ spricht,ȱ dassȱ dieȱAnsätzeȱgenerisch,ȱohneȱRücksichtȱaufȱdieȱkonkretenȱDatenȱsind.ȱEinȱNachteilȱ desȱ Einsatzesȱ vonȱ ORMȬToolsȱ sindȱ dieȱ eingeschränktenȱ Möglichkeitenȱ derȱ LeisȬ tungsoptimierungȱbeiȱkomplexenȱDatenbankzugriffen.ȱ
354 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ Article id preis beschreibung
DB
Article Mapper
setPreis getPreis … findArticleById findArticleByGroup
insert update delete
SQL
ȱ
Abbildungȱ5Ȭ34:ȱBeispielȱfürȱeinenȱDataȱMapperȱ
AlsȱeinȱPatternȱfürȱeineȱkomplexereȱPersistenzschicht,ȱdasȱauchȱvonȱORMȬProdukȬ tenȱ verwendetȱ wird,ȱ schlägtȱ Fowlerȱ dasȱ DataȬMapperȬPatternȱ vorȱ (Fowlerȱ 2006).ȱ EinȱDataȱMapperȱwirdȱhierȱalsȱSoftwareschichtȱbezeichnet,ȱwelcheȱeineȱklareȱTrenȬ nungȱzwischenȱdenȱObjektenȱderȱProgrammiersprachenȱundȱdenȱDatenbanktabelȬ lenȱherbeiführt.ȱGeschäftslogikȱundȱDatenhaltungȱsollenȱalsoȱvollständigȱgetrenntȱ werden.ȱImȱBeispielȱinȱAbbildungȱ5Ȭ34ȱistȱeinȱArtikelȬObjektȱdargestellt,ȱdasȱüberȱ einenȱArticleȬMapperȱmitȱDatenȱversorgtȱwird.ȱNurȱderȱArticleȬMapperȱgreiftȱaufȱ dieȱDatenbankȱzuȱundȱversorgtȱdieȱFachklassenȱmitȱDaten.ȱ Wirȱ werdenȱ imȱ Folgendenȱ dieȱ ORMȬAnsätzeȱ ausȱ demȱ EJBȬUmfeldȱ inȱ derȱ älterenȱ Versionȱ2.xȱundȱinȱderȱneuerenȱVersionȱ3.0ȱetwasȱnäherȱbetrachten,ȱallerdingsȱsolȬ lenȱnurȱdieȱwesentlichenȱKonzepteȱdiskutiertȱwerden.ȱWeitereȱInformationenȱfinȬ denȱ sichȱ inȱ (Backschatȱ 2007)ȱ undȱ (Burkeȱ 2006).ȱ Inȱ (Fowlerȱ 2006)ȱ sindȱ auchȱ einigeȱ Patternsȱ erläutert,ȱ mitȱ derenȱ Hilfeȱ eineȱ eigeneȱ Persistenzschichtȱ implementiertȱ werdenȱkann.ȱ
5.6.3
Fallbeispiel: BMP und CMP in EJB 2.x
EntityȬBeansȱdienenȱbeiȱEJBȱ2.xȱderȱRepräsentationȱpersistenterȱDaten,ȱdieȱz.B.ȱinȱ einerȱDatenbankȱgespeichertȱwerden.ȱDieȱLebensdauerȱeinerȱEntityȬBeanȱistȱinȱderȱ RegelȱlängerȱalsȱdieȱServerlaufzeit.ȱEsȱhandeltȱsichȱumȱBusinessȬEntitäten,ȱdieȱvomȱ EJBȬEntwicklerȱalsȱObjekteȱangesprochen,ȱaberȱmeistȱinȱrelationalenȱDatenbankenȱ abgelegtȱwerden.ȱEinȱObjectȬRelationalȬMappingȬMechanismusȱzurȱAbbildungȱderȱ ObjekteȱaufȱRelationenȱwirdȱdurchȱdenȱEJBȬContainerȱunterstützt.ȱÜbernimmtȱderȱ BeanȬProviderȱ dieȱ Programmierungȱ derȱ Zugriffeȱ aufȱ dieȱ Datenhaltungȱ selbst,ȱ soȱ sprichtȱmanȱvonȱbeanȬmanagedȱPersistencyȱ(BMP).ȱWickeltȱdieseȱAufgabeȱderȱConȬ tainerȱ ab,ȱsoȱsprichtȱ manȱvonȱ containerȬmanagedȱPersistencyȱ(CMP).ȱ Beideȱ VarianȬ tenȱwerdenȱgemäßȱderȱEJBȬSpezifikationȱunterstützt.ȱ
ȱ
355
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ
MyEJBHome
MyBean
findByPrimaryKey(...) findByXy(...) create(....) createByXy(...) ...
ejbFindByPrimaryKey(...) ejbFindByXy(...) ejbCreate(....) ejbCreateByXy(...) ... BusinessOp_1(...) BusinessOp_2(...) ... ejbLoad() ejbStore() ...
MyEJBRemote BusinessOp_1(...) BusinessOp_2(...) ...
Container
ȱ
Abbildungȱ5Ȭ35:ȱAufrufȱderȱMethodenȱausȱderȱeigentlichenȱBeanȬKlasseȱ
Einȱ Interfaceȱ einerȱ EntityȬBeanȱ hatȱ nebenȱ denȱ Methoden,ȱ dieȱ auchȱ eineȱ SessionȬ Beanȱenthält,ȱnochȱweitereȱMethoden,ȱdieȱvonȱderȱeigentlichenȱBeanȬKlasseȱimpleȬ mentiertȱ werdenȱ müssenȱ (sieheȱ Abbildungȱ 5Ȭ35).ȱ Diesȱ sindȱ nebenȱ beliebigȱ vielenȱ MethodenȱzumȱErzeugenȱvonȱEntityȬBeansȱ(createȬMethode),ȱMethodenȱzumȱAufȬ findenȱ vonȱ EntityȬBeansȱ nachȱ bestimmtenȱ Kriterien.ȱ Dieȱ Namenȱ derȱ “finder“Ȭ Methodenȱ beginnenȱ perȱ Konventionȱ mitȱ demȱ Präfixȱ „findBy“,ȱ gefolgtȱ vonȱ einerȱ Bezeichnungȱ fürȱ dieȱ Suchkriterienȱ (findBy;ȱ Beispiele:ȱ findByPrimaȬ ryKeyȱundȱfindByName).ȱ MyBean 9999
EJBean implementiert Zugriff auf Datenhaltung
Bean Instanz MyBean 9999
save() store() remove()
EJB-Container Applikationsserver
Relation MyBean
MyBean String id String name
id
name
895541254
Mein_Name
912451785
Otto
ȱ Abbildungȱ5Ȭ36:ȱBeanȬmanagedȱPersistencyȱ
AufgabeȱdesȱBeanȬProvidersȱistȱes,ȱdieȱeigentlicheȱBeanȬKlasseȱmitȱdenȱMethodenȱ ejbCreate,ȱ ejbRemove,ȱ ȱ ejbFindBy,ȱ ejbLoadȱ undȱ ejbStoreȱ zuȱ implemenȬ tieren.ȱDieȱletztenȱbeidenȱbenötigtȱderȱContainerȱfürȱdasȱLadenȱderȱDatenȱausȱdemȱ
356 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ persistentenȱSpeicherȱundȱdasȱSpeichernȱinȱdiesen.ȱDieȱMethodeȱcreateȱausȱdemȱsog.ȱ HomeObjectȱruftȱdieȱMethodeȱejbCreateȱausȱderȱeigentlichenȱBeanȬKlasseȱundȱdieȱMeȬ thodeȱ findByȱ ruftȱ dieȱ Methodeȱ ejbFindByȱ auf.ȱ Auchȱ dieȱ Methodenȱ setEntityContextȱ undȱ unsetEntityContextȱ sindȱ obligatorischȱ zuȱ impȬ lementieren.ȱDieseȱbeidenȱMethodenȱwerdenȱauchȱvomȱContainerȱaufgerufen.ȱDieȱ MethodeȱsetEntityContextȱmussȱdenȱLaufzeitkontextȱinȱderȱEJBeanȬInstanzȱinȱeinerȱ lokalenȱ Variablenȱ vomȱ Typȱ EntityContextȱ ablegen,ȱ unsetEntityContextȱ setztȱ denȱ Kontextȱaufȱ„null“.ȱÜberȱdieseȱVariableȱkannȱdieȱEJBeanȱaufȱdenȱfürȱsieȱimȱContaiȬ nerȱverwaltetenȱKontextȱzugreifen.ȱWerdenȱdieȱEntitätenȱinȱeinerȱSQLȬDatenbankȱ gespeichert,ȱ soȱ enthaltenȱ dieȱ genanntenȱ Methodenȱ SQLȬAnweisungenȱ zumȱ AnleȬ genȱ (ejbCreateȬMethode),ȱ Löschenȱ (ejbRemoveȬMethode),ȱ ȱ Suchenȱ (ejbFindBy...Ȭ Methodenȱ undȱ ejbLoadȬMethode)ȱ undȱ Aktualisierenȱ (ejbStoreȬMethode)ȱ einesȱ TaȬ belleneintrags.ȱ Wieȱ wirȱ nochȱ sehenȱ werden,ȱ giltȱ diesȱ nurȱ fürȱ beanȬmanagedȱ undȱ nichtȱ fürȱ containerȬmanagedȱ Persistency,ȱ woȱ derȱ Containerȱ alleȱ Datenbankzugriffeȱ übernimmtȱ undȱ dasȱ Mappingȱ aufȱ Tabellenȱ undȱ Tabellenfelderȱ überȱ denȱ DeployȬ mentȱDescriptorȱerfolgt.ȱȱ EJB-Container implementiert Zugriff auf Speicherschicht MyBean 9999
BeanInstanz
load() store() remove()
MyBean 9999
EJB-Container Applikationsserver Deployment Descriptor ...
id
name
...
Relation "MyBean" id
name
895541254
Mein_Name
912451785
Otto
ȱ
Abbildungȱ5Ȭ37:ȱContainerȬmanagedȱPersistencyȱ
BeiȱBMPȱistȱderȱBeanȬProviderȱfürȱdieȱEntwicklungȱderȱZugriffslogikȱaufȱdieȱPerȬ sistenzschichtȱ zuständig.ȱ Dieȱ Methodenȱ ejbStore,ȱ ejbLoadȱ usw.ȱ müssenȱ programȬ miertȱwerden.ȱInȱAbbildungȱ5Ȭ36ȱistȱdieȱArbeitsweiseȱvonȱBMPȱprinzipiellȱskizziert.ȱ InȱeinerȱBeanȬInstanzȱliegenȱbeispielhaftȱdieȱAttributeȱidȱundȱname.ȱDieseȱwerdenȱ überȱdieȱEJBeanȬMethodenȱaufȱeineȱTabelleȱabgebildet.ȱȱ
ȱ
357
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ Beiȱ CMPȱ übernimmtȱ derȱ Containerȱ dieȱ Verwaltungȱ derȱ Datenhaltungsschichtȱ (Persistenzschicht).ȱ Imȱ Deploymentȱ Descriptorȱ werdenȱ dieȱ Attributeȱ derȱ entspreȬ chendenȱDatenbanktabellenȱsowieȱdieȱZuordnungȱzuȱVariablenȱinȱderȱEJBeanȱkonȬ figuriert.ȱ Dieȱ Methodenȱ ejbStore,ȱ ejbLoadȱ usw.ȱ sindȱ nichtȱ vomȱ BeanȬProviderȱ zuȱȱ programmieren.ȱBeiȱCMPȱmüssenȱalleȱZugriffsroutinenȱaufȱdieȱAttributeȱderȱEntiȬ tyȬBeanȱmitȱabstrakten,ȱöffentlichenȱ(public)ȱgetȬȱundȱsetȬMethodenȱdeklariertȱsein.ȱ DieseȱdürfenȱaberȱvomȱBeanȬProviderȱnichtȱausprogrammiertȱwerden,ȱdaȱderȱConȬ tainerȱ denȱ Codeȱ dafürȱ zurȱ DeploymentȬZeitȱ erzeugt.ȱ Inȱ Abbildungȱ 5Ȭ37ȱ sindȱ dieȱ Zusammenhängeȱdargestellt.ȱȱ Imȱ Deploymentȱ Descriptorȱ erfolgtȱ dieȱ MappingȬKonfigurierungȱ undȱ dabeiȱ dasȱ MappingȱderȱVariablennamenȱaufȱAttributnamenȱinȱderȱzugehörigenȱRelation.ȱDieȱ Speicherzugriffsoperationenȱ liegenȱ innerhalbȱ desȱ Containersȱ undȱ könnenȱ aufȬ grundȱderȱMetainformationȱausȱdemȱDeploymentȱDescriptorȱabgeleitetȱwerden.ȱȱ Does Not Exist
unsetEntityContext() Object.finalize()
Vom Container initiiert
Class.newInstance() setEntityContext ()
ejbFind..() ...
Vom Container initiiert Pooled create()
ejbPassivate()
ejbActivate ()
ejbCreate() ejbRemove() ejbPostCreate() remove()
Vom Client initiiert
Vom Client initiiert Ready
ejbLoad()
business method
ejbStore() ...
Vom Container initiiert
ȱ
Abbildungȱ5Ȭ38:ȱZustandsdiagrammȱfürȱeineȱEntityȬBeanȱ
Abbildungȱ5Ȭ38ȱ enthältȱ denȱ Zustandsautomatenȱ einerȱ EntityȬBean.ȱ Alleȱ Aktionenȱ dieȱ vomȱ EJBȬClientȱ bzw.ȱ vomȱ EJBȬContainerȱ initiiertȱ werden,ȱ sindȱ entsprechendȱ markiert.ȱ Zunächstȱ existiertȱ dieȱ EntityȬBeanȱ nicht.ȱ Sieȱ wirdȱ vomȱ Containerȱ überȱ eineȱ eigeneȱ Strategieȱ erzeugtȱ undȱ inȱ einenȱ Poolȱ abgelegt.ȱ Durchȱ Aufrufȱ derȱ MeȬ thodeȱcreateȱüberȱdasȱHomeȬInterfaceȱwirdȱdieȱInstanzȱderȱEntityȬBeanȱ(gemeintȱistȱ dieȱ Instanzȱ derȱ eigentlichenȱ BeanȬKlasse)ȱ erzeugt.ȱ Beiȱ denȱ Zustandsübergängenȱ
358 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ undȱauchȱimȱ„Ready“ȬZustandȱbeiȱVeränderungenȱderȱBeanȬInstanz,ȱwirdȱimplizitȱ durchȱdenȱContainerȱeineȱentsprechendeȱMethodeȱderȱBeanȬInstanzȱaufgerufen.ȱ Beispiel:ȱEntityȬBeanȱmitȱBMP:ȱEinȱArtikelȱkannȱalsȱtypischesȱBeispielȱfürȱeineȱEnȬ tityȬBeanȱbezeichnetȱwerden,ȱderenȱCodingȱimȱFolgendenȱangedeutetȱwerdenȱsoll.ȱ DasȱRemoteȬInterfaceȱkönnteȱwieȱfolgtȱaussehen:ȱ package ArticleManagement; … import javax.ejb.*; public interface Article extends EJBObject { public String getName() throws RemoteException; public void setName(String Name) throws RemoteException; public float getPrice() throws RemoteException; public void setPrice(float price) throws RemoteException; … }
Dasȱ HomeȬInterfaceȱ desȱ Artikelmanagersȱ istȱ vereinfachtȱ dargestelltȱ undȱ wirdȱ alsȱ ArticleHomeȱbezeichnet.ȱEsȱverfügtȱüberȱeineȱMethodeȱzumȱErzeugenȱeinesȱneuenȱ Artikelsȱ undȱ zumȱ Suchenȱ einesȱ Artikelsȱ überȱ denȱ Primärschlüssel.ȱ Fürȱ denȱ PriȬ märschlüsselȱmussȱbeiȱbeanȬmanagedȱPersistencyȱentwederȱeineȱeigeneȱKlasseȱbeȬ reitgestelltȱwerden,ȱdieȱinȱunseremȱFallȱArticlePKȱheißtȱundȱserialisierbarȱseinȱmuss.ȱ DerȱPrimärschlüsselȱkannȱaberȱauchȱeinȱprimitiverȱJavaȬDatentypȱsein.ȱBeiȱcontaiȬ nerȬmanagedȱPersistencyȱwirdȱdieȱKlasseȱvomȱContainerȱbereitgestellt.ȱ … public interface ArticleHome extends EJBHome { public void create(int CatalogId, String name) throws CreateException, RemoteException; public Article findByPrimaryKey(ArticlePK pk) throws FinderException, RemoteException; … } public class ArticlePK implements java.io.Serializable { public int catalogId }
DieȱeigentlicheȱBeanȬKlasse,ȱdieȱinȱunseremȱBeispielȱmitȱMyArticleBeanȱbenanntȱist,ȱ implementiertȱdasȱInterfaceȱjavax.ejb.EntityBeanȱundȱsiehtȱwieȱfolgtȱaus:ȱ …ȱ public class MyArticleBean implements EntityBean {
ȱ
359
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ // Kontext private EntityContext entityContext = null; … public void ejbCreate(int CatalogId, String name) throws… {/* eigener Code */} public void ejbPostCreate(int CatalogId, String name) {/* eigener Code */} public Article ejbFindByPrimaryKey(ArticlePK pk) ) throws… {/* eigener Code */} // Business Methoden public String getName()throws… {/* eigener Code */} ) public void setName(String Name) throws… {/* eigener Code */} public float getPrice() throws… {/* eigener Code */} public void setPrice(float price) throws… {/* eigener Code */} // Entity-Bean-Methoden public void ejbActivate(){} public void ejbPassivate(){} public void ejbRemove(){} public void ejbLoad(){ /* Eigene Implementierung */} public void ejbStore(){ /* Eigene Implementierung */} public void setEntityContext(EntityContext ctx){ entityContext = ctx; } public void unsetEntityContext(){ entityContext = null; } … }
AlleȱArgumenteȱundȱdieȱReturnwerteȱvonȱMethodenȱeinerȱEntityȬBeanȱmüssenȱseȬ rialisierbarȱ sein,ȱ daȱ derȱ JavaȬObjektserialisierungsmechanismusȱ verwendetȱ wird.ȱ DieȱejbStoreȬMethodeȱwirdȱvomȱContainerȱimmerȱdannȱaufgerufen,ȱwennȱerȱesȱfürȱ richtigȱ hält.ȱ Dieȱ EJBeanȬInstanzȱ mussȱ dieȱ UpdateȬOperationȱ inȱ Richtungȱ DatenȬ bankȱselbstȱvornehmen.ȱNachȱeinerȱDeaktivierungȱdurchȱdenȱContainerȱistȱbeiȱderȱ nächstenȱ Nutzungȱ durchȱ eineȱ BusinessȬMethodeȱ wiederȱ eineȱ Aktivierungȱ erforȬ derlich,ȱ wobeiȱ vomȱ ȱ Containerȱ anschließendȱ einȱ Lesenȱ ausȱ derȱ Datenbankȱ mitȱ ejbLoadȱ initiiertȱ wird.ȱ Wannȱ eineȱ EntityȬBeanȬInstanzȱ tatsächlichȱ deaktiviertȱ wird,ȱ hängtȱ vonȱ derȱ Strategieȱ desȱ Containersȱ abȱ undȱ istȱ auchȱ ganzȱ demȱ ContainerȬ Herstellerȱüberlassen.ȱDieȱejb*ȬMethoden,ȱdieȱsichȱmitȱderȱDatenhaltungȱbeschäftiȬ gen,ȱdienenȱu.a.ȱderȱSynchronisationȱmitȱeinerȱDatenbank.ȱBeiȱNutzungȱvonȱbeanȬ
360 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ managedȱPersistencyȱ sindȱ dieȱ Zugriffeȱ aufȱ denȱ dauerhaftenȱ Speichermechanismusȱ z.B.ȱüberȱdasȱJDBCȬAPIȱzuȱprogrammieren.ȱ Beispiel:ȱ EntityȬBeanȱ mitȱ CMP:ȱ Beiȱ Nutzungȱ vonȱ CMPȱ gibtȱ esȱ hinsichtlichȱ derȱ Implementierungȱ einerȱ EntityȬBeanȱ gravierendeȱ Unterschiede,ȱ daȱ derȱ MethodenȬ codeȱ fürȱ Datenbankzugriffsmethodenȱ undȱ auchȱ dieȱ „GetterȬ/Setter“ȬMethodenȱ vomȱ Containerȱ überȱ dieȱ Informationenȱ ausȱ demȱ Deploymentȱ Descriptorȱ erzeugtȱ werden.ȱBeiȱNutzungȱvonȱcontainerȬmanagedȱPersistencyȱsindȱdieseȱMethodenȱnichtȱ auszuprogrammieren,ȱdaȱdieȱZuordnungȱderȱDatenȱaufȱpersistenteȱElementeȱvomȱ Containerȱ vorgenommenȱ wird.ȱ Dieȱ erforderlicheȱ Metainformationȱ stehtȱ dannȱ imȱ DeploymentȱDescriptor.ȱ CMPȱ nutztȱ einȱ abstraktesȱ Programmiermodell.ȱ Esȱ istȱ daherȱ eineȱ abstrakteȱ BeanȬ Klasseȱzuȱdefinieren,ȱinȱderȱalleȱZugriffsmethodenȱebensoȱabstraktȱdeklariertȱwerȬ denȱmüssen.ȱSieȱdürfenȱauchȱvomȱBeanȬProviderȱnichtȱimplementiertȱwerden.ȱ DieȱeigentlicheȱBeanȬKlasse,ȱdieȱinȱunseremȱBeispielȱmitȱMyArticleBean,ȱbenanntȱist,ȱ siehtȱmitȱCMP,ȱetwasȱvereinfacht,ȱwieȱfolgtȱaus:ȱ … public abstract class MyArticleBean implements EntityBean { // Kontext private EntityContext entityContext = null; public void ejbCreate(int catalogId, String name) throws… {/* eigener Code: Zuweisen aller Attribute */} public void ejbPostCreate(int catalogId, String name) {/* eigener Code */} // Abstrakte Business-Methoden (Setter-/Getter) public abstract String getName() {} public abstract void setName(String Name) {} public abstract float getPrice() {} public abstract void setPrice(float price) {} // Entity-Bean-Methoden public void ejbActivate(){} public void ejbPassivate(){} public void ejbRemove(){} public void ejbLoad(){} public void ejbStore(){} public void setEntityContext(EntityContext ctx){ entityContext = ctx; } public void unsetEntityContext(){ entityContext = null; } … }
ȱ
361
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ InȱAbbildungȱ5Ȭ39ȱwirdȱderȱErzeugungsȬȱundȱEntfernungsprozessȱfürȱeineȱcontaiȬ nerȬmanagedȱEntityȬBeanȬInstanzȱskizziert.ȱGleichȱnachȱderȱErzeugungȱeinerȱEntiȬ tyȬBeanȬInstanzȱ mitȱ createȱ bzw.ȱ ejbCreateȱ werdenȱ dieȱ Felderȱ derȱ EJBeanȱ überȱ dieȱ vomȱ Containerȱ generiertenȱ getȬMethodenȱ ausgelesenȱ undȱ esȱ wirdȱ eineȱ entspreȬ chendeȱInsertȬOperationȱinȱRichtungȱDatenbankȱabgesetzt.ȱBeiȱAufrufȱderȱremoveȬ MethodeȱdurchȱdenȱClientȱwirdȱvomȱContainerȱeineȱdeleteȬOperationȱerzeugtȱundȱ ausgeführt.ȱ FürȱdieȱAktivierungȱundȱPassivierungȱeinerȱEntityȬBeanȬInstanzȱnutztȱderȱContaiȬ nerȱ dieȱ Methodenȱ ejbPassivateȱ undȱ ejbActivate.ȱ Üblicherweiseȱ wirdȱ vorȱ derȱ PassiȬ vierungȱeinerȱEntityȬBeanȬInstanzȱundȱentsprechendȱnachȱeinerȱAktivierungȱdurchȱ denȱ Containerȱ eineȱ updateȬȱ bzw.ȱ selectȬOperationȱ ausgeführt,ȱ umȱ denȱ DatenbankȬ eintragȱzuȱaktualisierenȱbzw.ȱauszulesen.ȱ EJB Application-Server/Container Client
EJB Home
EJB Object
Bean Instance
intern
Database
Class.newInstance() setEntityContext()
create()
ejbCreate() Container-managed Felder belegen Neuen Satz in Datenbank einfügen Class.newInstance() Bean-Instanz zuweisen ejbPostCreate() business method
Business-Methode
remove() ejbRemove() Satz aus Datenbank löschen
unsetEntityContext()
ȱ Abbildungȱ5Ȭ39:ȱErzeugenȱundȱEntfernenȱeinerȱEntityȬBeanȱbeiȱCMPȱ
WieȱmanȱinsgesamtȱanȱdieserȱORMȬMethodeȱerkennenȱkann,ȱistȱsieȱinȱderȱAnwenȬ dungȱnochȱrelativȱkompliziert.ȱWieȱwirȱimȱfolgendenȱAbschnittȱsehenȱwerden,ȱistȱ dieȱweiterentwickelteȱVersionȱderȱEntityȬBeansȱinȱderȱEJBȬVersionȱ3.0ȱinȱderȱHandȬ habungȱeinfacher.ȱ
362 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ
5.6.4
Fallbeispiel: Java Persistence API und EJB 3.0
ZielȱvonȱJavaȱPersistenceȱAPIȱ(JPAistȱesȱüberȱderȱJDBCȬAPIȱeinenȱmöglichstȱeinfaȬ chenȱObjectȬRelationalȬMappingȬMechanismusȱzuȱdefinieren.ȱEntityȱBeansȱwerdenȱ inȱEJBȱ3.0ȱauchȱalsȱEntitiesȱ(Entität)ȱbezeichnet.ȱEinȱEntityȱwirdȱinȱdieserȱSpezifikaȬ tionȱalsȱleichtgewichtigesȱpersistentesȱDomänenobjektȱbezeichnet.ȱDerȱLebenszykȬ lusȱeinerȱEntitätȱwirdȱüberȱeinenȱSoftwarebausteinȱnamensȱEntityȬManagerȱverwalȬ tet.ȱDerȱEntityȬManagerȱübernimmtȱauchȱdasȱORȬMapping.ȱ
Entity-Manager und Kontextverwaltung Derȱ EntityȬManagerȱ löstȱ dieȱ ausȱ derȱ EJBȱ 2.xȬSpezifikationȱ bekanntenȱ HomeȬ Interfacesȱ derȱ Entityȱ Beansȱ abȱ undȱ bietetȱ zusätzlicheȱ Funktionalität.ȱ Erȱ stelltȱ dieȱ zentraleȱ Instanzȱ fürȱ alleȱ Persistenzoperationenȱ dar.ȱ Dieȱ Javaȱ Persistenceȱ APIȱ istȱ zwarȱimȱZugeȱderȱEJBȬ3.0ȬSpezifikationȱentwickeltȱworden,ȱistȱaberȱimȱPrinzipȱeineȱ eigenständigeȱ JavaȬAPI,ȱ dieȱ nichtȱ unbedingtȱ einenȱ EJBȬContainerȱ benötigt.ȱ Abbildungȱ 5Ȭ40ȱzeigtȱ dieȱEinbettungȱeinesȱ EntityȬManagersȱ inȱ einenȱ ApplicationȬ Server.ȱ EJB-Application-Server
EJBClient
Request
Container EJBean
Persistenzkontext
DB Entity
Entity Manager
ȱ Abbildungȱ5Ȭ40:ȱEinbettungȱdesȱEntityȬManagersȱinȱeinenȱApplicationȬServerȱ
EinȱEntityȱwirdȱerstȱdannȱpersistent,ȱwennȱmanȱesȱeinemȱEntityȬManagerȱbekanntȱ macht.ȱDazuȱwirdȱesȱinȱeinenȱPersistenzkontextȱeingetragen.ȱDerȱPersistenzkontextȱ verwaltetȱalleȱEntities,ȱdieȱautomatischȱinȱdieȱDatenbankȱgeschriebenȱwerdenȱmüsȬ sen.ȱ Dieseȱ Entitiesȱ werdenȱ alsȱ managedȱ Entitiesȱ bezeichnet.ȱ Dasȱ Schreibenȱ aufȱ dieȱ DatenbankȱhängtȱvonȱderȱverwendetenȱStrategieȱab.ȱWennȱbeispielsweiseȱinȱeinerȱ TransaktionȱmehrereȱEntitiesȱverändertȱundȱwiederȱabgespeichertȱwerden,ȱbestehtȱ derȱ Persistenzkontextȱ währendȱ dieserȱ Transaktionȱ ausȱ denȱ bearbeitetenȱ Entities.ȱ FürȱdenȱPersistenzkontextȱgibtȱesȱzweiȱEinstellungen:ȱȱ – Transaction:ȱ Derȱ Persistenzkontextȱ existiert,ȱ solangeȱ dieȱ Transaktionȱ läuft.ȱ Wennȱ dieȱ Transaktionȱ beendetȱ ist,ȱ werdenȱ alleȱ verwaltetenȱ Entitiesȱ inȱ denȱ Statusȱdetachedȱversetzt.ȱ
ȱ
363
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ – Extended:ȱ Derȱ Persistenzkontextȱ bleibtȱ ggf.ȱ überȱ mehrereȱ Transaktionenȱ hinwegȱ bestehen,ȱ bisȱ erȱ explizitȱ aufgelöstȱ wird.ȱ Derȱ ExtendedȬModusȱ kannȱ nurȱ imȱ Zusammenhangȱ mitȱ Beanȱ Managedȱ Transactionsȱ undȱ Statefulȱ Sessionȱ Beansȱbenutztȱwerden.ȱȱ Jederȱ EntityȬManagerȱ istȱ anȱ eineȱ PersistenceȬUnitȱ gebunden,ȱ dieȱ überȱ eineȱ XMLȬ Dateiȱ (persistence.xml)ȱ konfigurierbarȱ ist.ȱ Dortȱ werdenȱ Eigenschaftenȱ desȱ PerȬ sistenzkontextsȱfestgelegt.ȱ Beispiel:ȱ Dasȱ folgendeȱ Codestückȱ zeigtȱ eineȱ möglicheȱ Definitionȱ derȱ PersistenceȬ Unit.ȱ
java:/XAOracleDS
…
AlleȱEntities,ȱdieȱzuȱeinerȱPersistenceȬUnitȱgehören,ȱkönnenȱhierȱebenfallsȱspezifiȬ ziertȱwerden.ȱFehltȱdieseȱAngabe,ȱsoȱermitteltȱderȱEJBȬContainerȱdieseȱInformationȱ automatischȱausȱdemȱJARȬFileȱderȱAnwendungȱundȱnimmtȱalleȱgefundenenȱEntiȬ tiesȱ inȱ dieȱ PersistenceȬUnitȱ auf.ȱ Weiterhinȱ werdenȱ dieȱ zuȱ verwendendenȱ DatenȬ quellenȱ(DataȱSources)ȱundȱderȱverwendeteȱTransaktionsmanagerȱangegeben.ȱDieȱ fürȱeinenȱEntityȬManagerȱzurȱverwendendeȱPersistenceȬUnitȱwirdȱimȱBeanȬCodingȱ überȱeineȱAnnotationȱbekanntgemacht:ȱ @PersistenceContext(type=PersistenceContextType.TRANSACTION) @PersistenceUnit(unitName=“articledb“) private EntityManager manager; -...
DieȱEntityȬManagerȬSchnittstelleȱstelltȱdieȱDiensteȱbereit,ȱumȱEntitiesȱzuȱverwaltenȱ (create,ȱfind,…)ȱundȱQueriesȱoderȱsonstigeȱOperationenȱauszuführen.ȱAuchȱdieȱInȬ teraktionȱ mitȱ einemȱ Transaktionsdienstȱ überȱ dasȱ JTAȱ APIȱ wirdȱ überȱ denȱ EntityȬ Managerȱ abgewickelt.ȱ Dasȱ Interfaceȱ EntityȬManagerȱ sollȱ imȱ Folgendenȱ gezeigtȱ werden:ȱȱ package javax.persistence; public interface EntityManager { public void persist(Object entity); public T merge(T entity); public void remove(Object entity); public T find(Class entityClass, Object primaryKey); public T getReference(Class entityClass, Object primaryKey);
364 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ public void flush(); public void refresh(Object entity); public boolean contains(Object entity); public Query createQuery(String ejbqlString); public Query createNamedQuery(String name); public Query createNativeQuery(String sqlString); public Query createNativeQuery(String sqlString, Class result-Class); public Query createNativeQuery(String sqlString, String result-SetMapping); public void close(); public boolean isOpen(); public EntityTransaction getTransaction(); }
Eineȱ Entity,ȱ dieȱ sichȱ imȱ Persistenzkontextȱ einesȱ EntityȬManagersȱ befindet,ȱ istȱ imȱ Zustandȱ managed,ȱ d.h.ȱ alleȱ Änderungenȱ anȱ dieserȱ Entityȱ werdenȱ vomȱ EntityȬ Managerȱ mitȱ derȱ Datenbankȱ synchronisiert.ȱ Esȱ istȱ auchȱ möglich,ȱ eineȱ Entityȱ ausȱ demȱKontextȱdesȱEntityȬManagersȱzuȱlösen.ȱDiesȱgeschiehtȱz.B.,ȱwennȱdieȱBeanȱanȱ denȱClientȱgesendetȱwird.ȱDerȱZustandȱderȱBeanȱwirdȱdannȱalsȱdetachedȱbezeichnet.ȱ DieȱvomȱClientȱanȱderȱBeanȱvorgenommenenȱÄnderungenȱsindȱdannȱwiederȱinȱdieȱ Datenbankȱzuȱübertragen.ȱDazuȱmüssenȱdieseȱerstȱwiederȱüberȱdieȱMethodeȱmergeȱ anȱ denȱ EntityȬManagerȱ übergebenȱ werden.ȱ Manȱ sprichtȱ beiȱ diesemȱ Vorgangȱ vonȱ einemȱMerge.ȱDieȱwichtigstenȱMethodenȱdesȱEntityȬManagersȱsollenȱkurzȱerwähntȱ werden:ȱ – flush():ȱMitȱdieserȱMethodeȱwerdenȱdieȱÄnderungenȱanȱdenȱmanagedȱEntitiesȱ inȱ dieȱ Datenbankȱ geschrieben.ȱ Normalerweiseȱ istȱ esȱ nichtȱ nötig,ȱ dieseȱ MeȬ thodeȱexplizitȱaufzurufen,ȱdaȱdasȱFlushingȱvomȱEntityȬManagerȱselbststänȬ digȱ verwaltetȱ wird.ȱ Dasȱ FlushȬVerhaltenȱ kannȱ überȱ dieȱ Methodeȱ setFlushȬ Mode()ȱgesteuertȱwerden.ȱDabeiȱstehenȱzweiȱEinstellungenȱzurȱVerfügung:ȱ o AUTOȱ(DefaultȬEinstellung):ȱDieȱMethodeȱflushȱwirdȱbeimȱTransaktionsȬ CommitȱundȱvorȱjederȱQueryȱdurchgeführt,ȱwelcheȱdieȱbereitsȱverwalteȬ tenȱ(managed)ȱEntitiesȱbetrifft.ȱ o COMMIT:ȱFlushȱwirdȱhierȱnurȱbeimȱTransaktionsȬCommitȱdurchgeführt.ȱȱ – persist():ȱMitȱdieserȱMethodeȱwirdȱeineȱneuȱerstellteȱEntityȱinȱderȱDatenbankȱ persistiertȱundȱdieȱEntityȱinȱdenȱaktuellenȱPersistenzkontextȱeingefügt.ȱȱ – merge():ȱMitȱdieserȱMethodeȱkannȱeineȱEntityȱmitȱStatusȱdetachedȱinȱdenȱPerȬ sistenzkontextȱ aufgenommenȱ werden.ȱ Dabeiȱ werdenȱ eventuelleȱ ÄnderunȬ genȱzumȱFlushȬZeitpunktȱmitȱderȱDatenbankȱsynchronisiert.ȱ – refresh():ȱ Mitȱ dieserȱ Methodeȱ kannȱ derȱ Zustandȱ einerȱ Entityȱ aktualisiertȱ werden.ȱBeiȱEnitiesȱimȱStatusȱmanagedȱwerdenȱdadurchȱzwischenzeitlichȱerȬ folgteȱÄnderungenȱvonȱanderenȱClientsȱsichtbar.ȱBeiȱEntitiesȱimȱStatusȱdetaȬ chedȱwerdenȱdamitȱetwaigeȱÄnderungenȱmitȱdenȱaktuellenȱWertenȱausȱderȱ Datenbankȱüberschrieben.ȱ
ȱ
365
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ – createQuery():ȱ EJBȱ 3.0ȱ stelltȱ eineȱ eigeneȱ QueryȬSpracheȱ namensȱ EJBȱ QLȱ zurȱ Verfügung.6ȱDieȱSyntaxȱistȱähnlichȱzuȱSQL,ȱnurȱdassȱdieȱAnfragenȱaufȱEntiȬ tiesȱundȱihrenȱPropertiesȱdurchgeführtȱwerdenȱanstattȱaufȱȱDatenbanktabelȬ len.ȱ Dieȱ EJBȬQLȬAnfragenȱ werdenȱ vomȱ EntityȬManagerȱ inȱ nativeȱ SQLȬ Anfragenȱübersetzt.ȱȱ Wichtigȱist,ȱdassȱbeimȱAufrufȱvonȱpersist()ȱnochȱkeinȱZustandsübergangȱinȱdenȱZuȬ standȱmanagedȱdurchgeführtȱwird.ȱDiesȱliegtȱdaran,ȱdassȱdasȱEinfügenȱvonȱObjekȬ tenȱ inȱ dieȱ Datenbankȱ erstȱ zumȱ FlushȬZeitpunktȱ erfolgt.ȱ Derȱ Aufrufȱ vonȱ persist()ȱ markiertȱ einȱ Entityȱ nurȱ fürȱ eineȱ späterȱ auszuführendeȱ SQLȬEinfügeȬOperation.ȱ Erstȱ beimȱ explizitenȱ oderȱ implizitȱ durchȱ denȱ Containerȱ vorgenommenenȱ Aufrufȱ derȱMethodeȱflush()ȱwechseltȱdieȱEntityȱinȱdenȱZustandȱmanaged.ȱ
Entities EntityȬBeansȱ werdenȱ inȱ EJBȱ 3.0ȱ überȱ dieȱ Annotationȱ „@Entity“ȱ bezeichnet.ȱ Dasȱ Mappingȱ aufȱ Tabellenȱ einerȱ relationalenȱ Datenbankȱ erfolgtȱ überȱ dieȱ Annotationȱ „@Table“.ȱ Zurȱ Formulierungȱ vonȱ Queriesȱ dientȱ dieȱ gegenüberȱ EJBȱ 2.1ȱ erweiterteȱ AbfragespracheȱEJBȱQL.ȱQueriesȱkönnenȱinȱEJBȱQLȱauchȱmitȱeinemȱNamenȱverseȬ henȱundȱimȱCodingȱsymbolischȱangesprochenȱwerden.ȱ Beispiel:ȱ Betrachtenȱ wirȱ denȱ bekanntenȱ Artikelȱ alsȱ EntityȬBeanȱ mitȱ einigenȱ ZuȬ griffsoperationen.ȱImȱBeispielȱwirdȱeinȱEntitätstypȱmitȱdenȱNamenȱArticleȱdefiniert,ȱ derȱüberȱzweiȱbenannteȱQueriesȱverfügt.ȱDieȱQueriesȱhabenȱdieȱNamenȱfindAllArȬ ticlesByKatalogIdȱundȱfindAllArticles.ȱȱ package ArticleManagement; … import javax.ejb.*; import javax.persistence.*; @Entity @NamedQueries( { @NamedQuery(name="findAllArticlesByGroup", queryString="from Article a where a.warengruppe = :warengruppe"), @NamedQuery(name="findAllArticles", queryString="from Article") } ) @Table(name="ARTICLE") public class Article implements java.io.Serializable {
ȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱȱ 6
ȱ
EJBȱQLȱhatȱgroßeȱÄhnlichkeitȱmitȱderȱHibernateȱQueryȱLanguageȱ(HQL).ȱ
366 ȱ
5.6ȱȱDatenzugriffsarchitekturenȱ private static final long serialVersionUID = …; private long katalogId; private String beschreibung = new String(); private float preis; private long warengruppe; public Article() { super(); } … @id(generate = GenerateType.AUTO) @Column(name = “KATALOGID”); public getKatalogId() { return catalogId; } public setKatalogId(long catalogId) { this.katalogId = katalogId; } @Column(name = “BESCHREIBUNG”) public String getBeschreibung() { return beschreibung; } public String setBeschreibung( String beschreibung) { this.beschreibung =
beschreibung;
} // @Column-Annotation für alle zu persistierenden Attribute … // Beziehungen sind ebenfalls über Annotionen möglich. }
ÜberȱdieȱAnnotationȱ„@Column“ȱwerdenȱdieȱTabellenspaltenȱdefiniert.ȱJederȱSpalȬ teȱwirdȱeinȱAttributȱmitȱeinerȱGetȬȱundȱeinerȱSetȬMethodeȱzugeordnet.ȱDerȱPrimärȬ schlüsselȱwirdȱmitȱderȱAnnotationȱ„@Id“ȱangegeben.ȱ DieȱEntitätenȱkönnenȱauchȱinȱBeziehungȱzuȱanderenȱEntitätenȱstehen.ȱAlleȱmögliȬ chenȱ Beziehungenȱ (1:1,ȱ1:n,ȱ n:m)ȱzwischenȱ Tabelleneinträgenȱ könnenȱ ebenfallsȱüȬ berȱAnnotationenȱwieȱ„@OneToMany“,ȱ„@ManyToMany“ȱusw.ȱangegebenȱwerden.ȱ EineȱausführlicheȱBeschreibungȱdieserȱAnnotationenȱistȱinȱ(Sunȱ2005b)ȱundȱ(Burkeȱ 2006)ȱȱzuȱfindenȱundȱsollȱanȱdieserȱStelleȱnichtȱerfolgen.ȱ BeispielȱfürȱdieȱNutzungȱeinerȱEntity:ȱEineȱEntitätȱvomȱTypȱArticleȱkannȱausȱeinerȱ SessionȬBeanȱ herausȱ beispielsweiseȱ wieȱ folgtȱ genutztȱ werden.ȱ Wirȱ verwendenȱ hierzuȱwiederȱunsereȱbekannteȱSessionȬBeanȱArticleMgrSessionBean:ȱ
ȱ
367
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ import java.util.collection; import java.util.List; … @Stateless public class ArticleMgrSessionBean implements … { @PersistenceContext(UnitName = “Artikelmanager”) private EntityManager emgr; // Entity-Manager-Instanz private Article a; … public void createArticle(Article a) { this.a = a; // Schreiben in die Datenbank emgr.persist (Article.class, this.a); } // Suche über KatalogId public Article findArticleByKatalogId (long katalogId) { // Ohne Fehlerbehandlung return emgr.find(“Article.class, katalogId); } // Suche aller Artikel public Article findAllArticles() { List articleList = emgr.createNamedQuery(“findAllArticles”).getResultList(); … }
Imȱ Beispielȱ wirdȱ einȱ Persistenzkontextȱ mitȱ derȱ Bezeichnungȱ Artikelmanagerȱ überȱ dieȱ Annotationȱ „@PersistenceContext“ȱ erzeugt,ȱ überȱ denȱ manȱ eineȱ Referenzȱ aufȱ einenȱEntityȬManagerȱbesorgenȱkann.ȱWeiterhinȱwirdȱmitȱderȱMethodeȱcreateArticȬ leȱ eineȱ Entitätȱ vomȱ Typȱ Articleȱ aufȱ dieȱ Datenbankȱ geschriebenȱ (Methodeȱ persist).ȱ Zudemȱ wirdȱ inȱ derȱ Methodeȱ findArticleByKatalogIdȱ gezeigt,ȱ wieȱ einȱ Suchenȱ überȱ Primärschlüsselȱ realisiertȱ werdenȱ kann,ȱ undȱ wieȱ eineȱ benannteȱ Queryȱ benutztȱ werdenȱkannȱ(sieheȱMethodeȱfindAllArticles).ȱ Daȱ dieȱ Persistenzmechanismenȱ inȱ EJBȱ 3.0ȱ sehrȱ umfangreichȱ sindȱ undȱ eineȱ detailȬ lierteȱEinführungȱunserenȱRahmenȱsprengenȱwürde,ȱsollȱanȱdieserȱStelleȱbzgl.ȱeinerȱ tiefergehendenȱ Erläuterungȱ aufȱ dieȱ Literaturȱ verwiesenȱ werdenȱ(sieheȱ (Backschatȱ 2007)ȱ undȱ (Burkeȱ 2006)).ȱ Abschließendȱ sollȱ nochȱ derȱ inȱ EJBȱ 3.0ȱ implementierteȱ CallbackȬMechanismusȱ erwähntȱ werden.ȱ Manȱ kannȱ alsȱ Entwicklerȱ CallbackȬ MethodenȱinȱdenȱLebenszyklusȱvonȱEntityȬBeansȱeinklinken.ȱDieseȱMethodenȱwerȬ denȱ auchȱ alsȱ EntityȬCallbacksȱ bezeichnet.ȱ Alsȱ CallbackȬEreignisseȱ sindȱ derzeitȱ „@PrePersist“,ȱ „@PostPersist“,ȱ „@PostLoad“,ȱ „@PreUpdate“,ȱ „@PostUpdate“,ȱ „@PreRemove“ȱundȱ„@PostRemove“ȱdefiniert.ȱDieȱNamenȱderȱAnnotationenȱsindȱ auchȱ selbsterklärend.ȱ Mitȱ derȱ Annotationȱ „@PrePersist“ȱ kannȱ z.B.ȱ eineȱ Methodeȱ
368 ȱ
Clientzugriffsarchitekturenȱ definiertȱ werden,ȱ dieȱ imȱ Lebenszyklusȱ einerȱ EntityȬBeanȱ vorȱ einerȱ dauerhaftenȱ Speicherungȱaufgerufenȱwird.ȱ
5.7 Clientzugriffsarchitekturen ClientȬAnwendungenȱ müssenȱ anȱ dieȱ Serversystemeȱ angebundenȱ werden,ȱ damitȱ sieȱ derenȱ Diensteȱ nutzenȱkönnen.ȱ Wieȱmachtȱ manȱ dasȱüblicherweiseȱundȱ woraufȱ sollteȱmanȱdabeiȱachten?ȱDieseȱFrageȱwollenȱwirȱimȱWeiterenȱbeantworten.ȱ
5.7.1
Grundlegendes
WieȱbeiȱdenȱTechnologiebetrachtungenȱbereitsȱausgeführt,ȱwerdenȱServersystemeȱ meistȱüberȱProxiesȱbzw.ȱStubs,ȱdieȱinȱderȱRegelȱauchȱautomatischȱerzeugtȱbzw.ȱzurȱ ÜbersetzungszeitȱüberȱToolsȱgeneriertȱwerden,ȱangebunden.ȱDieseȱProxiesȱverberȬ genȱDetailsȱderȱKommunikationȱsowieȱdesȱMarshallings.ȱEineȱgewisseȱKapselungȱ istȱalsoȱautomatischȱgegeben,ȱallerdingsȱbenötigtȱmanȱnochȱtechnologieabhängigeȱ ZugriffeȱaufȱeinenȱNamingȬServiceȱundȱaufȱdieȱentferntenȱSoftwarebausteine.ȱOftȱ möchteȱ manȱ aberȱ seineȱ Clientsystemeȱ vollständigȱ vonȱ derȱ Servertechnologieȱ entȬ koppeln,ȱumȱzuȱvermeiden,ȱdassȱsichȱeineȱserverseitigeȱTechnologieȬVeränderungȱ aufȱdieȱClientprogrammeȱauswirkt.ȱInȱdiesemȱFallȱistȱesȱsinnvoll,ȱeineȱSchnittstelleȱ zuȱ denȱ Serversystemenȱ zuȱ schaffen,ȱ dieȱ weitgehendȱ technologieunabhängigȱ ist.ȱ Hierzuȱmussȱman,ȱwieȱinȱAbbildungȱ5Ȭ41ȱskizziert,ȱaufȱderȱClientseiteȱeinenȱSoftȬ warebausteinȱ ergänzen,ȱ derȱ dieseȱ TechnologieȬKapselungȱ vornimmt.ȱ Dieserȱ BauȬ steinȱübernimmtȱdannȱimplizitȱdenȱZugriffȱaufȱdenȱNamingȬServiceȱundȱggf.ȱauchȱ aufȱ weitereȱ Basisdiensteȱ undȱ aufȱ dieȱ Serverdienste.ȱ Inȱ Richtungȱ derȱ restlichenȱ ClientbausteineȱstelltȱerȱeineȱtechnologieneutraleȱSchnittstelleȱzurȱVerfügung.ȱ Schaffung von Technologieunabhängigkeit
Clientklasse
Kapselung
Technologieabhängiges Interface: EJB, CORBA, RMI,…
Proxy
Serversystem NamingSystem ȱ
Abbildungȱ5Ȭ41:ȱKapselungȱeinesȱServersystemsȱ
Derȱ Kapselungsgedankeȱ kannȱ fürȱ alleȱ Kommunikationsparadigmenȱ verwendetȱ werden.ȱGelingtȱdies,ȱsoȱmussȱnichtȱbeiȱjederȱTechnologieȬÄnderungȱ(z.B.ȱvonȱJaȬ vaȬRMIȱnachȱEJBȱoderȱvomȱJMSȱaufȱeinȱnichtȱJMSȬkonformesȱMessagingȬProdukt)ȱ inȱdieȱClientbausteineȱeingegriffenȱwerden,ȱesȱgenügtȱvielmehrȱdieȱAnpassungȱdesȱ Kapselungsbausteins.ȱAllerdingsȱmussȱbeachtetȱwerden,ȱdassȱdieseȱArtȱderȱKapseȬ
ȱ
369
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ lungȱeineȱerneuteȱSchicht,ȱdieȱgepflegtȱwerdenȱmuss,ȱbedeutet.ȱDieȱKapselungȱistȱ alsoȱvorȱallemȱbeiȱgrößerenȱAnwendungenȱsinnvoll,ȱdieȱdurchausȱeineȱoderȱmehȬ rereȱ Technologieveränderungenȱ überdauernȱ müssen.ȱ Einȱ Nachteilȱ dieserȱ VorgeȬ hensweiseȱ istȱ sicherlichȱ dieȱ schlechtereȱ Leistung,ȱ dieȱ sichȱ aufgrundȱ derȱ zusätzliȬ chenȱSchichtȱergibt.ȱ Ausȱ demȱ SoftwareȬEngineeringȱ sindȱ fürȱ dieseȱ Artȱ vonȱ Kapselungȱ einigeȱ VorgeȬ hensweisenȱ bekannt.ȱWirȱwollenȱunsȱimȱ Weiterenȱ emplarischȱ dieȱ Vorschlägeȱausȱ demȱJEEȬPatternkatalogȱspeziellȱfürȱJavaȬlastigeȱAnwendungenȱnäherȱansehen.ȱDieȱ Grundkonzepteȱsindȱsprachunabhängig.ȱ
5.7.2
Fallbeispiel: JEE-Patterns für die Serverkapselung
AusȱdemȱJEEȬUmfeldȱsindȱauchȱeinigeȱPatternsȱhervorgegangen,ȱdieȱProblemeȱderȱ verteiltenȱ Entwicklungȱ mitȱ Javaȱ adressieren.ȱ Insbesondereȱ folgendeȱ Patternsȱ ausȱ demȱ JEEȬPatternȬKatalog,ȱ dieȱ eineȱ Trennungȱ vonȱ PräsentationsȬȱ undȱ BusinessȬ Logikȱunterstützenȱsollen,ȱwerdenȱwirȱhierȱkurzȱdiskutierenȱ(WWWȬ016):ȱ – Dasȱ ServiceȬLocatorȬPatternȱ zentralisiertȱ z.B.ȱ dasȱ Auffindenȱ vonȱ ObjektrefeȬ renzenȱ inȱ verteiltenȱ JavaȬUmgebungenȱ undȱ versuchtȱ dabeiȱ HerstellerȬ spezifischeȱ Aspekteȱ desȱ sog.ȱ „LookupȬCodes“ȱ desȱ jeweiligenȱ NamingȬSerȬ viceȱzuȱkapseln.ȱ – DasȱSessionȬFacadeȬPatternȱdefiniertȱalsȱspezielleȱFormȱdesȱFassadenȬPatternsȱ einenȱ höherwertigenȱ Bausteinȱ einerȱ Geschäftslogik.ȱ Mitȱ demȱ Patternȱ kannȱ manȱfürȱClientsȱeinȱeinzigesȱInterfaceȱfürȱGeschäftslogikȬBausteineȱfestlegen.ȱ – Dasȱ BusinessȬDelegateȬPatternȱ entkoppeltȱ einenȱ GeschäftslogikȬBausteinȱ vonȱ derȱtechnischenȱImplementierung.ȱDamitȱkannȱderȱLookupȬCodeȱundȱauchȱ dasȱ ExceptionȬHandlingȱ undȱ weitereȱ technischeȱ Detailsȱ vorȱ demȱ Nutzerȱ verborgenȱ werden.ȱ Dieȱ technischeȱ Serverzugriffsschnittstelleȱ wirdȱ alsoȱ geȬ kapselt.ȱ InȱAbbildungȱ5Ȭ42ȱsindȱdieȱZusammenhängeȱdargestellt.ȱAufȱderȱClientseiteȱwerȬ denȱfürȱdenȱZugriffȱaufȱdieȱServerseiteȱdasȱBusinessȬDelegateȬPatternȱundȱdasȱSerȬ viceȬLocatorȬPatternȱ eingesetzt.ȱ Dieseȱ werdenȱ vonȱ denȱ lokalenȱ Clientbausteinenȱ (imȱ Bildȱ alsȱ Frontȱ Controllerȱ bezeichnet)ȱ verwendet.ȱ Aufȱ derȱ Serverseiteȱ werdenȱ dieȱDiensteȱüberȱeineȱFassade,ȱdieȱbeiȱJEEȱalsȱSessionȬFassadeȱbezeichnetȱwird,ȱgeȬ kapselt.ȱ Dieȱ Technolologieabhängigkeitȱ wirdȱ damitȱ imȱ Clientȱ weitgehendȱ elimiȬ niert.ȱ
370 ȱ
Clientzugriffsarchitekturenȱ
Clientseite
Client-Klasse Front Controller Business Delegate
Service Locator
Session Fassade Bean 1
Bean n
Name Service ...
Serverseite
Abbildungȱ5Ȭ42:ȱJEEȬPatternsȱzurȱKapselungȱdesȱServersȱ
Esȱistȱauchȱmöglich,ȱdassȱdasȱBusinessȬDelegateȬPatternȱdenȱZugangȱzumȱNamingȬ Serviceȱkapselt.ȱDieseȱVarianteȱistȱinȱAbbildungȱ5Ȭ43ȱdargestellt.ȱ Derȱ Einsatzȱ dieserȱ Patternsȱ sollteȱ wohlȱ bedachtȱ werden,ȱ daȱ erȱ einenȱ nichtȱ unbeȬ trächtlichenȱ Zusatzaufwandȱ fürȱ dieȱ Pflegeȱ derȱ Zugriffsschichtȱ nachȱ sichȱ zieht.ȱ Wennȱ manȱ bedenkt,ȱ dassȱ größereȱ Anwendungenȱ mehrereȱ Hundertȱ oderȱ sogarȱ Tausendȱ Geschäftsmethodenȱ nutzen,ȱ soȱ bedeutetȱ eineȱ Anpassungȱ anȱ derȱ ServerȬ schnittstelleȱoftȱauchȱeineȱAnpassungȱamȱBusinessȬDelegateȬInterface.ȱDieserȱAufȬ wandȱ mussȱ imȱ Vergleichȱ zuȱ denȱ Technologieänderungenȱ vertretbarȱ sein,ȱ sonstȱ bringtȱ dasȱ Einziehenȱ derȱ Zugriffsschichtȱ mehrȱ Aufwandȱ alsȱ erȱ vermeidet.ȱ Dasȱ PrinzipȱdesȱDesignȬforȬChangeȱmussȱfürȱdieȱArchitekturȱeineȱgroßeȱRolleȱspielen,ȱ dannȱlohntȱsichȱmöglicherweiseȱderȱEinsatzȱderȱPatterns.ȱ Anȱ derȱ BusinessȬDelegateȬSchnittstelleȱ kannȱ manȱ z.B.ȱ auchȱ gleichȱ höherwertigeȱ Diensteȱ anbieten,ȱ indemȱ manȱ eineȱ Kompositionȱ vornimmt.ȱ Manȱ kannȱ einȱ BusiȬ nessȬDelegateȱauchȱmitȱzusätzlichenȱFunktionenȱwieȱetwaȱdasȱLoggingȱderȱausgeȬ hendenȱ Serviceaufrufeȱ zumȱ Zweckeȱ derȱ Fehlerdiagnoseȱ anreichern.ȱ Beiȱ kleinerenȱ Anwendungenȱ kannȱ manȱ aberȱ auchȱ aufȱ dieȱ Programmierungȱ einerȱ clientseitigenȱ Zugriffsschichtȱverzichten.ȱ Client-Klasse
benutzt
BusinessDelegate benutzt
ServiceLocator
benutzt
SessionFassade
erzeugt
löst auf
NamingService
ȱ Abbildungȱ5Ȭ43:ȱEinsatzȱvonȱBusinessȬDelegateȱausȱ(WWWȬ016)ȱ
ȱ
371
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ
5.8 Web-Architekturen InȱvielenȱbetrieblichenȱAnwendungenȱsetztȱmanȱheuteȱdasȱWWWȱein.ȱDerȱZugriffȱ aufȱDiensteȱüberȱdenȱBrowserȱalsȱPräsentationswerkzeugȱistȱohneȱweitereȱInstallaȬ tionȱ einerȱ Clientsoftwareȱ fürȱ vieleȱ Anwendungenȱ sogarȱ unbedingtȱ erforderlich.ȱ DenktȱmanȱbeispielsweiseȱanȱOnlineȬShopsysteme,ȱsoȱistȱesȱheuteȱüblich,ȱdassȱmanȱ alsȱBenutzerschnittstelleȱeinenȱBrowserȱnutzt.ȱ
5.8.1
Grundlegendes
WebȬArchitekturenȱ sindȱ imȱ Prinzipȱ ClientȬServerȬArchitekuren,ȱ beiȱ denenȱ dieȱ Clientseiteȱüblicherweiseȱetwasȱandersȱkonstruiertȱwird,ȱalsȱbeiȱklassischenȱClientȬ ServerȬAnwendungen.ȱ Fürȱ dieȱ Entwicklungȱ derȱ ClientȬAnwendungenȱ benötigtȱ manȱspezielleȱProgrammiertechniken,ȱdieȱauchȱalsȱWebtechnikenȱbezeichnetȱwerȬ den.ȱHierzuȱgehörenȱCGIȱ(CommonȱGatewayȱInterface),ȱJavaȬTechnikenȱwieȱServȬ letsȱ undȱ Javaȱ Serverȱ Pagesȱ (JSP),ȱ ASP.NETȱ (Activeȱ Serverȱ Pages,ȱ Microsoft),ȱ JaȬ vascript,ȱAJAXȱ(AsynchronousȱJavaScriptȱandȱXML)ȱundȱPHPȱ(PersonalȱHomeȱPaȬ ge,ȱ offeneȱ Lösung),ȱ dieȱ zumȱ Teilȱ serverseitigȱ undȱ zumȱ Teilȱ clientseitigȱ genutztȱ werden.ȱȱ Präsentation (Browser) Javascript
Präsentation (Applet)
HTML, XML
AJAX Engine
HTTP, HTTPS
Webserver, Webcontainer
Clientbaustein 1
Clientbaustein n Clientbaustein 2 Serverseite Session Fassade Serverbaustein 1
...
Business-Logik Serverbaustein n
Datenbank-Logik
ȱ Abbildungȱ5Ȭ44:ȱTypischeȱBausteineȱeinerȱWebȬArchitekturȱ
Derȱ Clientȱ läuftȱ üblicherweiseȱ aufȱ derȱ Serverseiteȱ undȱ zwarȱ inȱ einemȱ Webserverȱ oderȱ inȱ einemȱ WebȬContainer.ȱ Bevorȱ eineȱ Ausgabeȱ anȱ denȱ Browserȱ angestoßenȱ wird,ȱ istȱ eineȱ Generierungȱ vonȱ HTMLȬȱ oderȱ XMLȬCodeȱ erforderlich,ȱ daȱ dieseȱ MarkupȬSprachenȱvonȱdenȱBrowsernȱinterpretiertȱundȱdargestelltȱwerden.ȱScriptsȱ
372 ȱ
WebȬArchitekturenȱ (z.B.ȱJavascripts),ȱdieȱimȱBrowserȱablaufenȱsollen,ȱwerdenȱebenfallsȱinȱdenȱHTMLȬ Codeȱ eingebracht.ȱ Derȱ Browserȱ stelltȱ alsoȱ nurȱ dieȱ Präsentationslogikȱ zurȱ VerfüȬ gung.ȱ Browserȱ undȱ Webserverȱ kommunizierenȱ überȱ dieȱ Protokolleȱ HTTPȱ bzw.ȱ HTTPSȱ(Mandlȱ2008b).ȱDieȱKommunikationȱzwischenȱBrowserȱundȱServerseiteȱerȬ folgtȱüblicherweiseȱsynchron,ȱbeiȱEinsatzȱvonȱAJAXȬTechnologienȱistȱauchȱeineȱausȱ SichtȱdesȱBenutzersȱasynchroneȱAusführungȱdurchȱeineȱAJAXȬEngineȱmöglich.ȱDieȱ Kommunikationȱbleibtȱaberȱweiterhinȱsynchron.ȱDieȱAsynchronitätȱwirdȱdurchȱdieȱ paralleleȱAusführungȱvonȱHTTPȬRequestsȱ(sog.ȱXMLHttpRequests)ȱimȱBrowserȱinȱ eigenenȱThreadsȱerreicht.ȱDieȱMöglichkeitenȱderȱEinziehungȱeinerȱBusinessȬLogikȱ entsprechenȱansonstenȱdenȱüblichenȱSchichtenarchitekturansätzen.ȱȱ Dieȱ Clientbausteineȱ laufenȱ imȱ Webserverȱ bzw.ȱ inȱ einerȱ speziellenȱ AblaufumgeȬ bungȱnamensȱWebȬContainerȱab.ȱEinȱWebȬContainerȱistȱeineȱSoftwareplattform,ȱinȱ derȱ Servletsȱ ablaufen.ȱ Einȱ typischerȱ WebȬContainerȱ istȱ Apacheȱ Tomcatȱ (WWWȬ 007).ȱInȱAbbildungȱ5Ȭ44ȱistȱeineȱtypischeȱWebȬArchitekturȱskizziert.ȱWieȱmanȱsieht,ȱ istȱnebenȱeinerȱBrowserȬbasiertenȱPräsentationȱauchȱeineȱandereȱMöglichkeitȱgegeȬ ben.ȱSunȱMicrosystemsȱentwickelteȱhierzuȱdieȱJavaȬTechnologieȱApplets.ȱMitȱdieserȱ Technologieȱ lassenȱ sichȱ klassischeȱ JavaȬAnwendungenȱ inȱ eineȱ gesicherteȱ UmgeȬ bungȱ imȱ Browserȱ laden.ȱ Dieȱ Kommunikationȱ mitȱ demȱ Serverȱ wirdȱ meistȱ überȱ http/HTTPSȱ„getunnelt“.ȱFürȱgrößereȱAnwendungen,ȱdieȱdasȱInternetȱnutzen,ȱhatȱ sichȱdieseȱTechnologieȱaberȱnochȱnichtȱverbreitet.ȱ WirȱwollenȱunsȱnunȱalsȱFallstudieȱeinenȱeherȱtechnischȱorientiertenȱVorschlagȱfürȱ eineȱ moderneȱ webbasierteȱ Schichtenarchitekturȱ imȱ verteiltenȱ Umfeldȱ anschauen:ȱ DenȱJEEȬArchitekturvorschlagȱvonȱSunȱMicrosystems.ȱ
5.8.2
Fallbeispiel: JEE-Architektur
DieȱJEEȬSpezifikationȱteiltȱihrenȱArchitekturvorschlagȱfürȱverteilteȱAnwendungenȱ inȱ vierȱ Schichtenȱ (Tiers)ȱ ein,ȱ undȱ berücksichtigtȱ dabieȱ dieȱ WebȬAnbindung.ȱ Esȱ wirdȱalsoȱgrundsätzlichȱ vonȱ Anwendungen,ȱdieȱ (auch)ȱüberȱ einenȱ WebȬbasiertenȱ Zugangȱverfügen,ȱausgegangenȱ(sieheȱAbbildungȱ5Ȭ45):ȱ – ClientȬTier:ȱ Dieseȱ Schichtȱ entsprichtȱ derȱ Präsentationsschicht,ȱ dieȱ alsȱ sog.ȱ „native“ȱClientȱoderȱalsȱBrowserȬbasierterȱClientȱimplementiertȱseinȱkann.ȱ – WebȬTier:ȱ WebȬFrontendȱ zurȱ Steuerungȱ derȱ Präsentation.ȱ Dieseȱ Schichtȱ nimmtȱRequestsȱderȱClientsȱentgegenȱundȱbearbeitetȱsie.ȱAlsȱErgebnisȱbautȱ sieȱ inȱ derȱ Regelȱ dynamischȱ eineȱ HTMLȬSeiteȱ aufȱ undȱ sendetȱ dieseȱ anȱ denȱ Client.ȱ – BusinessȬTier:ȱDieseȱSchichtȱdientȱderȱBereitstellungȱderȱBusinessȬLogik,ȱalȬ soȱdesȱAnwendungskerns.ȱ – EISȬTier:ȱ Dieseȱ Schichtȱ dientȱ demȱ Zugriffȱ aufȱ Datenhaltungssystemeȱ oderȱ aufȱsonstigeȱFremdsystemeȱ(EISȱstehtȱfürȱEnterpriseȱInformationȱSystem).ȱ
ȱ
373
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ Client Tier Web Tier Business Tier EIS Tier
ȱ
Abbildungȱ5Ȭ45:ȱJEEȬSchichtenarchitekturvorschlagȱ
EineȱVerfeinerungȱbildetȱdieȱverfügbarenȱJEEȬTechnologienȱaufȱdieȱJEEȬSchichtenȱ ab.ȱImȱJEEȬVorschlagȱwerdenȱmehrereȱJavaȬbasierteȱTechnologienȱvorgeschlagen.ȱȱ PhysischȱkönnenȱdieȱWebȬȱundȱdieȱBusinessȬTierȱinȱeinemȱJEEȬServerȱunterstütztȱ werden.ȱDieȱEISȱTierȱkannȱsehrȱvielfältigȱsein,ȱwobeiȱesȱsichȱmeistensȱumȱeinȱDaȬ tenbankmanagementsystemȱhandelt.ȱEsȱseiȱaberȱnochmalsȱerwähnt,ȱdassȱesȱsichȱimȱ ClientȬServerȬModellȱumȱeinȱSoftwarekonzeptȱhandelt.ȱ Web Tier
Client Tier
Web Browser, dynamische HTML Seiten, Applet, JavaBean
Business Tier
EIS Tier
Java Server Pages / Servlets JavaBean
EJB
Datenbanken und EISSysteme
Applikation Client oder JavaBean
JEE-Server
ȱ Abbildungȱ5Ȭ46:ȱJEEȬArchitekturȱundȱJEEȬTechnologienȱ
DieȱArchitekturȱeinerȱJEEȬAnwendungȱsiehtȱunterȱEinbeziehungȱdieserȱTechnoloȬ gienȱwieȱfolgtȱausȱ(Abbildungȱ5Ȭ46):ȱ – ClientȱTier:ȱ Clientseitigȱ sindȱ entwederȱ reineȱ JavaȬBausteineȱ meistȱ mitȱ grafiȬ scherȱOberflächeȱoderȱaberȱWebȬbasierteȱClientsȱvorzufinden,ȱdieȱdirektȱimȱ
374 ȱ
WebȬArchitekturenȱ WebȬBroswserȱ ablaufen.ȱ Dieȱ Clientsoftwareȱ wirdȱ beiȱ Bedarfȱ imȱ Browserȱ selbstȱzumȱAblaufȱ gebrachtȱ (Applets)ȱoderȱ esȱ werdenȱ HTMLȬSeitenȱ ausgeȬ geben,ȱ dieȱ entwederȱ statischȱ sindȱ oderȱ dynamischȱ inȱ derȱ Webȱ Tierȱ aufgeȬ bautȱwerden.ȱȱ – Webȱ Tier:ȱ Dieȱ Erzeugungȱ derȱ HTMLȬSeitenȱ findetȱ imȱ Webȱ Tierȱ (inȱ einemȱ WebȬContainer)ȱ statt,ȱ wobeiȱ unterȱ Nutzungȱ desȱ MVCȬModellsȱ JavaȬ BausteineȱaufȱBasisȱderȱServletsȬTechnologieȱzumȱEinsatzȱkommen.ȱWeiterȬ hinȱ werdenȱ dieȱ ModelȬInformationenȱ inȱ sog.ȱ Javaȱ Beansȱ (spezielleȱ JavaȬ Klassen)ȱ verwaltet.ȱ Viewsȱ werdenȱ durchȱ Javaȱ Serverȱ Pagesȱ (JSP)ȱ repräsenȬ tiert.ȱ – BusinessȱTier:ȱFürȱdieȱBusinessȬLogikȱwirdȱdieȱEJBȬTechnologie,ȱeineȱserverȬ seitigeȱKomponententechnologie,ȱdieȱinȱKapitelȱ2ȱerläutertȱwurde,ȱbereitgeȬ stellt.ȱ – EISȱTier:ȱ Hierȱ sindȱ dieȱ klassischenȱ Datenbankenȱ undȱ sonstigeȱ ZugangsmeȬ chanismenȱaufȱUnternehmensdatenȱzugeordnet.ȱDatenbankzugriffeȱerfolgenȱ entwederȱdirektȱüberȱEJBȱ(containerȬmanaged)ȱoderȱwerdenȱmitȱJDBCȱ(Javaȱ Databaseȱ Connection)ȱ aufȱ SQLȬBasisȱ ausprogrammiert.ȱ JEEȱ stelltȱ auchȱ einȱ speziellesȱ APIȱ fürȱ dieȱ Implementierungȱ vonȱ Konnektorenȱ zumȱ Zugriffȱ aufȱ Drittsystemeȱbereit.ȱ DieȱKommunikationȱzwischenȱdenȱSchichtenȱistȱüberȱstandardisierteȱKommunikaȬ tionsprotokolleȱ(RMI,ȱHTTP,ȱSOAP)ȱmöglich.ȱ AlsȱBeispieleȱfürȱhäufigȱverwendeteȱWebtechnologienȱsollenȱnochȱServletsȱundȱJaȬ vaȱServerȱPages,ȱdieȱbeideȱTechnologienȱderȱJEEȬArchitekturȱsind,ȱbetrachtetȱwerȬ den.ȱ
5.8.3
Servlets und Java Server Pages
JavaȱServerȱPagesȱ(JSP)ȱundȱServletsȱsindȱSpezifikationenȱausȱderȱJEEȱvonȱSunȱMicȬ rosystemsȱundȱspeziellȱfürȱWebanwendungenȱentwickelt.ȱHeuteȱenthältȱjederȱJavaȬ basierteȱ ApplicationȬServerȱ einenȱ WebȬContainer,ȱ derȱ auchȱ alsȱ ServletȬContainerȱ bezeichnetȱwird.ȱEinȱServletȬContainerȱstelltȱauchȱeineȱUmgebungȱfürȱdieȱparalleleȱ Abwicklungȱ vonȱ Requestsȱ zurȱ Verfügung.ȱ Inȱ derȱ Regelȱ wirdȱ diesȱ überȱ einenȱ ThreadȬPoolȱermöglicht,ȱderȱvomȱServletȬContainerȱverwaltetȱwird.ȱJedemȱRequestȱ wirdȱeinȱThreadȱzurȱBearbeitungȱzugewiesen,ȱderȱamȱEndeȱderȱBearbeitungȱwieȬ derȱfreigegebenȱwird.ȱ WieȱinȱAbbildungȱ5Ȭ47ȱdargestellt,ȱistȱderȱServletȬContainerȱundȱauchȱeineȱJVMȱimȱ WebȬServerȱ integriert,ȱ wobeiȱ dieȱ Interfacesȱ definiertȱ sind.ȱ HTTPȬRequests,ȱ dieȱ Servletsȱ ansprechen,ȱ werdenȱ vomȱ WebȬServerȱ anȱ denȱ ServletȬContainerȱ weitergeȬ reicht.ȱ ServletȬContainerȱ könnenȱ auchȱ „standȬalone“ȱ laufen.ȱ Dieȱ Verbindungȱ mitȱ einemȱWebȬServerȱistȱvorȱallemȱdannȱsinnvoll,ȱwennȱnebenȱServletsȱauchȱnochȱstaȬ tischeȱ HTMLȬSeitenȱ benötigtȱ werden.ȱ Letztereȱ werdenȱ dannȱ imȱ WebȬServerȱ verȬ waltet.ȱ Derȱ amȱ meistenȱ verwendeteȱ ServletȬContainerȱ istȱ Apacheȱ Tomcatȱ (WWWȬ 007),ȱderȱheuteȱinȱmehrerenȱApplicationȬServerȬProduktenȱintegriertȱist.ȱ
ȱ
375
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ DieȱServletȬBasisklassenȱsindȱimȱJavaȱServletȱDevelopmentȱKitȱ(JSDK)ȱunterȱdenȱJavaȬ Packagesȱ javax.servlet,ȱ javax.servlet.httpȱ verfügbar.ȱ Servletsȱ sindȱ JavaȬProgramme,ȱ welcheȱdieȱSchnittstelleȱjavax.servlet.Servletȱimplementieren.ȱ ManȱkannȱeinȱServletȱentwederȱvonȱderȱKlasseȱGenericServletȱableitenȱoderȱvonȱderȱ etwasȱkomfortablerenȱKlasseȱHttpServlet.ȱBeiȱNutzungȱeinerȱAbleitungȱderȱKlasseȱ GenericServletȱmussȱdieȱMethodeȱserviceȱüberschriebenȱwerden.ȱDieȱMethodeȱserviȬ ceȱ wirdȱ vomȱ WebȬServerȱ beiȱ jedemȱ Requestȱ aufgerufen.ȱ Dieȱ Klasseȱ HTTPȬServletȱ enthältȱ zweiȱ Ereignisroutinenȱ mitȱ denȱ Namenȱ doGet,ȱ doPost,ȱ anȱ dieȱ vomȱ ServletȬ ContainerȱdieȱHTTPȬGetȬȱundȱȬPostȬRequestsȱmitȱallenȱEingabeparameternȱzurȱBeȬ arbeitungȱweitergeleitetȱwerden.ȱDieseȱMethodenȱwerdenȱvomȱProgrammiererȱüȬ berschrieben.ȱ Hierȱ wirdȱ derȱ Codeȱ zurȱ Abarbeitungȱ einesȱ Requestsȱ eingefügtȱ undȱ derȱ Programmiererȱ entscheidetȱ überȱ denȱ Aufbauȱ derȱ ResponseȬPDU.ȱ Auchȱ dieȱ MethodenȱinitȱundȱdestroyȱkönnenȱfürȱInitialisierungsȬȱundȱAufräumzweckeȱüberȬ schriebenȱwerden.ȱ WWW-Browser HTTP 1: Request(Parameter)
WWW-Server (httpd) z.B. Apache
Port 80 2: Response(HTML-Seite) Stellt HTMLSeite dar Servlet Container
Java Virtual Machine
ȱ Abbildungȱ5Ȭ47:ȱZusammenspielȱderȱWebȬKomponentenȱbeiȱServletsȱ
DerȱServletȬContainerȱstelltȱauchȱSchnittstellenȱfürȱdenȱZugriffȱaufȱRequestȬ,ȱResȬ ponseȬInformationen,ȱaufȱdenȱSessionkontextȱundȱweitereȱDatenȱzurȱVerfügung.ȱ Beispiel:ȱAbbildungȱ5Ȭ48ȱzeigtȱeinȱeinfachesȱKlassendiagrammȱfürȱeineȱeigeneȱServȬ
letȬKlasse,ȱ dieȱ hierȱ vonȱ GenericServletȱ abgeleitetȱ ist.ȱ GenericServletȱ implementiertȱ wiederumȱdasȱBasisȬInterfaceȱmitȱdemȱNamenȱServlet.ȱDerȱJavaȬCodeȱfürȱdasȱBeiȬ spielȱistȱnachfolgendȱetwasȱvereinfachtȱnotiert.ȱImȱBeispielȱwirdȱdieȱMethodeȱserviȬ ceȱüberschrieben.ȱDieȱParameterȱfürȱdieȱserviceȬMethodeȱsindȱeinȱRequestȬȱundȱeinȱ ResponseȬObjektȱ fürȱ denȱ aktuellȱ abzuarbeitendenȱ Request.ȱ Inȱ derȱ Methodeȱ wirdȱ einȱ Streamȱ eröffnet,ȱ derȱ bereitsȱ vomȱ ServletȬContainerȱ überȱ einȱ Objektȱ vomȱ Typȱ ServletResponseȱ zurȱ Ausgabeȱ derȱ Ergebnisseȱ bereitgestelltȱ wird.ȱ Inȱ diesenȱ Streamȱ wirdȱ nurȱ derȱ Textȱ „HelloȱWorld“ȱgeschrieben,ȱ derȱdannȱinȱeineȱHTTPȬResponseȬ PDUȱaufgenommenȱwird.ȱ package de.webapp.Examples.Servlet; import java.servlet.*; import java.io.IOException;
376 ȱ
WebȬArchitekturenȱ public class HelloWorld extends javax.servlet.GenericServlet { public void init(...) {...} public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { res.setContentType(“text/html”); ServletOutputStream out = res.getOutputStream(); out.println(“Hello World”); } public void destroy(...) {...} }
Einȱ Servletȱ durchläuftȱ dreiȱ Lebensabschnitte.ȱ Zunächstȱ wirdȱ eineȱ Initialisierungȱ durchȱAufrufȱderȱMethodeȱinitȱvorgenommenȱ(Konstruktion).ȱAnschließendȱbearȬ beitetȱesȱbeliebigȱvieleȱRequestsȱdurchȱAufrufȱderȱMethodeȱserviceȱundȱschließlichȱ wirdȱesȱdurchȱAufrufȱderȱMethodeȱdestroyȱwiederȱfreigegebenȱ(Destruktion).ȱ JedeȱServletȬInstanzȱbesitztȱgenauȱeinenȱKontext.ȱDerȱKontextȱenthältȱEigenschafȬ tenȱausȱderȱUmgebungȱundȱbietetȱumgebungsspezifischeȱDiensteȱan.ȱHierfürȱwirdȱ demȱ Servletȱ derȱ Zugriffȱ aufȱ einȱ KontextȬObjektȱ überȱ dasȱ Interfaceȱ ServletContextȱ ermöglicht.ȱ Servlet
init() service() destroy()
GenericServlet
init() service() destroy()
HelloWorld
init() service() destroy()
ȱ Abbildungȱ5Ȭ48:ȱHelloȬWorldȬServletȱimȱKlassenmodellȱ
JSPsȱ sindȱ prinzipiellȱ nurȱ eineȱ Erweiterungȱ vonȱ Servlets,ȱ dieȱ dieȱ HTMLȬAusgabeȬ Kodierungȱerleichtert.ȱBeiȱServletsȱwirdȱnämlichȱdieȱTrennungȱvonȱPräsentationsȬȱ undȱAnwendungslogikȱnochȱnichtȱsauberȱunterstützt.ȱDiesȱwirdȱdurchȱJSPȱbesserȱ gelöst.ȱDerȱAufbauȱeinerȱJSPȬSeiteȱistȱvergleichbarȱmitȱeinerȱHTMLȬSeite.ȱSieȱentȬ
ȱ
377
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ hältȱnebenȱHTMLȬCodeȱbeliebigȱvieleȱJSPȬAnweisungen.ȱEineȱJSPȱkannȱauchȱJavaȬ Codeteileȱenthalten,ȱdieȱmitȱHTMLȬCodingȱ(auchȱTemplateȬTextȱgenannt)ȱkombiȬ niertȱwerden.ȱDieȱTeileȱwerdenȱzurȱLaufzeitȱaneinandergereiht.ȱJavaȱServerȱPagesȱ sindȱ Servlets,ȱ dieȱ erstȱzurȱLaufzeitȱ erzeugtȱ werden.ȱImȱ Prinzipȱ kannȱ manȱ beiȱderȱ JSPȬTechnikȱ beliebigȱ vielȱ JavaȬCodeȱ einbindenȱ undȱ mitȱ HTMLȬCodeȱ undȱ JSPȬ ScriptȬElementenȱmischen.ȱȱ Beispiel:ȱ Ohneȱ aufȱ Detailsȱ einzugehen,ȱ wirdȱ hierȱ einȱ kleinesȱ JSPȬProgrammȱ zumȱ ErzeugenȱeinesȱArtikelsȱausȱunseremȱArtikelmanagerȬBeispielȱdargestellt.ȱDieȱJavaȱ ServerȱPageȱwirdȱdurchȱeinigeȱspezielleȱTagsȱalsȱsolcheȱgekennzeichnet.ȱAufgabeȱ dieserȱJSPȱistȱesȱlediglich,ȱvierȱParameterȱimȱDialogȱ(inȱeinerȱHTMLȬForm)ȱzuȱerȬ fassenȱundȱanȱeinȱServletȱmitȱdemȱNamenȱControllerServlet.doȱzurȱBearbeitungȱweiȬ terzuleiten.ȱBeiȱBetätigenȱdesȱButtonsȱ„Submit“ȱwirdȱeinȱHTTPȬPostȬRequestȱgeneȬ riertȱundȱanȱdenȱServletȬContainerȱgesendet.ȱ
Artikelverwaltung mit JSP
Artikelverwaltung mit JSP
Neuen Artikel anlegen
Bitte Artikeldaten eingeben:
Katalognummer Beschreibung Warengruppe Preis(Euro)
378 ȱ
5.10ȱȱÜbungsaufgabenȱ
5.9 Resümee zur Architekturbetrachtung DiesesȱletzteȱKapitelȱsollteȱeinenȱÜberblickȱüberȱgrundlegendeȱAspekteȱvonȱArchiȬ tekturenȱ fürȱ dieȱ Entwicklungȱ verteilterȱ betrieblicherȱ Informationssystemeȱ geben.ȱ ImȱFokusȱderȱBetrachtungȱstandȱdieȱITȬArchitektur.ȱBeiȱderartigenȱAnwendungenȱ gibtȱ esȱ oftȱ eineȱ umfangreicheȱ ȱ Datenhaltung,ȱ dieȱ imȱ Sinneȱ serviceorientierterȱ ArȬ chitekturenȱüberȱDiensteschnittstellenȱzugreifbarȱist.ȱDaherȱwurdenȱauchȱMöglichȬ keitenȱ fürȱ Datenzugriffsarchitekturenȱ betrachtet,ȱ dieȱ beiȱ einerȱ ClientȬServerȬSichtȱ inȱderȱRegelȱserverseitigȱimplementiertȱwird.ȱȱ Auchȱ derȱ Zugangȱ zuȱ denȱ verteiltenȱ Dienstenȱ kannȱ ausȱ Sichtȱ desȱ Clientsȱ unterȬ schiedlichȱ gestaltetȱ werden.ȱ Möchteȱ manȱ eineȱ möglichstȱ starkeȱ TechnologieunabȬ hängigkeit,ȱ soȱ wirdȱ derȱ Einsatzȱ bestimmterȱ Patternsȱ wieȱ demȱ BusinessȬDelegateȬ Patternȱ empfohlen.ȱ Eineȱ grundlegendeȱ Einführungȱ inȱ dieseȱ Patternsȱ wurdeȱ ebenȬ fallsȱ inȱdiesemȱ Kapitelȱ gegeben.ȱ AuchȱWebȬArchitekturenȱ wurdenȱ kurzȱskizziert.ȱ Hierȱ benötigtȱ manȱ zwarȱ einigeȱ spezielleȱ Programmiertechnikenȱ (Webtechniken)ȱ fürȱdieȱEntwicklungȱderȱClientseite,ȱallerdingsȱsindȱWebȬArchitekturenȱimȱPrinzipȱ klassischeȱ ClientȬServerȬArchitekturen,ȱ beiȱ denenȱ derȱ Clientȱ inȱ einemȱ Webserverȱ zumȱAblaufȱkommt.ȱDieȱMöglichkeitenȱderȱEinziehungȱeinerȱBusinessȬLogikȱentȬ sprechenȱ denȱ üblichenȱ Schichtenarchitekturansätzen.ȱ Inȱ unsererȱ Übersichtȱ sollteȱ eineȱdurchgängigeȱSichtȱaufȱalleȱverteiltenȱBausteineȱtypischerȱbetrieblicherȱInforȬ mationssystemeȱgegebenȱwerden.ȱȱ NebenȱeinerȱEinordnungȱinȱArchitekturstileȱwurdenȱauchȱeinigeȱQualitätskriterienȱ fürȱArchitekturenȱerläutert.ȱAuchȱdieȱheuteȱinȱbetrieblichenȱInformationssystemenȱ nochȱ etwasȱ exotischenȱ Architekturansätzeȱ wieȱ PeerȬtoȬPeerȱ undȱ Gridȱ wurdenȱ einȬ geordnetȱundȱbeispielhaftȱbeschrieben.ȱSieȱsindȱheuteȱfürȱbetrieblicheȱAnwendunȬ genȱnochȱnichtȱsoȱverbreitet,ȱaberȱmanȱsollteȱdieȱWeiterentwicklungȱbeobachten.ȱ Inȱ Zukunftȱ wirdȱ manȱ wohlȱ zunächstȱ großesȱ Augenmerkȱ aufȱ dieȱ WeiterentwickȬ lungȱ desȱ SOAȬGrundgedankensȱ legen.ȱ Aberȱ auchȱ eineȱ automatisiertereȱ EntwickȬ lungȱvonȱArchitekturenȱistȱseitȱeinigerȱZeitȱinȱDiskussion.ȱHierȱhandeltȱesȱsichȱumȱ dieȱ ModelȱDrivenȱArchitectureȱ(MDA.ȱ Dieseȱ nochȱ etwasȱ theoretischeȱ HerangehensȬ weiseȱanȱdieȱEntwicklungȱvonȱSoftwaresystemenȱwirdȱvonȱderȱOMGȱ(ObjectȱMaȬ nagementȱ Group)ȱ vorangetrieben.ȱ Weitereȱ Ausführungenȱ hierzuȱ sindȱ überȱ (WWWȬ009)ȱzuȱfinden.ȱ
5.10 Übungsaufgaben 1. 2. 3. 4.
NennenȱSieȱQualitätskriterienȱzuȱBewertungȱeinerȱSoftwareȬArchitektur!ȱ WasȱistȱeinȱdatenzentrierterȱArchitekturstil?ȱ Wasȱverstehtȱmanȱunterȱeinemȱ„unabhängigenȱKomponentenstil“?ȱ Welchenȱ Vorteilȱ kannȱ eineȱ PeerȬtoȬPeerȬArchitekturȱ imȱ Vergleichȱ zuȱ einerȱ klassischenȱClientȬServerȬArchitekturȱbringen?ȱ
ȱ
379
5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ 5. 6.
7.
8. 9. 10. 11. 12. 13.
Nennenȱ Sieȱ VorȬȱ undȱ Nachteileȱ einerȱ dreischichtigenȱ imȱ Vergleichȱ zuȱ einerȱ zweischichtigenȱClientȬServerȬArchitektur!ȱ IstȱesȱinȱeinerȱdreischichtigenȱClientȬServerȬAnwendungȱmöglich,ȱdieȱTransakȬ tionsklammerungȱ imȱ Clientprogrammȱ zuȱ hinterlegen,ȱ wennȱ dieȱ Serverȱ zuȬ standslosȱarbeiten?ȱErläuternȱSieȱIhreȱEntscheidung!ȱ Wieȱ würdenȱ Sieȱ eineȱ Transaktionȱ inȱ einerȱ mehrschichtigenȱ ClientȬServerȬAnȬ wendungȱ programmieren,ȱ wennȱ alleȱ Datenbankzugriffeȱ überȱ Serverdiensteȱ abgewickeltȱwerdenȱundȱdieȱTransaktionȱmehrereȱServerȱnutzenȱmuss?ȱ Wasȱ sindȱ applikationsspezifischeȱ Bausteineȱ undȱ wasȱ sindȱ generischeȱ SoftȬ warebausteine?ȱNennenȱSieȱeinigeȱBeispiele!ȱ ErläuternȱSieȱdasȱDAOȬPatternȱinȱVerbindungȱmitȱdemȱDTOȬPattern.ȱ WozuȱbenötigtȱmanȱdasȱBusinessȬDelegateȬPattern?ȱ DiskutierenȱSieȱdieȱAuswirkungenȱeinerȱORMȬPersistenzschichtȱȱaufȱdieȱLeisȬ tungsfähigkeitȱdesȱDatenzugriffs.ȱ WelcheȱAufgabeȱhatȱderȱEntityȬManagerȱinȱderȱJavaȱPersistenceȱAPI?ȱ WasȱistȱeinȱPersistenzkontextȱimȱSinneȱderȱJavaȱPersistenceȱAPI?ȱ
380 ȱ
6 Schlussbemerkung Fürȱ eineȱ guteȱ Architekturȱ undȱ einȱ gutesȱ Designȱ einesȱ komplexenȱ verteiltenȱ SysȬ temsȱbenötigtȱmanȱeinȱbreitesȱITȬWissenȱundȱvielȱErfahrung.ȱEinȱguterȱSoftwarearȬ chitektȱwirdȱmanȱerstȱdurchȱdasȱÜbenȱinȱkonkretenȱProjekten.ȱDiesesȱȱBuchȱsollteȱ demȱStudierendenȱgrundlegendeȱKenntnisseȱfürȱdenȱEntwurfȱundȱdieȱImplemenȬ tierungȱvonȱverteiltenȱSystemenȱundȱspeziellȱvonȱverteiltenȱbetrieblichenȱInformaȬ tionssystemenȱ vermitteln.ȱ Derȱ Studierendeȱ sollteȱ beimȱ Lesenȱ desȱ Buchesȱ einenȱ EinblickȱinȱaktuelleȱundȱauchȱhistorischeȱThemenbereicheȱverteilterȱSystemeȱerhalȬ tenȱundȱwichtigeȱpraktischeȱGesichtspunkteȱvermitteltȱbekommen.ȱEsȱwurdeȱverȬ sucht,ȱnebenȱderȱTechnikȱimmerȱauchȱȬȱsoweitȱmöglichȱȬȱdenȱBlickȱfürȱdasȱMachbaȬ reȱzuȱentwickeln.ȱ InȱdiesemȱBuchȱwurdenȱwichtigeȱPrinzipien,ȱKonzepte,ȱModelle,ȱTechniken,ȱTechȬ nologienȱ undȱ Plattformenȱ verteilterȱ Systeme,ȱ derenȱ Entwicklungȱ undȱ derenȱ NutȬ zungȱvorgestellt.ȱDieȱSchwerpunkteȱderȱBetrachtungȱlagenȱbeiȱverteiltenȱObjekten,ȱ verteiltenȱ Transaktionen,ȱ verteiltenȱ Komponentenȱ undȱ beiȱ serviceorientiertenȱ ArȬ chitekturenȱ (imȱ speziellenȱ Webservicesȱ alsȱ ersterȱ konkreterȱ ImplementierungsȬ variante)ȱundȱzwarȱimmerȱmitȱdemȱHintergrundȱeinerȱgutenȱArchitektur.ȱ VerteilteȱAnwendungssystemeȱspielenȱimȱbetrieblichenȱUmfeldȱeineȱimmerȱgrößeȬ reȱRolleȱundȱesȱistȱnichtȱabzusehen,ȱdassȱsichȱdiesȱinȱnächsterȱZeitȱändert.ȱImȱGeȬ genteil,ȱ derȱ Trendȱ scheintȱ sichȱ fortzusetzen,ȱ wenngleichȱ manȱ sichȱ auchȱ hierȱ überȱ dieȱBegrenzungȱderȱKomplexitätȱGedankenȱmachenȱmussȱundȱauchȱmacht.ȱȱ Dieȱ Technologienȱ fürȱ verteilteȱ Systemeȱ undȱ derenȱ Anwendungȱ entwickelnȱ sichȱ weiterhinȱ rasant.ȱAktuellȱentwickeltȱ manȱinȱderȱ Praxisȱ mittlerweileȱ vieleȱ AnwenȬ dungssystemeȱ aufȱ derȱ Basisȱ derȱ Komponententechnologieȱ (JEE/EJB,ȱ aberȱ auchȱ.NETȱ3).ȱDieȱStandardsȱundȱdieȱProdukteȱsindȱaberȱnochȱlangeȱnichtȱausgeȬ reift.ȱSieȱwerdenȱständigȱweiterentwickelt,ȱwasȱunschwerȱanȱderȱVersionsplanungȱ beiȱEJBȱundȱbeiȱMicrosoftȱ.NETȱerkennbarȱist.ȱNeueȱIdeenȱkommenȱhinzuȱundȱausȱ Praxiserfahrungenȱ folgenȱ Verbesserungen.ȱ Wieȱ manȱ anhandȱ desȱ SpringȬFrameȬ worksȱsehenȱkann,ȱversuchtȱmanȱauchȱständig,ȱzuȱkomplexeȱBasissystemeȱwiederȱ einfacherȱzuȱgestalten.ȱZunehmendȱkommenȱauchȱneueȱSystembestandteile,ȱdieȱinȱ diesemȱȱBuchȱnichtȱbesprochenȱwurden,ȱhinzu.ȱSoȱwirdȱinȱdenȱnächstenȱJahrenȱderȱ TrendȱzumȱMobileȱComputingȱweiterȱvoranschreiten.ȱZunehmendȱwerdenȱalsoȱmoȬ bileȱ Geräteȱ aufȱ betrieblicheȱ Informationssystemeȱ zugreifen.ȱ Fürȱ dieȱ Entwicklungȱ mobilerȱSystemeȱgibtȱesȱbereitsȱeinigeȱEntwicklungsumgebungenȱimȱJavaȬȱ(J2MEȬ API)ȱundȱimȱ.NETȬUmfeldȱ(WindowsȱMobile),ȱdieȱsichȱweiterentwickelnȱwerden.ȱ Zunehmendȱ werdenȱ sichȱ auchȱ Anwendungenȱ ausȱ demȱ Umfeldȱ desȱ Ubiquitousȱ ComputingȱentwickelnȱundȱEinflussȱaufȱbetrieblicheȱInformationssystemeȱnehmen.ȱ
ȱ
381
6ȱȱSchlussbemerkungȱ DieseȱEntwicklungenȱsindȱalsoȱebenfallsȱzuȱbeobachten.ȱNochȱsindȱdieseȱMöglichȬ keitenȱ nichtȱ ganzȱ fürȱ dieȱ betrieblicheȱ Praxisȱ ausgereiftȱ undȱ daherȱ nurȱ inȱ einigenȱ Spezialprojektenȱzuȱfinden.ȱ AlsȱSoftwarearchitektȱundȱEntwicklerȱistȱesȱalsoȱweiterhinȱangesagt,ȱsichȱkontinuȬ ierlichȱ mitȱ neuestenȱ Technologien,ȱ Architekurkonzeptenȱ undȱ Produktenȱ auseiȬ nanderzusetzenȱundȱauchȱausgereifteȱTechnikenȱzuȱidentifizieren.ȱDennȱeinesȱsollȬ teȱ immerȱ klarȱ sein.ȱ Verteilteȱ Softwaresystemeȱ müssenȱ inȱ ersterȱ Linieȱ dieȱ geȬ wünschtenȱ Funktionenȱ derȱ Fachdomäneȱ beherrschen.ȱ Wennȱ Technologienȱ nichtȱ ausgereiftȱ sind,ȱ führenȱ sieȱ zuȱ zusätzlichenȱ Problemenȱ undȱ Risikenȱ inȱ EntwickȬ lungsprojekten.ȱ
382 ȱ
7 Lösungen zu den Übungsaufgaben 7.1 Einführung in verteilte Systeme 1.
VersuchenȱSieȱeineȱDefinitionȱfürȱeinȱverteiltesȱInformationssystemȱmitȱeigenenȱWorȬ ten!ȱ Verteilteȱ Informationssystemeȱ stellenȱ meistȱ kompliziertereȱ verteilteȱ AnwenȬ dungenȱdarȱundȱsindȱdurchȱfolgendeȱEigenschaftenȱcharakterisiert:ȱ – VerteilteȱInformationssystemeȱsindȱmeistȱsehrȱgroß,ȱwasȱdenȱCodeumfangȱ anbelangtȱ(mehrereȱ100.000,ȱteilweiseȱmehrereȱMillionenȱLinesȱofȱCode).ȱ – VerteilteȱInformationssystemeȱsindȱsehrȱdatenorientiert,ȱd.h.ȱdieȱDatenhalȬ tungȱstehtȱimȱZentrumȱderȱAnwendung.ȱÜblicherweiseȱwerdenȱdieȱDatenȱ inȱeinerȱDatenbankȱverwaltet.ȱDieȱzugrundeliegendenȱDatenmodelleȱsindȱ meistȱsehrȱumfangreich.ȱ – VerteilteȱInformationssystemeȱsindȱextremȱinteraktivȱundȱverfügenȱ(nebenȱ HintergrundȬȱundȱBatchȬFunktionalität)ȱüberwiegendȱüberȱgraphischeȱBeȬ nutzerschnittstellen.ȱ – Verteilteȱ Informationssystemeȱ sindȱ meistensȱ auchȱ sehrȱ nebenläufig,ȱ wasȱ sichȱdurchȱeineȱgroßeȱAnzahlȱanȱparallelȱarbeitendenȱBenutzernȱäußert.ȱ Hinzuȱkommt,ȱdassȱderartigeȱAnwendungenȱoftȱauchȱsehrȱunternehmenskriȬ tischȱsind.ȱ
2.
Nennenȱ Sieȱ dreiȱ Gründeȱ fürȱ dieȱ Verteilungȱ einesȱ betrieblichenȱ Informationssystems undȱerläuternȱSieȱdiese!ȱ FolgendeȱGründeȱkönnenȱu.a.ȱangeführtȱwerden:ȱ – Lastverteilung:ȱ Manȱ kannȱ gewisseȱ Systembausteineȱ aufȱ mehrereȱ Rechnerȱ verteilen,ȱwasȱeinenȱLeistungsgewinnȱermöglicht.ȱ – Ausfallsicherheit:ȱ Durchȱ Verteilungȱ bestimmterȱ Servicesȱ aufȱ mehrerenȱ ServersystemenȱistȱesȱmöglichȱdasȱSystemȱredundantȱauszulegenȱundȱdaȬ mitȱgegenȱAusfälleȱbesserȱzuȱschützen.ȱ – Skalierbarkeit:ȱ Manȱ kannȱ einȱ Systemȱ soȱ konzipieren,ȱ dassȱ esȱ aufȱ höhereȱ BelastungenȱdurchȱHinzunahmeȱweitererȱRechnersystemeȱreagierenȱkann.ȱ
3.
WelcheȱArtenȱderȱHeterogentätȱwurdenȱidentifiziert?ȱ Dieȱ Heterogenitätȱ vonȱ Betriebssystemen,ȱ Rechnerarchitekturenȱ sowieȱ ProȬ grammiersprachenȱundȱLaufzeitsystemen.ȱ
ȱ
383
7ȱȱLösungenȱzuȱdenȱÜbungsaufgabenȱ 4.
Welcheȱ Fehlersituationenȱ mussȱ eineȱ AtȬMostȬOnceȬImplementierungȱ fürȱ einenȱ entȬ ferntenȱAufrufȱzusätzlichȱzuȱAtȬLeastȬOnceȱimplementierenȱundȱwieȱkannȱdieȱImpleȬ mentierungȱerfolgen?ȱ DerȱServerȱmussȱdieȱFehlersituation,ȱdassȱeinȱRequestȱbeimȱServerȱmehrmalsȱ ankommt,ȱerkennen.ȱDuplikateȱmüssenȱausgefiltertȱwerden,ȱsoȱdassȱdieȱAusȬ führungȱdesȱRequestsȱnichtȱmehrmalsȱerfolgt.ȱDiesȱkannȱderȱServerȱüberȱeineȱ Requestlisteȱerreichen.ȱBeiȱjedemȱankommendenȱRequestȱistȱzuȱprüfen,ȱobȱfürȱ ihnȱ schonȱ einȱ Eintragȱ inȱ derȱ Listeȱ steht.ȱ Jeȱ nachdemȱ sindȱ dannȱ dieȱ entspreȬ chendenȱAktionenȱauszuführen.ȱWurdeȱeinȱRequestȱschonȱausgeführt,ȱistȱnurȱ nochȱ dieȱ Antwortȱ zuȱ übertragen.ȱ Weiterhinȱ benötigtȱ manȱ eineȱ zusätzlicheȱ ACKȬNachrichtȱdesȱClients,ȱdieȱbestätigt,ȱdassȱeineȱAntwortȱangekommenȱist.ȱ
5.
Wirdȱ inȱ lokalenȱ Methodenaufrufenȱ innerhalbȱ einesȱ Prozessesȱ eineȱ ExactlyȬOnceȬ Fehlersemantikȱgarantiert?ȱ Nein,ȱdaȱimȱlokalenȱUmfeldȱauchȱnichtȱohneȱweiteresȱgarantiertȱwerdenȱkann,ȱ dassȱ dieȱ Ausführungȱ einerȱ Methodeȱ nichtȱ durchȱ einenȱ Systemausfallȱ unterȬ brochenȱwerdenȱkann.ȱ
6.
Istȱ esȱ sinnvoll,ȱ dassȱ eineȱ JavaȬAnwendungȱ undȱ eineȱ C#ȬAnwendungȱ ohneȱ weitereȱ Maßnahmenȱ überȱ eineȱ Kommunikationsschnittstelleȱ Objekteȱ austauschen?ȱ BegrünȬ denȱSieȱIhreȱEntscheidung!ȱ Nein,ȱ daȱ eineȱ JavaȬAnwendungȱ einenȱ C#ȬObjektstromȱ nichtȱ interpretierenȱ kannȱ undȱ umgekehrt.ȱ Manȱ brauchtȱ alsoȱ einȱ gemeinsamesȱ Verständnisȱ derȱ auszutauschendenȱ Objekte/Datenȱ oderȱ eineȱ Zwischenschicht,ȱ welcheȱ dieȱ TransformationȱderȱNachrichtenȱvornimmt.ȱ
7.
WieȱlöstȱJavaȱdasȱProblemȱderȱHeterogenitätȱinȱderȱreinenȱJavaȬWelt?ȱ AlleȱPartnerȱnutzenȱdieȱgleichenȱSerialisierungsmechanismen,ȱdaȱdieseȱinȱderȱ JVMȱ implementiertȱ sind.ȱ Damitȱ sindȱ dieȱ gleichenȱ Datentypenȱ undȱ auchȱ dieȱ gleicheȱ Darstellungȱ fürȱ alleȱ Partnerȱ sichergestellt.ȱ Eineȱ Umwandlungȱ inȱ eineȱ andereȱSyntaxȱistȱdamitȱnichtȱerforderlich.ȱ
8.
WasȱistȱeinȱBigȬEndianȬȱimȱUnterschiedȱzuȱeinemȱLittleȬEndianȬFormat?ȱ Esȱ gehtȱ umȱ dieȱ Darstellungȱ vonȱ Integerwerten.ȱ Beiȱ Littleȱ Endianȱ wirdȱ dasȱ höchstwertigeȱ Byteȱeinesȱ Integerwertsȱanȱ derȱ höherenȱ Speicheradresseȱ abgeȬ legt.ȱBeiȱBigȱEndianȱwirdȱdasȱhöchstwertigeȱByteȱeinesȱIntegerwertsȱdagegenȱ anȱderȱniedrigstenȱSpeicheradresseȱabgelegt.ȱ
9.
WozuȱbrauchtȱmanȱinȱverteiltenȱSystemenȱeineȱsymbolischeȱAdressierungȱderȱverteilȬ tenȱBausteineȱundȱwelcheȱLösungȱgibtȱesȱhierfür?ȱ
384 ȱ
7.2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ ManȱbenötigtȱeineȱsymbolischeȱAdressierung,ȱumȱdasȱAuffindenȱvonȱentfernȬ tenȱ Anwendungsbausteinenȱ ohneȱ zuȱ komplizierteȱ AdressierungsinformatioȬ nenȱ inȱ denȱ Programmenȱ zuȱ ermöglichen.ȱ Hierfürȱ gibtȱ esȱ inȱ verteiltenȱ SysteȬ menȱmeistensȱBasisdiensteȱwieȱNamingȬȱoderȱDirectoryȬServices,ȱdieȱeineȱAbȬ bildungȱeinerȱsymbolischenȱAdresseȱaufȱeineȱ„echte“ȱAdresseȱeinerȱBausteinȬ instanzȱvornehmen.ȱDiesȱerhöhtȱdieȱTransparenzȱfürȱdenȱProgrammierer.ȱ 10. WozuȱbrauchtȱmanȱObjectȬRelationalȬMapper?ȱ EinenȱORMȱbenötigtȱman,ȱumȱObjekteȱausȱobjektorientiertenȱProgrammenȱaufȱ TabellenȱinȱrelationalenȱDatenbankenȱabzubildenȱundȱumgekehrt.ȱȱ 11. Erläutern Sieȱ anhandȱ einesȱ Beispiels,ȱ wieȱ eineȱ Verteilungȱ vonȱ AnwendungsbausteiȬ nenȱdazuȱbeitragenȱkann,ȱdassȱeinȱAnwendungssystemȱausfallsichererȱwird! Durchȱ eineȱ redundanteȱ Verteilungȱ vonȱ Servicesȱ aufȱ mehrereȱ Rechnerȱ kannȱ dieȱAusfallsicherheitȱerhöhtȱwerden.ȱFälltȱeinȱBausteinȱoderȱeinȱRechnerȱaus,ȱ soȱkannȱeinȱgleichwertigerȱandererȱBausteinȱoderȱRechnerȱdieȱDiensteȱweiterȬ hinȱanbieten.ȱ
7.2 Konzepte und Modelle verteilter Kommunikation 1.
WozuȱwirdȱThreadpoolingȱeingesetztȱundȱwelcheȱAufgabeȱhatȱeinȱRequestȬDispatcherȱ imȱClientȬServerȬModell?ȱ EinȱThreadpoolȱerzeugtȱundȱverwaltetȱmehrereȱWorkerȬThreadsȱundȱstelltȱdieȬ seȱfürȱdieȱBearbeitungȱvonȱRequestsȱbereit.ȱEinȱRequestȬDispatcherȱverteiltȱinȱ einemȱServerȱdieȱanfallendeȱLast,ȱindemȱerȱdieȱAnfragenȱanalysiertȱundȱaufȱdieȱ WorkerȬThreadsȱ verteilt.ȱ Dieserȱ Mechanismusȱ dientȱ derȱ Parallelisierungȱ derȱ Requestbearbeitung.ȱ
2.
ErläuternȱSieȱdieȱAufgabenȱeinesȱObjektserversȱbeiȱderȱImplementierungȱeinesȱverteilȬ tenȱObjektsystems!ȱ EinȱObjektserverȱstelltȱeineȱAblaufumgebungȱfürȱverteilteȱserverseitigeȱObjekteȱ bereit.ȱ Erȱ stelltȱ einenȱ DispatchingȬMechanismusȱ zurȱ Verfügung,ȱ umȱ ankomȬ mendeȱ verteilteȱ Methodenaufrufeȱ überȱ Objektadapterȱ undȱ Skeletonsȱ anȱ dieȱ adressiertenȱObjektinstanzenȱweiterzuleiten.ȱ
3.
Welcheȱ beidenȱ grundlegendenȱ Konzepteȱ werdenȱ fürȱ dieȱ Realisierungȱ vonȱ verteiltenȱ Objektsystemenȱherangezogen?ȱ Dasȱ bereitsȱausȱlokalenȱ Anwendungenȱ bekannteȱ Objektmodellȱ undȱ dasȱRPCȬ Konzept.ȱ
ȱ
ȱ
385
7ȱȱLösungenȱzuȱdenȱÜbungsaufgabenȱ 4.
WasȱistȱeinȱProxyȬObjektȱundȱwelcheȱAufgabenȱhatȱes?ȱ Einȱ ProxyȬObjektȱ istȱ einȱ lokalȱ beimȱ Clientȱ vorhandenesȱ StellvertreterȬObjekt,ȱ dasȱ denȱ Zugriffȱ aufȱ einȱ entferntesȱ Objektȱ ermöglicht.ȱ Alleȱ Methodenaufrufeȱ einesȱClientprogrammsȱgehenȱlokalȱanȱdasȱProxyȬObjekt,ȱwelchesȱdenȱAufrufȱ dannȱüberȱdasȱNetzȱanȱdasȱentfernteȱObjektȱweiterleitet.ȱWeiterhinȱübernimmtȱ dasȱProxyȬObjektȱdasȱMarshallingȱundȱdasȱUnmarshalling.ȱ
5.
Erläuternȱ Sieȱ dasȱ verteilteȱ GarbageȬCollectionȱ amȱ Beispielȱ desȱ ReferenceȬCountingȬ Algorithmus!ȱ JederȱServerprozessȱverwaltetȱbeimȱReferenceȬCountingȱeineȱListeȱallerȱClientȬ prozesseȱbzw.ȱProxies,ȱdieȱentfernteȱObjektreferenzenȱaufȱseineȱObjekteȱnutzen.ȱ Generellȱ wirdȱ beimȱ verteiltenȱ ReferenceȬCountingȱ zumȱ Zeitpunktȱ derȱ ErstelȬ lungȱeinerȱneuenȱReferenzȱaufȱeinȱObjektȱundȱzumȱZeitpunktȱdesȱLöschensȱeiȬ nesȱVerweisesȱaufȱdasȱObjektȱvomȱNutzerȱ(Client)ȱeineȱNachrichtȱanȱdenȱentȬ ferntenȱ Objektserverȱ gesendet.ȱ Derȱ Serverȱ kannȱ dannȱ denȱ zugehörigenȱ RefeȬ renzzählerȱentsprechendȱinkrementierenȱbzw.ȱdekrementieren.ȱ
6.
Welcheȱ Vorteileȱ bietenȱ verteilteȱ Komponentensystemeȱ imȱ Vergleichȱ zuȱ verteiltenȱ ObȬ jektsystemenȱfürȱdenȱAnwendungsprogrammierer?ȱ Komponentensystemeȱ bietenȱ gegenüberȱ verteiltenȱ Objektsystemenȱ folgendeȱ Vorteile:ȱ – Dieȱ Verwaltungȱ desȱ Lebenszyklusȱ vonȱ Komponentenȱ wirdȱ vomȱ KompoȬ nentensystemȱübernommen.ȱEinȱProgrammiererȱmussȱsichȱnichtȱmehrȱumȱ dieȱErzeugungȱvonȱKomponenteninstanzenȱkümmern.ȱ – Komponentensystemeȱ ermöglichenȱ denȱ nebenläufigenȱ Ablaufȱ mehrererȱ InstanzenȱeinerȱKomponenteȱohneȱzusätzlicheȱProgrammierung.ȱDerȱProȬ grammiererȱ einerȱ Komponenteȱ nutztȱ einȱ einfaches,ȱ sequentiellesȱ ProȬ grammiermodell.ȱ Dieȱ Parallelisierungȱ übernimmtȱ derȱ Container.ȱ KompoȬ nentenȱwerdenȱvomȱContainerȱbeiȱBedarfȱerzeugtȱundȱfreigegeben.ȱȱ – Komponentensystemeȱ stellenȱ eineȱ Reiheȱ vonȱ Systemdienstenȱ bereit,ȱ dieȱ vomȱKomponentenentwicklerȱverwendetȱwerdenȱkönnen.ȱHierzuȱgehörenȱ Transaktionsdienste,ȱ Persistenzdienste,ȱ Poolingȱ vonȱ DatenbankverbinȬ dungenȱundȱThreadpooling.ȱ – MechanismenȱfürȱdieȱSkalierbarkeitȱundȱauchȱfürȱFehlertoleranzȱundȱLastȬ verteilungȱ werdenȱ durchȱ denȱ Containerȱ unterstützt.ȱ Komponentenȱ könȬ nenȱmehrfachȱgestartetȱwerden.ȱȱ – Dieȱ Programmierungȱ istȱ einfacher,ȱ daȱ sichȱ dasȱ Komponentensystemȱ umȱ denȱgesamtenȱLebenszyklusȱeinerȱKomponenteȱkümmert.ȱ
386 ȱ
7.2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ 7.
WieȱläuftȱeinȱRemoteȬProcedureȬCallȱausȱSichtȱeinesȱClientsȱprinzipiellȱab?ȱErläuternȱ SieȱdenȱAblaufȱanhandȱdesȱFallbeispielsȱONCȱRPCȱkurzȱundȱgehenȱSieȱdabeiȱauchȱaufȱ dieȱNutzungȱdesȱzugehörigenȱNamingȬServiceȱein!ȱ BeiȱRPCȱfordetȱeinȱClientȱdenȱDienstȱeinesȱServerbausteinsȱsoȱan,ȱalsȱobȱesȱsichȱ umȱ einenȱ lokalenȱ Prozeduraufrufȱ handelnȱ würde.ȱ Fürȱ denȱ Clientȱ bleibtȱ dieȱ Kommunikationȱ überȱ dasȱNetzȱ weitgehendȱ transparent.ȱ Dieȱ AbwicklungȱunȬ terstützenȱgenerierteȱClientȬStubsȱundȱServerȬSkeletons.ȱȱ BeiȱSunȱRPCȱwendetȱsichȱderȱClientȱzunächstȱüberȱeinenȱAufrufȱderȱProzedurȱ clnt_createȱ anȱ denȱ Portmapper,ȱ derȱ auchȱ aufȱ demȱ Serverrechnerȱ abläuft,ȱ aufȱ demȱderȱgesuchteȱDienstȱimplementiertȱist.ȱDerȱPortmapperȱliefertȱdemȱClientȱ eineȱReferenzȱ(ClientȬHandle)ȱaufȱdieȱServerbausteinȬInstanzȱzurück.ȱBeiȱallenȱ folgendenȱAufrufenȱgibtȱderȱClientȱdasȱClientȬHandleȱan.ȱAnschließendȱerfolgtȱ derȱProzeduraufrufȱüberȱdenȱClientȬStub.ȱ
8.
Wieȱ wirdȱ eineȱ entfernteȱ Schnittstelleȱ einesȱ Serversȱ beiȱ ONCȱ RPCȱ beschrieben?ȱ Wasȱ wirdȱausȱderȱSchnittstellenbeschreibungȱüberȱeinenȱspeziellenȱCompilerȱgeneriert?ȱ Zurȱ Beschreibungȱ derȱ Schnitttelleȱ einerȱ entferntenȱ Prozedurȱ wirdȱ dieȱ CȬ ähnlicheȱ XDRȬȱ oderȱ RPCȬSpracheȱ verwendet.ȱ XDRȱ nutztȱ dasȱ sog.ȱ impliziteȱ Typing.ȱ Einȱ Parameterȱ wirdȱ ohneȱ weitereȱ Zusatzinformationȱ mitȱ demȱ RPCȬ Requestȱgesendet.ȱ DasȱToolȱrpcgenȱgeneriertȱausȱderȱInterfaceȬBeschreibungȱsowohlȱdenȱClientȬ Stub,ȱalsȱauchȱdenȱServerȬStubȱinȱderȱSpracheȱCȱsowieȱeinȱHeaderfileȱundȱeiȬ nenȱXDRȬFilterȱ(MarshallingȬ/UnmarshallingȬRoutinen).ȱ
9.
Wasȱ stecktȱ hinterȱ demȱ sog.ȱ BootstrappingȬProblemȱ beiȱ verteiltenȱ Anwendungen,ȱ dieȱ einenȱNamingȬȱoderȱDirectoryȬServiceȱnutzen?ȱ DerȱClientȱmussȱzuerstȱdieȱAdresseȱeinesȱNamingȬServiceȱherausfinden,ȱbevorȱ erȱ vonȱ diesemȱ dieȱ Adressenȱ derȱ verteiltenȱ Objekteȱ ermittelnȱ kann.ȱ Diesȱ wirdȱ alsȱBootstrappingȱbezeichnet.ȱInȱderȱRegelȱwirdȱvomȱBasissystemȱeinȱinitialierȱ Kontextȱbereitgestellt,ȱderȱdasȱWeitersuchenȱermöglicht.ȱ
10. WieȱfunktioniertȱbeiȱJavaȱRMIȱundȱbeiȱCORBAȱeinȱ„Lookup“?ȱ BeiȱJavaȬRMIȱfunktioniertȱderȱLookupȱüberȱeineȱMethodeȱnamensȱlookup.ȱDieseȱ MethodeȱdientȱdemȱClientȱdazu,ȱmitȱHilfeȱeinerȱURLȱeineȱObjektreferenzȱausȱ einerȱRegistryȱ(RMIȬRegistry)ȱzuȱlesen.ȱDieȱRMIȬRegistryȱliegtȱaufȱdemȱServerȬ rechner,ȱaufȱdemȱauchȱdieȱentferntenȱObjekteȱplatziertȱsind.ȱ BeiȱCORBAȱwirdȱderȱCORBAȬNamingȬServiceȱzumȱAuffindenȱeinerȱObjektadȬ resseȱ verwendet.ȱ Überȱ dieȱ Funktionȱ resolve_initial_referencesȱ kannȱ zuȱ einemȱ Dienstnamenȱ eineȱ IORȱ (ORBȬunabhängigeȱ Referenz)ȱ aufȱ dasȱ entsprechendeȱ
ȱ
387
7ȱȱLösungenȱzuȱdenȱÜbungsaufgabenȱ CORBAȬObjektȱermitteltȱwerden.ȱDerȱNamingȬServiceȱermöglichtȱhöhrereȱOrtȬ transparenzȱalsȱdasȱRMIȬRegistry.ȱ 11. Wieȱ funktioniertȱ dasȱ verteilteȱ GarbageȬCollectionȱ unterȱ JavaȬRMIȱ undȱ unterȱ CORȬ BA?ȱ Dasȱ GarbageȬCollectionȱ erfolgtȱ beiȱ JavaȬRMIȱ aufȱ Basisȱ einesȱ ReferenceȬ CountingȬAlgorithmusȱinȱVerbindungȱmitȱLeases.ȱȱ Inȱ CORBAȱ wirdȱ keinȱ konkreterȱ GarbageȬCollectionȬAlgorithmusȱ vorgeschlaȬ gen.ȱAufgrundȱderȱSprachunabhängigkeitȱistȱesȱinȱCORBAȱnichtȱohneȱweiteresȱ möglich,ȱ einenȱ verteiltenȱ GarbageȬCollectionȬMechanismusȱ zuȱ unterstützen,ȱ derȱfürȱalleȱBindingsȱfunktioniert.ȱȱ 12. Wieȱ wirdȱ beiȱ JavaȬRMIȱ einȱ Interfaceȱ einesȱ verteiltenȱ Objektsȱ definiert?ȱ Grenzenȱ Sieȱ dieȱVorgehensweiseȱzuȱderȱinȱCORBAȱab.ȱ Inȱ JavaȬRMIȱ wirdȱ einȱ Interfaceȱ direktȱ inȱ Javaȱ alsȱ JavaȬInterface,ȱ welchesȱ dasȱ Remoteȱ Interfaceȱ beerbt,ȱ definiert.ȱ CORBAȱ nutztȱ fürȱ dieȱ InterfaceȬDefinitionȱ eineȱeigene,ȱsprachunabhängigeȱIDL.ȱ 13. WieȱwirdȱinȱRMIȱeinȱRemoteȬObjektȱprogrammiert?ȱGehenȱSieȱdabeiȱaufȱdieȱNutzungȱ derȱRMIȬBasisȬInterfacesȬȱundȱKlassenȱein.ȱ Einȱ RMIȬObjektȱ wirdȱ alsȱ JavaȬKlasseȱ programmiert,ȱ dieȱ vonȱ derȱ Basisklasseȱ UnicastRemoteObjectȱ erbtȱ undȱ einȱ RemoteȬInterfaceȱ implementiert.ȱ Dieȱ ImpȬ lementierungsklasseȱ einesȱ RMIȬObjektsȱ istȱ durchȱ dieȱ Vererbungȱ undȱ auchȱ durchȱdieȱspezielleȱBehandlungȱvonȱRemoteȬExceptionsȱerkennbar.ȱ 14. Welcheȱ ChannelȬTypenȱ sindȱ beiȱ .NETȱ Remotingȱ fürȱ dieȱ Kommunikationȱ zwischenȱ ClientȱundȱServerȱmöglich?ȱ FolgendeȱKanaltypenȱwerdenȱunterstützt:ȱ – HTTPȬKanal;ȱTransportȱüberȱHTTPȱ – TCPȬKanal:ȱTransportȱüberȱTCPȱ – IPCȬKanal:ȱLokalerȱTransportȱüberȱIPCȬMechanismenȱ 15. Wasȱ verstehtȱ manȱ beiȱ .NETȱ Remotingȱ unterȱ serveraktiviertenȱ undȱ clientaktiviertenȱ Objektenȱ(SAOȱundȱDAO)?ȱ Serveraktivierteȱ Objekteȱ (SOA)ȱ sindȱ Objekte,ȱ derenȱ Lebensdauerȱ direktȱ vomȱ Serverȱ gesteuertȱ wird.ȱ Fordertȱ einȱ Clientȱ eineȱ Instanzȱ einesȱ serveraktiviertenȱ Objektsȱan,ȱwirdȱinȱderȱAnwendungsdomäneȱdesȱClientsȱeinȱProxyȱerstellt.ȱEsȱ gibtȱzweiȱsog.ȱAktivierungsmodiȱfürȱserveraktivierteȱObjekte.ȱDiesȱsindȱSingleȬ tonȬȱundȱSingleCallȬObjekte.ȱ
388 ȱ
7.2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ ClientaktivierteȱObjekteȱ(CAO)ȱsindȱObjekte,ȱderenȱLebensdauerȱvonȱderȱaufȬ rufendenȱAnwendungsdomäneȱ(alsoȱvomȱClient)ȱgesteuertȱwerden.ȱDieȱObjekȬ teȱ liegenȱ aberȱ nichtȱ wirklichȱ imȱ Client.ȱ CAOsȱ sindȱ statusbehafteteȱ ServerȬ bausteine.ȱ Jederȱ Clientȱ erhältȱ eineȱ eigeneȱ Instanzȱ desȱ verteiltenȱ ServerbauȬ steins.ȱ Dieȱ Lebensdauerȱ einesȱ CAOȱ richtetȱ sichȱ nachȱ derȱ Lebensdauerȱ desȱ Clients.ȱȱ 16. Wasȱ istȱ beiȱ .NETȱ Remotingȱ einȱ Singletonȱ undȱ wasȱ istȱ derȱ Unterschiedȱ zuȱ einemȱ SingleCallȬObjekt?ȱHandeltȱesȱsichȱhierȱumȱSAOsȱoderȱCAOs?ȱ Beidesȱ sindȱ SAOs.ȱ Beiȱ einemȱ Singletonȱ wirdȱ imȱ Serverȱ nurȱ eineȱ Instanzȱ desȱ verteiltenȱ Objektsȱ angelegt.ȱ Einȱ Singletonȱ wirdȱ beimȱ erstenȱ Aufrufȱ einerȱ MeȬ thodeȱ instanziertȱ undȱ kannȱ vonȱ beliebigȱ vielenȱ Clientsȱ verwendetȱ (aktiviert)ȱ werden.ȱSingleCallȬObjekteȱsindȱverteilteȱObjekte,ȱbeiȱdenenȱfürȱjedenȱRequestȱ eineȱ eigeneȱ Instanzȱ verwendetȱ wird.ȱ SingleCallȬInstanzenȱ vomȱ gleichenȱ Typȱ sindȱ untereinanderȱ isoliert.ȱ SingleCallȬObjekteȱ sindȱ zustandsloseȱ ServerbauȬ steine.ȱ 17. WasȱverstehtȱmanȱunterȱRMI/IIOPȱ(RMIȱoverȱIIOP)ȱundȱwozuȱistȱesȱnützlich?ȱȱ RMI/IIOPȱbzw.ȱRMIȱoverȱIIOPȱbildetȱdieȱRMIȬMechanismenȱaufȱdasȱstandarȬ disierteȱ Protokollȱ IIOPȱ ab.ȱ Diesȱ istȱ sinnvoll,ȱ wennȱ einȱ Java/EJBȬClientȱ mitȱ eiȬ nemȱ CORBAȬObjektȱ kommunizierenȱ möchteȱ oderȱ umgekehrtȱ einȱ CORBAȬ Objektȱ mitȱ einerȱ EJBean.ȱ Fürȱ dieȱ Übertragungȱ einesȱ Requestsȱ wirdȱ IIOPȱ geȬ nutzt.ȱ 18. SkizzierenȱSieȱtypischeȱProtokollstacksȱfürȱdasȱRMIȬTransportprotokoll!ȱ Einȱ typischerȱ Protokollstackȱ fürȱ RMIȱ enthältȱ einȱ Transportprotokoll,ȱ wobeiȱ derzeitȱTCPȱgenutztȱwird.ȱDarüberȱistȱderȱsog.ȱRemoteȱReferenceȱLayerȱangesieȬ delt,ȱderȱderzeitȱeineȱPointȬtoȬPointȬKommunikationȱzwischenȱClientȱundȱSerȬ verȱimplementiert.ȱClientȬStubȱundȱServerȬSkeletonȱnutzenȱdieȱDiensteȱdieserȱ Schicht.ȱȱ 19. WieȱwerdenȱbeiȱJavaȬRMIȱdieȱArgumenteȱundȱReturnwerteȱeinesȱMethodenaufrufsȱanȱ einȱentferntesȱObjektȱübertragenȱ(byȬreference,ȱbyȬvalue)?ȱ EinfacheȱDatentypenȱ(Elementartypenȱwieȱintȱundȱlong)ȱwerdenȱbeiȱJavaȬRMIȱ anȱdenȱRMIȬProxyȱalsȱWerteȱübergebenȱ(CallȬbyȬvalue).ȱDieȱÜbergabeȱvonȱJaȬ vaȬObjektenȱalsȱParameterȱerfolgtȱzwarȱlokalȱimȱClientȱzwischenȱClientȬObjektȱ undȱRMIȬStubȱüberȱReferenzen,ȱfürȱdieȱÜbertragungȱwerdenȱdieȱObjekteȱaberȱ inȱ denȱ RMIȬStromȱ kopiertȱ undȱ damitȱ ebenfallsȱ alsȱ Wertparameterȱ übergebenȱ (CallȬbyȬvalue=CallȬbyȬcopy).ȱ Dieȱ Übergabeȱ vonȱ Referenzenȱ aufȱ RemoteȬObȬ jekteȱerfolgtȱalsȱReferenzparameterȱ(CallȬbyȬreference).ȱȱ
ȱ
389
7ȱȱLösungenȱzuȱdenȱÜbungsaufgabenȱ 20. WannȱverwendetȱmanȱstatelessȱundȱwannȱstatefulȱSessionȬBeans?ȱ BeiȱstatefulȱSessionȬBeansȱwirdȱfürȱjedenȱClientȱeineȱeigeneȱInstanzȱzugeordnet.ȱ Esȱ wirdȱ einȱ Konversationszustandȱ verwaltet.ȱ Alleȱ Anwendungen,ȱ beiȱ denenȱ überȱ einenȱ ClientȬRequestȱ hinwegȱ imȱ Serverȱ einȱ Zustandȱ verwaltetȱ werdenȱ muss,ȱ sindȱ Kandidatenȱ fürȱ dieȱ Nutzungȱ vonȱ statefulȱ SessionȬBeansȱ (Beispiel:ȱ WarenkorbȱfürȱeinenȱOnlineȬShop).ȱ Statelessȱ SessionȬBeansȱ sindȱ fürȱ Anwendungenȱ oderȱ Anwendungsteileȱ geȬ dacht,ȱ dieȱ serverseitigȱ zustandslosȱ arbeitenȱ können.ȱ Statelessȱ SessionȬBeansȱ ermöglichenȱeineȱeffizientereȱAbarbeitungȱderȱMethodenȱundȱsindȱauchȱrobusȬ terȱalsȱstatefulȱSessionȬBeans.ȱ 21. WozuȱdientȱdasȱJNDIȬAPI?ȱ DasȱJNDIȬAPIȱstelltȱeineȱSchnittstelleȱfürȱeinenȱNamingȬȱundȱDirectoryȬServiceȱ zurȱVerfügung.ȱSowohlȱdasȱRegistrierenȱvonȱRessourcenȱalsȱauchȱdasȱAuffinȬ denȱdieserȱ(Lookup)ȱistȱüberȱdieȱAPIȱmöglich.ȱ 22. Warumȱ kannȱ manȱ sichȱ alsȱ BeanȬProviderȱ nichtȱ daraufȱ verlassen,ȱ dassȱ alleȱ Beansȱ inȱ einerȱJVMȱablaufen?ȱNennenȱSieȱRestriktionen,ȱdieȱsichȱfürȱdenȱProgrammiererȱdarȬ ausȱergeben!ȱ Alleȱ Beansȱ werdenȱ vomȱ EJBȬContainerȱ verwaltet.ȱ Esȱ istȱ inȱ derȱ Spezifikationȱ nichtȱ vorgegeben,ȱ wieȱ derȱ ContainerȬHerstellerȱ diesȱ implementiert.ȱ Erȱ kannȱ dazuȱeineȱJVMȱoderȱauchȱmehrereȱJVMsȱnutzenȱundȱdieseȱauchȱbeliebigȱverteiȬ len.ȱDaherȱmüssenȱstatischeȱVariablenȱalsȱfinalȱdeklariertȱwerdenȱ(keineȱglobaȬ lenȱVariablenȱinȱeinerȱKlasse,ȱdieȱimȱContainerȱläuft)ȱundȱesȱdürfenȱauchȱkeineȱ JavaȬSynchronisationsprimitivenȱ(z.B.ȱwait,ȱnotify,ȱ…)ȱverwendetȱwerden.ȱ 23. SkizzierenȱundȱbeschreibenȱSieȱdenȱZustandsautomatenȱeinerȱstatelessȱSessionȬBean!ȱ Esȱ gibtȱ nurȱ zweiȱ Zustände:ȱ Entwederȱ dieȱ BeanȬInstanzȱ istȱ nichtȱ vorhandenȱ („DoesȬnotȬExist“)ȱoderȱsieȱliegtȱinȱeinemȱBeanȬPoolȱfürȱdieȱBearbeitungȱneuerȱ Methodenaufrufeȱ („PooledȬReady“)ȱ bereit.ȱ Derȱ Zustandsübergangȱ vomȱ ZuȬ standȱ„PooledȬReady“ȱnachȱ„DoesȱnotȱExist“ȱwirdȱdurchȱdenȱContainerȱinitiȬ iert.ȱ Derȱ Poolȱ wirdȱ auchȱ durchȱ denȱ Containerȱ verwaltet.ȱ Beiȱ denȱ ZustandsȬ übergängenȱ werdenȱ annotierteȱ Methodenȱ (Annotationenȱ @PreDestroyȱ undȱ @PostConstruct)ȱaufgerufen,ȱsofernȱsieȱdefiniertȱsind.ȱ
390 ȱ
7.2ȱȱKonzepteȱundȱModelleȱverteilterȱKommunikationȱ Does-Not-Exist
Durch EJBContainer initiiert
Aufruf einer Methode durch EJB-Client
@PreDestroy
Class.newInstance() @PostConstruct
Pooled-Ready
ȱ
24. Wasȱ istȱ imȱ MesssageȬPassingȬModellȱ eineȱ synchroneȱ persistenteȱ Kommunikationȱ imȱ VergleichȱzuȱeinerȱasynchronenȱpersistentenȱKommunikation?ȱ Beiȱ synchronerȱ persistenterȱ Kommunikationȱ speichertȱ dasȱ KommunikationsȬ systemȱeineȱNachrichtȱbeimȱEmpfängerȱ(inȱeinemȱPuffer)ȱab,ȱbevorȱderȱSenderȱ weiterarbeitenȱkann.ȱ Beiȱ asynchronerȱ persistenterȱ Kommunikationȱ wirdȱ eineȱ gesendeteȱ Nachrichtȱ dauerhaftȱ vomȱ Kommunikationssystemȱ zwischengespeichert,ȱ bisȱ derȱ adresȬ sierteȱEmpfängerȱsieȱliest,ȱwährendȱderȱSenderȱgleichȱweiterarbeitenȱkann.ȱȱ 25. Nennenȱ Sieȱ Einsatzmöglichkeitenȱ bzw.ȱ Anwendungenȱ fürȱ NachrichtenwarteschlanȬ gensysteme!ȱ WarteschlangenȱdienenȱderȱEntkopplungȱvonȱAnwendungssystemenȱundȱeigȬ nenȱsichȱsehrȱgutȱfürȱdieȱIntegrationȱvonȱ„neuȱentwickelten“ȱAnwendungenȱinȱ bestehendeȱ ITȬLandschaften.ȱ Sieȱ ermöglichenȱ auchȱ dieȱ Entwicklungȱ ereignisȬ orientierterȱKommunikationslösungen,ȱbeiȱderȱz.B.ȱeinȱPartnerȱmehrereȱandereȱ Partnerȱ(oneȬtoȬmany)ȱüberȱbestimmteȱEreignisseȱinformiert.ȱ 26. ErläuternȱSieȱdasȱP2PȬModellȱimȱVergleichȱzumȱPublishȬSubscribeȬModell!ȱ Beiȱ einerȱ P2PȬKommunikationȱ kommunizierenȱ zweiȱ Kommunikationsparterȱ gleichberechtigtȱ(symmetrisch)ȱundȱkeinerȱist,ȱwieȱimȱasymmetrischenȱClientȬ ServerȬModell,ȱ inȱ einerȱ speziellenȱ Rolle.ȱ Imȱ PublishȬSubscribeȬModellȱ registȬ rierenȱ (subscribe)ȱ sichȱ Konsumentenȱ vonȱ bestimmtenȱ Nachrichtentypenȱ fürȱ einenȱ bestimmtenȱ Kommunikationsaspektȱ (Topicȱ genannt).ȱ Produzentenȱ erȬ zeugenȱ dieseȱ Nachrichtentypenȱ undȱ sendenȱ (publish)ȱ sieȱ anȱ dieȱ KonsumenȬ tengruppe.ȱȱ 27. WasȱistȱeinȱJMSȬTopic?ȱ Einȱ JMSȬTopicȱ stelltȱ einenȱ abstrakten,ȱ allenȱ Beteiligtenȱ bekanntenȱ „KnotenȬ punkt“ȱdar.ȱDieserȱKnotenpunktȱkannȱNachrichtenȱempfangenȱundȱweiterleiȬ
ȱ
391
7ȱȱLösungenȱzuȱdenȱÜbungsaufgabenȱ ten.ȱDieȱNutzerȱeinesȱTopicsȱheißenȱauchȱProduzentenȱundȱKonsumenten.ȱDieȱ AnzahlȱderȱProduzentenȱundȱKonsumentenȱkannȱsichȱdynamischȱverändern.ȱ
7.3 Verteilte Dienstaufrufe und Webservices 1.
WasȱistȱderȱgroßeȱVorteilȱvonȱWebservicesȱimȱVergleichȱzuȱRMIȱoderȱCORBA?ȱ WebservicesȱsindȱimȱGegensatzȱzuȱRMIȱoderȱCORBAȱauchȱinȱheterogenenȱundȱ UmgebungenȱunabhängigȱvonȱTechnologienȱeinsetzbar.ȱDieȱImplementierungȱ derȱServicesȱkannȱbeliebigȱsein.ȱSomitȱlassenȱsichȱBausteine,ȱdieȱmitȱbeliebigerȱ Technologieȱentwickeltȱwurden,ȱmitȱeinerȱSchnittstelleȱversehen,ȱdieȱeineȱNutȬ zungȱüberȱeinenȱneutralenȱMechanismusȱermöglicht.ȱ
2.
Diskutierenȱ Sieȱ denȱ Einflussȱ vonȱ SOAPȱ aufȱ dieȱ Leistungsfähigkeitȱ einerȱ ClientȬ ServerȬAnwendung!ȱ Webservicesȱ basierenȱ aufȱ XML.ȱ Alleȱ SOAPȬNachrichtenȱ werdenȱ inȱ einemȱ XMLȬDialektȱ übertragen.ȱ Dasȱ Validierenȱ undȱ Parsenȱ derȱ XMLȬNachrichtenȱ sowieȱdasȱUmwandelnȱderȱDatentypenȱeinesȱServiceȬEndpointsȱinȱeineȱWSDLȬ konformeȱ Notationȱ undȱ umgekehrtȱ erfordertȱ zusätzlicheȱ Ressourcen.ȱ Zudemȱ sindȱ jeȱ nachȱ Kodierungsstilȱ dieȱ Nachrichtenȱ längerȱ alsȱ beiȱ klassischenȱ ProtoȬ kollen.ȱDieȱLeistungȱwirdȱalsoȱinsgesamtȱbeeinträchtigt.ȱ
3.
WelcheȱAufgabeȱhatȱUDDIȱbeiȱWebservices?ȱ UDDIȱistȱeineȱSchnittstelleȱfürȱeineȱzentraleȱDienstregistratur.ȱDieȱImplemenȬ tierungȱ dieserȱ Registraturȱ istȱ nichtȱ festgelegt.ȱ Einȱ Diensterbringerȱ kannȱ seineȱ Webservicesȱ überȱ UDDIȱ registrierenȱ undȱ damitȱ könnenȱ dieseȱ durchȱ DienstȬ nehmerȱgefundenȱundȱgenutztȱwerden.ȱObwohlȱbereitsȱkonkreteȱImplementieȬ rungenȱexistieren,ȱwerdenȱdieseȱnochȱnichtȱimȱgroßenȱStilȱeingesetzt.ȱ
4.
MitȱwelchenȱTransportprotokollenȱarbeitetȱSOAP?ȱ SOAPȱ istȱ anȱ keinȱ speziellesȱ Transportprotokollȱ gebunden.ȱ Aktuellȱ wirdȱ esȱ meistensȱaufȱBasisȱvonȱHTTPȱimplementiert,ȱaberȱauchȱeineȱImplementierungȱ aufȱ Basisȱ vonȱ SMTPȱ oderȱ aufȱ Basisȱ einesȱ nachrichtenbasiertenȱ Protokollsȱ istȱ denkbar.ȱ
5.
WasȱistȱeinȱSOAPȬProzessor?ȱ Einȱ SOAPȬProzessorȱ (auchȱ SOAPȬEngine)ȱ stelltȱ eineȱ Laufzeitumgebungȱ fürȱ Webservicesȱ bereitȱ undȱ verarbeitetȱ ankommendeȱ undȱ abgehendeȱ SOAPȬ Nachrichten.ȱ SOAPȬProzessorenȱ sindȱ heuteȱ inȱ fastȱ allenȱ ApplicationȬServerȬ Produktenȱintegriert.ȱ
392 ȱ
7.3ȱȱVerteilteȱDienstaufrufeȱundȱWebservicesȱ 6.
Erläuternȱ Sieȱ dieȱ Einbettungȱ vonȱ SOAPȬPDUsȱ inȱ HTTPȬPDUs!ȱ Warumȱ istȱ HTTPȱ alsȱ„Transportprotokoll“ȱfürȱSOAPȱsoȱgutȱgeeignet?ȱ Derȱ SOAPȬRequestȱ undȱ dieȱ SOAPȬResponseȱ werdenȱ jeweilsȱ inȱ einerȱ HTTPȬ GETȬȱ oderȱ inȱ einerȱ HTTPȬPOSTȬPDUȱ übertragen.ȱ HTTPȱ istȱ gutȱ geeignet,ȱ daȱ SOAPȱ inȱ derȱ Regelȱ einenȱ synchronenȱ entferntenȱ Dienstaufrufȱ realisiert,ȱ wasȱ sichȱ leichtȱ aufȱ HTTPȱ abbildenȱ lässt.ȱ Zudemȱ istȱ HTTPȱ fastȱ überallȱ verfügbarȱ undȱgenausoȱwieȱSOAPȱtextbasiert.ȱ
7.
WieȱwirdȱeinemȱWebserviceȱeinȱPortȱzugeordnet?ȱ Einȱ Portȱ wirdȱ inȱ derȱ WSDLȬBeschreibungȱ einesȱ Webserviceȱ imȱ ServiceȬ Elementȱ zugeordnet.ȱ Dortȱ wirdȱ einȱ Portnameȱ fürȱ einȱ Bindingȱ festgelegtȱ undȱ eineȱURLȱdefiniert,ȱüberȱdieȱderȱWebserviceȱerreichbarȱist.ȱ
8.
ErläuternȱSieȱdieȱMechanismenȱderȱSerialisierungȱbeiȱWebservices?ȱ DieȱSerialisierungȱwirdȱüberȱgenerierteȱStubsȱundȱSkeletonsȱdurchgeführt.ȱSieȱ übernehmenȱ dasȱ Mappingȱ vonȱ lokalenȱ Datentypenȱ aufȱ WSDLȬDatentypenȱ undȱumgekehrt.ȱStubsȱundȱSkeletonsȱkönnenȱüberȱTools,ȱdieȱderȱHerstellerȱeiȬ nerȱ Entwicklungsumgebungȱ bereitstelltȱ ausȱ denȱ WSDLȬBeschreibungenȱ erȬ zeugtȱwerden.ȱ
9.
WasȱistȱderȱUnterschiedȱzwischenȱJAXȬRPCȱundȱJAXȬWS?ȱ BeidesȱsindȱJavaȬbasierteȱSpezifikationenȱzurȱImplementierungȱvonȱWebserviȬ ces.ȱJAXȬWSȱistȱdieȱWeiterentwicklungȱvonȱJAXȬRPCȱundȱhatȱdasȱZielȱdieȱEntȬ wicklungȱ undȱ dasȱ Deploymentȱ vonȱ WebServiceȬAnwendungenȱ zuȱ beschleuȬ nigen.ȱBeiȱJAXȬWSȱwerdenȱJavaȬAnnotationenȱverwendet.ȱ
10. Wasȱ verstehtȱ manȱ unterȱ einerȱ serviceorientiertenȱ Architektur?ȱ Diskutierenȱ Sieȱ denȱ Ansatzȱ anhandȱ vonȱWebservices!ȱ Kannȱmanȱ eineȱ serviceorientierteȱ Architekturȱ auchȱ aufȱBasisȱvonȱJEE/EJBȱrealisieren?ȱ SOAȱistȱeinȱArchitekturkonzept,ȱdassȱdieȱBereitstellungȱvonȱDienstenȱinȱeinerȱ heterogenenȱUmgebungȱunterstützt.ȱWebservicesȱstellenȱeineȱkonkreteȱtechniȬ scheȱ Basisȱ fürȱ dieȱ Implementierungȱ einerȱ SOAȱ zurȱ Verfügung.ȱ Allerdingsȱ istȱ eineȱ SOAȱ nichtȱ anȱ Webservicesȱ gebunden.ȱ Esȱ könnenȱ auchȱ andereȱ TechnoloȬ gienȱ zurȱ Umsetzungȱ desȱ Konzeptsȱ genutztȱ werden.ȱ Durchȱ dieȱ weitgehendeȱ Implementierungsunabhängigkeitȱ vonȱ Webservicesȱ wirdȱ derȱ SOAȬGedankeȱ aberȱ starkȱ unterstützt.ȱ JEE/EJBsȱ eignenȱ sichȱ fürȱ dieȱ Implementierungȱ einerȱ SOAȱgut.ȱManȱkannȱmitȱdieserȱTechnologieȱServerbausteineȱgutȱkapseln.ȱZurȱ KommunikatioinȱsollteȱaberȱbesserȱSOAPȱundȱnichtȱRMI/IIOPȱverwendetȱwerȬ den.ȱ ȱ
ȱ
393
7ȱȱLösungenȱzuȱdenȱÜbungsaufgabenȱ 11. WasȱbedeutetȱbeiȱSOAPȱDocument/LiteralȱimȱUnterschiedȱzuȱRPC/literal?ȱ Hierȱ handeltȱ esȱ sichȱ umȱ zweiȱ Kombinationsmöglichkeitenȱ ausȱ NachrichtenȬ formatȱ (Style)ȱ undȱ Kodierungsstilȱ (Use).ȱ Dieȱ Begriffeȱ sindȱ rechtȱ verwirrendȱ undȱhistorischȱbedingt.ȱStyle=Document/Use=Literalȱbedeutet,ȱdassȱderȱSOAPȬ MessageȬBodyȱ ausschließlichȱ Dokumenteȱ nachȱ XMLȬSchemaȱ enthält,ȱ d.h.ȱ dieȱ ganzeȱNachrichtȱkannȱvollständigȱvalidiertȱwerden.ȱDieserȱStilȱwirdȱinnerhalbȱ derȱ WebserviceȬCommunityȱ alsȱ favorisierteȱ Lösungȱ propagiert.ȱ Beiȱ StyȬ le=RPC/Use=Literalȱ werdenȱ SOAPȬNachrichtenȱ alsȱ RPCȬAufrufeȱ mitȱ ParameȬ ternȱundȱReturncodesȱrealisiert.ȱJedeȱNachrichtȱhatȱeinenȱeigenenȱSchematyp.ȱ DieȱDatentypenȱderȱParameterȱwerdenȱinȱderȱNachrichtȱnichtȱexplizitȱangegeȬ ben,ȱ sondernȱ sieȱ ergebenȱ sichȱ implizitȱ ausȱ derȱ konkretenȱ SchemaȬ Beschreibung.ȱ
7.4 Konzepte, Modelle und Standards verteilter Transaktionsverarbeitung 1.
WelcheȱRolleȱspieltȱimȱDTPȬModellȱderȱTransaktionsmanagerȱundȱwelcheȱSchnittstelleȱ bietetȱerȱinȱRichtungȱAnwendungsprogrammȱ(AP)ȱan?ȱ Derȱ TMȱ verwaltetȱ denȱ Kontextȱ vonȱ lokalenȱ undȱ globalenȱ Transaktionen.ȱ Erȱ koordiniertȱalleȱanȱeinerȱTransaktionȱbeteiligtenȱRessourcenmanagerȱüberȱdieȱ XAȬSchnittstelle.ȱDemȱAPȱwirdȱdieȱTXȬSchnittstelleȱbereitgestellt.ȱ
2.
WozuȱdientȱderȱCRMȱimȱDTPȬModell?ȱ ErȱistȱeinȱlokalerȱStellvertreterȱallerȱentferntenȱRessourcenmanagerȱ(RMs),ȱdieȱ inȱeineȱverteilteȱTransaktionȱinvolviertȱsind.ȱDerȱCRMȱbeauftragtȱdieȱentfernȬ tenȱTMsȱmitȱderȱCommitȬBearbeitungȱfürȱihreȱKnoten.ȱDerȱlokaleȱTMȱführtȱdieȱ ErgebnisseȱderȱlokalenȱRMsȱundȱderȱentferntenȱTMsȱzusammenȱundȱentscheiȬ detȱ überȱ denȱ Ausgangȱ derȱ Transaktion.ȱ Einȱ entfernterȱ RMȱ kannȱ nichtȱ direkt,ȱ sondernȱnurȱüberȱeinȱaufȱdemȱKnotenȱliegendesȱAPȱverwendetȱwerden.ȱ
3.
WieȱstartetȱeinȱAPȱeineȱTransaktion?ȱ EinȱAPȱsetztȱeinenȱFunktionsaufrufȱtx_beginȱanȱdenȱTMȱab,ȱderȱdaraufhinȱeineȱ globaleȱTransaktionsȬIdȱ(XID)ȱgeneriertȱundȱjeȱnachȱRegistrierungsvarianteȱalleȱ demȱAPȱhinzugebundenenȱRMsȱüberȱdenȱBeginnȱeinerȱTransaktionȱinformiert,ȱ alsoȱdenȱTransaktionskontextȱpropagiert.ȱ
4.
WasȱistȱimȱDTPȬModellȱeinȱThreadȬofȬControlȱbzw.ȱeinȱAusführungspfad?ȱ Beiȱ derȱ Abwicklungȱ einerȱ Transaktionȱ müssenȱ AP,ȱ TM,ȱ CRMsȱ undȱ RMsȱ dasȱ gleicheȱVerständnisȱüberȱdenȱTransaktionskontextȱhaben.ȱDiesesȱgemeinsameȱ Verständnisȱ wirdȱ auchȱ logischȱ alsȱ ThreadȬofȬControlȱ bezeichnet.ȱ Überȱ dieȱ Artȱ
394 ȱ
7.4ȱȱKonzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ undȱ Weise,ȱ wieȱ einȱ ThreadȬofȬControlȱ iumplementiertȱ werdenȱ soll,ȱ machtȱ dasȱ DTPȬModellȱkeineȱAussage.ȱȱ 5.
ErläuternȱSieȱdieȱbeidenȱPhasenȱdesȱ2PCȬProtokolls!ȱ Beimȱ 2PCȬProtokollȱ sendetȱ derȱ Koordinatorȱ inȱ derȱ erstenȱ Phaseȱ (PrepareȬ Phase)ȱeinenȱRequestȱ(PrepareȬRequest)ȱanȱalleȱTeilnehmerȱeinerȱTransaktion,ȱ damitȱ dieseȱ sichȱ aufȱ dasȱ Transaktionsendeȱ vorbereiten.ȱ Dieȱ Teilnehmerȱ antȬ wortenȱ(votieren)ȱmitȱȈreadyȈȱoderȱȈnotȬreadyȈ,ȱjeȱnachdem,ȱobȱsieȱdieȱTransȬ aktionȱ erfolgreichȱ zuȱ Endeȱ führenȱ könnenȱ oderȱ nicht.ȱ Votiertȱ einȱ Teilnehmerȱ mitȱȈnotȬreadyȈ,ȱsetztȱerȱdieȱinnerhalbȱderȱTransaktionȱausgeführtenȱOperatioȬ nenȱ selbstständigȱ zurück.ȱ Nurȱ wennȱ alleȱ Teilnehmerȱ mitȱ ȈreadyȈȱ antworten,ȱ wirdȱvomȱKoordinatorȱdieȱzweiteȱPhaseȱeingeleitet,ȱumȱdieȱTransaktionȱerfolgȬ reichȱ zuȱ beenden.ȱ Wennȱ einȱ Teilnehmerȱ ȈreadyȈȱ meldet,ȱ mussȱ erȱ inȱ derȱ Lageȱ sein,ȱ dieȱ Transaktionȱ ausȱ seinerȱ Sichtȱ zuȱ beendenȱ oderȱ zurückzusetzen,ȱ jeȱ nachdem,ȱ wieȱ sichȱ derȱ Koordinatorȱ entscheidet.ȱ Eineȱ einmalȱ getroffeneȱ EntȬ scheidungȱ darfȱ wederȱ vomȱ Koordinatorȱ nochȱ vonȱ einemȱ Teilnehmerȱ zurückȬ genommenȱwerden.ȱInȱderȱzweitenȱPhaseȱsendetȱderȱKoordinatorȱeinenȱComȬ mitȬRequest,ȱumȱdieȱTransaktionȱabzuschließen.ȱDieȱTeilnehmerȱnehmenȱdenȱ Requestȱentgegen,ȱführenȱihnȱausȱundȱbeantwortenȱihnȱentsprechend.ȱ
6.
Wasȱ bedeutetȱ imȱ 2PCȬProtokollȱ einȱ „unsichererȱ Zustand“,ȱ werȱ kannȱ ihnȱ einnehmenȱ undȱinȱwelcherȱSituationȱtrittȱerȱauf?ȱ Dasȱ2PCȬProtokollȱistȱeinȱblockierendesȱCommitȬProtokoll.ȱDerȱZustandȱeinesȱ Teilnehmers,ȱ inȱ demȱ erȱ blockiertȱ istȱ undȱ aufȱ dieȱ CommitȬ/RollbackȬ Entscheidungȱ desȱ Koordinatorsȱ wartet,ȱwirdȱ auchȱalsȱunsichererȱZustandȱ beȬ zeichnet.ȱ
7.
Wieȱ wirdȱ üblicherweiseȱ eineȱ XAȬUnterstützungȱ durchȱ denȱ Herstellerȱ einesȱ DBMSȱ realisiert?ȱ Dieȱ Realisierungȱ erfolgtȱ üblicherweiseȱ inȱ einerȱ XAȬLibrary,ȱ dieȱ derȱ DatenȬ bankherstellerȱ bereitstellt.ȱEinȱ Herstellerȱ einesȱApplicationȬServersȱ oderȱ einesȱ TransaktionsmanagersȱkannȱdieȱLibraryȱeinbinden.ȱDieȱLibraryȱstelltȱdieȱRMȬ FunktionenȱderȱXAȬSchnittstelleȱbereitȱundȱverstecktȱdieȱImplementierungȱderȱ KommunikationȱmitȱdemȱDatenbankmanagementsystem.ȱȱ
8.
Wasȱ passiertȱ beiȱ einerȱ 2PCȬKoordinierungȱ zwischenȱ einemȱ Koordinatorȱ undȱ zweiȱ Teilnehmern,ȱwennȱeinȱTeilnehmerȱwährendȱderȱPhaseȱ1ȱ„ready“ȱanȱdenȱKoordinatorȱ meldet,ȱderȱzweiteȱallerdingsȱ„notȱready“?ȱ InȱdiesemȱFallȱentscheidetȱderȱKoordinatorȱaufȱAbbruchȱderȱTransaktion,ȱproȬ tokolliertȱ diesȱ inȱ seinemȱ Transaktionslogȱ undȱ sendetȱ eineȱ AbortȬPDUȱ anȱ denȱ Teilnehmer,ȱderȱmitȱ„ready“ȱantwortete.ȱ
ȱ
395
7ȱȱLösungenȱzuȱdenȱÜbungsaufgabenȱ 9.
SollteȱeinȱPCȬbasierterȱClientȱalsȱTransaktionskoordinatorȱdienen?ȱBegründenȱSieȱIhreȱ Entscheidung!ȱ EinȱClient,ȱderȱaufȱeinemȱeherȱunsicherenȱPCȱabläuft,ȱsollteȱnichtȱalsȱTransakȬ tionskoordinatorȱ dienen.ȱ Fälltȱ nämlichȱ derȱ Koordinatorȱ währendȱ einerȱ ComȬ mitȬBearbeitungȱaus,ȱsindȱdieȱTeilnehmerȱblockiertȱundȱbleibenȱunsicher,ȱbisȱerȱ wiederȱaktivȱist.ȱDaȱsichȱderȱunsichereȱClientȱinȱderȱRegelȱaberȱnichtȱdenȱletzȬ tenȱZustandȱderȱTransaktionȱbesorgenȱkann,ȱkannȱderȱBlockierzustandȱmögliȬ cherweiseȱnichtȱmehrȱohneȱmanuellenȱEingriffȱaufgelöstȱwerden.ȱ
10. Warumȱ istȱ einȱ persistenterȱ LoggingȬMechanismusȱ wieȱ z.B.ȱ nachȱ demȱ WALȬPrinzipȱ fürȱdieȱRealisierungȱvonȱ(verteilten)ȱACIDȬTransaktionenȱnotwendig?ȱ WALȱ istȱ notwendig,ȱ daȱ währendȱ einerȱ Transaktionȱ zuȱ jederȱ Zeitȱ einȱ Ausfallȱ einerȱSystemkomponenteȱmöglichȱistȱundȱdaherȱeinȱRecoveryȱnotwendigȱwird.ȱ WennȱvorȱderȱAusführungȱeinerȱOperationȱeinȱLogsatzȱdauerhaftȱgeschriebenȱ wird,ȱ derȱ denȱ Zustandȱ vorȱ undȱ nachȱ derȱ auszuführendenȱ Operationȱ enthält,ȱ kannȱ beimȱ anschließendenȱ Recoveryȱ mitȱ dieserȱ LogȬInformationȱ sowohlȱ einȱ Redo,ȱalsȱ auchȱ einȱ Undoȱ durchgeführtȱwerden.ȱ Damitȱ könnenȱ alleȱRecoveryȬ Protokolleȱunterstütztȱwerden.ȱWasȱgenauȱprotokolliertȱwird,ȱhängtȱdavonȱab,ȱ welcheȱ RecoveryȬVarianteȱ unterstütztȱwird.ȱ Heutigeȱ Implementierungenȱ nutȬ zenȱmeistȱUndo/Redo.ȱDieseȱVarianteȱbenötigtȱeinȱBeforeȬȱundȱeinȱAfterȬImage.ȱ 11. Wozuȱ mussȱ einȱ Teilnehmerȱ anȱ einerȱ Transaktion,ȱ derȱ inȱ derȱ Phaseȱ 1ȱ einerȱ 2PCȬ Koordinationȱmitȱ„ready“ȱantwortet,ȱinȱderȱLageȱsein?ȱ DerȱTeilnehmerȱmussȱdieȱTransaktionȱzuȱEndeȱführenȱoderȱdieseȱzurücksetzenȱ können.ȱDieȱEntscheidungȱtrifftȱderȱKoordinator.ȱ 12. WelcheȱAufgabeȱhatȱJTAȱinȱeinerȱJEE/EJBȬUmgebungȱundȱwelcheȱSchnittstellenȱstelltȱ JTAȱzurȱVerfügung?ȱȱ FürȱdieȱUnterstützungȱvonȱTransaktionenȱistȱinnerhalbȱderȱEJBȬArchitekturȱdieȱ Javaȱ Transactionȱ APIȱ (JTA)ȱ alsȱ grundlegendeȱ Schnittstelleȱ bzw.ȱ alsȱ Satzȱ vonȱ Schnittstellenȱ vorgesehen.ȱ JTAȱ liefertȱ höherwertigeȱ Transaktionsdienste,ȱ dieȱ ausȱdreiȱTeilenȱbestehen:ȱ – EineȱSchnittstelleȱfürȱAnwendungsprogrammierer,ȱmitȱdenenȱdieseȱTransȬ aktionsgrenzenȱsetzenȱkönnen.ȱSieȱenthältȱdieȱklassischenȱMethodenȱbegin,ȱ commitȱundȱrollback.ȱ – Einȱ JavaȬMappingȱ fürȱ dasȱ standardisierteȱ XAȬProtokollȱ derȱ Openȱ Groupȱ fürȱ dieȱ Teilnahmeȱ anȱ globalenȱ Transaktionen,ȱ dieȱ vonȱ einemȱ TransaktiȬ onsmanagerȱkoordiniertȱwerden.ȱ – Eineȱ Schnittstelleȱ fürȱ einenȱ ApplicationȬServer,ȱ umȱ mitȱ einemȱ TransaktiȬ onsmanagerȱ zuȱ kommunizieren.ȱ Dieseȱ Schnittstelleȱ istȱ fürȱ dieȱ TransaktiȬ
396 ȱ
7.4ȱȱKonzepte,ȱModelleȱundȱStandardsȱverteilterȱTransaktionsverarbeitungȱ onsabwicklungȱ durchȱ denȱ ApplicationȬServerȱ (bzw.ȱ EJBȬContainer)ȱ notȬ wendigȱundȱwirdȱfürȱcontainerȬmanagedȱTransactionsȱverwendet.ȱ 13. WelchesȱTransaktionsmodellȱunterstütztȱEJB?ȱ EsȱwerdenȱnurȱflacheȱTransaktionenȱunterstützt.ȱ 14. Erläuternȱ Sieȱ denȱ Unterschiedȱ zwischenȱ beanȬmanaged,ȱ containerȬmanagedȱ undȱ clientȬmanagedȱTransaktionen.ȱ Beiȱ beanȬmanagedȱ Transaktionenȱ setztȱ derȱ BeanȬEntwicklerȱ serverseitigȱ dieȱ Transaktionsgrenzen.ȱ Beiȱ containerȬmanagedȱ Transaktionenȱ siehtȱ derȱ BeanȬȱ undȱ ClientȬEnwicklerȱ nichtsȱvonȱTransaktionen.ȱDieȱTransaktionssteuerungȱerfolgtȱimplizitȱüberȱdenȱ ApplicationȬServer,ȱ derȱ üblicherweiseȱ einenȱ Transaktionsmanagerȱ implemenȬ tiert.ȱ Dieȱ Transaktionseinstellungenȱ werdenȱ überȱ Annotationenȱ oderȱ überȱ eiȬ nenȱDeploymentȬDescriptorȱvorgenommen.ȱ Beiȱ clientȬmanagedȱ Transaktionenȱ definiertȱ derȱ Clientȱ dieȱ TransaktionsgrenȬ zenȱundȱführtȱbeiȱBedarfȱeinȱCommitȱoderȱeinenȱRollbackȱaus.ȱȱ 15. WieȱkannȱeinȱEJBȬClientȱnachȱeinemȱAusfallȱwährendȱeinerȱCommitȬBearbeitungȱerȬ fahren,ȱobȱdieȱgeradeȱausgeführteȱTransaktionȱerfolgreichȱzuȱEndeȱgeführtȱwurdeȱoderȱ nicht?ȱ Erȱkannȱesȱgarȱnichtȱerfahren,ȱdaȱerȱüberȱkeineȱRecoveryȬInformationȱverfügt.ȱ DieȱAnwendungȱmussȱselbstȱOperationenȱanȱderȱBenutzerschnittstelleȱimpleȬ mentieren,ȱdieȱeineȱÜberprüfungȱderȱletztenȱAktionenȱermöglicht.ȱDiesȱistȱaberȱ nichtȱimmerȱmöglich.ȱ 16. KönnenȱeinȱEJBȬContainerȱundȱeinȱ.NETȬEnterpriseȬServicesȬContainerȱeineȱgemeinȬ sameȱ Transaktionȱ ausführenȱ undȱ dieseȱ koordinieren?ȱ Begründenȱ Sieȱ Ihreȱ EntscheiȬ dung!ȱ Diesȱistȱgrundsätzlichȱnichtȱmöglich,ȱdaȱ.NETȱdenȱMicrosoftȱTransactionȱServerȱ (MTS)ȱundȱEJBȱdenȱaufȱdemȱOTSȬStandardȱbasierendenȱJavaȱTransactionȱSerȬ viceȱ (JTS)ȱ verwendet.ȱ MTSȱ undȱ JTSȱ sindȱ nichtȱ miteinanderȱ kompatibelȱ undȱ könnenȱ daherȱ auchȱ keineȱ Transaktionskontexteȱ austauschenȱ undȱ auchȱ keinȱ verteiltesȱCommitȱdurchführen.ȱ 17. Warumȱ funktioniertȱ dasȱ starreȱ ACIDȬKonzeptȱ fürȱ Transaktionenȱ mitȱ Webservicesȱ nicht?ȱWelchesȱTransaktionsmodellȱwürdenȱSieȱfürȱeineȱWebserviceȬbasierteȱAnwenȬ dung,ȱdieȱdreiȱWebserviceȬOperationenȱunterschiedlicherȱDiensteproviderȱinȱeinerȱzuȬ sammenhängendenȱ(atomaren)ȱAktionsfolgeȱnutzenȱmuss,ȱvorschlagen?ȱ
ȱ
397
7ȱȱLösungenȱzuȱdenȱÜbungsaufgabenȱ Dasȱ ACIDȬTransaktionskonzeptȱ istȱ fürȱ WebserviceȬTransaktionenȱ zuȱ starr.ȱ Esȱ müsstenȱalleȱdreiȱDiensteproviderȱdieȱgleichenȱTransaktionsmechanismenȱunȬ terstützen.ȱ Sinnvollȱ erscheintȱ trotzȱ einigerȱ andererȱ Vorschlägeȱ ausȱ StandardisierungsgreȬ mienȱwieȱOASISȱderzeitȱimmerȱnoch,ȱjedenȱWebserviceȱfürȱsichȱalsȱeigenstänȬ digeȱ Transaktionȱ zuȱ implementieren.ȱ Einȱ Recoveryȱ kannȱ imȱ Fehlerfallȱ dannȱ nurȱ durchȱ eineȱ Kompensationstransaktionȱ erfolgen,ȱ dieȱ aberȱ inȱ derȱ AnwenȬ dungȱselbstȱrealisiertȱwerdenȱmuss.ȱDiesȱistȱeinȱpragmatischerȱAnsatz,ȱderȱnaȬ türlichȱnichtȱimmerȱganzȱsicherȱfunktioniert,ȱaberȱdafürȱrobustȱist.ȱ 18. WasȱsindȱimȱBTPȬTransaktionsstandardȱCohesiveȱBusinessȱTransactions?ȱ Cohesiveȱ Businessȱ Transactionsȱ sindȱ offenȱ geschachtelteȱ Transaktionen.ȱ Derȱ KoordinatorȱerzeugtȱdieȱTransaktionȱundȱruftȱinnerhalbȱdieserȱmehrereȱServiȬ cesȱ inȱ Subtransaktionenȱ auf.ȱ Wennȱ eineȱ Subtransaktionȱ nichtȱ erfolgreichȱ verȬ läuft,ȱ kannȱ derȱ Koordinatorȱ überȱ dieȱ weitereȱ Ausführungȱ bzw.ȱ denȱ Abbruchȱ entscheiden.ȱ Diesȱ mussȱ vomȱ Entwicklerȱ derȱ Haupttransaktionȱ beiȱ derȱ ProȬ grammierungȱ festgelegtȱ werden.ȱ Dieȱ ACIDȬKorrektheitskriterienȱ könnenȱ hierȱ nichtȱerfülltȱwerden.ȱ
7.5 Architekturen verteilter betrieblicher Anwendungen 1.
NennenȱSieȱQualitätskriterienȱzuȱBewertungȱeinerȱSoftwareȬArchitektur!ȱ Esȱ gibtȱ vieleȱ Kriterien,ȱ dieȱ zurȱ Bewertungȱ herangezogenȱ werdenȱ können.ȱ „SichtbareȱKriterienȱ(beiȱderȱAusführungȱdesȱSystemsȱerkennbar)ȱsindȱFunktiȬ onsfähigkeit,ȱ Leistungȱ undȱ Skalierbarkeit,ȱ Transaktionssicherheit,ȱ Sicherheit,ȱ VerfügbarkeitȱundȱUsability.ȱ Zuȱ denȱ nichtȱ beobachtbarenȱ Qualitätskriterienȱ gehörenȱ dieȱ Einhaltungȱ vonȱ Standards,ȱ dieȱ Strukturiertheitȱ derȱ Software,ȱ dieȱ Portabilität,ȱ dieȱ WiederverȬ wendbarkeit,ȱdieȱIntegrierbarkeitȱundȱdieȱTestbarkeit.ȱ WichtigȱistȱauchȱdieȱEinhaltungȱderȱPrinizipienȱderȱSoftwareentwicklung.ȱDaȬ zuȱgehören:ȱSeparationȱofȱConcerns,ȱComprehensionȱ(intellektuelleȱBeherrschȬ barkeit),ȱ Korrektheitȱ undȱ Vollständigkeit,ȱ Ersetzbarkeit,ȱ Buildability,ȱ loseȱ KopplungȱundȱhoheȱKohäsionȱsowieȱdieȱVerringerungȱderȱKomplexität.ȱ
2.
WasȱistȱeinȱdatenzentrierterȱArchitekturstil?ȱ Hauptzielȱ diesesȱ Architekturstilsȱ istȱ dieȱ Verwaltungȱ vonȱ Datenȱ undȱ derȱ ZugriffȱaufȱdieȱDaten.ȱ
3.
Wasȱverstehtȱmanȱunterȱeinemȱ„unabhängigenȱKomponentenstil“?ȱ
398 ȱ
7.5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ DieserȱArchitekturstilȱumfasstȱeigenständigeȱPeersȱ(ObjekteȱoderȱProzesse),ȱdieȱ unabhängigȱ voneinanderȱ arbeitenȱ undȱ miteinanderȱ überȱ Nachrichtenȱ komȬ munizieren.ȱ 4.
WelchenȱVorteilȱkannȱeineȱPeerȬtoȬPeerȬArchitekturȱimȱVergleichȱzuȱeinerȱklassischenȱ ClientȬServerȬArchitekturȱbringen?ȱ PeerȬtoȬPeerȬArchitekturenȱ sindȱ imȱ Vergleichȱ zuȱ klassischenȱ ClientȬServerȬ Architekturenȱ robuster.ȱ Esȱ gibtȱ keinenȱ Server,ȱ derȱ alsȱ Singleȱ Pointȱ ofȱ Failureȱ einenȱ Engpassȱ bildenȱ kann.ȱ Amȱ robustestenȱ sindȱ reineȱ PeerȬtoȬPeerȬ Architekturen,ȱdaȱhierȱalleȱPeersȱgleichberechtigtȱsind.ȱNichtȱalleȱAnwendunȬ genȱkönnenȱaberȱaufȱBasisȱeinerȱPeerȬtoȬPeerȬArchitekturȱrealisiertȱwerden.ȱ
5.
Istȱ esȱ inȱ einerȱ dreischichtigenȱ ClientȬServerȬAnwendungȱ möglich,ȱ dieȱ TransaktionsȬ klammerungȱ imȱ Clientprogrammȱ zuȱ hinterlegen,ȱ wennȱ dieȱ Serverȱ zustandslosȱ arbeiȬ ten?ȱErläuternȱSieȱIhreȱEntscheidung!ȱ DieseȱVorgehensweiseȱistȱgrundsätzlichȱschwierig,ȱdaȱeinȱzustandsloserȱServerȱ jedenȱ Methodenaufrufȱ abschließtȱ undȱ damitȱ auchȱ evtl.ȱ Transaktionen,ȱ dieȱ währendȱderȱMethodenbearbeitungȱausgeführtȱwerden,ȱbeendet.ȱEinȱRollback,ȱ dasȱ derȱ Clientȱ initiiert,ȱ könnteȱ nurȱ überȱ Kompensationstransaktionenȱ ausgeȬ führtȱwerden.ȱClientsystemeȱkönnenȱaberȱleichterȱausfallen,ȱdaȱsieȱmeistȱnichtȱ hochverfügbarȱ sind.ȱ Beiȱ Ausfallȱ einesȱ Clientsȱ istȱ dasȱ Transaktionsendeȱ dannȱ undefiniert.ȱ Generellȱ sollteȱ inȱ ClientȬServerȬAnwendungenȱ dieȱ TransaktionsȬ steuerungȱnichtȱinȱeinemȱdochȱrechtȱunsicherenȱClientȱliegen.ȱ
6.
Nennenȱ Sieȱ VorȬȱ undȱ Nachteileȱ einerȱ dreischichtigenȱ imȱ Vergleichȱ zuȱ einerȱ zweiȬ schichtigenȱClientȬServerȬArchitektur!ȱ Vorteileȱ einerȱ dreischichtigenȱ Architekturȱ sind,ȱ dassȱ manȱ dieȱ BusinessȬLogikȱ sauberȱ inȱ Serverbausteinenȱ kapselnȱ undȱ auchȱ denȱ Ressourcenzugriffȱ vonȱ derȱ Präsentationsschichtȱentkoppelnȱkann.ȱNachteiligȱistȱderȱzusätzlicheȱAufwandȱ fürȱdieȱProgrammierungȱundȱPflegeȱderȱBusinessȬLogikȬSchicht.ȱ Vorteileȱ einerȱ zweischichtigenȱ Architekturȱ sindȱ derȱ geringereȱ ProgrammierȬ aufwandȱundȱbisȱzuȱeinerȱbestimmtenȱGrößeȱdesȱSystemsȱauchȱdieȱvereinfachȬ teȱ Pflege.ȱ Nachteiligȱ istȱ dieȱ fehlendeȱ Entkopplungȱ derȱ Präsentationsschichtȱ vomȱRessourcenzugriff.ȱDatenbankänderungenȱwirkenȱsichȱunmittelbarȱinȱderȱ Präsentationsschichtȱaus,ȱwasȱbeimȱdreischichtigenȱAnsatzȱnichtȱimmerȱsoȱist.ȱ Grundsätzlichȱ istȱ abȱ einerȱ bestimmtenȱ Größeȱ desȱ Systemsȱ eineȱ dreischichtigeȱ Architekturȱ vorteilhafter,ȱ allerdingsȱ sindȱ auchȱ immerȱ alleȱ Randbedingungenȱ zuȱ betrachten.ȱ Beiȱ einerȱ Software,ȱ dieȱ zwarȱ großȱ ist,ȱ aberȱ nurȱ einmalȱ genutztȱ wird,ȱ kannȱ diesȱ schonȱ wiederȱ andersȱ aussehen.ȱ Wieȱ manȱ sieht,ȱ istȱ dieȱ EntȬ scheidungȱnichtȱeinfachȱundȱesȱgibtȱkeinȱStandardvorgehen.ȱ
ȱ
399
7ȱȱLösungenȱzuȱdenȱÜbungsaufgabenȱ 7.
WieȱwürdenȱSieȱeineȱTransaktionȱinȱeinerȱmehrschichtigenȱClientȬServerȬAnwendungȱ programmieren,ȱ wennȱ alleȱ Datenbankzugriffeȱ überȱ Serverdiensteȱ abgewickeltȱ werdenȱ undȱdieȱTransaktionȱmehrereȱServerȱnutzenȱmuss?ȱ InȱdiesemȱFallȱistȱdieȱAnwendungȱvonȱverteiltenȱTransaktionenȱmöglich.ȱÜberȱ einenȱ Transaktionskoordinator,ȱ derȱ inȱ derȱ Regelȱ inȱ einemȱ ApplicationȬServerȱ vorhandenȱist,ȱerfolgtȱdieȱverteilteȱKoordination.ȱDieȱTransaktionenȱsolltenȱimȱ Serverȱausgeführtȱwerden,ȱderȱClientȱnutztȱnurȱdieȱServerdiensteȱundȱsiehtȱdieȱ Transaktionssteuerungȱnicht.ȱ Daȱ verteilteȱTransaktionenȱ inȱ derȱ Praxisȱ nochȱ rechtȱ problematischȱ sindȱ(2PCȬ Protokollȱistȱblockierend),ȱkannȱmanȱauchȱaufȱverteilteȱTransaktionenȱverzichȬ ten.ȱ Jederȱ Dienstȱ führtȱ dannȱ fürȱsichȱabgeschlosseneȱ Transaktionenȱ aus.ȱRollȬ backȬSituationenȱsindȱdannȱaberȱinȱderȱAnwendungȱdurchȱpassendeȱKompenȬ sationsstrategienȱanzuwickeln.ȱȱ EsȱkommtȱalsoȱaufȱdieȱkonkreteȱAnwendungȱan.ȱWennȱmanȱverteilteȱTransakȬ tionenȱvermeidenȱkann,ȱistȱdiesȱheuteȱzuȱempfehlen.ȱ
8.
WasȱsindȱapplikationsspezifischeȱBausteineȱundȱwasȱsindȱgenerischeȱSoftwarebausteiȬ ne?ȱNennenȱSieȱeinigeȱBeispiele!ȱ Applikationsspezifischeȱ Softwarebausteineȱ sindȱ nurȱ fürȱ spezielleȱ AnwendunȬ genȱkonzipiertȱundȱeinsetzbar.ȱSieȱimplementierenȱAnwendungslogikȱundȱdieȱ Wiederverwendbarkeitȱistȱeingeschränkt.ȱBeispielȱhierfürȱistȱeinȱspeziellerȱLoȬ gigbausteinȱfürȱeineȱBankanwendung.ȱ Generischeȱ Softwarebausteineȱ sindȱ unabhängigȱ vonȱ derȱ Anwendungslogikȱ undȱbietenȱeherȱtechnischeȱFunktionen.ȱSieȱsindȱfürȱverschiedeneȱApplikatioȬ nenȱ verwendbar.ȱ Beispieleȱ hierfürȱ sindȱ Bausteineȱ fürȱ dasȱ Tracing,ȱ dasȱ LogȬ ging,ȱdieȱNamensauflösungȱoderȱallgemeinȱnutzbareȱGUIȬBasisfunktionen.ȱ
9.
ErläuternȱSieȱdasȱDAOȬPatternȱinȱVerbindungȱmitȱdemȱDTOȬPattern.ȱ DAOsȱ(DataȱAccessȱObjects)ȱsindȱPatterns,ȱmitȱdenenȱmanȱdenȱZugriffȱaufȱDaȬ tenbankenȱ realisierenȱ kann.ȱ Derȱ Zugriffȱ aufȱ Datenbankenȱ erfolgtȱ hierȱ ausȬ schließlichȱ überȱ DAOȬInstanzen.ȱ Insbesondereȱ beiȱ mehrschichtigenȱ ArchitekȬ turenȱistȱesȱsinnvoll,ȱdieȱDAOȬObjekteȱnichtȱdirektȱanȱdieȱPräsentationsschichtȱ zuȱ übertragen,ȱ sondernȱ dafürȱ spezielleȱ ȱ DTOȬObjekteȱ (Dataȱ Transferȱ Objects)ȱ zuȱ nutzen.ȱ DTOsȱ sindȱ eigenständigeȱ Objektklassen,ȱ dieȱ vonȱ derȱ DatenbankȬ strukturȱentkoppeltȱsind,ȱmitȱeinfachenȱMethodenȱzurȱBearbeitung.ȱDurchȱEinȬ satzȱdesȱDAOȱundȱdesȱDTOȬPatternsȱkannȱmanȱeineȱEntkopplungȱderȱDatenȬ bankȱ vonȱ derȱ BusinessȬLogikȱ undȱ eineȱ Entkopplungȱ derȱ Präsentationslogikȱ vonȱ derȱ BusinessȬLogikȱ erreichen.ȱ Allerdingsȱ istȱ diesȱ mitȱ Overheadȱ verbunȬ den.ȱȱ
400 ȱ
7.5ȱȱArchitekturenȱverteilterȱbetrieblicherȱAnwendungenȱ 10. WozuȱbenötigtȱmanȱdasȱBusinessȬDelegateȬPattern?ȱ Dasȱ BusinessȬDelegateȬPatternȱ dientȱ derȱ Entkopplungȱ vonȱ GeschäftslogikȬ Bausteinenȱ vonȱ derȱ technischenȱ Implementierung.ȱ Damitȱ kannȱ derȱ LookupȬ Codeȱ undȱ auchȱ dasȱ ExceptionȬHandlingȱ undȱ weitereȱ technischeȱ Detailsȱ vorȱ demȱ nutzendenȱ Clientbausteinȱ verborgenȱ werden.ȱ Dieȱ technischeȱ ServerȬ zugriffsschnittstelleȱwirdȱalsoȱgekapselt.ȱ 11. DiskutierenȱSieȱdieȱAuswirkungenȱeinerȱORMȬPersistenzschichtȱaufȱdieȱLeistungsfäȬ higkeitȱdesȱDatenzugriffs.ȱ Dieȱ zusätzlicheȱ Schichtȱ bedeutetȱ zunächstȱ Overheadȱ undȱ damitȱ eineȱ LeisȬ tungseinbuße.ȱ Eingriffeȱ ausȱ Optimierungsgründenȱ sindȱ schwieriger.ȱ AllerȬ dingsȱ wirdȱ inȱ derȱ ORMȬSchichtȱ eineȱ gezielteȱ Optimierungȱ derȱ DatenbankȬ zugriffeȱ ermöglichtȱ werden.ȱ Dieȱ Optimierungȱ mussȱ allerdingsȱ derȱ Herstellerȱ desȱORMȬProduktsȱentwickeln.ȱEsȱkommtȱalsoȱaufȱdasȱORMȬProduktȱan,ȱwieȱ dieȱkonkretenȱAuswirkungenȱsind.ȱ 12. WelcheȱAufgabeȱhatȱderȱEntityȬManagerȱinȱderȱJavaȱPersistenceȱAPI?ȱ DerȱEntityȬManagerȱstelltȱeineȱzentraleȱInstanzȱfürȱPersistenzoperationenȱdar.ȱ Hierȱ wirdȱ einȱ ObjectȬRelationalȬMappingȱ durchgeführt.ȱ Dieȱ EntityȬManagerȬ SchnittstelleȱstelltȱdieȱDiensteȱbereit,ȱumȱEntitiesȱzuȱverwaltenȱ(create,ȱfind,…)ȱ undȱ Queriesȱ oderȱ sonstigeȱ Operationenȱ auszuführen.ȱ Zudemȱ werdenȱ OptiȬ mierungenȱfürȱdenȱZugriffȱaufȱdieȱDatenbank,ȱwieȱetwasȱCaching,ȱvorgenomȬ men.ȱ 13. WasȱistȱeinȱPersistenzkontextȱimȱSinneȱderȱJavaȱPersistenceȱAPI?ȱ Derȱ Persistenzkontextȱ verwaltetȱ alleȱ Entities,ȱ dieȱ automatischȱ inȱ dieȱ DatenȬ bankȱgeschriebenȱwerdenȱmüssen.ȱDieseȱEntitiesȱwerdenȱalsȱmanagedȱEntitiesȱ bezeichnet.ȱDasȱSchreibenȱaufȱdieȱDatenbankȱhängtȱvonȱderȱverwendetenȱStraȬ tegieȱab.ȱWennȱbeispielsweiseȱinȱeinerȱTransaktionȱmehrereȱEntitiesȱverändertȱ undȱwiederȱabgespeichertȱwerden,ȱbestehtȱderȱPersistenzkontextȱwährendȱdieȬ serȱTransaktionȱausȱdenȱbearbeitetenȱEntities.ȱȱ
ȱ
401
Literaturhinweise [Abtsȱ2003]ȱAbts,ȱD.:ȱClient/ServerȬProgrammierungȱmitȱJava,ȱViewegȱVerlag,ȱ2003ȱ [Andresenȱ2003]ȱAndresen,ȱA.:ȱKomponentenbasierteȱSoftwareenwicklungȱmitȱ MDA,ȱUMLȱundȱXML,ȱHanserȱVerlag,ȱ2003ȱ [Baukeȱ2006]ȱBauke,ȱH.;ȱMertens,ȱS.:ȱClusterȱComputing,ȱSpringerȱVerlag,ȱ2006ȱ [Backschatȱ2007]ȱBackschat,ȱM.;ȱRücker,ȱB.:ȱEnterpriseȱJavaBansȱ3.0,ȱ2.ȱAuflage,ȱ SpektrumȱAkademischerȱVerlag,ȱ2007ȱ [Bauerȱ2000]ȱBauer,ȱN.;ȱHauptmann,ȱJ.;ȱPeterȱMandl,ȱWeise,ȱT.:ȱCORBA;ȱSchaltzentraȬ le;ȱVerteilteȱTransaktionenȱaufȱBasisȱvonȱCORBAȱOTS;ȱiXȱ1/2000,ȱS.ȱ116ȱȱ [Beegerȱ2006]ȱBeeger,ȱR.;ȱHaase,ȱA.;ȱRoock,ȱS.;ȱSanitz,ȱS.:ȱHibernateȱȬȱPersistenzȱinȱ JavaȬSystemenȱmitȱHibernate,ȱ3,ȱdpunkt.verlag,ȱ2006ȱ [Bengelȱ2004]ȱBengel,ȱG.:ȱVerteilteȱSysteme,ȱ4.ȱAuflage,ȱViewegȬVerlag,ȱ2004ȱ [Bellȱ1992]ȱBell,ȱDavid;ȱGrimson,ȱJane:ȱDistributedȱDatabaseȱSystems,ȱAddisonȱ Wesley,ȱ1992ȱ [Bernsteinȱ1987]ȱBernstein,ȱP.ȱA.;ȱHadzilacos,ȱV.;ȱGoodman,ȱN.:ȱConcurrencyȱControlȱ andȱRecovery,ȱAddisonȬWesley,ȱ1987ȱ [Birrelȱ1993]ȱBirrell,ȱA.;ȱEvers,ȱD.;ȱNelson,ȱG.;ȱOwicki,ȱS.,ȱWobber,ȱE.:ȱDistributedȱGarȬ bageȱCollectionȱforȱNetworkȱObjects,ȱDigitalȱSystemsȱResearchȱCenter,ȱPaloȱAlto,ȱ 1993ȱ [Bloomerȱ1993]ȱBloomer,ȱJ.:ȱPowerȱProgrammingȱwithȱRPC,ȱO’Reilly&Associatesȱ Inc.,ȱ1993ȱ [Burkeȱ2006]ȱBurke,ȱB.;ȱMonsonȬHaefel,ȱR.:ȱEnterpriseȱJavaBeansȱ3.0,ȱ5.ȱAusgabe,ȱ O’Reilly,ȱ2006ȱ [Comerȱ2002]ȱComer,ȱD.:ȱComputernetzwerkeȱundȱInternets,ȱ3.ȱAuflage,ȱPearsonȱ Studium,ȱ2002ȱ [Coulourisȱ2002]ȱCoulouris,ȱG.;ȱDollimore,ȱJ.;ȱKindberg,ȱT.:ȱVerteilteȱSystemeȱKonȬ zepteȱundȱDesign,ȱPearsonȱStudium,ȱ2002ȱ [Dadamȱ1996]ȱDadam,ȱP.:ȱVerteilteȱDatenbankenȱundȱClientȬ/ServerȬSysteme,ȱ SpringerȱVerlag,ȱ1996ȱ [DTPȱ1991]ȱX/Open:ȱDistributedȱTransactionȱProcessing:ȱTheȱXAȱSpecification,ȱ CAEȱSpecification,ȱX/OpenȱCompanyȱLtd.,ȱU.K.,ȱ1991ȱ
403
Literaturhinweiseȱ [DTPȱ1992]ȱX/Open:ȱDistributedȱTransactionȱProcessing:ȱTheȱTXȱ(TransactionȱDeȬ marcaton)ȱSpecification,ȱPreliminaryȱSpecification,ȱX/OpenȱCompanyȱLtd.,ȱU.K.,ȱ 1992ȱ [DTPȱ1993a]ȱX/Open:ȱDistributedȱTransactionȱProcessing:ȱReferenceȱModelȱVersionȱ 2,ȱX/OpenȱCompanyȱLtd.,ȱU.K.,ȱ1993ȱ [DTPȱ1993b]ȱX/Open:ȱDistributedȱTransactionȱProcessing:ȱTheȱTxRPCȱSpecification,ȱ PreliminaryȱSpecification,ȱX/OpenȱCompanyȱLtd.,ȱU.K.,ȱ1993ȱ [DTPȱ1993c]ȱX/Open:ȱDistributedȱTransactionȱProcessing:ȱTheȱPeerȬtoȬPeerȱSpecifiȬ cation,ȱSnapshot,ȱX/OpenȱCompanyȱLtd.,ȱU.K.,ȱ1993ȱ [DTPȱ1993d]ȱX/Open:ȱDistributedȱTransactionȱProcessing:ȱTheȱXATMIȱSpecificaȬ tion,ȱPreliminaryȱSpecification,ȱX/OpenȱCompanyȱLtd.,ȱU.K.,ȱ1993ȱ [DTPȱ1993e]ȱX/Open:ȱACSE/Presentation:ȱTransactionȱProcessingȱAPIȱ(XAPȬTP),ȱ PreliminaryȱSpecification,ȱX/OpenȱCompanyȱLtd.,ȱU.K.,ȱ1993ȱ [DTPȱ1993f]ȱX/Open:ȱDistributedȱTransactionȱProcessing:ȱTheȱXA+ȬSpecification,ȱ X/OpenȱCompanyȱLtd.,ȱU.K.,ȱ1993ȱ [Dustdarȱ2003]ȱDustdar,ȱS.;ȱGall,ȱH.;ȱHauswirthȱM.:ȱSoftwareȬArchitekturenȱfürȱverȬ teilteȱSysteme,ȱSpringerȬVerlag,ȱ2003ȱ [Elmagarmidȱ1992]ȱElmagarmid,ȱA.:ȱDatabaseȱTransactionȱModelsȱforȱAdvancedȱ Applications,ȱMorganȱKaufmann,ȱ1992ȱ [Gammaȱ1997]ȱGamma,ȱE.;ȱHelm,ȱR.;ȱJohnson,ȱR.;ȱVlissides,ȱJ.:ȱDesignȱPatternsȱȬȱEleȬ mentsȱofȱReusableȱObjectȱOrientedȱSoftware,ȱAddisonȬWesley,ȱ1997ȱ [Gerdsenȱ1994a]ȱGerdsen,ȱP.;ȱKröger,ȱP.:ȱKommunikationssystemeȱ1ȱTheorieȱEntȬ wurfȱMeßtechnik,ȱSpringerȱVerlag,ȱ1994ȱ [Gerdsenȱ1994b]ȱGerdsen,ȱP.;ȱKröger,ȱP.:ȱKommunikationssystemeȱ2ȱAnleitungȱzumȱ praktischenȱEntwurfȱ(SDL),ȱSpringerȱVerlag,ȱ1994ȱ [Grayȱ1993]ȱGray,ȱJ.;ȱReuter,ȱA.:ȱTransactionȱProcessing,ȱConceptsȱandȱTechniques,ȱ MorganȱKaufmannȱPublisher,ȱ1993ȱ [Grayȱ1995]ȱGray,ȱJ.:ȱEdwards,ȱJ.:ȱScaleȱUpȱwithȱTPȱMonitors,ȱBYTE,ȱApril,ȱS.ȱ123Ȭ 128,ȱ1995ȱ [Greulichȱ1997]:ȱGreulich,ȱM.:ȱDiskussionȱundȱImplementierungȱdesȱvonȱderȱOMGȱ definiertenȱTransaktionsservicesȱaufȱBasisȱdesȱTransaktionsmonitorsȱUTM,ȱTUȱ München,ȱ1997ȱ [Haaseȱ2001]ȱHaase,ȱO.:ȱKommunikationȱinȱverteiltenȱAnwendungen,ȱEinführungȱ inȱSockets,ȱJavaȱRMI,ȱCORBAȱundȱJini,ȱOldenbourgȱVerlag,ȱ2001ȱ ȱ
404
Literaturhinweiseȱ [ISOȱ1984]ȱISO/IECȱ7498:ȱOpenȱSystemsȱInterconnectionȱȬȱBasicȱReferenceȱModel,ȱ 1984ȱ [ISOȱ1991]ȱISO/IECȱ9804:ȱInformationȱTechnologyȱȬȱOpenȱSystemsȱInterconnectionȱ ȬȱServiceȱDefinitionȱforȱtheȱCommitment,ȱConcurrencyȱandȱRecoveryȱServiceȱEleȬ ment,ȱ1990ȱ [ISOȱ1992a]ȱISO/IECȱ10026Ȭ1:ȱInformationȱTechnologyȱȬȱOpenȱSystemsȱInterconnecȬ tionȱȬȱDistributedȱTransactionȱProcessingȱȬȱPartȱ2:ȱOSIȱTPȱModel,ȱ1992ȱ [ISOȱ1992b]ȱISO/IECȱ10026Ȭ2:ȱInformationȱTechnologyȱȬȱOpenȱSystemsȱInterconnecȬ tionȱȬȱDistributedȱTransactionȱProcessingȱȬȱPartȱ2:ȱOSIȱTPȱService,ȱ1992ȱ [ISOȱ1992c]ȱISO/IEC:ȱ10165Ȭ4:ȱInformationȱTechnologyȱȬȱOpenȱSystemsȱInterconȬ nectionȱȬȱStructureȱofȱManagementȱInformation:ȱGuidelinesȱforȱtheȱDefinitionȱofȱ ManagedȱObjectsȱ(GDMO);ȱISO/IEC,ȱ1992ȱ [Jablonskiȱ1997]ȱJablonski,ȱS.;ȱBöhm,ȱM.:ȱSchulze,ȱW.:ȱWorkflowȱManagement,ȱEntȬ wicklungȱvonȱAnwendungenȱundȱSystemen,ȱdpunkt.verlag,ȱ1997ȱ [Jeckleȱ2004]ȱJeckle,ȱM.;ȱRupp,ȱC.;ȱHahn,ȱJ.;ȱZengler,ȱB.,ȱQueins,ȱS.:ȱUML2ȱglasklar,ȱ HanserȱVerlag,ȱ2004ȱ bourgȱVerlag,ȱMünchenȱWien,ȱ1996ȱ[Kellerȱ2007]ȱKeller,ȱW.:ȱITȬ Unternehmensarchitektur,ȱdpunkt.verlag,ȱ2007ȱ [Kemperȱ1996]ȱKemper,ȱA.;ȱEickler,ȱA.:ȱDatenbanksysteme,ȱEineȱEinführung,ȱOldenȱ [Kernerȱ1993]ȱKerner,ȱH.:ȱRechnernetzeȱnachȱOSI,ȱ2.ȱAuflage,ȱAddisonȬWesley,ȱ1993ȱ [Koningȱ2002]ȱKoning,ȱH.;ȱDormann,ȱC.;ȱcanȱVliet,ȱH.:ȱPracticalȱGuidelinesȱforȱtheȱ ReadabilityȱofȱITȬArchitectureȱDiagrams,ȱSIGDOC’02,ȱOctoberȱ20Ȭ23,ȱ2002ȱ [Krafzigȱ2005]ȱKrafzig,ȱD.;ȱBanke,ȱK.;ȱSlama,ȱD.:ȱEnterpriseȱSOAȱServiceȬOrientedȱ ArchitectureȱBestȬPractices,ȱPrenticeȱHall,ȱ2005ȱ [Kreuzȱ1996]ȱKreuz,ȱD.;ȱLange,ȱT.:ȱOffeneȱObjektorientierteȱTransaktionsverarbeiȬ tung,ȱTUȱHamburgȬHarburg,ȱ1996ȱ [Kreuzȱ1997]ȱKreuz,ȱD.,ȱVogt,ȱF.:ȱTransaktionalesȱOLEȱ=ȱViper?,ȱTechnischeȱUniverȬ sitätȱHamburgȬHarburg,ȱArbeitsbereichȱTelematik,ȱ1997ȱ [Kruchtenȱ1995]ȱKruchten,ȱP.:ȱArchitecturalȱBlueprintsȱ–ȱTheȱ„4+1“ȱViewȱModelȱofȱ SoftwareȱArchitecture,ȱIEEEȱSoftwareȱ12(6),ȱS.ȱ42Ȭ50ȱ [Kuhrmanȱ2004]ȱKuhrmann,ȱM.ȱu.a.:ȱVerteilteȱSystemeȱmitȱ.NETȱRemoting,ȱSpektȬ rumȱAkademischerȱVerlag,ȱ2004ȱ [Kuroseȱ2002]ȱKurose,ȱJ.ȱF.;ȱRoss,ȱK.ȱW.:ȱComputernetze,ȱPearsonȱStudium,ȱ2002ȱȱ [Laureysȱ1995]ȱLaureys,ȱM.,ȱTricaud,ȱE.:ȱACTranSȱPresentationȱDocument,ȱOpenȱ Group,ȱ1995ȱ
405
Literaturhinweiseȱ [Lockermannȱ1993]ȱLockemann,ȱP.,ȱC.,ȱKrüger,ȱG.;ȱKrumm,ȱH.:ȱTelekommunikationȱ undȱDatenhaltung,ȱCarlȱHanserȱVerlag,ȱ1993ȱ [McGoveranȱ1993]ȱMcGoveran,ȱD.;ȱDate,ȱC.,ȱJ.:ȱAȱGuideȱToȱSYBASEȱandȱSQLȱServer,ȱ AddisonȬWesley,ȱ1993ȱ [Mehnertȱ2006]ȱMehnert,ȱH.:ȱArchitekturȬbasierteȱStrategienȱzurȱSelbstȬ Optimierung,ȱTUȱBerlin,ȱ2006ȱ [Meyerȱ1988]ȱMeyerȬWegener,ȱK.:ȱTransaktionssysteme,ȱTeubnerȱVerlag,ȱStuttgart,ȱ 1988ȱ [Monsonȱ1999]ȱMonsonȬHaefel,ȱR.:ȱEnterpriseȱJavaBeans,ȱO’Reilly,ȱ1999ȱ [Mahlmannȱ2007]ȱMahlmann,ȱP.;ȱSchindelhauer,ȱCh.:ȱPeerȬtoȬPeerȬNetzwerke,ȱSprinȬ gerȬVerlag,ȱ2007ȱ [Mandlȱ2008a]ȱMandl,ȱP.:ȱGrundkursȱBetriebssysteme,ȱViewegȬTeubnerȱVerlag,ȱ 2008ȱ [Mandlȱ2008b]ȱMandl,ȱP.,ȱBakomenko,ȱA.;ȱWeiß,ȱJ.:ȱGrundkursȱDatenkommunikation,ȱ ViewegȬTeubnerȱVerlag,ȱ2008ȱ [Mandlȱ1993a]ȱMandl,ȱP.:ȱEntwicklungȱvonȱKommunikationsanwendungenȱmitȱ ONCȱXDR,ȱTeilȱ1,ȱiXȱ4/1993,ȱS.ȱ208Ȭ213,ȱHeiseȱVerlag,ȱ1993ȱ [Mandlȱ1993b]ȱMandl,ȱP.:ȱEntwicklungȱvonȱKommunikationsanwendungenȱmitȱ ONCȱXDR,ȱTeilȱ2,ȱiXȱ5,ȱS.ȱ193Ȭ201,ȱHeiseȱVerlag,ȱ1993ȱ [Niemannȱ2000]ȱNiemann,ȱH:ȱEKKIS4ȬTransaktionskonzepte,ȱ2000ȱ [OASISȱ2002]ȱOASIS:ȱBusinessȱTransactionȱProtocol,ȱ2002ȱ [OASISȱ2005]ȱOASIS:ȱWebȱServicesȱCoordinationȱFrameworkȱSpecificationȱ(WSȬ CF),ȱEditor’sȱDraftȱ1.0,ȱ2005ȱ [OASISȱ2007a]ȱOASIS:ȱWebȱServicesȱCoordinationȱ(WSȬCoordination)ȱVersionȱ1.1,ȱ 2007ȱ [OASISȱ2007b]ȱOASIS:ȱWebȱServicesȱAtomicȱTransactionȱ(WSȬAtomicTransaction)ȱ Versionȱ1.1,ȱ2007ȱ [OASISȱ2007c]ȱOASIS:ȱWebȱServicesȱBusinessȱActivityȱ(WSȬBusinessȱActivity,1.1,ȱ 2007ȱ [OMGȱ1999]ȱObjectȱManagementȱGroup:ȱCORBAȱComponentsȱȬȱVolumeȱI,ȱ1999ȱ [OMGȱ1995a]ȱObjectȱManagementȱGroup:ȱObjectȱManagementȱArchitectureȱGuide,ȱ OMGȱTCȱDocumentȱ92.11.1,ȱJohnȱWileyȱ&ȱSons,ȱ1995ȱ [OMGȱ1995b]ȱObjectȱManagementȱGroup:ȱCORBAservices:ȱCommonȱObjectȱServicesȱ Specification,ȱOMGȱTCȱDocumentȱ95Ȭ3Ȭ31,ȱ1995ȱ
406
Literaturhinweiseȱ [OMGȱ2001]ȱObjectȱManagementȱGroup:ȱCORBAservices:ȱTransactionȱServiceȱSpeciȬ fication;ȱV1.2,ȱ2001ȱ [OMGȱ2002a]ȱObjectȱManagementȱGroup:ȱTheȱPortableȱObjectȱAdapter,ȱCommonȱ ObjectȱRequestȱBrokerȱArchitectureȱ(CORBA),ȱv.3.0,ȱJulyȱ2002,ȱȱ [OMGȱ2002b]ȱObjectȱManagementȱGroup:ȱCORBAȱComponents,ȱJuneȱ2002,ȱVersionȱ 3.0ȱ [OMGȱ2004]ȱObjectȱManagementȱGroup:ȱCommonȱObjectȱRequestȱBrokerȱArchitecȬ ture:ȱCoreȱSpecification,ȱv.3.0,ȱMarchȱ2004ȱ [Parnasȱ1984]ȱDavidȱL.ȱParnas,ȱPaulȱC.:ȱTheȱModularȱStructureȱofȱComplexȱSystems.ȱ InȱProc.ȱSoftwareȱEngineering,ȱpagesȱ408–419,ȱ1984ȱ [Ramamrithamȱ1997]ȱRamamritham,ȱK.;ȱChrysanthis,ȱP.ȱK.:ȱAdvancesȱinȱConcurȬ rencyȱControlȱandȱTransactionȱProcessing,ȱIEEEȱComputerȱSocietyȱPress,ȱ1997ȱ [Riggertȱ2001]ȱRiggert,ȱW.:ȱRechnernetze,ȱMünchen,ȱWienȱ2001ȱ [Rothȱ2002]ȱRoth,ȱJ.:ȱMobileȱComputing,ȱGrundlagen,ȱTechnik,ȱKonzepte,ȱ dpunkt.verlag,ȱ2002ȱ [Schillȱ2007]ȱSchill,ȱA.;ȱSpringer,ȱT.:ȱVerteilteȱSysteme,ȱSpringerȬVerlag,ȱ2007ȱ [Schillerȱ2000]ȱSchiller,ȱJ.:ȱMobilkommunikation,ȱTechnikenȱfürȱdasȱallgegenwärtigeȱ Internet,ȱAddisonȬWesley,ȱ2000ȱȱ [Schwenkertȱ2004]ȱSchwenkert,ȱR.:ȱSkriptumȱzurȱVorlesungȱDatenbanksysteme,ȱ FachhochschuleȱMünchen,ȱFB07,ȱ2004ȱ [Schwichtenbergȱ2007]ȱSchwichtenberg,ȱH.:ȱMicrosoftȱ.netȱ3.0ȱCrashkurs,ȱMicrosoftȱ Pressȱ2007ȱ [Seidenfadenȱ2003]ȱSeidenfaden,ȱL.;ȱGehrke,ȱN.;ȱSchuhmann,ȱM.:ȱPeerȬtoȬPeerȱGridȱ Computingȱ–ȱeineȱprototypischeȱRealisierung,ȱHMDȱ234,ȱ98Ȭ107,ȱdpunkt.verlag,ȱ 2003ȱ [Shawȱ1996]ȱShaw,ȱM.;ȱGarlan,ȱD.:ȱSoftwareȱArchitectureȱȬȱPerspectivesȱonȱanȱ EmergingȱDiscipline,ȱPrenticeȱHall,ȱ1996ȱ [Siederslebenȱ2004]ȱSiedersleben,ȱJ.:ȱModerneȱSoftwarearchitektur,ȱdpunkt.verlag,ȱ 2004ȱ [Stevensȱ2000]ȱStevens,ȱP.;ȱPooleyȱR.:ȱUMLȱSoftwareentwicklungȱmitȱObjektenȱundȱ Komponenten,ȱPearsonȱStudium,ȱ2000ȱ [Stevensȱ2000b]ȱStevens,ȱR.W.:ȱProgrammierenȱvonȱUNIXȬNetzen,ȱHanserȱVerlag,ȱ 2000ȱ ȱ
407
Literaturhinweiseȱ [Starkeȱ2005]ȱStarke,ȱG.:ȱEffektiveȱSoftwarearchitekturen,ȱ2.ȱAuflage,ȱHanserȱVerȬ lag,ȱ2005.ȱ [Sunȱ2004a]ȱSunȱMicrosystems:ȱJavaȱ2ȱSDK,ȱStandardȱEditionȱDocumentation,ȱVerȬ sionȱ1.4.2ȱ [Sunȱ2004b]ȱSunȱMicrosystems:ȱJavaȱRemoteȱMethodȱInvocationȱSpecification,ȱReȬ visionȱ1.10,ȱJavaȱ2ȱSDK,ȱStandardȱEdition,ȱv1.5.0ȱ [Sunȱ1999a]ȱSunȱMicrosystems:ȱJavaȱTransactionȱAPIȱ(JTA),ȱVersionȱ1.01,ȱ1999ȱ [Sunȱ1999b]ȱSunȱMicrosystems:ȱJTSȱTransctionȱServiceȱSpecificationȱVersionȱ1.0,ȱ Releaseȱ8.12.1999ȱ [Sunȱ2002]ȱSunȱMicrosystems,ȱJava™ȱBluePrints,ȱjava.sun.com/blueprints/about/ȱ index.html,ȱAccessedȱMarchȱ2002ȱ [Sunȱ2003]ȱSunȱMicrosystems:ȱEnterpriseȱJavaBeansȱSpecificationȱVersionȱ2.1,ȱ 12/2003ȱ [Sunȱ2005a]ȱSunȱMicrosystems:ȱEnterpriseȱJavaBeans,ȱVersionȱ3.0.ȱEJBȱCoreȱContȬ ractsȱandȱRequirements,ȱJuniȱ2005ȱ [Sunȱ2005b]ȱSunȱMicrosystems:ȱEnterpriseȱJavaBeans,ȱVersionȱ3.0.ȱJavaȱPersistencyȱ API,ȱJuniȱ2005ȱ [Sunȱ2005c]ȱSunȱMicrosystems:ȱEnterpriseȱJavaBeans,ȱVersionȱ3.0.ȱEJBȱ3.0ȱSimplifiedȱ API,ȱJuniȱ2005ȱ [Sunȱ2006a]ȱSunȱMicrosystems:ȱJDBCȱ4.0.ȱSpecification,ȱJSRȱ221,ȱNovemberȱ2006ȱ [Sunȱ2007a]ȱSunȱMicrosystems:ȱEnterpriseȱJavaBeans,:Versionȱvomȱ03.01.2007.ȱ [Sunȱ2007b]ȱSunȱMicrosystems:ȱJavaȱMessageȱService,ȱVersionȱvomȱ27.01.2007ȱ [SuSeȱ2001]ȱSuSE:ȱSuSEȱLinuxȱ7.2ȱNetwerk,ȱsuSEȱGmbH,ȱ2001ȱ [Szyperskiȱ1999]ȱSzyperski,ȱC.:ȱComponentȱSoftware,ȱBeyondȱObjectȬOrientedȱProȬ gramming,ȱAddisonȬWesley,ȱ1998ȱ [Tanenbaumȱ2001]ȱTanenbaum,ȱA.ȱS.:ȱComputernetze,ȱ3.ȱrevidierteȱAuflage,ȱPrentiȬ ceȱHall,ȱ2001ȱȱ [Tanenbaumȱ2003]ȱTanenbaum,ȱA.S.,ȱvanȱStehen,ȱM.:ȱVerteilteȱSystemeȱGrundlagenȱ undȱParadigmen,ȱPearsonȱStudium,ȱ2003ȱ [Tanenbaumȱ2007]ȱTanenbaum,ȱA.S.,ȱvanȱStehen,ȱM.:ȱDistributedȱSystemsȱPrinciplesȱ andȱPradigms,ȱPearsonȱPrenticeȱHall,ȱ2007ȱ [Vastersȱ2002]ȱVasters,ȱC.:ȱ.NETȱEnterpriseȱServices,ȱHanserȱVerlag,ȱ2002ȱ [Vogtȱ1996]ȱVogt,ȱF.,ȱH.:ȱWerkzeugeȱfürȱTransaktionsverarbeitung,ȱheuteȱȬȱmorgen:ȱ dasȱACTranSȬProjekt,ȱTUȱHamburgȬHarburg,ȱ1996ȱ
408
Literaturhinweiseȱ [Vossenȱ1992]ȱVossen,ȱG.,ȱGroßȬHardt,ȱM.:ȱGrundlagenȱderȱTransaktionsverarbeiȬ tung,ȱAddissonȬWesley,ȱ1993ȱ [Wächterȱ1993a]ȱWächter,ȱA.:ȱX/OpenȬStandardȱfürȱverteilteȱTransaktionsverarbeiȬ tung,ȱinȱFokusȱ07/08,ȱITȱVerlag,ȱS.ȱ65Ȭ69,ȱ1993ȱ [Wächterȱ1993b]ȱWächter,ȱA.:ȱClient/ServerȬAnwendungenȱaufȱBasisȱdesȱX/OpenȬ DTPȬStandardsȱX/OpenȬStandard,ȱFokusȱ11/12,ȱITȱVerlag,ȱS.ȱ75Ȭ80,ȱ1993ȱ [Weberȱ1998]ȱWeber,ȱM.:ȱVerteilteȱSysteme,ȱSpektumȱAkademischerȱVerlag,ȱ1998ȱ [Weikumȱ1989]ȱWeikum,ȱG.:ȱGeschachtelteȱTransaktionen,ȱinȱInformatikȬSpektrumȱ 12,ȱS.ȱ102Ȭ106,ȱ1989ȱ [Wolffȱ2006]ȱWolff,ȱE.:ȱSpringȱFrameworkȱfürȱdieȱJavaȬEntwicklung,ȱdpunkt.verlag,ȱ 2006ȱ [Wöhrȱ2004]ȱWöhr,ȱH.:ȱWebȬTechnologien,ȱKonzepteȱȬȱProgrammiermodelleȱȬȱArȬ chitekturen,ȱdpunktȱVerlag,ȱ2004ȱ [W3Cȱ2003a]ȱW3C:ȱSOAPȱVersionȱ1.2ȱPartȱ0:ȱPrimer,ȱW2CȱRecommendationȱ24ȱ Juneȱ2003ȱ [W3Cȱ2003b]ȱW3C:ȱSOAPȱVersionȱ1.2ȱPartȱ1:ȱMessagingȱFramework,ȱW2CȱRecomȬ mendationȱ24ȱJuneȱ2003ȱ [W3Cȱ2004a]ȱW3C:ȱXMLȱSchemaȱPartȱ2:ȱDatatypesȱSecondȱEdition,ȱW3Cȱ RecommendationȱOktoberȱ2004ȱ [W3Cȱ2004b]ȱW3C:ȱWebȱServicesȱArchitectureȱUsageȱScenarios,ȱW3CȱWorkingȱ GroupȱNoteȱ11ȱFebruaryȱ2004ȱ [Zimmerȱ2000]ȱZimmermann,ȱJ.;ȱBeneken,ȱG.:ȱVerteilteȱKomponentenȱundȱDatenȬ bankanbindung,ȱAddisonȱWesley,ȱ2000ȱ [Zitterbartȱ1995]ȱZitterbart,ȱM.:ȱHochleistungskommunikationȱBandȱ1:ȱTechnologieȱ undȱNetze,ȱOldenbourgȱVerlag,ȱ1995ȱ [Zitterbartȱ1996]ȱZitterbart,ȱM.;ȱBraun,ȱT.:ȱHochleistungskommunikationȱBandȱ2:ȱ TransportdiensteȱundȱȬprotokolle,ȱOldenbourgȱVerlag,ȱ1996ȱ
Interessante Web-Links [WWWȬ001]ȱhttp://www.opengroup.org/publications/catalog/:ȱDasȱDTPȬModellȱ (DistributedȱTransactionȱProcessing)ȱderȱOpenȱGroupȱȱ [WWWȬ002]ȱhttp://www.omg.org/library/:ȱObjectȱTransactionȱServicesȱ(OTS)ȱderȱ OMGȱȱ [WWWȬ003]ȱhttp://www.sun.java.com:ȱWebsiteȱvonȱSunȱmitȱInhaltenȱzuȱdenȱJavaȬ Technologienȱ
409
Literaturhinweiseȱ [WWWȬ004]ȱhttp://java.sun.com/j2ee/1.4/docs/index.html:ȱJ2EEȬDokumentationȱ [WWWȬ005]ȱhttp://java.sun.com/j2se/index.jsp:ȱJ2SEȬDokumentation,ȱSunȱMicroȬ systemsȱ [WWWȬ006]ȱhttp://msdn.microsoft.com/:ȱDokumentatonȱzuȱdenȱMicrosoftȬ Produktenȱ [WWWȬ007]ȱhttp://www.apache.org/:ȱWebseiteȱderȱApacheȱGroup.ȱInformationenȱ zuȱOpenȬSourceȬProduktenȱwieȱApacheȱTomcatȱundȱApacheȱWebserverȱ [WWWȬ008]ȱhttp://www.mpiȬforum.org:ȱHomepageȱdesȱMPIȬForums.ȱ [WWWȬ009]ȱhttp://www.omg.org:ȱWebseiteȱderȱObjectȱManagementȱGroupȱ [WWWȬ010]ȱhttp://www.w3.org:ȱWebseiteȱdesȱW3Cȱ [WWWȬ011]ȱhttp://www.wsȬi.org:ȱWebseiteȱderȱWebȱServiceȱInteroperabilityȱOrȬ ganisationȱ [WWWȬ012]ȱhttp://java.cs.uniȬmagdeburg.de/,ȱletzterȱZugriffȱamȱ20.09.2005ȱ [WWWȬ013]ȱhttp://uddi.microsoft.comȱ [WWWȬ014]ȱhttp://uddi.ibm.comȱ [WWWȬ015]ȱwww.sourceforge.net:HierȱwerdenȱeinigeȱOpenȬSourceȬLösungenȱ gehostet,ȱu.a.ȱdasȱSpringȬFrameworkȱ [WWWȬ016]ȱhttp://java.sun.com/blueprints/corej2eepatterns/Patterns/index.htmlȱ [WWWȬ017]ȱhttp://sourceforge.net/projects/aopallianceȱ [WWWȬ018]ȱhttp://www.martinfowler.com/articles/injection.htmlȱ [WWWȬ019]ȱhttp://web1.jcp.org/:ȱHomepageȱdesȱJavaȱCommunityȱProcessȱ(JCP),ȱ inȱdemȱdieȱStandardisierungȱderȱJavaȬAPIsȱorganisiertȱwirdȱ [WWWȬ020]ȱhttp://www.eclipse.org:ȱHomepageȱvonȱEclipseȱ [WWWȬ021]ȱhttp://www.opengroup.org/bookstore/catalog:ȱOpenȱGroup:ȱTechniȬ calȱStandardȱDistributedȱTransactionȱProcessing:ȱTheȱXAȱSpecification,ȱCAEȱSpeciȬ fication,ȱ1992ȱ [WWWȬ022]ȱhttp://www.opengroup.org/bookstore/catalogOpenȱGroup:ȱDistribȬ utedȱTransactionȱProcessing:ȱTheȱTXȱ(TransactionȱDemarcaton),ȱ1995ȱ [WWWȬ023]ȱhttp://www.opengroup.org/bookstore/catalog/g504:ȱOpenȱGroup:ȱ TechnicalȱStandardȱDistributedȱTransactionȱProcessing:ȱReferenceȱModelȱVersionȱ 3,ȱ1996ȱ [WWWȬ024]ȱhttp://ȱwww.opengroup.org/bookstore/catalog/p305:ȱOpenȱGroup:ȱ TechnicalȱStandardȱDistributedȱTransactionȱProcessing:ȱTheȱTxRPCȱSpecification,ȱ 1995ȱ
410
Literaturhinweiseȱ [WWWȬ025]ȱhttp://ȱwww.opengroup.org/bookstore/catalog/c409:ȱOpenȱGroup:ȱ TechnicalȱStandardȱDistributedȱTransactionȱProcessing:ȱTheȱPeerȬtoȬPeerȱSpecificaȬ tion,ȱSnapshot,ȱ1993ȱ [WWWȬ026]ȱhttp://ȱwww.opengroup.org/bookstore/catalog/p306:ȱOpenȱGroup:ȱ DistributedȱTransactionȱProcessing:ȱTheȱXATMIȱSpecification,ȱ1995ȱ [WWWȬ027]ȱhttp://ȱwww.opengroup.org/bookstore/catalog/c409:ȱOpenȱGroup:ȱ TechnicalȱStandardȱACSE/Presentation:ȱTransactionȱProcessingȱAPIȱ(XAPȬTP),ȱ 1994ȱ [WWWȬ028]ȱhttp://ȱwww.opengroup.org/bookstore/catalog/s201:ȱOpenȱGroup:ȱ DistributedȱTransactionȱProcessing:ȱTheȱXA+ȬSpecification,ȱVersionȱ2,ȱ1994ȱ [WWWȬ029]ȱhttp://www.pȬgrid.org:ȱTheȱPȬGridȬProjectȱ [WWWȬ030]ȱhttp://www.napster.de:ȱNapsterȱ [WWWȬ031]ȱhttp://www.gnutella.com:ȱGnutellaȱ [WWWȬ032]ȱhttp://www.freenet.de:ȱFreenetȱ [WWWȬ033]ȱhttp://www.blackberry.com:ȱBlackBerryȱ [WWWȬ034]ȱhttp://www.dȬgrid.de:ȱDȬGridȬInitiative,ȱ [WWWȬ035]ȱwww.springframework.org,ȱSpringȱFrameworkȱ [WWWȬ036]ȱwww.oasis.org:ȱOASISȬWebseiteȱ [WWWȬ037]ȱhttps://jira.amqp.org/:ȱAMQPȱWorkingȱGroupȱ [WWWȬ038]ȱhttp://de.wikipedia.org/wiki:ȱWikipediaȱ [WWWȬ039]ȱhttp://openccm.objectweb.org:ȱOpenCCMȬWebseiteȱ
411
Sachwortverzeichnis ȱ .NETȱEnterpriseȱServicesȱȱ119,ȱ121ȱ 1PCȱȱSieheȱOneȬPhaseȬCommitȬProtokollȱ 2PCȱȱSieheȱTwoȬPhaseȬCommitȬProtokollȱ 2PCȬProtokollȱȱSieheȱTwoȬPhaseȬCommitȬ Protokollȱ 2PLȱȱSieheȱTwoȬPhaseȬLockingȱ 3PCȱȱSieheȱThreeȬPhaseȬCommitȬProtokollȱ ȱ Aȱ ACIDȱȱ231ȱ Atomicityȱȱ231ȱ Consistencyȱȱ231ȱ Durabilityȱȱ232ȱ Isolationȱȱ231ȱ ActiveȱRecordȱȱ351ȱ Agentȱȱ49ȱ AJAXȱȱ372ȱ Aktivierungȱ Clientaktivierungȱȱ45ȱ PerȬRequestȬServerȱȱ45ȱ PersistentȱServerȱȱ45ȱ Serveraktivierungȱȱ45ȱ Singlecallȱȱ45ȱ AMQPȱȱ170ȱ Anomalienȱ dirtyȬreadȱȱ239ȱ lostȬupdateȱȱ238ȱ Phantomproblemȱȱ239ȱ unrepeatableȬreadȱȱ239ȱ Anwendungsarchitekturȱȱ316ȱ Anwendungskernȱȱ319,ȱ331ȱ ApacheȱAxisȱȱSieheȱSOAPȬEngineȱ ApacheȱTomcatȱȱ375ȱ ApplicationȬServerȱȱ114ȱ ApplikationsspezifischeȱBasisfunktionaȬȱ litätȱȱ331ȱ ASN.1ȱȱ38ȱ ȱ
ȱ
asynchronȱȱ29ȱ AxisȱȱSieheȱSOAPȬEngineȱ ȱ Bȱ Bausteinsichtȱȱ321ȱ BERȱȱ38ȱ Bindingȱȱ38,ȱ39ȱ dynamischȱȱ40ȱ statischȱȱ40ȱ BlackBerryȱȱ345ȱ Blutgruppenȱȱ319ȱ Brokerȱȱ48ȱ BTPȱȱ308ȱ BusinessȱProcessȱTransactionȱȱ307ȱ ByzantinischerȱFehlerȱȱ230ȱ ȱ Cȱ Cachingȱȱ46ȱ CallȬandȬReturnȬArchitekturȱȱ325ȱ CallȬbyȬcopyȬrestoreȱȱSieheȱCallȬbyȬcopy/copyȬ backȱ CallȬbyȬvalueȬresultȱȱSieheȱCallȬbyȬcopy/copyȬ backȱ CallȬSemantikȱȱ36ȱ CallȬbyȬcopy/copyȬbackȱȱ37ȱ CallȬbyȬreferenceȱȱ36ȱ CallȬbyȬvalueȱȱ36ȱ CCMȱȱSieheȱCORBAȱComponentsȱ CCRSEȱ TransactionȱBranchȱȱ264ȱ CDRȱȱ73ȱ ChainedȱTransactionsȱȱSieheȱVerketteteȱ Transaktionenȱ Choreographieȱȱ174ȱ ClassȬTableȬInheritanceȱ ORMȱȱ348ȱ ClientȬServerȬModellȱȱ28ȱ ClientȬStubȱȱ50ȱ
413
Sachwortverzeichnisȱ Clientzugriffsarchitekturȱȱ369ȱ CLRȱȱ121ȱ ClusterȬComputersystemeȱȱ6ȱ COMȱȱ119ȱ COM+ȱȱ119ȱ ConcreteȬTableȬInheritanceȱ ORMȱȱ348ȱ ConcurrencyȱControlȱȱ238ȱ Anomalienȱȱ238ȱ Deadlocksȱȱ245ȱ ConcurrencyȬControlȱ kaskadierteȱAbbrücheȱȱ242ȱ OptimistischeȱVerfahrenȱȱ245ȱ Zeitmarkenverfahrenȱȱ244ȱ Containerȱȱ115ȱ CORBAȱComponentsȱȱ116ȱ CIDLȱȱ116ȱ EventȱSinksȱȱ117ȱ EventȱSourcesȱȱ117ȱ Facetsȱȱ117ȱ Receptablesȱȱ117ȱ ȱ Dȱ DAOȬPatternȱȱ353ȱ Datenflussarchitekturȱȱ325ȱ Datensichtȱȱ322ȱ DatenzentrierteȱArchitekturȱȱ324ȱ Deadlocksȱ präziserȱDeadlockȬErkennungsȬ Algorithmusȱȱ246ȱ unpräziserȱDeadlockȬErkennungsȬ Algorithmusȱȱ246ȱ Demarshallingȱȱȱ DesignȬforȬChangeȱȱ330ȱ DNAȱȱ119ȱ DTPȬModellȱȱ267ȱ APȱȱ268ȱ CRMȱȱ268ȱ RMȱȱ268ȱ TMȱȱ268ȱ TXȱȱ268,ȱ272ȱ XAȱȱ268,ȱ272ȱ XA+ȱȱ268ȱ XAPȬTPȱȱ268ȱ ȱ
414 ȱ
Eȱ EagerȱLoadingȱȱ350ȱ Einbringstrategieȱȱ249ȱ Forceȱȱ249ȱ Noforceȱȱ249ȱ EJBȱȱ123ȱ BeanȬmanagedȱTransactionsȱȱ296ȱ BMTȱȱ290ȱ Callbackȱȱ143ȱ ClientȬmanagedȱTransactionsȱȱ295ȱ CMTȱȱ290ȱ ContainerȬmanagedȱTransactionsȱȱ297ȱ Entityȱȱ363ȱ EntityȬBeanȱȱ355ȱ EntityȬCallbackȱȱ368ȱ Injizierenȱȱ139ȱ Interceptorȱȱ144ȱ TimerȱServiceȱȱ136ȱ EJBȬApplicationȬServerȱȱ124ȱ EJBȬContainerȱȱ124ȱ EJBeansȱȱ124ȱ EJBȬInstanzȱȱ124ȱ EnterpriseȱJavaȱBeanȱȱSieheȱEJBȱ EntityȬBeanȱ BMPȱȱ359ȱ CMPȱȱ361ȱ Ersetzungsstrategieȱȱ249ȱ Nostealȱȱ249ȱ Stealȱȱ249ȱ EventȬbasierteȱArchitekturenȱȱ344ȱ ȱ Fȱ Facharchitekturȱȱ316ȱ FailȬStopȬModellȱȱ230ȱ Fassadeȱȱ328ȱ ȱ G/Hȱ GenerischeȱBasisfunktionalitätȱȱ331ȱ Geschäftsarchitekturȱȱ316ȱ GIOPȱȱ76ȱ GridȬArchitekturenȱȱ345ȱ GridȬComputersystemeȱȱ6ȱ Heterogenitätȱȱ16ȱ ȱ
ȱ
Sachwortverzeichnisȱ Iȱ IDLȱȱ70ȱ InformationȱHidingȱȱ326ȱ Informationsarchitekturȱȱ316ȱ Infrastrukturarchitekturȱȱ316ȱ InitialerȱKontextȱȱ39ȱ InversionȱofȱControlȱȱ116ȱ IORȱȱ73ȱ ITȬArchitekturȱȱ316ȱ ȱ Jȱ JavaȱMessageȱServiceȱȱSiehe JMSȱ JavaȱPersistenceȱAPIȱȱ363ȱ JavaȱServerȱPagesȱȱ375ȱ JavaȱTransactionȱAPIȱȱ293ȱ JavaȱTransactionȱServicesȱȱ299ȱ JavaȬRMIȱȱ81ȱ JAXBȱȱ207ȱ JAXRȱȱ207ȱ JAXȬRPCȱȱ207,ȱ208ȱ DynamicȱInvocationȱCallȱInterfaceȱȱ211,ȱ214ȱ DynamicȱProxyȱȱ211,ȱ213ȱ ServiceȬEndpointȱȱ209ȱ StatischeȱStubsȱȱ211ȱ JAXȬWSȱȱ207,ȱ219ȱ JEEȬPatternȬKatalogȱȱ370ȱ BusinessȬDelegateȬPatternȱȱ370ȱ ServiceȬLocatorȬPatternȱȱ370ȱ SessionȬFacadeȬPatternȱȱ370ȱ JMSȱȱ153ȱ JMSȬPointȬtoȬPointȬModellȱȱ155ȱ JMSȬPub/SubȬModellȱȱ156ȱ JPAȱȱSieheȱJavaȱPersistenceȱAPIȱ PersistenceȬUnitȱȱ364ȱ JSPȱȱSieheȱJavaȱServerȱPagesȱ JSRȱȱ208ȱ JTAȱȱSieheȱJavaȱTransactionȱAPIȱ JTSȱȱSieheȱJavaȱTransactionȱServicesȱ JWSDPȱȱ208ȱ ȱ Kȱ Kapselungȱȱ326ȱ Kohäsionȱȱ327ȱ KommunikationsȬMiddlewareȱȱ40ȱ Kompensationstransaktionȱȱ234ȱ
ȱ
Komponenteȱȱ113ȱ Komponentenmodellȱȱ114ȱ Kontextmanagementȱ direktȱȱ285ȱ indirektȱȱ285ȱ Kontextpropagierungȱ direktȱȱ280ȱ indirektȱȱ280ȱ Kontextsichtȱȱ322ȱ Kontexttransferȱ explizitȱȱ286ȱ implizitȱȱ286ȱ KonzeptionelleȱSichtȱȱ320ȱ ȱ Lȱ Laufzeitsichtȱȱ321ȱ LazyȱLoadingȱȱ350ȱ LoadȱSharingȱȱ49ȱ Loggingȱȱ247ȱ Loggingmanagerȱȱ247ȱ LookupȬCodeȱȱ39ȱ LoseȱKopplungȱȱ326ȱ ȱ Mȱ Marshallingȱȱȱ MessageȬPassingȬSystemȱ PersistentȱasynchronesȱMessageȬPassingȱȱ 150ȱ PersistentȱsynchronesȱMessageȬPassingȱȱ150ȱ TransientȱsynchronesȱMessageȬPassingȱȱ150ȱ MessageȬPassingȬSystemȱȱ149ȱ TransientȱasynchronesȱMessageȬPassingȱȱ 150ȱ MessageȬQueueingȬSystemȱȱ149ȱ Modulsichtȱȱ321ȱ MSȱDTCȱȱ303ȱ MSDTCȱȱ120ȱ MSMQȱȱ120ȱ MTSȱȱ120ȱ MusterȱȱSieheȱPatternȱ ȱ Nȱ Nachrichtenformatȱ Documentȱȱ196ȱ RPCȱȱ196ȱ
415
Sachwortverzeichnisȱ NestedȱTransactionsȱȱSieheȱGeschachtelteȱ Transaktionenȱ Netzwerkbetriebssystemȱȱ5ȱ ȱ Oȱ ObjectȱTransactionȱServiceȱȱ279ȱ Objektadapterȱȱ65ȱ BOAȱȱ69ȱ POAȱȱ69ȱ Objektserverȱȱ64ȱ OMAȬArchitekturȱȱ66ȱ OneȬPhaseȬCommitȬProtokollȱȱ255ȱ ORBȱȱ67ȱ Orchestrierungȱȱ174ȱ ORMȱȱ346ȱ MappingȱvonȱAssoziationenȱȱ348ȱ OSIȬAnwendungschichtȱȱ261ȱ OSIȬAnwendungsschichtȱ ACSEȱȱ262ȱ AEȱȱ262ȱ AEIȱȱ262ȱ ASEȱȱ262ȱ CCRSEȱȱ262ȱ OSIȱTPȱȱ265ȱ SACFȱȱ262ȱ SAOȱȱ262ȱ TPSEȱȱ265ȱ OTSȱȱSieheȱObjectȱTransactionȱServiceȱ Ausführungspfadȱȱ280ȱ ControlȬSchnittstelleȱȱ282ȱ CoordinatorȬSchnittstelleȱȱ283ȱ CurrentȬSchnittstelleȱȱ282ȱ Kontextmanagementȱȱ285ȱ Kontexttransferȱȱ286ȱ Originatorȱȱ284ȱ RecoverableȱServerȱȱ281ȱ RecoveryCoordinatorȬSchnittstelleȱȱ283ȱ ResourceȬSchnittstelleȱȱ283ȱ ROȱȱ281ȱ SubtransactionAwareȬSchnittstelleȱȱ283ȱ SynchronizationȬSchnittstelleȱȱ283ȱ TCȱȱ281ȱ TerminatorȬSchnittstelleȱȱ283ȱ TOȱȱ281ȱ TransactionȱServerȱȱ281ȱ
416 ȱ
TransactionalObjectȬSchnittstelleȱȱ284ȱ TransactionFactoryȬSchnittstelleȱȱ282ȱ ȱ P/Qȱ P2PȱȱSieheȱPointȬtoȬPointȬModellȱ P2PȬModellȱȱSieheȱPointȬtoȬPointȬModellȱ Patternȱȱ327ȱ PeerȬtoȬPeerȬArchitekturȱȱ341ȱ Peerȱȱ342ȱ PhysischeȱSichtȱȱ321ȱ PointȬtoȬPointȬModellȱȱ148ȱ POJIȱȱ127ȱ POJOȱȱ128ȱ Portmapperȱȱ56ȱ Produktlinieȱȱ320ȱ ProxyȬObjektȱȱ65ȱ ProxyȬServerȱȱ47ȱ ProzessȬSichtȱȱ321ȱ PublishȬSubcribeȬModellȱȱ148ȱ PushȬbasierteȱArchitekturenȱȱ344ȱ Quasarȱȱ319ȱ ȱ Rȱ Recoveryȱȱ247ȱ Recoverymanagerȱȱ248ȱ ReferenceȬCountingȬAlgorithmusȱȱ41,ȱ95ȱ Referenzarchitekturȱȱ320ȱ RowȱDataȱGatewayȱȱ352ȱ rpcgenȱȱ55ȱ ȱ Sȱ SAAJȱȱ207ȱ Scheduleȱȱ239ȱ Serialisierbarkeitȱȱ240ȱ SeriellerȱScheduleȱȱ240ȱ SeparationȬofȬConcernsȱȱ326ȱ Serialisierbarkeitstheorieȱȱ241ȱ Servantȱȱ69ȱ Serverȱȱ31ȱ iterativȱȱ43ȱ parallelȱȱ43ȱ Singletonȱȱ34ȱ statefulȱȱ33ȱ statelessȱȱ33ȱ ȱ
Sachwortverzeichnisȱ Serverbausteinȱȱ31ȱ Aktivierungȱȱ45ȱ Lebenszyklusȱȱ44ȱ Passivierungȱȱ45ȱ Servermethodeȱȱ32ȱ ServerprozedurȱȱSieheȱServermethodeȱ Serviceȱȱ32ȱ ServicedȱComponentȱȱ121ȱ ServletȬContainerȱȱ208ȱ ApacheȱTomcatȱȱȱ servletsȱȱ375ȱ SingleȬTableȬInheritanceȱ ORMȱȱ348ȱ SOAPȱȱ180ȱ Kodierungsstilȱȱ196ȱ Nachrichtenformatȱȱ196ȱ SOAPȬBodyȱ SOAPȬFaultsȱȱ184ȱ SOAPȬNachrichtenpfadȱȱ182ȱ SOAPȬPDUȱȱ181ȱ Envelopeȱȱ181ȱ HeaderȬElementȱȱ181ȱ SOAPȬBodyȱȱ181ȱ SOAPȬHeaderȱȱ181ȱ SOAPȬProzessorȱȱ177,ȱSieheȱSOAPȬEngineȱ StatefulȱSessionȬBeanȱȱ129ȱ Aktivierungȱȱ133ȱ Konversationszustandȱȱ129,ȱ132ȱ Passivierungȱȱ133ȱ StatelessȱSessionȬBeanȱȱ129ȱ synchronȱȱ29ȱ Systemarchitekturȱȱ316ȱ ȱ Tȱ TableȱGatewayȱPatternȱȱ352ȱ ThreadȬofȬControlȱȱ270ȱ ThreeȬPhaseȬCommitȬProtokollȱȱ254ȱ Traderȱȱ48ȱ TransactionȱBranchȱȱ270ȱ Transaktionȱ globaleȱȱ227ȱ Kontextpropagierungȱȱ227ȱ lokaleȱȱ227ȱ Transaktionskontextȱȱ227ȱ verteilteȱȱ227ȱ
ȱ
TransaktionenȱfürȱWebservicesȱȱ307ȱ TransaktionenȱinȱWebanwendungenȱȱ306ȱ Transaktionsdomäneȱȱ269ȱ Transaktionsloggingȱȱ228ȱ Transaktionsmodelleȱȱ232ȱ Contractsȱȱ234ȱ FlacheȱTransaktionenȱȱ232ȱ GeschachtelteȱTransaktionenȱȱ233ȱ GeschlossenȱgeschachtelteȱTransaktionenȱȱ 234ȱ LanglebigeȱTransaktionenȱȱ235ȱ OffenȱgeschachtelteȱTransaktionenȱȱ234ȱ QueuedȱTransaktionenȱȱ236ȱ Sagasȱȱ234ȱ Savepointsȱȱ236ȱ VerketteteȱTransaktionenȱȱ236ȱ Transparenzȱȱ14ȱ Fehlertransparenzȱȱ15ȱ Migrationstransparenzȱȱ15ȱ Ortstransparenzȱȱ15ȱ Skalierungstransparenzȱȱ15ȱ Zugriffstransparenzȱȱ15ȱ TwoȬPhaseȬCommitȬProtokollȱȱ251ȱ presumedȱabortȱȱ256ȱ presumedȱcommitȱȱ256ȱ Zustandsautomatȱȱ257ȱ TwoȬPhaseȬLockingȱȱ241ȱ HierarchischesȱLockingȱȱ244ȱ konservativesȱ2PLȱȱ242ȱ strengesȱ2PLȱȱ242ȱ ZweiȬVersionenȬLockingȱȱ243ȱ ȱ U/Vȱ UbiquitousȱComputingȱȱ7ȱ UnabhängigeȱKomponentenȬArchitekturȱȱ325ȱ VerteilteȱpervasiveȱSystemeȱȱ7ȱ VerteiltesȱBetriebssystemȱȱ5ȱ VerteiltesȱInformationssystemȱȱ4ȱ VerteiltesȱSystemȱȱ4ȱ Verteilungssichtȱȱ322ȱ ȱ Wȱ W3Cȱȱ180ȱ WALȱȱSieheȱWriteȱAheadȱLoggingȱ WCFȱȱ223ȱ
417
Sachwortverzeichnisȱ WebȬArchitekturenȱȱ372ȱ Webserviceȱȱ175ȱ BottomȬUpȬAnsatzȱȱ203ȱ TopȬDownȬAnsatzȱȱ203ȱ wohlgeformtȱȱ178ȱ WorkerȬThreadȱȱ43ȱ WriteȱAheadȱLoggingȱȱ249ȱ WSȬATȱȱ308ȱ WSȬAtomicȬTransactionȱȱ307,ȱ308ȱ WSȬBAȱȱ308ȱ WSȬBusinessȬActivityȱȱ307,ȱ308ȱ WSȬCȱȱ308ȱ WSȬCAFȱȱ308ȱ WSȬCAFȱȱ307ȱ WSȬCoordinationȱȱ307,ȱ308ȱ WSDLȱȱ188ȱ bindingȱȱ194ȱ definitionsȱȱ189ȱ
ȱ
418 ȱ
interfaceȱȱ193ȱ messageȱȱ191ȱ porttypeȱȱ193ȱ serviceȱȱ195ȱ typesȱȱ190ȱ WSDLȬOperationȱȱ193ȱ Notificationȱȱȱ OneȬWayȱȱȱ RequestȬResponseȱȱȱ SolicitȬResponseȱȱȱ WSȬIȱȱ200ȱ ȱ Xȱ XDRȱȱ52ȱ XMLȱȱ177ȱ XMLȬParserȱȱ179ȱ Xercesȱȱ179ȱ