Zdravim,
zaujimava publikacia na danu temu je:
Thomas Erl - Web Service Contract Design and Versioning for SOA
http://www.amazon.com/Web-Service-Contract-Design-Versioning/dp/013613517X/ref=sr_1_2?ie=UTF8&s=books&qid=1257957547&sr=1-2
vseobecne postupy a patterny ktore su tam uvedene sa zhoduju s tym co chcete riesit aj vy.

Michal Lašák  wrote / napísal(a):

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



__________ Informacia od ESET Smart Security, verzia databazy 4592 (20091110) __________

Tuto spravu preveril ESET Smart Security.

http://www.eset.sk

Odpovedet emailem