Zdravím konferenciu!

 

Píšem diplomovú prácu, ktorej téma je zhodná s názvom predmetu tejto správy,
teda "Verzovanie webových služieb".

Pravdupovediac, mám s daným "problémom" minimum praktických skúseností.
Práve preto by som chcel poprosiť vás, odborníkov, o zopár cenných
informácií.

 

K riešeniu tejto problematiky ma viedla situácia vo firme, v ktorej
pracujem. Budujeme webové služby, ktoré majú za cieľ sprostredkovať
komunikáciu medzi informačným systémom (IS) a eshopmi. Platforma, na ktorej
WS budujeme, je Java a ako aplikačný server nám slúži JBoss.

 

Teraz k samotnému problému.

Pri výmene verzie IS sa často mení DB štruktúra, preto musíme na dané zmeny
reagovať upravením zdrojového kódu webovej služby (úprava SQL dotazov,
prepared statementov...). Ďalší typ zmien je úprava stávajúcich algoritmov
vo WS, prípadne nová funkcionalita. V jednom momente existuje viacero
klientov s rôznymi verziami IS. Webová služba momentálne beží na aplikačnom
serveri len ako 1 WAR inštancia (väčšina klientov totižto hosťuje priamo vo
firme) a WS pracuje vlastne ako centrálny článok pre všetky eshopy (líšia sa
len data sourcom, na ktorý sa WS pripája).

Preto som chcel nájsť čo najlepší spôsob, ako začať WS verzovať, aby som čo
najjednoduchšie vedel udržovať jej zdrojový kód (ideálny stav by bola stále
jedna a jediná inštancia WS bežiaca v aplikačnom serveri - čo som zistil, že
bude NEMOŽNÉ) a aplikácie by bežali bez problémov u každého z klientov
(resp. s minimom zmien nutných na strane zákazníka).

 

Začal som teda bližšie pátrať na internete. Dosť ma prekvapil fakt, že
žiadne oficiálne stanovisko k verzovaniu WS neexistuje, našiel som len
best-practices. Dospel som zatiaľ k nasledovným bodom:

 

Čo všetko bude treba verzovať

1.            zdrojový kód - používame SVN, takže jednotlivé verzie by sa
riešili formou vetiev.

2.            WSDL

3.            XSD

 

Deployment z hľadiska zdrojákov a riešenie problémov s class loadingom

1.            Každá verzia do zvláštneho EAR súboru

2.            Jeden EAR s viacerými WAR súbormi (1 WAR = 1 verzia) - každá
verzia by musela mať vlastný class loader

3.            Premenovanie packagov v Jave pri vzniku novej verzie (de-facto
nová služba s novými triedami) - automaticky zavrhujem

4.            Použitie špecializovaných riešení, napr. OSGI - obtiažnosť?
oplatí sa? -- mám s tým nulové skúsenosti

 

Kedy sa budú vytvárať nové verzie => pri každej zmene, ktorá môže mať dopad
na konzumenta služby

=>          "major changes" = odstránenie operácie, premenovanie operácie,
zmena parametrov operácie (dátový typ, poradie), zmena komplexného dátového
typu v XSD

=>          pozor na implementačné zmeny, ktoré "zvonka nevidíme": validácie
vstupu/výstupu, security credentials, porušenie SLA (napr. náročnejším
algoritmom sa zväčší doba vykonania)

 

Nasadzovanie WS + volanie služieb zo strany konzumenta

-              nasadzovať všetko na jeden endpoint alebo použiť pravidlo
nová verzia = nový endpoint

-              priamy prístup k endpointom alebo použitie routera, ktorý
bude smerovať požiadavky podľa identifikátora (IP, parameter verzie v
URL...)

-              použitie UDDI registra Apache jUDDI

 

Zaujímalo by ma, či máte skúsenosti s niektorými zo spomínaných bodov. Budem
veľmi vďačný za akékoľvek informácie, s ktorými sa podelíte.

Ďakujem za ochotu.

 

S pozdravom

--ml


Michal Lašák

Odpovedet emailem