ˇ – Technick´a univerzita Ostrava VSB Fakulta elektrotechniky a informatiky Katedra informatiky
Klientsk´ aˇ c´ ast objektovˇ e orientovan´ eho datab´ azov´ eho syst´ emu
2002
Lum´ır N´ avrat
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem tuto diplomovou pr´aci vypracoval samostatnˇe. Uvedl jsem vˇsechny liter´arn´ı prameny a publikace, ze kter´ ych jsem ˇcerpal.
datum: 7.5.2002
podpis:
Abstrakt
S rozvojem informaˇcn´ıch technologi´ı a ˇcastˇejˇs´ım pouˇz´ıv´an´ım objektov´ ych technologi´ı se dosavadn´ı ukl´ad´an´ı dat do klasick´ ych relaˇcn´ıch datab´az´ı st´av´a probl´emem. Tato pr´ace si klade za c´ıl navrhnout a implementovat uˇzivatelsk´e rozhran´ı objektov´e datab´aze JUMBO. Rozhran´ı by mˇelo umoˇzn ˇovat prohl´ıˇzen´ı a manipulaci s daty jiˇz vytvoˇren´ ych aplikac´ı. Aplikace je naprogramov´ ana v jazyce JAVA a pro komunikaci se serverem pouˇz´ıv´a protokol SOAP.
Kl´ıˇ cov´ a slova JUMBO, JAVA, JIVE, objektov´a datab´aze, ODMG, SOAP, uˇzivatelsk´e rozhran´ı, klient
Abstrakt
Expansion of the information technologies and more often using object technologies present saving data into classical Relational Database state problem. This thesis behind aim propose and implement user interface for the object database JUMBO. Interface would have enable browsing and manipulation data which are already created by the application. Application was written in the language JAVA and use for the communication with a server protocol SOAP.
Keywords client, JUMBO, JAVA, JIVE, object database, ODMG, SOAP, user interface
Seznam pouˇ zit´ ych zkratek
BLOB Binary Large Object CD Compact Disc DTD Document Type Declaration GMT Greenwich Mean Time HTTP Hypertext Transfer Protocol ODL Object Definition Language ODMG Object Database Management Group OID Object Identifier OIF Object Interchange Format ˇ ˇ OO SRBD Objektovˇe orientovan´ y SRBD OMG Object Management Group OQL Object Query Language RPC Remote Procedure Call SMTP Simple Mail Transfer Protocol SQL Structured Query Language ˇ ızen´ı B´aze Dat ˇ SRBD Syst´em R´ URI Uniform Resource Identifier XML Extended Markup Language
Obsah ´ 1 Uvod
4
2 Pouˇ zit´ e technologie
5
2.1
2.2
Syst´emy ˇr´ızen´ı b´aze dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.1
Logick´e datov´e modely . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.2
Objektovˇe relaˇcn´ı model . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.1.3
Objektov´ y model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
Standard ODMG a jeho objektov´ y model . . . . . . . . . . . . . . . . . . . . . .
7
2.2.1
Historie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.2
Z´akladn´ı prvky objektov´eho modelu . . . . . . . . . . . . . . . . . . . . .
8
2.2.3
Specifikace a implementace typ˚ u . . . . . . . . . . . . . . . . . . . . . . .
8
2.2.4
Podtypy a dˇediˇcnost chov´an´ı . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2.5
Extenty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2.6
Objekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.2.7
Atributy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.2.8
Vztahy
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.2.9
Operace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
OBSAH
2
2.3
Datab´azov´ y syst´em JUMBO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.3.1
Struktura objekt˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
Protokol SOAP (Simple Object Access Protocol) . . . . . . . . . . . . . . . . . .
23
2.4
2.4.1
´ Uvod
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
2.4.2
Model v´ ymˇeny zpr´av . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
2.4.3
Envelope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
2.4.4
Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
2.4.5
Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
2.4.6
Fault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
2.4.7
SOAP v HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
2.4.8
SOAP a RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3 JUMBO klient
33
3.1
Anal´ yza souˇcasn´eho stavu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.2
Specifikace poˇzadavk˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.3
Anal´ yza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.3.1
Gener´ator formul´aˇr˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.3.2
Komunikace se serverem . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
3.3.3
Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
3.3.4
Historie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
N´avrh a implementace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.4.1
R´amec aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.4.2
Gener´ator formul´aˇr˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.4
OBSAH
3
3.4.3
Gener´ator formul´aˇr˚ u - SimpleTableGuiRenderer . . . . . . . . . . . . . . .
40
3.4.4
Akce klienta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
3.4.5
Historie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
3.4.6
Komunikaˇcn´ı rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
3.4.7
Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
3.4.8
Nastaven´ı aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
3.4.9
Podp˚ urn´e tˇr´ıdy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
4 Z´ avˇ er
52
4.1
Zhodnocen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
4.2
Dalˇs´ı v´ yvoj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
A Uˇ zivatelsk´ a pˇ r´ıruˇ cka
54
A.1 Poˇzadavky na syst´em . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.2 Instalace a spuˇstˇen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.3 Nastaven´ı aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.4 Pr´ace s datab´az´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.4.1 Proch´azen´ı mezi objekty . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.4.2 Vytv´aˇren´ı objekt˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
A.4.3 Editace objekt˚ u. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
A.4.4 Vol´an´ı operac´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
A.4.5 Maz´an´ı objekt˚ u. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
B Obsah CD
58
´ 1. Uvod
S rozvojem v´ ypoˇcetn´ı techniky se st´ale zvyˇsuje potˇreba uchov´av´an´ı dat a jejich n´ asledn´eho zpracov´av´an´ı. K obor˚ um, kter´ ym do t´eto doby staˇcily nynˇejˇs´ı datab´aze zaloˇzen´e na relaˇcn´ım datov´em modelu, se pˇrid´avaj´ı dalˇs´ı obory p˚ usob´ıc´ı v oblastech jako je napˇr. CAD, CASE, GIS a dalˇs´ı. Tyto syst´emy maj´ı jedno spoleˇcn´e. Potˇrebuj´ı uchov´avat velk´e objemy dat. Proto zaˇcala ˇ b´ yt potˇreba po nov´em typu SRBD, kter´ y by byl zaloˇzen na u ´spˇechu souˇcasn´ ych syst´em˚ u, ale s lepˇs´ı podporou spr´avy informac´ı. Struˇcn´e informace o dalˇs´ıch datab´azov´ ych technologi´ıch jako jsou digit´aln´ı knihovny, historick´e datab´azov´e syst´emy je moˇzn´e nal´ezt v [4]. Kapitola 2 se zab´ yv´a technologiemi, kter´e se v´aˇzou k t´ematu t´eto diplomov´e pr´ace. Nejprve se ˇ ˇ velmi struˇcnˇe pokus´ım nast´ınit rozd´ıl mezi SRBD zaloˇzen´ ych na z´aznamov´ ych modelech a SRBD zaloˇzen´ ych na objektov´ ych modelech. N´aslednˇe se pˇresunu k popisu standardu ODMG, kter´ y je standardem pro objektov´e syst´emy. Pak bude n´asledovat struˇcn´ y popis objektov´e datab´ aze JUMBO a na z´avˇer kapitoly se zm´ın´ım o komunikaˇcn´ım protokolu SOAP, kter´ y jsem pouˇzil pro komunikaci mezi serverem datab´aze JUMBO a m´ ym klientem. Kapitola 3 se nejdˇr´ıve zab´ yv´a popisem aktu´aln´ıho stavu syst´emu. Po tomto sezn´amen´ı n´ asleduje anal´ yza ˇreˇsen´ı Jumbo klienta. Zbytek kapitoly je vˇenov´an n´avrhu a popisu ˇreˇsen´ı navrˇzen´eho klienta.
2. Pouˇ zit´ e technologie
2.1
Syst´ emy ˇ r´ızen´ı b´ aze dat
ˇ s´ı ukl´ad´an´ı dat na Tyto syst´emy umoˇzn ˇuj´ı definov´an´ı datov´ ych struktur a datov´ ych soubor˚ u. Reˇ m´ediu poˇc´ıtaˇce, umoˇzn ˇuj´ı manipulovat s daty a form´atovat vstupn´ı a v´ ystupn´ı informace. Na tyto syst´emy se zamˇeˇr´ım z pohledu datov´ ych model˚ u, kter´e implementuj´ı.
2.1.1
Logick´ e datov´ e modely
Modely zaloˇ zen´ e na z´ aznamech Do t´eto kategorie m˚ uˇzeme zaˇradit dva modely: s´ıt’ov´ y model a relaˇcn´ı model. Rozd´ıl mezi tˇemito ’ modely je ve zp˚ usobu ukl´ad´an´ı dat. S´ıt ov´ y model vytv´aˇr´ı seznamovou strukturu se z´ ahlav´ım zat´ımco relaˇcn´ı model uchov´av´a data ve formˇe tabulek.
Identifikace entit v relaˇ cn´ıch modelech Pˇ rirozen´ y kl´ıˇ c napˇr. jm´eno, rodn´e ˇc´ıslo, . . . – nelze zajistit absolutn´ı jednoznaˇcnost. – nelze zajistit existenci. – syst´emy nen´ı moˇzn´e spojovat pokud identifik´ator ztrat´ı jednoznaˇcnost – identifik´ator nelze jednoduˇse mˇenit. Pˇ ridˇ elen´ y identifik´ ator ˇclovˇekem nebo poˇc´ıtaˇcem – nutnost generov´an´ı identifik´atoru – vytvoˇren´ y kl´ıˇc nem´a s´emantickou souvislost s entitou. Je pouze dalˇs´ı informac´ı v entitˇe.
2.1 Syst´ emy ˇ r´ızen´ı b´ aze dat
6
Nev´ yhody z´ aznamov´ ych model˚ u pˇredpokl´ad´a se, ˇze data lze popsat jednoduch´ ymi typy. Vˇetˇsinou ˇc´ıseln´e typy a ˇretˇezce. Rovnˇeˇz ˇcasto chyb´ı podpora pro strukturovan´e typy a typ BLOB je pouze ˇc´asteˇcn´e ˇreˇsen´ı. chyb´ı jim datov´e struktury, kter´e pˇresnˇeji odr´aˇzej´ı strukturu informac´ı v re´aln´em svˇetˇe pˇredpokl´ad´a se velk´ y poˇcet relativnˇe mal´ ych z´aznam˚ u, oproti CAD aplikac´ım, kter´e maj´ı mnoho relac´ı s m´alo z´aznamy. vyjadˇruj´ı sp´ıˇse strukturu dat, neˇz jejich s´emantiku, obt´ıˇzn´e ukl´ad´an´ı aplikaˇcn´ı k´ odu do datab´aze
2.1.2
Objektovˇ e relaˇ cn´ı model
Tento model se snaˇz´ı propojit vlastnosti klasick´eho relaˇcn´ıho modelu s objektov´ ymi principy. ˇ Tento model je implementov´an v SRBD Oracle 9i. V r´amci tohoto modelu je moˇzn´e pracovat se strukturovan´ ymi poloˇzkami (tabulky jsou ch´ap´any jako hodnoty). Tyto modely jsou velice popul´arn´ı z d˚ uvodu moˇznosti vyuˇzit´ı st´avaj´ıc´ı relaˇcn´ı technologie, kterou pak jen rozˇs´ıˇr´ı o objektov´e vlastnosti.
2.1.3
Objektov´ y model
Tento model je zaloˇzen na u ´spˇechu souˇcasn´ ych objektov´ ych jazyk˚ u a technologi´ı. Model vych´ az´ı z poˇzadavku potˇreby modelov´an´ı n´asleduj´ıc´ıch bod˚ u informace o entit´ ach re´ aln´ eho svˇ eta - velmi ˇcasto nen´ı moˇzn´e tuto entitu popsat jedin´ ym z´aznamem tvoˇren´ ym ˇc´ısly a ˇretˇezci vlastnosti entit - entity nejsou pouze textov´e a numerick´e a nemusej´ı b´ yt ani jednotypov´e. Jedna vlastnost m˚ uˇze m´ıt v´ıce typ˚ u (napˇr. pl´atce danˇe je jak fyzick´a, tak i pr´avnick´ a osoba) vztahy mezi entitami - potˇreba ˇreˇsit modelov´an´ı obecn´ ych vztah˚ u typu M:N operace nad entitami - entity re´aln´eho svˇeta maj´ı sv´e chov´an´ı, kter´e je potˇreba uchov´avat s atributy Identita objekt˚ u Objekt je jednoznaˇcnˇe identifikovateln´ y bˇehem cel´e doby sv´e existence tzv. OID. Toto OID je generovan´e syst´emem a nen´ı ho moˇzn´e bˇehem cel´e doby zmˇenit. Rovnˇeˇz nen´ı viditeln´e jak pro program´atora tak ani pro koncov´eho uˇzivatele.
2.2 Standard ODMG a jeho objektov´ y model
7
ˇ Probl´ emy objektov´ ych SRBD I pˇres jiˇz relativnˇe dlouh´ y v´ yvoj objektov´ ych datab´az´ı, maj´ı tyto datab´azov´e syst´emy st´ ale probl´emy se prosadit. To je d´ano nˇekolika faktory. Firmy velmi investovaly do jiˇz existuj´ıc´ıch relaˇcn´ıch technologi´ı a s t´ım souvis´ı probl´em migrace dat mezi tˇemito syst´emy. Dalˇs´ım probl´emem je doposud chybˇej´ıc´ı jednotn´a standardizace pojmu Objektovˇe orientovan´ y datov´ y model“. ” Dneˇsn´ı syst´emy zaloˇzen´e na z´aznamov´ ych modelech maj´ı, d´ıky sv´e dlouh´e existenci, jiˇz impleˇ mentov´any velmi efektivn´ı techniky, kter´e je pro OO SRBD nutn´e teprve vyvinout. Objektovˇe orientovan´ y model je sloˇzitˇejˇs´ı a proto i jeho realizace je n´aroˇcnˇejˇs´ı. Rovnˇeˇz uˇzivatelsk´a rozhran´ı ˇ ˇ OO SRBD zat´ım nedosahuj´ı kvalit souˇcasn´ ych relaˇcn´ıch SRBD.
2.2
Standard ODMG a jeho objektov´ y model
2.2.1
Historie
Historie objektov´ ych datab´az´ı se zaˇc´ın´a odv´ıjet jiˇz v 70. letech minul´eho stolet´ı, kdy vznikl standard CODASYL pro s´ıt’ov´e datab´aze. Tento standard sice nebyl objektov´ y ale je moˇzn´e v nˇem nal´ezt nˇekter´e n´aznaky budouc´ıch objektov´ ych datab´az´ı. Prvn´ı v´ yzkumy pˇr´ımo v oblasti ˇ OO SRBD pak zaˇc´ınaj´ı poˇc´atkem 80. let. Na konci tˇechto let vznikaj´ı prvn´ı komerˇcn´ı syst´emy (napˇr. ObjectDesign, Versant, O2 , Objectivity). Organizaci ODMG zaloˇzil v roce 1991 Rick Cattell. O rok pozdˇeji vznik´a standard SQL 92 pro relaˇcn´ı datab´aze a zaˇc´ın´a v´ yvoj na standardu SQL3 pro objektov´e datab´aze. V n´asleduj´ıc´ım roce je zveˇrejnˇen prvn´ı standard ODMG 93. Ten byl v roce 1997 upraven na ODMG 2 a v roce 1999 byla zveˇrejnˇena zat´ım posledn´ı verze tohoto standardu pod n´azvem ODMG 3 ([2]).
ˇ asti standardu C´ Object model — vych´az´ı z objektov´eho modelu organizace OMG a definuje s´emantiku, kter´ a ˇ pak m˚ uˇze b´ yt pˇr´ımo pouˇzita v OO SRBD. D´ale popisuje, jak jsou objekty identifikov´any a jak mohou vstupovat do vztah˚ u. Object Specification Languages Object Definition Language — pouˇz´ıv´a se pro definici objekt˚ u a jejich typ˚ u v r´ amci objektov´eho modelu Object Interchange Format — pouˇz´ıv´a se pro popis zp˚ usobu, jak data ukl´adat nebo ˇc´ıst ze souboru pˇr´ıpadnˇe mnoˇziny soubor˚ u
2.2 Standard ODMG a jeho objektov´ y model
8
Object Query Language — deklarativn´ı (neprocedur´aln´ı) jazyk pro vyhled´av´an´ı a modifikaci obˇ jekt˚ u v OO SRBD. Vych´az´ı z relaˇcn´ıho standardu SQL, ale je rozˇs´ıˇren o dalˇs´ı uˇziteˇcn´e vlastnosti pouˇziteln´e v objektov´ ych datab´az´ıch Language Bindings — definuje propojen´ı objektov´eho modelu s programovac´ımi jazyky C++, JAVA, SmallTalk
2.2.2
Z´ akladn´ı prvky objektov´ eho modelu
objekt m´a unik´atn´ı identifik´ator (OID) liter´ al narozd´ıl od objektu nem´a vlastn´ı identitu a je definov´an jen svou hodnotou objekty a liter´aly se kategorizuj´ı podle sv´ ych typ˚ u. Typ definuje prvky se stejn´ ymi vlastnostmi a stejn´ ym chov´an´ım stav objektu je definov´an hodnotami sv´ ych vlastnost´ı. tj. atribut˚ u a vztah˚ u. chov´an´ı objekt˚ u je definov´ano sadou operac´ı, kter´e lze nad objektem prov´est. Operace maj´ı vstupn´ı a v´ ystupn´ı parametry a mohou vracet hodnotu datab´ aze ukl´ad´a objekty a umoˇzn ˇuje jejich sd´ılen´ı v´ıce uˇzivateli a aplikacemi. Je zaloˇzena na sch´ematu definovan´em pomoc´ı jazyka ODL a obsahuje instance typ˚ u definovan´ ych sch´ematem.
2.2.3
Specifikace a implementace typ˚ u
Specifikace typu Specifikace typu je implementaˇcnˇe nez´avisl´a a je abstraktn´ım popisem operac´ı, v´ yjimek a vlastnost´ı, kter´e bude moci vidˇet uˇzivatel tohoto typu. Interface (rozhran´ı) definuje pouze abstraktn´ı chov´an´ı typu. Liter´ al pro zmˇenu definuje pouze abstraktn´ı stav nebo hodnotu). Class (tˇr´ıda) je pr˚ unikem pˇredchoz´ıch dvou pojm˚ u a umoˇzn ˇuje definovat jak abstraktn´ı chov´an´ı, tak i stav (obr. 2.1).
Implementace typu Implementace typu se skl´ad´a z reprezentace a mnoˇziny metod, pˇriˇcemˇz nen´ı viditeln´a pro uˇzivatele. Reprezentace je datov´a struktura, kter´a se definuje na z´akladˇe mapov´an´ı do jazyka. Metody jsou pak tˇela operac´ı definovan´ ych ve specifikaci typu. Tyto metody definuj´ı veˇrejnˇe viditeln´e
2.2 Standard ODMG a jeho objektov´ y model
9
Obr´azek 2.1: Specifikace typu
chov´an´ı objektov´eho typu. Rovnˇeˇz mohou existovat metody, kter´e nejsou pˇr´ımou souˇc´ ast´ı specifikace typu. Typ m˚ uˇze m´ıt v´ıce neˇz jednu implementaci, ale m˚ uˇze b´ yt pouˇzita pouze jedna v dan´em programu (napˇr. jedna pro C++, druh´a pro JAVu atd.)
2.2.4
Podtypy a dˇ ediˇ cnost chov´ an´ı
Stejnˇe jako v jin´ ych objektov´ ych modelech, tak i ODMG objektov´ y model obsahuje vazbu mezi typem a podtypem zaloˇzenou na dˇediˇcnosti. Tomuto vztahu se nˇekdy ˇr´ık´a is-a vztah. Pro tento vztah bylo definov´ano, ˇze instance podtypu je z´aroveˇ n instanc´ı nadtypu a d´ale kaˇzd´ y objekt m´ a pr´avˇe jeden nejv´ıce specifick´ y typ, kter´ y popisuje vˇsechny atributy a operace objektu. Model povoluje v´ıcen´asobnou dˇediˇcnost pouze pro chov´an´ı objektu. Jak je vidˇet na obr´azku 2.2 tato v´ıcen´asobn´a dˇediˇcnost nen´ı moˇzn´a mezi tˇr´ıdami. ODL tˇr´ıdy jsou v c´ılov´em implementaˇcn´ım jazyku mapov´any na tˇr´ıdy, kter´e mohou b´ yt pˇr´ımo instanciovan´e, zat´ımco interface je typ, kter´ y pˇr´ımo instanciovat nelze. Dalˇs´ım vztahem ke vztahu is-a je vztah extends. Tento vztah definuje dˇediˇcnost mezi jednotliv´ ymi objektov´ ymi typy. Tento vztah povoluje pouze jednoduchou dˇediˇcnost mezi dvˇemi tˇr´ıdami, kdy dˇedˇen´a tˇr´ıda dˇed´ı vˇsechny vlastnosti a chov´an´ı ze sv´e nadtˇr´ıdy.
2.2.5
Extenty
ˇ Extent typu je mnoˇzina vˇsech instanc´ı dan´eho typu v OO SRBD. Jestliˇze objekt je instance typu A potom bude ˇclenem extentu typu A. Pokud bude typ A podtypem typu B, pak extent typu A bude podmnoˇzinou extentu typu B.
2.2 Standard ODMG a jeho objektov´ y model
10
Obr´azek 2.2: Vztah tˇr´ıda-interface
ˇ SRBD m˚ uˇze tento extent udrˇzovat automaticky, tj. m˚ uˇze pˇrid´avat do mnoˇziny novˇe vytvoˇren´e instance nebo z t´eto mnoˇziny tyto instance odeb´ırat, pokud byly smaz´any. Rovnˇeˇz je moˇzn´e vytv´aˇret a spravovat indexy pro zrychlen´ı pˇr´ıstupu k extentu.
2.2.6
Objekty
Vytv´ aˇ ren´ı objekt˚ u Pro vytv´aˇren´ı objekt˚ u se vyuˇz´ıv´a n´avrhov´ y vzor Abstract Factory“, kter´ y d´av´a moˇznost meto” dou new() implementovat v dan´em c´ılov´em implementaˇcn´ım jazyku k´od staraj´ıc´ı se o vytvoˇren´ı objektu. interface ObjectFactory { Object new(); }; Z n´asleduj´ıc´ıho rozhran´ı dˇed´ı vˇsechny objekty v modelu a je tak implicitn´ım rozhran´ım pro vˇsechny objekty.
2.2 Standard ODMG a jeho objektov´ y model
11
interface Object { enum Lock_Type(read,write,upgrade); void lock(in Lock_Type mode) raises(LockNotGranted); boolean try_lock(Lock_Type mode); boolean same_as(in Object anObject); Object copy(); void delete(); };
Identifik´ atory objekt˚ u (OID) Vˇsechny objekty maj´ı sv˚ uj identifik´ator, kter´ ym jsou od sebe vˇzdy vz´ajemnˇe rozliˇsiteln´e. Abychom mohli porovnat tyto objekty slouˇz´ı k tomu metoda same_as() v´ yˇse uveden´eho rozhran´ı Object. Identifik´ator objektu se bˇehem cel´e ˇzivotnosti objektu nemˇen´ı. Tato podm´ınka plat´ı i pokud se u ´plnˇe zmˇen´ı obsah jeho atribut˚ u a vztah˚ u. Identifik´ator se d´ale pouˇz´ıv´a pro odkazy ˇ mezi objekty. Generov´an´ı identifik´atoru je zajiˇst’ov´ano prostˇredky SRBD a aplikace jej m˚ uˇze jen ˇ vyuˇz´ıvat. Zde je vidˇet z´asadn´ı rozd´ıl mezi prim´arn´ım kl´ıˇcem v relaˇcn´ıch SRBD a OID objektu.
Jm´ ena objekt˚ u Objekt˚ um lze pˇriˇradit nˇekolik jmen, kter´e jsou aliasy pro identifik´atory objekt˚ u. Tyto aliasy jsou vstupn´ımi body pro navigaci v datab´azi a jsou unik´atn´ı v r´amci cel´e datab´aze. Aliasy lze ch´apat jako glob´aln´ı jm´eno promˇenn´e v programovac´ıch jazyc´ıch. Nejsou definov´any v rozhran´ı typu a nemaj´ı ani ˇz´adn´ y vztah k hodnot´am atribut˚ u objektu.
Doba ˇ zivota objekt˚ u Definuje dobu, po kterou je objekt˚ um pˇridˇelena pamˇet’. Objekty m˚ uˇzeme rozdˇelit do dvou skupin. Tranzient´ı objekty – existuj´ı pouze po dobu ˇcinnosti aplikace. Napˇr. lok´aln´ı promˇenn´e v metod´ach nebo glob´aln´ı promˇenn´e procesu. Pˇridˇelov´an´ı pamˇeti ˇr´ıd´ı run-time programovac´ıho jazyka. Perzistentn´ı objekty – existuj´ı i po ukonˇcen´ı procesu, kter´ y jej vytvoˇril. Pˇridˇelov´an´ı pamˇeti ˇ ˇr´ıd´ı run-time syst´emu SRBD. Doba ˇzivota objektu nen´ı z´avisl´a na typu objektu a tak je moˇzn´e, aby jeden typ mˇel souˇcasnˇe jak tranzientn´ı tak i perzistentn´ı instance. Tato doba pak m˚ uˇze b´ yt definovan´a jiˇz pˇri vytvoˇren´ı objektu nebo dosaˇzitelnost´ı objektu.
2.2 Standard ODMG a jeho objektov´ y model
12
Druhy objekt˚ u atomick´ e objekty jsou definovan´e uˇzivatelem a standard nedefinuje ˇz´adn´e zabudovan´e atomick´e objekty kolekce obsahuj´ı instance atomick´eho objektu, jin´e kolekce nebo typu liter´alu. Vˇsechny prvky kolekce mus´ı b´ yt t´ehoˇz typu. – Set
– neuspoˇr´adan´a mnoˇzina prvk˚ u, kter´e se nesm´ı v kolekci opakovat – Bag – neuspoˇr´adan´a mnoˇzina prvk˚ u, kter´e se mohou v kolekci opakovat – List – uspoˇr´adan´ a mnoˇzina prvk˚ u, kter´e se mohou v kolekci opakovat – Array – uspoˇr´adan´a mnoˇzina prvk˚ u, kter´a mˇen´ı dynamicky velikost. K jednotliv´ ym prvk˚ um kolekce je moˇzn´e pˇristupovat na z´akladˇe znalosti jejich um´ıstˇen´ı v kolekci – Dictionary – neuspoˇr´adan´a mnoˇzina p´aru kl´ıˇc-hodnota, pˇriˇcemˇz se nesm´ı kl´ıˇce opakovat strukturovan´ e typy – Date – datum – Interval – ˇcasov´ y interval, kter´ y je moˇzn´e pouˇz´ıvat s objekty Time a Timestamp. Interval se vytv´aˇr´ı metodou subtract_time definovanou v rozhran´ı Time. – Time – reprezentuje svˇetov´ y ˇcas v dan´e ˇcasov´e z´onˇe. Internˇe se ˇcas ukl´ad´a v ˇcasov´e z´onˇe GMT. – Timestamp – zapouzdˇruje objekty Date a Time
2.2.7
Atributy
Hodnotou atributu je vˇzdy liter´al, nebo OID. Atribut je abstraktn´ım stavem instance a nemus´ı tak vˇzdy odpov´ıdat datov´e struktuˇre (napˇr. atribut age v n´asleduj´ıc´ım pˇr´ıkladu m˚ uˇze b´ yt implementov´an metodami, kter´e zpracuj´ı atribut birthdate). Jelikoˇz atribut nem´a vlastn´ı identitu nemohou atributy mezi sebou definovat vztahy. interface i_Person { attribute short age; }
2.2 Standard ODMG a jeho objektov´ y model
13
class Person: i_Person { attribute Date birthdate; attribute string name; attribute enum gender {male, female}; attribute Address home_adress; attribute set phones; attribute Department dept; }
2.2.8
Vztahy
Vztahy se definuj´ı pouze mezi typy a mohou b´ yt pouze bin´arn´ı tj. 1:1, 1:N a M:N. Tyto vztahy ˇ jsou vˇzdy obousmˇern´e a SRBD je zodpovˇedn´ y za dodrˇzov´an´ı referenˇcn´ı integrity tˇechto vztah˚ u. To znamen´a v naˇsem pˇr´ıkladˇe, ˇze v pˇr´ıpadˇe smaz´an´ı instance typu Professor mus´ı doj´ıt ke smaz´ an´ı vˇsech referenc´ı ve vˇsech instanc´ıch typu Course. Atributy typu Object, nebo kolekce objekt˚ u tak nezajiˇst’uj´ı referenˇcn´ı integritu. N´asleduj´ıc´ı pˇr´ıklad ukazuje zp˚ usob z´apisu vztah˚ u. Je uveden z´apis pro vztah 1:N, kdy profesor uˇc´ı nˇekolik kurz˚ u a kurz je uˇcen pouze jedn´ım uˇcitelem. Kl´ıˇcov´e slovo inverse identifikuje n´azev vztahu na druh´e stranˇe vazby. class Professor { ... relationship set teaches inverse Course::is_taught_by; ... }; class Course { ... relationship Profesor is_taught_by inverse Professor::teaches; ... };
2.2.9
Operace
Vedle atribut˚ u a vztah˚ u, kter´e definuj´ı stav objektu je potˇreba definovat chov´an´ı objektu. Toto chov´an´ı je specifikov´ano mnoˇzinou signatur operac´ı. Tato signatura definuje jm´eno operace, jm´ena a typy argument˚ u a jm´ena generovan´ ych v´ yjimek. Operace je moˇzn´e definovat pouze pro jedin´ y typ, ale je moˇzn´e operace pˇretˇeˇzovat, takˇze m˚ uˇze existovat v jin´em typu operace stejn´eho jm´ena. Pˇri vol´an´ı operace dan´eho jm´ena se prov´ad´ı v´ ybˇer na z´akladˇe nejv´ıce specifick´eho typu.
2.3 Datab´ azov´ y syst´ em JUMBO
14
Obr´azek 2.3: Vytv´aˇren´ı aplikace dle standardu ODMG3.0
2.3
Datab´ azov´ y syst´ em JUMBO
Jedn´ a se o experiment´aln´ı objektovˇe orientovan´ y datab´azov´ y server, kter´ y vych´az´ı ze standardu ODMG, pˇriˇcemˇz standard rozˇsiˇruje o podporu rol´ı a proces˚ u. Syst´em vznikl na v´ ysledc´ıch v´ yzkumn´eho projektu V´ıcetypov´e objekty v objektov´em datov´em modelu.“ Tento projekt ” prob´ıhal v rozmez´ı let 1998 a 1999 na Vysok´em uˇcen´ı technick´em v Brnˇe. Struktura syst´emu je zn´azornˇena na obr´azku 2.4. Objekty v syst´emu jsou specifikov´ any prostˇrednictv´ım rozhran´ı v jazyce ODL. Samotn´a implementace operac´ı je zajiˇst’ov´ana jazykem JIVE, kter´ y vych´az´ı z jazyka JAVA, kter´ y rozˇsiˇruje o programov´e konstrukce pro transparentn´ı manipulaci s tranzientn´ımi a perzistentn´ımi objekty. Modul je z´akladn´ım prvkem aplikace. Pˇreloˇzen´ım jeho definiˇcn´ı ˇc´ast´ı napsan´e v jazyce ODL a pˇr´ısluˇsn´e implementace v jazyce Jive dostaneme bin´arn´ı modul. Tento bin´arn´ı modul m˚ uˇzeme pak v pˇr´ıpadˇe poˇzadavku nahr´at do pamˇeti datab´azov´eho serveru a spouˇstˇet pˇreloˇzen´e operace ve virtu´aln´ım stroji jazyka Jive (JiveVM). Datab´azov´ y server umoˇzn ˇuje komunikovat s klienty pomoc´ı dvou protokol˚ u. Implementaˇcnˇe starˇs´ım je protokol HTTP, kter´ y se pouˇz´ıv´a pouze pro experimentov´an´ı a testov´an´ı serveru.
2.3 Datab´ azov´ y syst´ em JUMBO
15
Obr´azek 2.4: Struktura datab´azov´eho serveru
ˇ V r´amci t´eto diplomov´e pr´ace vznikl uˇzivatelsk´ y klient a Petr Sula ve sv´e diplomov´e pr´ aci pracoval na program´atorsk´em klientovi, kter´ y umoˇzn ˇuje navrhovat sch´emata modul˚ u v jazyce ODL. Oba klienti komunikuj´ı se serverem protokolem SOAP. Syst´em po spuˇstˇen´ı nejprve inicializuje pˇrekladaˇc a datab´azov´e j´adro. N´aslednˇe je vytvoˇren popis metadat (modul ODLMetaObjects) ten je vloˇzen do syst´emu. Takto je moˇzn´e reprezentovat datab´azov´e sch´ema, vˇcetnˇe sch´ematu metadat popisem sama sebe. Nejvˇetˇs´ı v´ yhodou tohoto postupu je moˇznost implementace mnohem speci´alnˇejˇs´ıch operac´ı datab´azov´eho sch´ematu pˇr´ımo v jazyce Jive bez nutnosti cokoli programovat v hostuj´ıc´ım jazyce syst´emu C++. Sa-
2.3 Datab´ azov´ y syst´ em JUMBO
16
mozˇrejmˇe je moˇzn´e implementovat operace v nativn´ım jazyce (napˇr. z d˚ uvodu poˇzadavku efektivity n´ızko´ urovˇ nov´ ych operac´ı).
Role Jak jiˇz bylo uvedeno, Jumbo pouˇz´ıv´a k popisu rozhran´ı objekt˚ u jazyk ODL. Tento jazyk d´ ale rozˇsiˇruje o koncept rol´ı. Zp˚ usob z´ apisu je uveden v n´asleduj´ıc´ım pˇr´ıkladu. Role jsou v run-timov´e hierarchii reprezentov´any hlavn´ım objektem, kter´ y tvoˇr´ı koˇren stromu objekt˚ u. Role funguj´ı v podstatˇe jako rozˇs´ıˇren´ı stromu dˇediˇcnosti, vytvoˇren´eho bˇehem pˇrekladu, bˇehem bˇehu syst´emu. Role dˇed´ı operace a vlastnosti sv´eho z´akladn´ıho objektu. Proto pro kaˇzd´ y pˇr´ıstup k tomuto objektu skrz roli je potˇreba udrˇzovat skrytou referenci z role na tento objekt. Komunikace se samotn´ ym objektem m˚ uˇze pak prob´ıhat nepˇr´ımo pˇres jakoukoliv roli, kter´a reprezentuje objekt. Adresovan´a role bud’ zpracuje poˇzadavek sama, nebo pˇr´ıpadnˇe jej pˇred´a rodiˇcovsk´emu objektu. Role jsou tak schopn´e nahradit vˇetˇsinu vlastnost´ı v´ıcen´asobn´e dˇediˇcnosti, kter´a nen´ı podporov´ana v standardu ODMG v3.0. Nav´ıc je moˇzn´e role pˇrid´avat a odeb´ırat dynamicky bˇehem ˇzivotn´ıho cyklu objektu a tak lze velmi jednoduˇse modelovat ˇzivotn´ı cyklus objekt˚ u v re´ aln´em svˇetˇe.
class Student roleof Osoba relationship Skola attribute long attribute TypStudia };
(extent studenti) { skola inverse studenti; rocnik; studium;
Dalˇs´ım rozˇs´ıˇren´ım jsou kvalifikovan´e role. Ty vych´azej´ı z poˇzadavku modelov´an´ı situac´ı kdy jeden objekt hraje tut´eˇz roli v´ıcekr´at (napˇr. osoba studuje v´ıce ˇskol). V takov´em pˇr´ıpadˇe je nutn´e jednoznaˇcnˇe urˇcit o kterou roli se jedn´a. Toto rozˇs´ıˇren´ı zat´ım nen´ı v jazyce Jive implementov´ ano.
Jazyk Jive Standard ODMG nedefinuje vlastn´ı jazyk pro manipulaci s daty, ale jen specifikuje mapov´ an´ı do jazyk˚ u C++, Java a Smalltalk. Typick´e sch´ema implementace aplikace je pak zn´azornˇeno na obr´azku 2.3. I kdyˇz tento pˇr´ıstup je vcelku pˇrijateln´ y, nenaplˇ noval plnˇe principy ortogonality perzistentn´ıch jazyk˚ u [3]. Z tohoto d˚ uvodu byl zvolen zcela odliˇsn´ y pˇr´ıstup a byl vytvoˇren speci´ aln´ı manipulaˇcn´ı jazyk Jive, kter´ y tyto principy splˇ nuje v souladu se standardem ODMG. Jazyk Jive je tedy ortogon´aln´ım rozˇs´ıˇren´ım jazyka Java s n´asleduj´ıc´ımi pˇridan´ ymi vlastnostmi.
2.3 Datab´ azov´ y syst´ em JUMBO
17
- Jive je pevnˇe sv´azan´ y se standardn´ı definic´ı jazyka ODL, takˇze nen´ı zde ˇz´adn´ y probl´em s impledanc´ı typu [3]. Jive podporuje vˇsechny typy a konstrukce jazyka ODL vˇcetnˇe vztah˚ u mezi objekty. - Jive obsahuje podporu pro ODMG 3.0 OQL, coˇz zajiˇst’uje plnou kontrolu dotaz˚ u jiˇz bˇehem pˇrekladu. - Virtu´aln´ı stroj JiveVM pˇr´ımo podporuje instrukce orientovan´e na specifick´e datab´ azov´e konstrukce (napˇr. dotazy, datov´e oper´atory).
2.3.1
Struktura objekt˚ u
Syst´emov´e a metaobjekty datab´aze JUMBO jsou tvoˇreny dvˇemi moduly. Modulem ODL a modulem ODLMetaObjects. Jak jiˇz bylo uvedeno tyto moduly jsou vytv´aˇreny okamˇzitˇe po inicializaci syst´emu a d´ıky tomu je moˇzn´e k nim pˇristupovat stejnˇe jako k jin´ ym objekt˚ um v datab´ azi. Syst´em zat´ım plnˇe neimplementuje standard ODMG a to hlavnˇe v oblasti transakc´ı, ˇr´ızen´ı spoleˇcn´eho pˇr´ıstupu a jmenn´eho prostoru typ˚ u. Posledn´ı vlastnost se projevuje t´ım, ˇze veˇsker´e objekty a typy jsou definovan´e a viditeln´e v r´amci cel´eho modulu.
Modul ODL Tento modul obsahuje typy Object, Blob, Extent, CodeBlob a TextBlob. Jednotliv´e z´ avislosti tˇr´ıd je moˇzn´e vidˇet na obr´azku 2.5.
Obr´azek 2.5: Sch´ema tˇr´ıd v modulu ODL
Object
typ kter´ y implicitnˇe implementuj´ı vˇsechny syst´emov´e i uˇzivatelsk´e typy.
2.3 Datab´ azov´ y syst´ em JUMBO
18
Blob, CodeBlob, TextBlob typy slouˇz´ı k uloˇzen´ı bin´arn´ıch dat do datab´aze.
Extent
typ pro ukl´ad´an´ı extent˚ u. (viz 2.2.5)
Modul ODLMetaObjects Tento druh´ y syst´emov´ y modul definuje metaobjekty standardu ODMG a vytv´aˇr´ı tak datab´ azov´e sch´ema syst´emu.
MetaObject Obecn´ y metaobjekt, kter´ y poskytuje spoleˇcn´e vlastnosti vˇsem metaobjekt˚ um. Jedn´ a se o atributy name a comment.
Obr´azek 2.6: Sch´ema dˇedˇen´ ych tˇr´ıd z MetaObject
Module v´ ychoz´ı bod pro popis metasch´ematu dan´e aplikace. Vˇse co popisuje data je viditeln´e pouze v r´amci dan´eho modulu. Modul m´a atribut sourceFile, kter´ y obsahuje jm´eno souboru s ODL popisem.
Interface jeden z nejd˚ uleˇzitˇejˇs´ıch typ˚ u. Definuje abstraktn´ı chov´an´ı aplikaˇcn´ıch objekt˚ u
Class rozˇsiˇruje Interface o abstraktn´ı stav objekt˚ u. Jedn´ım z atribut˚ u je is_role, kter´ y urˇcuje, ˇze instance tˇr´ıdy je rol´ı. Dalˇs´ım atributem je extents, kter´ y obsahuje referenci na extent tˇr´ıdy. Atribut source pak obsahuje referenci na Blob objekt obsahuj´ıc´ı zdrojov´ y k´od tˇr´ıdy.
2.3 Datab´ azov´ y syst´ em JUMBO
19
Obr´azek 2.7: Sch´ema vazeb typu Module
Obr´azek 2.8: Sch´ema vazeb typ˚ u Interface a Class
Property abstraktn´ı typ, kter´ y zastˇreˇsuje typy Attribute a Relationship. Obsahuje atribut type, kter´ y definuje typ vlastnosti.
Attribute vlastnost, kter´a uchov´av´a informace o stavu. M´a atribut read_only, kter´ y urˇcuje, ˇze neexistuje moˇznost zmˇenit hodnotu atributu.
Relationship vlastnost, kter´a realizuje obousmˇernou vazbu mezi typy. M´a atribut traversal, kter´ y obsahuje jm´eno vazby u druh´eho objektu.
Operation
typ modeluje podporu chov´an´ı aplikaˇcn´ıch objekt˚ u.
2.3 Datab´ azov´ y syst´ em JUMBO
20
Obr´azek 2.9: Sch´ema vazeb typ˚ u Property,Attribute,Relationship
Exception
typ popisuje v´ yjimky, kter´e mohou operace volat.
Code typ popisuje bin´arn´ı k´od operac´ı. Vlastn´ı k´od v jazyce Jive je v atributu code. Dalˇs´ı atributy stack_size, var_size a is_native bl´ıˇze urˇcuj´ı vlastnosti operace v JiveVM.
Obr´azek 2.10: Sch´ema vazeb mezi typy Operation, Exception a Code
Constant
zajiˇst’uje popis konstanty v modulu pomoc´ı atribut˚ u the_value a type.
TypeDefinition tento typ m´a zajistit podporu aliasu dan´eho typu.
Enumeration je strukturovan´ y typ, kter´ y realizuje v´ yˇctov´ y typ. Prvky v´ yˇctu jsou uloˇzen´e v atributu consts. Prvkem mohou b´ yt jen liter´aly typu string.
2.3 Datab´ azov´ y syst´ em JUMBO
Strukturovan´ e typy jedn´a se o typy Union, Structure a s t´ım souvisej´ıc´ı typ Member.
Uk´ azka definice modulu pro syst´ em JUMBO module Pokus { class Kontakt (extent kontakty) { attribute string adresa; }; class Osoba extends Kontakt (extent osoby) { attribute string jmeno; attribute string adresa; attribute char znak; string kdo_jsi(); Student do_skoly(in Skola skola); Zamestnanec do_prace(in Firma firma, in long plat); }; class Firma extends Kontakt (extent firmy) { attribute string nazev; attribute string adresa; attribute unsigned long ico; attribute set kontakty; relationship set zamestnanci inverse firma; void pridej_kontakt(in Kontakt x); }; class Skola extends Firma (extent skoly) { relationship set<Student> studenti inverse skola; }; class Zamestnanec roleof Osoba (extent zamestnanci) { relationship Firma firma inverse zamestnanci; attribute long plat; }; enum TypStudia { bc,mgr,dr };
21
2.3 Datab´ azov´ y syst´ em JUMBO
class Student roleof Osoba relationship Skola attribute long attribute TypStudia };
(extent studenti) { skola inverse studenti; rocnik; studium;
} // module pokus
Uk´ azka implementace funkc´ı pˇ redchoz´ıho modulu implementation module Pokus { class Firma { void pridej_kontakt(in Kontakt x) { kontakty.insert_element(x); } // pridej_kontakt }; // Firma class Osoba { string kdo_jsi() { return "Osoba: " + jmeno; } // kdo_jsi Student do_skoly(in Skola skola) { var Student student = newRole Student; student.skola = skola; student.rocnik = 1; return student; } // do_skoly Zamestnanec do_prace(in Firma firma, in long plat) { var Zamestnanec zam = newRole Zamestnanec; zam.firma = firma; zam.plat = plat; return zam; } // do_prace }; // Osoba
22
2.4 Protokol SOAP (Simple Object Access Protocol)
23
class Zamestnanec { string kdo_jsi() { return "Zamestnanec: " + jmeno + " - " + firma.nazev; } // kdo_jsi }; // Zamestnanec class Student { string kdo_jsi() { return "Student: " + jmeno + " - " + skola.nazev + ", rocnik " + rocnik; } // kdo_jsi }; // Student } // Pokus
2.4
Protokol SOAP (Simple Object Access Protocol)
2.4.1
´ Uvod
SOAP je protokol poskytuj´ıc´ı jednoduch´ y mechanismus pro v´ ymˇenu informac´ı v decentralizovan´em, distribuovan´em prostˇred´ı. Protokol pouˇz´ıv´a XML a s´am o sobˇe nedefinuje ˇz´ adnou aplikaˇcn´ı s´emantiku. Poskytuje jen modul´arn´ı model pro zapouzdˇren´ı dat a mechanismus pro k´odov´an´ı tˇechto dat v r´amci modulu. To umoˇzn ˇuje protokolu SOAP b´ yt pouˇz´ıv´an v r˚ uzn´ ych syst´emech od syst´emu pro zas´ıl´an´ı zpr´av aˇz po RPC. Protokol m˚ uˇze b´ yt rovnˇeˇz pouˇzit´ y v kombinaci s jin´ ymi protokoly (napˇr. HTTP, SMTP). Tento protokol byl standardizov´an a je udrˇzov´ an organizac´ı W3C. Samotn´ y vznik protokolu byl podm´ınˇen potˇrebou jednoduch´eho protokolu, kter´ y by byl nez´avisl´ y na platformˇe jak syst´emov´e, tak i programov´e. Na samotn´em vzniku protokolu se tak pod´ılely firmy jako je IBM ˇci Microsoft. V dneˇsn´ı dobˇe s rozvojem internetu a webov´ ych sluˇzeb se tento protokol st´av´a popul´arnˇejˇs´ım a k tomu pˇrisp´ıv´a i mnoˇzstv´ı implementac´ı pod r˚ uzn´ ymi programovac´ımi jazyky. Protokol SOAP se skl´ad´a z n´asleduj´ıc´ıch ˇc´ast´ı: SOAP Envelope – (viz 2.4.3) definuje aplikaˇcn´ı r´amec vyjadˇruj´ıc´ı co je obsahem zpr´ avy, kdo by ji mˇel zpracovat a zda je obsah povinn´ y nebo voliteln´ y
2.4 Protokol SOAP (Simple Object Access Protocol)
24
SOAP Encoding rules – definuj´ı pravidla pro serializaci1 aplikaˇcn´ıch datov´ ych typ˚ ua umoˇznit tak jejich pˇrenos. SOAP RPC – definuje pravidla, kter´e lze pouˇz´ıt bˇehem vzd´alen´eho vol´an´ı funkc´ı a z´ısk´av´an´ı odpovˇed´ı na nˇe. Protokol byl navrˇzen jako jednoduch´ y a rozˇsiˇriteln´ y. To m´a za n´asledek chybˇej´ıc´ı podporu nˇekter´ ych vlastnost´ı tradiˇcn´ıch syst´em˚ u pro pˇred´av´an´ı zpr´av a distribuovan´ ych syst´em˚ u. N´asleduj´ıc´ı dva pˇr´ıklady ukazuj´ı, jak m˚ uˇze vypadat poˇzadavek a odpovˇed v tomto protokolu.
SOAP poˇ zadavek v protokolu HTTP POST /StockQuote HTTP/1.1 Host: www.stockquoteserver.com Content-Type: text/xml; charset="utf-8" Content-Length: nnnn SOAPAction: "Some-URI" <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:GetLastTradePrice xmlns:m="Some-URI"> <symbol>DIS
SOAP odpovˇ ed na poˇ zadavek v protokolu HTTP HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: nnnn 1
Serializace je mechanismus pˇrevodu instanc´ı objekt˚ u do bin´ arn´ı podoby vhodn´e pro pˇrenos.
2.4 Protokol SOAP (Simple Object Access Protocol)
25
SOAPAction: "Some-URI" <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:GetLastTradePriceResponse xmlns:m="Some-URI"> 34.5
2.4.2
Model v´ ymˇ eny zpr´ av
ˇ Zpr´avy protokolu SOAP jsou v podstatˇe jednosmˇern´e ve smˇeru od odes´ılatele k pˇr´ıjemci. Casto jsou ale implementov´any podle n´avrhov´eho vzoru Poˇzadavek/Odpovˇed. Samotn´e implementace tohoto protokolu mohou b´ yt optimalizov´any pro konkr´etn´ı charakteristiky komunikaˇcn´ıch s´ıt´ı. Tedy napˇr. pokud zpr´avu pos´ıl´ame v r´amci poˇzadavku protokolu HTTP, odpovˇed pˇrijde stejn´ ym protokolem s pouˇzit´ım stejn´eho spojen´ı. Nehledˇe na protokol, kter´ ym jsou tyto zpr´avy pˇren´ aˇseny, je moˇzn´e zpr´avy pˇrepos´ılat z jednoho pˇr´ıjemce k druh´emu s postupn´ ym zpracov´an´ım aˇz ke koneˇcn´emu pˇr´ıjemci. Aplikace, kter´a pˇrij´ım´a zpr´avy protokolu mus´ı prov´est n´asleduj´ıc´ı operace v poˇrad´ı v jak´em jsou naps´any. 1. Identifikace vˇsech ˇc´ast´ı SOAP zpr´avy, urˇcen´ ych pro aplikaci 2. Ovˇeˇren´ı vˇsech povinn´ ych ˇc´ast´ı pˇredchoz´ıho bodu, kter´e jsou podporov´any aplikac´ı pro tuto zpr´avu a podle toho ji zpracovat. Jestliˇze tomu tak nen´ı, pak tuto zpr´avu ignorovat. Je moˇzn´e ignorovat nepovinn´e ˇc´ast´ı kroku 1 bez ovlivnˇen´ı v´ ysledku zpracov´an´ı 3. Pokud aplikace nen´ı posledn´ım pˇr´ıjemcem zpr´avy, odstran´ı pˇred pˇreposl´an´ım vˇsechny ˇc´ asti identifikovan´e v kroku 1. Jak uˇz jsem se zm´ınil protokol SOAP je aplikac´ı XML. Z tohoto d˚ uvodu by aplikace tohoto protokolu mˇela obsahovat pˇr´ısluˇsn´e jmenn´e prostory vˇsech element˚ u a atribut˚ u ve zpr´ av´ ach, kter´e generuje. Rovnˇeˇz aplikace mus´ı b´ yt schopn´a tyto jmenn´e prostory zpracovat v pˇrijat´ ych zpr´av´ ach. Pokud jmenn´ y prostor nen´ı korektn´ı mus´ı aplikace tyto zpr´avy zruˇsit. Zpr´ avy bez jmenn´eho prostoru je moˇzn´e ch´apat jako zpr´avy s korektn´ım jmenn´ ym prostorem tohoto protokolu.
2.4 Protokol SOAP (Simple Object Access Protocol)
26
Protokol definuje n´asleduj´ıc´ı dva jmenn´e prostory: SOAP Envelope – http://schemas.xmlsoap.org/soap/envelope/“ ” SOAP Serialization – http://schemas.xmlsoap.org/soap/encoding/“ ” Zpr´avy rovnˇeˇz nesm´ı obsahovat DTD a procesn´ı instrukce protokolu XML.
2.4.3
Envelope
SOAP zpr´avy se skl´adaj´ı z povinn´e ˇc´asti SOAP Envelope, voliteln´e SOAP Header a povinn´e ˇc´asti SOAP Body. Envelope je nejvyˇsˇs´ı element dokumentu reprezentuj´ıc´ı zpr´avu. Header je vˇseobecn´ y mechanismus pro pˇrid´av´an´ı vlastnost´ı do zpr´avy v decentralizovan´em chov´ an´ı bez pˇredchoz´ı domluvy komunikaˇcn´ıch stran. SOAP definuje nˇekolik m´alo atribut˚ u, kter´e lze pouˇz´ıt k indikaci kdo m´a s danou vlastnost´ı pracovat a zda je voliteln´a nebo povinn´a. Body je pak kontejner pro povinn´e informace urˇcen´e koncov´emu pˇr´ıjemci zpr´avy. Standard definuje jeden element pro Body a to element Fault, kter´ y se pouˇz´ıv´a pro pˇred´av´an´ı chyb. Pravidla pro vytv´ aˇ ren´ı zpr´ avy 1. Envelope jm´eno elementu je Envelope“ ” element mus´ı b´ yt souˇc´ast´ı zpr´avy element m˚ uˇze obsahovat deklaraci jmenn´ ych prostor˚ u pr´avˇe tak jako dalˇs´ı atributy nebo podelementy. Pokud jsou tyto atributy nebo elementy pˇr´ıtomn´e, pak mus´ı b´ yt specifikovan´e jm´enem jmenn´eho prostoru a mus´ı b´ yt um´ıstˇen´e ze elementem Body 2. Header jm´eno elementu je Header“ ” element m˚ uˇze b´ yt souˇc´ast´ı zpr´avy. Pokud je souˇc´ast´ı, pak mus´ı b´ yt prvn´ım podelementem v elementu Envelope. element m˚ uˇze obsahovat mnoˇzinu podelement˚ u. Vˇsechny tyto podelementy mus´ı b´ yt rovnˇeˇz specifikovan´e jm´enem jmenn´eho prostoru. 3. Body jm´eno elementu je Body“ ” element mus´ı b´ yt souˇc´ast´ı zpr´avy a mus´ı b´ yt bud’ prvn´ım podelementem elementu Envelope, nebo mus´ı n´asledovat bezprostˇrednˇe za podelementem Header, pokud je pˇr´ıtomen.
2.4 Protokol SOAP (Simple Object Access Protocol)
27
Obr´azek 2.11: Struktura zpr´avy protokolu SOAP
Atribut encodingStyle Tento glob´aln´ı atribut je moˇzn´e pouˇz´ıt k indikaci serializaˇcn´ıch pravidel pouˇzit´ ych ve zpr´ avˇe. Pokud je v elementu tento atribut uveden, pak se vztahuje jen na obsah elementu a vˇsechny jeho podelementy. Standard nedefinuje implicitn´ı pravidlo. Hodnotou atributu je seznam jednoho nebo v´ıce URI definuj´ıc´ıch serializaˇcn´ı pravidla. Pravidla se uv´adˇej´ı v poˇrad´ı od nejv´ıce specifick´eho po nejm´enˇe. Standard definuje vlastn´ı serializaˇcn´ı pravidlo, kter´e je definovan´e v 5. kapitole standardu [1] a jeho URI je: http://schemas.xmlsoap.org/soap/encoding“. URI, kter´e zaˇc´ınaj´ı t´ımto ˇretˇezcem ” pak indikuj´ı kompatibilitu s t´ımto pravidlem a poskytuj´ı jeho zpˇresnˇen´ı. Pokud bude hodnota atributu "", pak nebudou ˇz´adn´e poˇzadavky na elementy. Podpora verz´ı Tento protokol nedefinuje tradiˇcn´ı model pro spr´avu verz´ı zaloˇzen´ ych na hlavn´ıch a vedlejˇs´ıch ˇc´ıslech verz´ı. Zpr´avy m´ısto toho mus´ı obsahovat element, kter´ y je asociovan´ y se jmenn´ ym pros-
2.4 Protokol SOAP (Simple Object Access Protocol)
28
torem definovan´ ym t´ımto standardem ( http://schemas.xmlsoap.org/soap/envelope“). Pokud ” aplikace pˇrijme Envelope element s jin´ ym jmenn´ ym prostorem, mus´ı tuto zpr´avu zahodit a vr´atit chybu verz´ı.
2.4.4
Header
Mechanismus hlaviˇcek umoˇzn ˇuje flexibilnˇe rozˇsiˇrovat zpr´avu o informace bez nutnosti pˇredchoz´ı znalosti komunikaˇcn´ıho partnera. Typick´ ym pˇr´ıkladem pro pouˇzit´ı hlaviˇcek je autentifikace a ˇr´ızen´ı transakc´ı. Header element je ve zpr´avˇe um´ıstˇen jako prvn´ı podelement v elementu Envelope. Pravidla pro poloˇzky hlaviˇcky jsou n´asleduj´ıc´ı: 1. poloˇzka hlaviˇcky je identifikov´ana pln´ ym jm´enem elementu, kter´ y se skl´ad´a z URI jmenn´eho prostoru a lok´aln´ıho jm´ena. Vˇsechny podelementy pak mus´ı b´ yt rozliˇsiteln´e t´ımto jmenn´ ym prostorem. 2. atribut encodingStyle m˚ uˇze b´ yt pouˇzit pro indikaci pravidel pro serializaci na poloˇzku hlaviˇcky 3. atributy mustUnderstand a actor mohou b´ yt pouˇzit´e pro indikaci zp˚ usobu zpracov´ an´ı poloˇzky a k´ ym m´a b´ yt zpracov´ana. Atributy hlaviˇcky urˇcuj´ı, jak se m´a pˇr´ıjemce zpr´avy zachovat. Aplikace, kter´a pos´ıl´a zpr´ avu by mˇela pouˇz´ıvat atributy n´asleduj´ıc´ıho podelementu elementu hlaviˇcky. N´aslednˇe pˇr´ıjemce zpr´ avy mus´ı ignorovat vˇsechny atributy, kter´e nejsou k tomuto podlementu vztaˇzeny.
Uk´ azka hlaviˇ cky <SOAP-ENV:Header> ’’ ’’ 5
2.4 Protokol SOAP (Simple Object Access Protocol)
29
Atribut actor Bˇehem putov´an´ı zpr´avy od vys´ılatele k c´ılov´emu pˇr´ıjemci m˚ uˇze zpr´ava proch´azet r˚ uzn´ ymi meziaplikacemi, pˇriˇcemˇz tyto aplikace jsou zodpovˇedn´e za pˇreposlan´ı dalˇs´ımu pˇr´ıjemci. Soap zpr´ ava tak m˚ uˇze obsahovat ˇc´asti, kter´e nejsou urˇcen´e jen c´ılov´emu pˇr´ıjemci, ale mohou b´ yt jen pro nˇekter´e aplikace na jej´ı cestˇe. Tento atribut slouˇz´ı k identifikaci pˇr´ıjemce zpr´avy. Identifikace je opˇet zaloˇzena na URI ˇretˇezci, a kaˇzd´ y pˇr´ıjemce mus´ı nastavit novou hlaviˇcku pˇred odesl´an´ım zpr´avy. K identifikaci prvn´ıho pˇr´ıjemce slouˇz´ı ˇretˇezec http://schemas.xmlsoap.org/soap/actor/next“. Jestliˇze tento atribut ” chyb´ı, potom je pˇr´ıjemcem rovnou c´ılov´a aplikace. Atribut mustUnderstand Tento atribut indikuje, zda poloˇzka hlaviˇcky je povinn´a nebo voliteln´a z hlediska zpracov´ an´ı pˇr´ıjemcem. Pˇr´ıjemce je definov´ an atributem actor. Atribut m˚ uˇze nab´ yvat hodnot 1“ nebo ” 0“. Nepˇr´ıtomnost atributu je ch´ap´ana jako hodnota 0“. ” ” Pokud je hodnota atributu 1“, pak se mus´ı pˇr´ıjemce poloˇzky bud’ podˇr´ıdit s´emantice a zpracovat ” zpr´avu korektnˇe dle dan´e s´emantiky nebo vyvolat chybu zpracov´an´ı. T´ım zajiˇst’ujeme robustnost zmˇen s´emantiky, jelikoˇz nejsou ignorov´any nespr´avnˇe rozpoznan´e zpr´avy.
2.4.5
Body
Tento element slouˇz´ı k pˇred´av´an´ı povinn´ ych informac´ı c´ılov´emu pˇr´ıjemci zpr´avy. Nejˇcastˇejˇs´ım pouˇzit´ım elementu je vkl´ad´an´ı RPC volan´ ych metod a pˇred´av´an´ı chyb. Element mus´ı b´ yt bud’ prvn´ım podelementem elementu Envelope, nebo pokud element Envelope obsahuje element Header, pak mus´ı n´asledovat hned za t´ımto podlementem. Vˇsechny poloˇzky elementu Body jsou ch´ap´any jako nez´avisl´e. Standard definuje jednu poloˇzku Fault 2.4.6,kter´a je urˇcena pro pˇrenos chyb. Pravidla pro poloˇzky jsou n´asleduj´ıc´ı: 1. poloˇzka mus´ı b´ yt identifikov´ana pln´ ym jm´enem, kter´e se skl´ad´a z URI jmenn´eho prostoru a vlastn´ıho jm´ena. Podelementy mohou b´ yt identifikov´any pln´ ym jm´enem. 2. atribut encodingStyle m˚ uˇze b´ yt pouˇzit´ y pro indikaci zp˚ usobu k´odov´an´ı dan´e poloˇzky. Pˇrestoˇze elementy Header a Body jsou definov´any jako nez´avisl´e elementy, existuje mezi nimi vztah. Tento vztah je moˇzn´e ch´apat n´asledovnˇe: Poloˇzka Body je ekvivalentn´ı poloˇzce elementu Header urˇcen´e pro defaultn´ıho pˇr´ıjemce s atributem mustUnderstand nastaven´ ym na hodnotu 1“. Defaultn´ı pˇr´ıjemce je indikov´an, ale nen´ı pouˇzit atribut actor. ”
2.4 Protokol SOAP (Simple Object Access Protocol)
2.4.6
30
Fault
Tento element se pouˇz´ıv´a k pˇrenosu chyb a/nebo stavov´ ych informac´ı zpr´avy. Pokud je tento element pˇr´ıtomn´ y, pak mus´ı b´ yt um´ıstˇen v elementu Body. V cel´e zpr´avˇe m˚ uˇze b´ yt tento element jen jednou. Element definuje n´asleduj´ıc´ı podelementy: faultcode — obsahuje ˇc´ıslo chyby, kter´e je moˇzn´e pouˇz´ıt k vyhodnocen´ı chyby. Standard definuje nˇekolik z´akladn´ıch k´ od˚ u pro protokol SOAP. K´ody chyby se generuj´ı podobnˇe jako v protokolu HTTP. Rozd´ılem je, ˇze jednotliv´e ˇc´asti k´odu se oddˇeluj´ı teˇckou a jedn´ a se o textov´e ˇretˇezce (napˇr: Client.Authentication). Z´akladn´ı k´ody chyb jsou: VersionMismatch, MustUnderstand, Client a Server. Podrobnosti a v´ yznamy k´od˚ u lze nal´ezt v [1] (kapitola 4.4.1). faultstring — obsahuje text chybov´e zpr´avy, kter´ y je moˇzn´e zobrazit uˇzivateli. Mus´ı b´ yt souˇc´ast´ı chybov´e zpr´avy a mˇel by vysvˇetlit o jakou chyby se jedn´a. faultactor — identifikuje kdo danou chybu vyvolal. Je podobn´ y atributu actor, ale narozd´ıl od nˇej indikuje zdroj chyby ve formˇe URI. Aplikace, kter´a nen´ı c´ılov´ ym pˇr´ıjemcem mus´ı tento element vkl´adat do zpr´avy. C´ılov´a aplikace m˚ uˇze pouˇz´ıt tento element k explicitn´ı indikaci chyby v kombinaci s elementem detail. detail — je zodpovˇedn´ y za pˇrenos aplikaˇcn´ıch informac´ı o dan´e chybˇe vztahuj´ıc´ıch se k elementu Body. Mus´ı b´ yt souˇc´ast´ı zpr´avy tehdy pokud element Body nem˚ uˇze b´ yt u ´spˇeˇsnˇe zpracov´an. Detailn´ı informace o chybˇe v poloˇzce elementu Header mus´ı b´ yt pˇren´ aˇseny rovnˇeˇz v poloˇzk´ach elementu Header. Nepˇr´ıtomnost tohoto elementu lze vyuˇz´ıt pro rozliˇsen´ı, zda element m´a b´ yt nebo nem´ a b´ yt zpracov´av´an v okamˇziku chyby.
2.4.7
SOAP v HTTP
I kdyˇz je moˇzn´e SOAP protokol pouˇz´ıt s r˚ uzn´ ymi protokoly, jeho nejˇcastˇejˇs´ı pouˇzit´ı je s protokolem HTTP a jeho metodou POST. Protokol nemˇen´ı s´emantiku protokolu HTTP jen jej rozˇsiˇruje o svou. SOAP zachov´av´a styl zpr´av zaloˇzen´ ych na modelu poˇzadavek/odpovˇed, kdy SOAP poˇzadavek je odes´ılan jako HTTP poˇzadavek a naopak SOAP odpovˇed’ je zas´ıl´ ana jako HTTP odpovˇed’. Typ obsahu HTTP zpr´avy nesouc´ı SOAP zpr´avu mus´ı m´ıt hodnotu text/xml“ ” SOAP protokol rozˇsiˇruje hlaviˇcku HTTP poˇzadavku o pole SOAPAction, kter´e m˚ uˇze identifikovat obsah a umoˇzn ˇuje tak r˚ uzn´ ym server˚ um nebo firewall˚ um pˇr´ısluˇsnˇe filtrovat HTTP zpr´ avy.
2.4 Protokol SOAP (Simple Object Access Protocol)
31
SOAP odpovˇed’ dodrˇzuje s´emantiku HTTP stavov´ ych k´od˚ u pro komunikaci, takˇze napˇr. pokud se pos´ıl´a zpˇet v´ ysledek spr´avnˇe zpracovan´e zpr´avy zas´ıl´a se k´od 2xx. Naopak pokud doˇslo k chybˇe bˇehem zpracov´an´ı, mus´ı se zaslat k´od 500 Internal Server Error“ a tˇelo SOAP zpr´ avy mus´ı ” obsahovat element Fault.
2.4.8
SOAP a RPC
Jednou z v´ yhod protokolu SOAP je jeho schopnost zapouzdˇrovat vol´an´ı RPC funkc´ı do jazyka XML. RPC vol´an´ı je moˇzn´e mapovat do HTTP poˇzadavku a odpovˇed’ na vol´an´ı RPC funkce pak do HTTP odpovˇedi. Protokol HTTP, ale nen´ı jedin´ y protokol a m˚ uˇze b´ yt pouˇzit´ y i jak´ ykoliv jin´ y protokol, kter´ y um´ı pˇren´aˇset zpr´avy protokolu SOAP. Pro vol´an´ı funkc´ı je nutn´e poskytnout n´asleduj´ıc´ı informace: URI c´ılov´eho objektu jm´eno metody volitelnˇe signaturu metody parametry metody volitelnˇe data v hlaviˇcce RPC vol´an´ı i odpovˇed jsou pˇren´ aˇseny v elementu Body a s pouˇzit´ım n´asleduj´ıc´ı reprezentace: vol´an´ı metody je modelov´ ano jako struktura vol´an´ı metody je ch´ap´ano jako jednoduch´a struktura obsahuj´ıc´ı elementy pro kaˇzd´ y vstupn´ı nebo vstupnˇe/v´ ystupn´ı parametr. Struktura je z´aroveˇ n pojmenov´ana a otypov´ana stejnˇe jako jm´eno metody. kaˇzd´ y vstupn´ı nebo vstupnˇe/v´ ystupn´ı parametr je zobrazov´an jako element s jm´enem a typem odpov´ıdaj´ıc´ı jm´enu a typu parametru. Vˇse ve stejn´em poˇrad´ı jako v signatuˇre metody. odpovˇed’ metody je modelov´ana jako struktura odpovˇed je ch´ap´ana jako jednoduch´a struktura obsahuj´ıc´ı elementy s n´avratovou hodnotou pro kaˇzd´ y v´ ystupn´ı nebo vstupnˇe/v´ ystupn´ı parametr. Prvn´ı element obsahuje n´ avratovou hodnotu funkce a dalˇs´ı pak jednotliv´e parametry ve stejn´em poˇrad´ı jako v signatuˇre typu.
2.4 Protokol SOAP (Simple Object Access Protocol)
32
Kaˇzd´ y element m´a stejn´e jm´eno a typ jako pˇr´ısluˇsn´ y parametr. Jm´eno n´avratov´e hodnoty nen´ı podstatn´e, stejnˇe tak jako jm´eno struktury. Pˇresto se doporuˇcuje dodrˇzovat konvenci, kter´a pojmenov´av´a strukturu jm´enem metody s pˇridan´ ym ˇretˇezcem Response“. ” pˇrenos chyby v metodˇe je pˇren´aˇsen pomoc´ı elementu Fault. Pokud pˇrenosov´ y protokol pˇrid´av´a dalˇs´ı pravidla pro identifikaci chyby, je nutn´e je rovnˇeˇz uv´est. Chybˇej´ıc´ı parametry m˚ uˇze metoda bud’ zpracovat, nebo vr´atit chyby.
3. JUMBO klient
3.1
Anal´ yza souˇ casn´ eho stavu
Jak jiˇz bylo uvedeno v pas´aˇzi vˇenovan´e syst´emu JUMBO, jedn´a se o experiment´aln´ı datab´ azi. Zat´ım existoval pouze server se kter´ ym bylo moˇzn´e pracovat pomoc´ı prohl´ıˇzeˇce HTML str´ anek. Toto ˇreˇsen´ı ale neposkytuje ve sv´e podobˇe dostateˇcn´ y komfort pro pr´aci uˇzivatele. Samotn´ y server je bohuˇzel st´ale nedokonˇcen´ y a nˇekter´e funkce vznikaly soubˇeˇznˇe aˇz s touto diplomovou prac´ı a tak nebylo moˇzn´e je plnˇe otestovat.
3.2
Specifikace poˇ zadavk˚ u proch´azen´ı mezi objekty na serveru v r´amci dan´eho zobrazov´an´ı vytv´aˇren´ı instanc´ı objekt˚ u serveru editace a maz´an´ı atribut˚ u a vztah˚ u vol´an´ı operac´ı nad objekty ˇreˇsen´ı cachov´an´ı objekt˚ u serveru na stranˇe klienta aplikaci implementovat tak, aby umoˇzn ˇovala v´ıce zp˚ usob˚ u zobrazen´ı objekt˚ u
3.3 3.3.1
Anal´ yza Gener´ ator formul´ aˇ r˚ u
Jedn´ım ze z´akladn´ıch nedostatk˚ u nynˇejˇs´ı verze klienta je jeho uˇzivatelsk´a nepˇr´ıvˇetivost v oblasti zobrazov´an´ı objekt˚ u. Aplikace by proto mˇela b´ yt v tomto ohledu variabiln´ı a je ji proto nutn´e navrhnout tak, aby umoˇzn ˇovala zobrazovat objekty r˚ uzn´ ymi zp˚ usoby. Tuto schopnost zajiˇst’uje Gener´ator formul´aˇr˚ u“, kter´ y je moˇzn´e vidˇet na obr´azku 3.1. Tento gener´ator poskytuje rozhran´ı ” pro samotn´e uˇzivatelsk´e rozhran´ı, kter´e na z´akladˇe dat z gener´atoru a samotn´ ych dat aplikace nab´ıdne tento formul´aˇr uˇzivateli.
3.3 Anal´ yza
34
Obr´ azek 3.1: Navrˇzen´e sch´ema aplikace
3.3.2
Komunikace se serverem
Dalˇs´ı poˇzadavek, kter´ y bylo nutn´e ˇreˇsit byla samotn´a komunikace mezi klientem a serverem. Tato komunikace je zajiˇst’ov´ana komunikaˇcn´ım rozhran´ım. Toto rozhran´ı rozhoduje, zda se maj´ı pouˇz´ıt jiˇz lok´alnˇe uloˇzen´e objekty, nebo se maj´ı tyto objekty naˇc´ıst z datab´aze. Rozhodnut´ı pouˇz´ıvat cachov´an´ı objekt˚ u na lok´aln´ı stranˇe vych´azelo z poˇzadavku, kter´ y pˇredpokl´ ad´ a, ˇze bˇehem proch´azen´ı daty se vˇetˇsina objekt˚ u nebude mˇenit. Toto pravidlo plat´ı hlavnˇe pro metadata jednotliv´ ych modul˚ u. Samotn´ y server pro potˇrebu cachov´an´ı poskytuje pro kaˇzd´ y objekt ˇcasov´e raz´ıtko, kter´e informuje o ˇcase posledn´ı zmˇeny objektu. Na obr´azku 2.4 je moˇzn´e vidˇet, ˇze tento klient bude vyuˇz´ıvat protokol SOAP. Server v r´amci tohoto protokolu poskytuje n´ asleduj´ıc´ı metody. Pojmy attribute a parameter vych´az´ı z pojmu protokolu SOAP, kdy atribut je ch´ ap´ an jako atribut elementu a parametr je ch´ap´an jako podelement elementu s metodou.
metoda getClass string name – jm´eno tˇr´ıdy ve form´atu: modul$tˇr´ıda
3.3 Anal´ yza
35
Metoda vr´at´ı tˇr´ıdu uloˇzenou v datab´azi na z´akladˇe jej´ıho jm´ena
metoda GetObject attribute long oid – oid objektu attribute string path – um´ıstˇen´ı objektu v datab´azi return object – data objektu
Metoda m˚ uˇze dostat jako parameter jeden ze dvou moˇzn´ ych. Nikdy ne oba z´aroveˇ n. Na z´ akladˇe dan´eho parametru n´aslednˇe vyhled´a v datab´azi pˇr´ısluˇsn´ y objekt a vr´at´ı ho.
metoda GetObjectHeader attribute long oid – oid objektu return object – hlaviˇcka objektu
Metoda vr´at´ı pouze hlaviˇcku objektu skl´adaj´ıc´ı se z jeho jm´ena, oid, typu a ˇcasov´eho raz´ıtka
metoda DeleteObject attribute long oid – oid objektu
Metoda zajist´ı vymaz´an´ı objektu s dan´ ym oid z datab´aze.
metoda EditObject attribute long oid – oid objektu parameter object – zmˇenˇen´e atributy/vztahy objektu
Metoda zajist´ı zmˇenu hodnot dan´eho objektu. Data jsou zas´ıl´any v podobˇe dvojice jm´ena atributu/vztahu a jeho nov´e hodnoty jako podelementy parametru object. Pokud se mˇen´ı kolekce pak se zas´ılaj´ı pouze zmˇeny v r´ amci kolekce. Znak +“ znamen´a pˇrid´an´ı prvku do kolekce a ” znak -“ odstranˇen´ı n´asleduj´ıc´ıho prvku z kolekce. ”
3.3 Anal´ yza
36
metoda CreateObject attribute string class – jm´eno tˇr´ıdy, kterou chceme instanciovat return long oid – oid novˇe vytvoˇren´e instance dan´eho objektu
Metoda vytvoˇr´ı novou instanci dan´e tˇr´ıdy. Jm´eno tˇr´ıdy se zad´av´a v podobˇe modul$tˇr´ıda.
metoda InvokeMethod attribute string op – jm´eno operace, kterou chceme vykonat attribute long this – oid objektu, kter´ y danou operaci vol´a parameter parameters – parametry dan´e operace return result – v´ ysledek vol´an´ı operace Metoda zajiˇst’uje vol´an´ı operac´ı objekt˚ u v datab´azi. V´ ysledkem operace je n´aslednˇe bud’ liter´ al, nebo oid objektu, kter´ y obsahuje v´ ysledek volan´e operace.
3.3.3
Cache
Jak jiˇz bylo zm´ınˇeno, objekty bude potˇreba na stranˇe klienta doˇcasnˇe ukl´adat. Algoritmus cachov´an´ı vych´az´ı z moˇznost´ı serveru a kop´ıruje princip cachov´an´ı protokolu HTTP. Komunikaˇcn´ı manaˇzer nejprve otestuje existenci objektu v cache. Pokud tento objekt neexistuje, pak poˇz´ ad´ a server rovnou o cel´ y objekt. Pokud je tento objekt jiˇz v lok´aln´ı cache, tak se ˇz´ad´a po serveru jenom hlaviˇcka objektu. N´aslednˇe se porovnaj´ı ˇcasov´e raz´ıtka. Pokud je ˇcasov´e raz´ıtko ze serveru novˇejˇs´ı neˇz raz´ıtko objektu v cache, zajist´ı se opˇetovn´e naˇcten´ı objektu ze serveru.
3.3.4
Historie
V datab´azi mohou existovat objekty, kter´e se skl´adaj´ı jen z atribut˚ u a tak nen´ı moˇzn´e z tohoto objektu pokraˇcovat na jin´ y objekt. Tato skuteˇcnost znamen´a, ˇze se nedostaneme ani na pˇredchoz´ı objekt, ze kter´eho jsme pˇriˇsli. Z tohoto d˚ uvodu je nutn´e v aplikaci implementovat historii proch´azen´ı, kter´a tento nedostatek ˇreˇs´ı.
3.4 N´ avrh a implementace
3.4
37
N´ avrh a implementace
Pˇrestoˇze samotn´ y server je napsan´ y v jazyce C++, d´ıky protokolu SOAP mohla b´ yt implementace klienta vytvoˇrena v jazyce JAVA. Pro protokol SOAP byla zvolena implementace eSOAP firmy Embedding.Net, kter´a je dostupn´a jak pro C++, tak i JAVu. Okno aplikace bylo rozdˇeleno na 2 d˚ uleˇzit´e ˇc´asti. V horn´ı ˇc´asti hned pod menu je panel s nab´ıdkou operac´ı, kter´e lze v aplikaci prov´adˇet. Pod t´ımto panelem je plocha pro um´ıstˇen´ı formul´aˇr˚ u dan´eho gener´atoru. Klient dodrˇzuje z´asady pro psan´ı v´ıcejazykov´ ych program˚ u a tak je moˇzn´e klienta pouˇz´ıvat ve v´ıce jazyc´ıch. Konkr´etnˇe se jedn´a o ˇceˇstinu a angliˇctinu. Pro ostatn´ı jazyky lze vyuˇz´ıt nastaven´ı dle aktu´aln´ıho jazyka syst´emu. Uv´ ad´ım zde jenom nejd˚ uleˇzitˇejˇs´ı tˇr´ıdy rozhran´ı. Podrobn´ y popis vˇsech tˇr´ıd a metod lze nal´ezt na pˇriloˇzen´em m´ediu, kde se nach´az´ı i tato aplikace.
3.4.1
R´ amec aplikace
Cel´a aplikace je spojena pomoc´ı tˇr´ıdy MainFrame. Tato tˇr´ıda zajiˇst’uje propojen´ı mezi jednotliv´ ymi ˇc´astmi aplikace a je odpovˇedn´a za rozm´ıstˇen´ı jednotliv´ ych grafick´ ych komponent v aplikaci. Jedn´a se o aplikaˇcn´ı menu, panel s operacemi nad objekty a stavov´ y ˇr´adek. Dalˇs´ım u ´kolem t´eto tˇr´ıdy je vytvoˇren´ı instance komunikaˇcn´ıho rozhran´ı a podpory pro logov´an´ı ud´alost´ı v aplikaci. N´asleduj´ıc´ı diagram tˇr´ıd zobrazuje vazby mezi tˇr´ıdami aplikace. Tˇr´ıda MainMenu implementuje menu aplikace, kter´e kromˇe nastaven´ı parametr˚ u poskytuje dva vstupn´ı body k objekt˚ um v datab´azi. Jedn´a se o seznam extent˚ u a seznam modul˚ u.
Obr´azek 3.2: Diagram tˇr´ıd r´amce aplikace
3.4.2
Gener´ ator formul´ aˇ r˚ u
V bal´ıˇcku edu.vsb.navrat.jumbo.gui lze nal´ezt d´ale uveden´e tˇr´ıdy a rozhran´ı gener´ atoru.
3.4 N´ avrh a implementace
38
Bˇehem implementace aplikace, bylo nutn´e ˇreˇsit probl´em n´avaznosti t´eto diplomov´e pr´ ace a diplomov´e pr´ace Ladislava Pavlici. Obsahem jeho diplomov´e pr´ace je knihovna grafick´ ych uˇzivatelsk´ ych prvk˚ u. Pouˇzit´ım tˇechto prvk˚ u bude moˇzn´e vytv´aˇret pˇekn´e“ formul´aˇre. Tyto prvky ” na z´akladˇe typu jednotliv´ ych objekt˚ u a typu atribut˚ u budou volit vhodnou grafickou reprezentaci dat. Napˇr´ıklad pokud objekt bude obsahovat v´ yˇctov´ y typ o velikosti tˇr´ı moˇzn´ ych hodnot nab´ıdne skupinu pˇrep´ınaˇc˚ u, kdeˇzto pro v´ yˇctov´ y typ o vˇetˇs´ı velikosti nab´ıdne jiˇz seznam s povolen´ ym v´ ybˇerem jedn´e hodnoty. Generov´an´ı tˇechto formul´aˇr˚ u n´aslednˇe zajist´ı pˇr´ısluˇsn´e gener´atory. Na z´akladˇe stavu rozpracovanosti jednotliv´ ych prac´ı byl implementov´an z´akladn´ı gener´ator, kter´ y zobrazuje jak atributy, tak i vztahy objektu jako poloˇzky tabulky. Samotn´e operace objektu jsou pak zobrazov´ any pod touto tabulkou jako tlaˇc´ıtka. Jelikoˇz zat´ım neexistuje jin´a implementace tohoto gener´atoru, nen´ı uˇzivateli nab´ıdnuta moˇznost interaktivnˇe si tyto gener´atory mˇenit. Pˇresto jiˇz s touto moˇznost´ı klient poˇc´ıt´a a gener´ator je moˇzn´e nastavit editac´ı konfiguraˇcn´ıho souboru klienta.
interface GuiRenderer Tento interface popisuje rozhran´ı, kter´e mus´ı jednotliv´e implementace gener´atoru implementovat. Interface vznikl na z´akladˇe implementace nynˇejˇs´ıho gener´atoru a je moˇzn´e, ˇze toto rozhran´ı se m´ırnˇe pozmˇen´ı v pˇr´ıpadˇe pokusu zaˇclenˇen´ı gener´atoru pouˇz´ıvaj´ıc´ıho knihovnu grafick´ ych prvk˚ u. Metody tohoto rozhran´ı vrac´ı jednak konkr´etn´ı implementace dan´ ych akc´ı, kter´e m˚ uˇze klient prov´adˇet a d´ale odkaz na konkr´etn´ı panel s formul´aˇrem. Z´akladn´ı filozofie vych´az´ı z principu, kdy jsou jednotliv´e operace s objekty pˇrizp˚ usoben´e na m´ıru dan´emu gener´atoru formul´ aˇre.
setMainFrame() getModulesAction() getExtentsAction() getBrowseAction() getPreviousButtonAction() getCreateButtonAction() getDeleteButtonAction()
nastav´ı odkaz na aplikaˇcn´ı r´amec aplikace implementace akce zajist´ı naˇcten´ı extentu se seznamem vˇsech modul˚ u instalovan´ ych v datab´azi a jeho zobrazen´ı implementace akce zajist´ı naˇcten´ı seznamu vˇsech extent˚ u v datab´azi a zobraz´ı tento seznam implementace zajist´ı zobrazen´ı dalˇs´ıho poˇzadovan´eho objektu implementace zajist´ı pˇrechod na pˇredchoz´ı objekt v historii implementace zajist´ı vytvoˇren´ı nov´eho objektu implementace zajist´ı smaz´an´ı zobrazen´eho objektu z datab´aze
3.4 N´ avrh a implementace
39
Obr´ azek 3.3: Diagram tˇr´ıd gener´atoru
getEditButtonAction() getSaveButtonAction() getViewPanel
implementace zajist´ı pˇrepnut´ı do editaˇcn´ıho reˇzimu objektu, pˇr´ıpadnˇe jeho zruˇsen´ı implementace zajist´ı uloˇzen´ı zmˇenˇen´ ych hodnot zobrazen´eho objektu implementace vr´at´ı aktu´aln´ı instanci panelu se zobrazen´ ym objektem
class GuiRendererFactory Tato tˇr´ıda na z´akladˇe nastaven´eho parametru (viz 3.4.8) aplikace vytvoˇr´ı instanci konkr´etn´ıho gener´atoru formul´aˇr˚ u. Instance je n´aslednˇe pˇred´ana aplikaˇcn´ımu r´amci. createJumboGuiRenderer()
instancializuje konkr´etn´ı implementaci gener´atoru
3.4 N´ avrh a implementace
40
class SimpleTableGuiRenderer Zat´ım jedin´a implementace gener´atoru formul´aˇr˚ u vytvoˇr´ı a vr´at´ı instanci t´eto tˇr´ıdy
newInstance()
3.4.3
Gener´ ator formul´ aˇ r˚ u - SimpleTableGuiRenderer
Tato zat´ım jedin´a implementace gener´atoru obsahuje dvˇe z´akladn´ı varianty zobrazen´ı. Prvn´ı varianta se pouˇz´ıv´a pro zobrazen´ı strukturovan´eho typu Dictionary a je pouˇzita pro zobrazen´ı seznamu extent˚ u. Druh´a varianta je n´aslednˇe pouˇzita pro vˇsechny ostatn´ı objekty. Tyto dvˇe varianty ˇreˇsen´ı pˇredstavuj´ı tˇr´ıdy CollectionModel a AttributesModel.
Obr´azek 3.4: Diagram tˇr´ıd model˚ u pro tˇr´ıdu JTable
interface Browsable U obou model˚ u bylo potˇrebn´e dozvˇedˇet se, kter´ y objekt je aktu´aln´ı a kter´ y objekt chceme pˇr´ıpadnˇe d´ale zobrazit. Tuto vlastnost zajiˇst’uje implementace tohoto rozhran´ı. getActualOID() getBrowseToOID()
metoda vr´at´ı oid objektu, na kter´em se moment´ alnˇe nach´az´ıme metoda vr´at´ı oid objektu na kter´ y odkazuje vybran´ y ˇr´adek tabulky
3.4 N´ avrh a implementace
41
class AttributesModel Tˇr´ıda implementuje model tabulky a definuje vzhled t´eto tabulky. Model je schopen rozhodnout na z´akladˇe znalost´ı hodnoty atributu, zda m´a zobrazit jednoduch´ y ˇretˇezec nebo kombobox s v´ıce hodnotami. Model rovnˇeˇz podporuje editaˇcn´ı reˇzim. Editace primitivn´ıch typ˚ u se prov´ad´ı pˇr´ımo v tabulce. Typy vych´azej´ıc´ı z datab´azov´eho typu Blob a veˇsker´e reference a kolekce se n´ aslednˇe edituj´ı v jin´ ych dialoz´ıch a model zajiˇst’uje jen aktualizaci v´ ysledku editace.
class CollectionModel Druh´ y z model˚ u pro tabulku zobrazuj´ıc´ı objekty je urˇcen pro zobrazen´ı poloˇzek kolekce typu Dictionary. Tento model je urˇcen pouze pro zobrazen´ı dat a nepovoluje ˇz´adnou editaci.
class ViewAttribute Tˇr´ıda je v´ ysledkem transformace atribut˚ u a vztah˚ u do grafick´ ych objekt˚ u. Uchov´av´a informace o dan´em atributu nebo vztahu a tvoˇr´ı jeden ˇr´adek v tabulce s modelem tˇr´ıdy AttributesModel. Instance t´eto tˇr´ıdy si uchov´avaj´ı informace o tom, zda byly modifikov´any coˇz umoˇzn ˇuje ukl´ adat jen ty atributy, kter´e se skuteˇcnˇe zmˇenily.
class ViewDictionary Tˇr´ıda uchov´av´a informace o poloˇzce kolekce a tvoˇr´ı jeden ˇr´adek v tabulce s modelem tˇr´ıdy CollectionModel.
class ViewListObject Instance t´eto tˇr´ıdy mohou obsahovat libovoln´ y objekt a uchov´avaj´ı si indikaci zda je dan´ y objekt vybran´ y. Vyuˇz´ıv´a se jako poloˇzka kombobox˚ u v tabulce a v editaci kolekc´ı a referenc´ı.
BlobDialog Dialog poskytuje schopnosti editace objekt˚ u odvozen´ ych od typu Blob.
3.4 N´ avrh a implementace
42
ListEditDialog Dialog umoˇzn ˇuje editovat u objektu vztahy a atributy, kter´e jsou typu kolekce. Pokud je zn´ am pro typ poloˇzky extent, je obsah tohoto extentu uˇzivateli nab´ıdnut. V ostatn´ıch pˇr´ıpadech je moˇzn´e novou hodnotu vloˇzit pˇr´ım´ ym zad´an´ım OID (v pˇr´ıpadˇe typ˚ u).
Obr´azek 3.5: Diagram tˇr´ıd panel˚ u gener´atoru
class ObjectTableViewPanel Tˇr´ıda m´a na starost samotn´e zobrazen´ı poˇzadovan´eho objektu a rozm´ıstˇen´ı jednotliv´ ych panel˚ u. Po t´eto inicializaci vzhledu se pak jiˇz star´a o zmˇenu stavu nˇekter´ ych tlaˇc´ıtek pro pr´aci s objekty.
class OperationsPanel Tˇr´ıda vytv´aˇr´ı v aplikaci panel obsahuj´ıc´ı tlaˇc´ıtka vˇsech operac´ı, kter´e lze vykonat nad dan´ ym objektem. Instance t´eto tˇr´ıdy je pˇriˇrazena promˇenn´e objectSpecificPanel ve v´ yˇse uveden´e tˇr´ıdˇe.
class ParametersInputDialog Tˇr´ıda implementuje dialog pro zad´av´an´ı parametr˚ u operac´ı. Dialog zobrazuje vˇzdy zat´ım m´ısto skuteˇcn´eho n´azvu parametru slovo param“ n´asleduj´ıc´ı jeho poˇradov´ ym ˇc´ıslem. Je to zp˚ usobeno ” t´ım, ˇze server neuchov´av´a po kompilaci metod tyto parametry, ale jen signaturu typ˚ u, ze kter´e klient pro tento dialog generuje tyto parametry.
3.4 N´ avrh a implementace
3.4.4
43
Akce klienta
Veˇsker´e akce klienta jsou v bal´ıˇcku edu.vsb.navrat.jumbo.gui.action.
Obr´azek 3.6: Diagram tˇr´ıd akc´ı
class ExtendedAction Tato abstraktn´ı tˇr´ıda je spoleˇcn´ ym pˇredkem vˇsech tˇr´ıd. Pro jednotliv´e akce nastavuje aplikaˇcn´ı konstanty na z´akladˇe aktu´aln´ıho jazyka aplikace. Nastavuje se kl´avesov´a zkratka pro danou akci, jm´eno akce, znak pro pˇr´ıstup pˇres kl´avesu Alt a kontextov´a n´apovˇeda pro akci. init()
metoda inicializuje konkr´etn´ı konstanty
Akce rozhran´ı Jedn´a se o obecn´e akce, kter´e nemaj´ı vztah k datab´azi. AboutAction ExitAction SettingAction
akce zobraz´ı informaˇcn´ı dialog o aplikaci akce ukonˇc´ı aplikaci a uloˇz´ı parametry aplikace do souboru akce zobraz´ı dialog pro nastaven´ı parametr˚ u aplikace
3.4 N´ avrh a implementace
44
Datab´ azov´ e akce Tyto akce pracuj´ı s objekty datab´aze. Jedn´a se o podporu ˇctyˇr z´akladn´ıch datab´azov´ ych operac´ı, o proch´azen´ı datab´az´ı a vol´an´ı operace nad dan´ ym objektem. ExtentsAction ModulesAction BrowseButtonAction
CreateButtonAction DeleteButtonAction EditButtonAction PreviousButtonAction SaveButtonAction
3.4.5
akce zobraz´ı seznam se vˇsemi extenty datab´aze spoleˇcn´a implementace pro dalˇs´ı akce. Zajiˇst’uje naˇcten´ı objektu z datab´aze akce na z´akladˇe reˇzimu pr´ace zajist´ı pˇrechod na objekt na kter´ y ukazuje aktu´aln´ı ˇr´adek tabulky, nebo pokud je v editaˇcn´ım reˇzimu umoˇzn´ı editaci nˇekter´ ych atribut˚ u a vztah˚ u akce vytvoˇr´ı novou instanci pr´avˇe zobrazen´eho objektu a pˇrejde na nˇej akce smaˇze z datab´aze pr´avˇe zobrazen´ y objekt a pokus´ı se vr´ atit na pˇredchoz´ı objekt v historii akce zajiˇst’uje pˇrep´ın´an´ı do editaˇcn´ıho reˇzimu objektu a jeho stornov´an´ı pokud zmˇeny nechceme uloˇzit akce umoˇzn ˇuje vr´atit se v historii proch´azen´ı na pˇredchoz´ı zobrazen´ y objekt akce uloˇz´ı proveden´e zmˇeny v objektu do datab´aze
Historie
Obr´azek 3.7: Tˇr´ıdn´ı diagram historie proch´azen´ı
class BrowseHistory Tato tˇr´ıda implementuje historii proch´azen´ı. Historie funguje na principu z´asobn´ıku, kdy pˇri pˇrechodu na dalˇs´ı objekt je do historie vloˇzeno oid aktu´aln´ıho objektu. N´aslednˇe pokud pˇrech´ az´ıme zpˇet je nejv´ yˇse uloˇzen´e oid pouˇzito a je z vrcholu odstranˇeno. Pokud historie na vrcholu obsahuje hodnotu oid odpov´ıdaj´ıc´ı seznamu vˇsech extent˚ u, pak je cel´a historie vymaz´ana. Toto omezen´ı bylo dod´ano z implementaˇcn´ıch d˚ uvod˚ u, kdy se nepodaˇrilo vyˇreˇsit pˇrep´ın´an´ı model˚ u z reˇzimu zobrazen´ı objekt˚ u do reˇzimu zobrazen´ı extent˚ u.
3.4 N´ avrh a implementace
3.4.6
45
Komunikaˇ cn´ı rozhran´ı
Komunikaˇcn´ı rozhran´ı zajiˇst’uje veˇskerou komunikaci se serverem. Komunikace se serverem je bezestavov´a, coˇz znamen´a, ˇze s kaˇzd´ ym poˇzadavkem se pˇripojujeme znovu k serveru a po obdrˇzen´ı odpovˇedi je toto spojen´ı ukonˇceno. Tˇr´ıdy tohoto rozhran´ı se nach´azej´ı v bal´ıˇcku edu.vsb.navrat.jumbo.business. Klient pro svou pr´aci nepotˇrebuje m´ıt objekty dle standardu ODMG. Tˇr´ıda AbstractMetaObject a z n´ı zdˇedˇen´e tˇr´ıdy tak slouˇz´ı pouze jako adapt´er naˇcten´ ych dat protokolu SOAP. Tyto data je moˇzn´e pouze ˇc´ıst. Jejich modifikace prob´ıh´ a nez´avisle na tˇechto objektech. Objekt se aktualizuje po editaci opˇetovn´ ym naˇcten´ım ze serveru.
Obr´azek 3.8: Diagram tˇr´ıd komunikaˇcn´ıho rozhran´ı
interface Connectable Rozhran´ı umoˇzn ˇuje propagovat v r´amci aplikace referenci na vytvoˇren´e komunikaˇcn´ı rozhran´ı klienta.
3.4 N´ avrh a implementace
46
class ConnectionManager Samotn´e komunikaˇcn´ı rozhran´ı. Tˇr´ıda vytv´aˇr´ı zpr´avy pro protokol SOAP a n´aslednˇe zpracov´ av´ a odpovˇedi na tyto zpr´avy. setURL() getObject() getClass() createClass() editObject() deleteObject() invokeMethod()
metoda nastav´ı adresu, na kter´e bˇeˇz´ı datab´azov´ y server vr´at´ı naˇcten´ y objekt. Tento objekt se vr´at´ı bud’ z lok´ aln´ı cache, nebo naˇcten´ y ze serveru vr´at´ı naˇctenou tˇr´ıdu ze serveru, nebo z lok´aln´ı cache vytvoˇr´ı novou instanci dan´eho typu na serveru a vr´ at´ı jej´ı oid uloˇz´ı proveden´e zmˇeny v objektu na server vol´a metodu pro smaz´an´ı objektu z datab´aze zajiˇst’uje spuˇstˇen´ı metody objektu ve virtu´aln´ım stroji JiveVM na serveru. Po vykon´an´ı operace vrac´ı jej´ı v´ ysledek
class AbstractMetaObject Tato abstraktn´ı tˇr´ıda implementuje spoleˇcn´e metody dvou n´asleduj´ıc´ıch tˇr´ıd. getOID() getType() getLabel() getClassNameFromType()
vr´at´ı oid objektu pod kter´ ym je v datab´azi uloˇzeno vr´at´ı typ objektu ve form´atu vhodn´em pro zobrazen´ı vr´at´ı jm´eno objektu. vr´at´ı pln´e jm´eno tˇr´ıdy ve tvaru <modul>$. Tento form´at se pouˇz´ıv´a pˇri komunikaci se serverem.
class MetaObject Tˇr´ıda uchov´av´a naˇcten´ y objekt z protokolu SOAP, kter´ y obaluje sv´ ymi metodami. Objekt je nejprve pˇredzpracov´an, kdy se jednotliv´e atributy, vztahy a typy atribut˚ u uloˇz´ı z p˚ uvodn´ı struktury do slovn´ıku parametr˚ u. Hodnoty jednotliv´ ych atribut˚ u, vztah˚ u a typu atribut˚ u jsou n´ aslednˇe zpracov´any z tˇechto parametr˚ u aˇz pˇri poˇzadavku na dan´ y atribut, vztah ˇci typ atributu. Kolekce a vztahy jsou vr´aceny jako seznam hodnot a bin´arn´ı data jsou zpˇetnˇe dek´odov´any z form´ atu BASE64 do ˇciteln´e podoby. Obdobnˇe pokud je atribut typu Type je ze signatury pˇreveden zpˇet do textov´e podoby.
3.4 N´ avrh a implementace
47
Vyhled´ av´ an´ı typ˚ u – objekty v datab´azi jsou uloˇzen´e ve stromov´e struktuˇre. Pˇri hled´ an´ı typu atributu je nutn´e velmi ˇcasto tento strom proch´azet. Typ atributu se nejprve vyhled´av´ a pˇr´ımo v aktu´aln´ım objektu a d´ale ve vˇsech objektech, kter´e jsou k objektu ve vztahu properties“. ” Pokud nebyl ˇz´adn´ y takov´ y objekt nalezen pokraˇcuje se v metaobjektu. Zde se cel´ a situace opakuje aˇz do okamˇziku, kdy se typ Class pt´a s´am sebe na typ nˇekter´eho atributu. Pokud jej nezn´a, vyhled´av´an´ı pokraˇcuje z p˚ uvodn´ıho objektu pˇres objekty, kter´e jsou k objektu ve vztahu extender“. Obr´azek 3.9 zobrazuje nejhorˇs´ı variantu vyhled´av´an´ı. ” Naˇ cten´ı operac´ı – Podobnˇe jako u hled´an´ı typu pro konkr´etn´ı atribut se postupuje pˇri naˇc´ıt´an´ı seznamu operac´ı, kter´e lze nad objektem spustit. Naˇc´ıtaj´ı se nejprve vˇsechny operace metatˇr´ıdy pro dan´ y objekt (objekty ve vztahu operations“) a n´aslednˇe rekurzivnˇe vˇsechny ” operace objekt˚ u ze kter´ ych metatˇr´ıda dˇed´ı (vztah extender“). ”
Obr´azek 3.9: Hled´an´ı typu atributu nebo vztahu
3.4 N´ avrh a implementace
initCaching() getAttributeNames() getAttribute() getRelationshipsNames() getRelationship() getType()
getOperations()
getModuleName() getMetaClassObject() isMetaClass()
48
metoda pˇrevede parametry ze seznamu do struktury slovn´ıku metoda vr´at´ı seznam jmen vˇsech atribut˚ u metoda vr´at´ı hodnotu atributu. metoda vr´at´ı seznam jmen vˇsech vztah˚ u metoda vr´at´ı seznam objekt˚ u se kter´ ymi je objekt v tomto vztahu veˇrejnˇe viditeln´a verze metody spouˇst´ı proces vyhled´ av´ an´ı typu. Samotn´e vyhled´av´an´ı prob´ıh´a v neveˇrejn´e variantˇe t´eto metody veˇrejnˇe viditeln´a verze metody spouˇst´ı proces z´ısk´ an´ı seznamu operac´ı nad objektem. Naˇc´ıt´an´ı samotn´ ych operac´ı prob´ıh´a v neveˇrejn´e variantˇe t´eto metody. metoda vr´at´ı modul ve kter´em byl objekt definov´ an metoda naˇcte objekt, kter´ y reprezentuje metatˇr´ıdu objektu zajiˇst’uje konec vyhled´av´an´ı typu v okamˇziku, kdy je objekt totoˇzn´ y s objektem reprezentuj´ıc´ı typ Class v syst´emov´em modulu ODLMetaObjects
class MetaObjectDictionary Tato tˇr´ıda reprezentuje strukturovan´ y typ Dictionary. Vnitˇrn´ı implementace je podobn´ a jako u pˇredchoz´ı tˇr´ıdy. Rozd´ıl je pouze v n´azvech metod a parametr˚ u. initCaching() getAssociateKeyNames() getAssociateValues()
metoda vytvoˇr´ı ze seznamu parametr˚ u opˇet jejich slovn´ık vr´at´ı seznam vˇsech kl´ıˇc˚ u slovn´ıku vr´at´ı hodnotu pro dan´ y kl´ıˇc
class JumboTypesResolver V datab´azi jsou typy jednotliv´ ych objekt˚ u a atribut˚ u uloˇzen´e jen jako signatury. Bˇeˇzn´emu uˇzivateli ale nic neˇrekne, ˇze napˇr. vztah typu {SLODLMetaObjects$Property je vlastnˇe kolekce typu Set, jej´ıˇz poloˇzky jsou reference na typ Property definovan´em v modulu ODLMetaObjects. Proto je nutn´e tuto signaturu pˇrev´est zpˇet do p˚ uvodn´ıho popisu. Tuto funkci zajiˇst’uje tato tˇr´ıda. typeResolver()
pˇrekl´ad´a signaturu typu na jej´ı textov´ y popis
3.4 N´ avrh a implementace
3.4.7
49
Cache
Komunikace po s´ıt´ı je vˇetˇsinou ˇcasovˇe n´aroˇcn´a. U protokolu SOAP je nutn´e nav´ıc pˇripoˇc´ıtat ˇcas potˇrebn´ y na reˇzii zpracov´an´ı dat, jelikoˇz dan´ı za platformovou nez´avislost protokolu je velk´e mnoˇzstv´ı reˇzijn´ıch dat ve zpr´avˇe. Algoritmus ukl´ad´an´ı dat u klienta popsan´ y v anal´ yze je implementov´an tˇr´ıdou ConnectionManager. N´asleduj´ıc´ı obr´azek zobrazuje graficky tento algoritmus.
Obr´azek 3.10: Algoritmus cachov´an´ı objekt˚ u
class ObjectDatabaseCache a class ObjectDatabaseCache.CacheElement Tˇr´ıda funguje jako u ´loˇziˇstˇe naˇcten´ ych objekt˚ u ze serveru. Umoˇzn ˇuje vyhled´avat objekty podle jejich oid a nebo podle jm´ena objektu. Tato schopnost je zajiˇstˇena dvˇemi slovn´ıky, kter´e si uchov´avaj´ı jako hodnotu odkaz na stejnou poloˇzku cache. Vnitˇrn´ı tˇr´ıda CacheElement pˇredstavuje poloˇzku v cache. Tato poloˇzka si uchov´av´a kromˇe objektu taky jeho oid, jm´eno a timestamp. Uloˇzen´ı obou kl´ıˇc˚ u v poloˇzce je nutn´e v okamˇziku maz´an´ı kl´ıˇce.
3.4 N´ avrh a implementace
3.4.8
50
Nastaven´ı aplikace
Klient umoˇzn ˇuje uˇzivateli nastavovat nˇekolik vlastnost´ı. Tyto vlastnosti se ukl´adaj´ı do konfiguraˇcn´ıho souboru, kter´ y je hled´an v adres´aˇri definovan´em promˇennou JUMBO_HOME. Pokud je zde nenalezne, pak se pokus´ı jej vyhledat v domovsk´em adres´aˇri uˇzivatele. Soubor obsahuje n´ıˇze uveden´e parametry. Hodnoty tˇechto parametr˚ u v pˇr´ıpadˇe, ˇze nen´ı nalezen soubor lze naj´ıt na pˇriloˇzen´ım CD v popisu tˇr´ıdy MainProperties. edu.vsb.navrat.jumbo.gui.MainFrame.host adresa stroje (vˇcetnˇe identifikace http://), kde bˇeˇz´ı server edu.vsb.navrat.jumbo.gui.MainFrame.port port na kter´em bˇeˇz´ı server edu.vsb.navrat.jumbo.gui.MainFrame.router n´azev routeru pro RPC komunikaci protokolu SOAP. Nezad´av´ a se interaktivnˇe v aplikaci. edu.vsb.navrat.jumbo.gui.MainFrame.localeID poˇradov´e ˇc´ıslo jazyka prostˇred´ı. 0 - syst´emov´ y jazyk, 1 - ˇcesky, 2 - anglicky edu.vsb.navrat.jumbo.gui.MainFrame.ui Tˇr´ıda nastavuj´ıc´ı vzhled prostˇred´ı aplikace (Look & Feel) edu.vsb.navrat.jumbo.gui.GuiRendererFactory.renderer Konkr´etn´ı implementace gener´atoru formul´aˇr˚ u. Nezad´av´a se interaktivnˇe v aplikaci. class MainProperties Tˇr´ıda zajiˇst’uje podporu pro pr´aci s parametry aplikace. Zajiˇst’uje jejich naˇcten´ı po startu aplikace, jejich uloˇzen´ı pˇri ukonˇcen´ı aplikace a jejich zmˇeny bˇehem pr´ace.
class SettingDialog Dialog pro nastaven´ı nˇekter´ ych parametr˚ u aplikace. Jedn´a se o adresu stroje, vzhled klienta a pouˇzit´ y jazyk klienta.
3.4.9
Podp˚ urn´ e tˇ r´ıdy
Tˇr´ıdy popsan´e v t´eto ˇc´asti lze nal´ezt v bal´ıˇcku edu.vsb.navrat.jumbo. Jedn´a se o pomocn´e tˇr´ıdy zajiˇst’uj´ıc´ı logov´an´ı ud´alost´ı a v´ıcejazykovost aplikace.
3.4 N´ avrh a implementace
51
interface Logable Interface umoˇzn ˇuje tˇr´ıd´am, kter´e ho implementuj´ı propagovat odkaz na tˇr´ıdu zajiˇst’uj´ıc´ı logov´ an´ı ud´alost´ı a chyb v syst´emu.
class SystemLogger Tˇr´ıda, kter´a zajiˇst’uje z´apis ud´ alost´ı v aplikaci do souboru. Ud´alosti se zapisuj´ı do souboru jumbo_client.log. Kromˇe toho aplikace rovnˇeˇz pˇresmˇerov´av´a do souboru standardn´ı v´ ystup a standardn´ı chybov´ y v´ ystup. Tyto soubory maj´ı pˇr´ıponu out a err.
ResourceManager Tˇr´ıda spravuje ˇretˇezcov´e zdroje pouˇzit´e v aplikaci a poskytuje podporu pro v´ıcejazykovost klienta.
4. Z´ avˇ er
4.1
Zhodnocen´ı
C´ılem pr´ace bylo vytvoˇren´ı nov´eho uˇzivatelsk´eho klienta pro objektov´ y syst´em Jumbo. Bˇehem tvorby t´eto aplikace jsem se sezn´ amil s technologiemi, kter´e maj´ı velkou ˇsanci v budoucnu ovlivnit informaˇcn´ı technologie. Objektov´e datab´azov´e syst´emy v nejbliˇzˇs´ıch letech sice nedobudou pˇrevahy na trhu s datab´azov´ ymi technologiemi, ale pokud se podaˇr´ı zvl´adnout nev´ yhody tˇechto syst´em˚ u mohou velice dobˇre konkurovat dneˇsn´ım syst´em˚ um. Narozd´ıl od tˇechto syst´em˚ u se protokol SOAP jiˇz zaˇc´ın´a vyskytovat na internetu a intranetu mnohem v´ıce. Nejˇcastˇeji se o nˇem mluv´ı ve spojitosti s webov´ ymi sluˇzbami. Do jak´e m´ıry bude tato oblast u ´spˇeˇsn´a uk´aˇze ˇcas. Velice kladnˇe hodnot´ım spolupr´aci s vedouc´ım diplomov´e pr´ace, kter´ y je autorem syst´emu ˇ Jumbo. Nesm´ım zapomenout ani na Petra Sulu a Ladislava Pavlicu, jejichˇz diplomov´e pr´ ace se tak´e t´ ykaly syst´emu Jumbo.
4.2
Dalˇ s´ı v´ yvoj
Aplikace v nynˇejˇs´ı verzi se podob´a trochu sv´e starˇs´ı pˇredch˚ udkyni. Aby tato aplikace byla uˇzivatelsky pˇr´ıtuln´a“ bude nutn´e vytvoˇrit pro tohoto klienta dalˇs´ı gener´ator formul´aˇr˚ u, kter´ y jiˇz ” bude pouˇz´ıvat v´ ysledek diplomov´e pr´ace Ladislava Pavlici. Do oblasti u ´prav stavaj´ıc´ıho ˇreˇsen´ı je moˇzn´e zahrnout zmˇenu form´ atu zas´ılan´ ych dat. Jedn´a se hlavnˇe o kolekce, kter´e se zat´ım pos´ılaj´ı v protokolu SOAP jako jeden ˇretˇezec oddˇelen´ y mezerami. Pro tyto kolekce je logiˇctˇejˇs´ı pouˇz´ıt typ SOAP-ENC:Array. Bylo by vhodn´e upravit datab´azov´e sch´ema syst´emu Jumbo tak, aby uˇzivatel pˇri volbˇe parametr˚ u operac´ı vidˇel skuteˇcn´e n´azvy tˇechto parametr˚ u a ne jen slovo jm´eno param0 pro prvn´ı parametr. Rovnˇeˇz bylo by vhodn´e vyˇreˇsit podporu pro OQL. V nynˇejˇs´ı podobˇe lze nab´ıdnout uˇzivateli v nab´ıdk´ach pouze objekty, kter´e jsou v extentu. Do oblasti velk´ ych zmˇen je moˇzn´e zaˇradit pouˇz´ıv´an´ı rozhran´ı Reflection v Javˇe. Pouˇzit´ım tohoto rozhran´ı bychom mohli reprezentovat aplikaˇcn´ı typy pˇr´ımo jako tˇr´ıdy. To znamen´a, ˇze napˇr. pˇri poˇzadavku na hodnotu atributu adresa bychom nepouˇzili vol´an´ı getAttribute("adresa"), ale pˇr´ımo vol´an´ı getAdresa().
Literatura [1] Box Don et al. SOAP: Simple Object Access Protocol. World Wide Web Consortium, 2000. http://www.w3.org/TR/SOAP/. [2] Cattel R.G.G. et al. The Object Data Standard: ODMG 3.0. Morgan Kaufmann, San Francisco, 1999. ISBN 1-55860-647-4. ˇ - Technical [3] Beneˇs M. Data types in persistent object systems. In: Transaction of the VSB Univerzity, Vol I.(1/2001): str. 4–10, 2001. ˇ – Technick´ [4] Beneˇs M. Datab´azov´e a informaˇcn´ı syst´emy 3. [ sylaby k pˇredn´aˇsk´am ], VSB a Univerzita Ostrava, 2001.
A. Uˇ zivatelsk´ a pˇ r´ıruˇ cka
A.1
Poˇ zadavky na syst´ em
Aplikace pro sv˚ uj bˇeh potˇrebuje m´ıt nainstalov´an Java Runtime Environment ve verzi 1.3 a vyˇsˇs´ı. Dalˇs´ı poˇzadavky na syst´em vypl´ yvaj´ı z podm´ınek pro provoz tohoto prostˇred´ı.
A.2
Instalace a spuˇ stˇ en´ı
Klienta nen´ı potˇreba sloˇzitˇe instalovat. Staˇc´ı rozbalit soubor jumbo-client.zip do libovoln´eho adres´aˇre a na tento adres´aˇr nastavit syst´emovou promˇennou JUMBO_HOME. Klient se n´ aslednˇe spouˇst´ı d´avkou client.bat (resp. client.sh v Linuxu).
A.3
Nastaven´ı aplikace
Po spuˇstˇen´ı je potˇreba nastavit adresu stroje na kter´em bˇeˇz´ı server. Toto nastaven´ı lze prov´est v dialogu kter´ y se nach´az´ı pod volbou Nastaven´ı v menu Soubor. Dialog m˚ uˇzete vidˇet na obr´ azku A.1. V tomto dialogu si m˚ uˇzete rovnˇeˇz nastavit vzhled klienta a jazyk, kter´ ym bude komunikovat. Zmˇena jazyka se projev´ı aˇz po nov´em spuˇstˇen´ı aplikace.
A.4
Pr´ ace s datab´ az´ı
Po spuˇstˇen´ı klienta je viditeln´a pouze ˇc´ıst´a pracovn´ı plocha. Pr´aci s datab´az´ı lze zaˇc´ıt jedn´ım ze dvou vstupn´ıch bod˚ u. Oba body jsou v menu Datab´ aze. Volbou Extenty se dostaneme na seznam vˇsech extent˚ u v datab´azi. Volba Moduly n´aslednˇe zobraz´ı extent, kter´ y obsahuje seznam se vˇsemi instalovan´ ymi moduly.
A.4.1
Proch´ azen´ı mezi objekty
Na obr´azku A.2 je vidˇet, ˇze objekty jsou zobrazeny v tabulce. Pokud nˇekter´ y atribut nab´ yv´ a v´ıce hodnot, nebo se jedn´a o vztah jsou hodnoty zobrazeny pomoc´ı komboboxu. Vidˇet je pouze
A.4 Pr´ ace s datab´ az´ı
55
Obr´azek A.1: Dialog nastaven´ı
Obr´azek A.2: Zobrazen´ y objekt
aktu´aln´ı hodnota na kterou je moˇzn´e pˇrej´ıt. Zmˇena t´eto hodnoty se prov´ad´ı v´ ybˇerem v tomto komboboxu. Pro pˇrechod se n´aslednˇe pouˇzije tlaˇc´ıtka Pˇrej´ıt na . Pokud se chceme z objektu vr´atit na pˇredchoz´ı objekt, m˚ uˇzeme k tomu pouˇz´ıt tlaˇc´ıtko Pˇrej´ıt zpˇet .
A.4.2
Vytv´ aˇ ren´ı objekt˚ u
Pod nab´ıdkou tlaˇc´ıtek s operac´ı se nach´az´ı popis aktu´alnˇe zobrazen´eho objektu. Je zde zobrazeno oid objektu, jeho jm´eno (pokud nˇejak´e m´a) a typ. Pokud je objekt typu ODLMetaObjects::Class, lze vytvoˇrit novou instanci tohoto objektu. To provedeme tlaˇc´ıtkem Vytvoˇrit . Novˇe vytvoˇren´ a instance se n´aslednˇe zobraz´ı.
A.4 Pr´ ace s datab´ az´ı
A.4.3
56
Editace objekt˚ u
Bˇehem editace se ˇc´asteˇcnˇe mˇen´ı funkce tlaˇc´ıtka Pˇrej´ıt na . Jeho pouˇzit´ı neprovede pˇrechod na n´asleduj´ıc´ı objekt, ale umoˇzn´ı editovat atributy vych´azej´ıc´ı z typu Blob, atributy typu kolekce a v neposledn´ı ˇradˇe vztahy. Do reˇzimu editace je moˇzn´e se pˇrepnout tlaˇc´ıtkem Editovat . Stejn´e tlaˇc´ıtko pak slouˇz´ı i pro zruˇsen´ı editace bez uloˇzen´ı zmˇen. Proveden´e zmˇeny je moˇzn´e uloˇzit tlaˇc´ıtkem Uloˇzit . Pokud by jsme se chtˇeli v reˇzimu editace vr´at´ıt na pˇredchoz´ı objekt a jiˇz jsme provedli v aktu´aln´ım objektu zmˇeny, pak je zobrazen potvrzovac´ı dialog. Editace atribut˚ u, kter´e jsou primitivn´ıch typ˚ u je moˇzn´e prov´adˇet pˇr´ımo v tabulce kliknut´ım na hodnotu pˇr´ısluˇsn´eho atributu. V n´asleduj´ıc´ıch odstavc´ıch je pops´ana editace jin´ ych typ˚ u. Editace binarn´ıch textov´ ych dat Editace tˇechto dat se prov´ad´ı v dialogu, kter´ y je moˇzn´e vidˇet na obr´azku A.3. V tomto dialogu je moˇzn´e vytvoˇrit nov´ y Blob objekt, upravovat existuj´ıc´ı, pˇr´ıpadnˇe tento objekt vymazat z datab´aze. Pro usnadnˇen´ı editace je moˇzn´e do pracovn´ı plochy nahr´at obsah souboru.
Obr´azek A.3: Dialog pro editaci objektu typu Blob
Editace kolekc´ı a vztah˚ u Jak pro atributy typu kolekce, tak i pro vztahy se pouˇz´ıv´a totoˇzn´ y dialog. Tento dialog je moˇzn´e vidˇet na obr´azku A.4. Dialog se skl´ad´a ze dvou seznam˚ u, v lev´em seznamu jsou vidˇet aktu´ alnˇe vybran´e hodnoty kolekce a vpravo jsou hodnoty, kter´e lze vloˇzit do kolekce. Pokud zde nˇejak´ a hodnota chyb´ı, m˚ uˇzeme ji zadat v poli nad seznamem vybran´ ych hodnot. Pokud editujeme kolekci obsahuj´ıc´ı referenci, pak zad´av´ame oid objektu. V opaˇcn´em pˇr´ıpadˇe pˇr´ımo hodnotu, kterou chceme vloˇzit do seznamu. Pokud typ poloˇzky kolekce obsahuje v datab´azi extent, jsou hodnoty tohoho extentu nab´ıdnuty v prav´em seznamu. Mezi tˇemito dvˇemi seznamy se nach´az´ı panel s tlaˇc´ıtky pro pˇresun poloˇzek tˇechto seznam˚ u mezi sebou. Tyto pˇresuny jsou hl´ıd´any z pohledu typu kolekce, takˇze nen´ı moˇzn´e vloˇzit do kolekce typu Set dvakr´at stejn´ y objekt. Rovnˇeˇz pokud se jedn´a jen o vztah nen´ı moˇzn´e, aby vybran´ ych hodnot´ach bylo v´ıce neˇz jedna poloˇzka.
A.4 Pr´ ace s datab´ az´ı
57
Obr´azek A.4: Dialog pro editaci kolekc´ı a vztah˚ u
A.4.4
Vol´ an´ı operac´ı
Panel pod tabulkou je vyhrazen pro tlaˇc´ıtka jednotliv´ ych operac´ı, kter´e lze nad objektem prov´adˇet. Pokud operace potˇrebuje zadat parametry, je zobrazen dialog, kter´ y toto zad´ an´ı umoˇzn ˇuje. Pokud nˇekter´ y z paramter˚ u je typu maj´ıc´ı v datab´azi extent, jsou hodnoty tohoto extenu nab´ıdnuty parametru. V opaˇcn´em pˇr´ıpadˇe je moˇzn´e zadat pˇr´ımo oid objektu. Po tomto zad´an´ı je operace spuˇstˇena. Pokud operace vrac´ı referenci na objekt datab´aze, je tento objekt rovnou zobrazen. V ostatn´ıch pˇr´ıpadech je zobrazena zpr´ava s v´ ysledkem vol´an´ı operace. Dialog pro zadav´an´ı parametr˚ u je moˇzn´e vidˇet na obr´azku A.5.
Obr´azek A.5: Dialog pro zad´av´an´ı parametr˚ u operac´ı
A.4.5
Maz´ an´ı objekt˚ u
Objekty je moˇzn´e z datab´aze vymazat tlaˇc´ıtkem Smazat . Pˇred smaz´an´ım je provedena jeˇstˇe kontroln´ı ot´azka. Zat´ım neexistuj´ı pro maz´an´ı ˇz´adn´e pravidla (a to ani na serveru). Proto pˇri maz´an´ı bud’te velmi opatrn´ı.
B. Obsah CD
Adres´ aˇr
Popis
/jumbo-client.zip /Ant/ /Java/ /Jumbo_server/
Zabalen´a bin´arn´ı verze klienta Obdoba utility make pro kompilaci Instalaˇcn´ı soubory Java2 SDK v 1.2 Aktu´aln´ı verze syst´emu JUMBO. Spouˇst´ı se d´avkou runserver.bat v adres´aˇri db
/Jumbo/src /Jumbo/doc/api /Jumbo/doc/dipl-tex
Zdrojov´e soubory aplikace Popis tˇr´ıd pomoc´ı JAVADoc Texty diplomov´e pr´ace