5. část: Tvorba BPEL modulu

Petr Vašíček, IBA CZ

V tomto díle si povíme něco o jazyce BPEL a začneme modelovat proces založení objednávky, jež jsme modelovali v díle minulém. Rovněž tedy poprvé použijeme vývojové prostředí NetBeans a ukážeme si, jak v něm založit BPEL projekt a jakým způsobem jej nasadit na server.

O jazyce BPEL uvedeme pouze základní informace a budeme se spíše soustředit na samotné modelování procesu. V článku také nabídneme odkazy na materiály, které mohou poskytnout podrobnější informace či přímo specifikaci jazyka BPEL včetně přesného popisu jeho jednotlivých elementů. Uvedeme i odkazy na tutoriály k NetBeans IDE, na jehož podrobnější popis by rovněž nebylo v seriálu místo.

Úvod do jazyka BPEL

WS-BPEL, celým názvem Web Services – Business Process Executional Language (výslovnost uváděna jako „bipple“ či „B-pel“), je jazyk na bázi XML (eXtensible Markup Language), jež slouží pro zápis business procesů na vykonatelné úrovni. Proces implementovaný pomocí BPEL je nasazen do běhového prostředí, které je schopno jej interpretovat. Tímto prostředím může být buďto samostatný procesní server, modul v aplikačním serveru apod. V našem případě jde o plug-in (tzv. service engine) do implementace podnikové sběrnice OpenESB, kterou v našem prostředí použijeme. Komponenta má název WS-BPEL Service Engine a nasazení implementovaných business procesů lze provádět pohodlně přímo z vývojového prostředí NetBeans, které budeme používat.

Hlavní funkcí BPELu je orchestrace webových služeb, tedy řízení souhry funkcionality, kterou nabízí backendová část systému, či více systémů. Tato funkcionalita je dekomponována do operací, jež je možné volat přes webovou službu. Na druhé straně BPEL sám stojí za webovou službou, která definuje jeho rozhraní, tj. vstupní operace. Pro každý vstup do procesu (v BPMN objekt Start / Intermediate MessageEvent) je tedy ve webové službě, která popisuje rozhraní BPELu, jedna operace. Dá se tedy říci, že BPEL implementuje webovou službu. Přitom aplikace, která webovou službu používá, neví, zda se za ní skrývá proces, či zda je implementována např. EJB modulem. BPEL je rovněž nezávislý na platformě, implementace pro něj existují na platformě Java EE, .NET a jiných platformách. Proces implementovaný v jazyce BPEL pomocí jednoho nástroje by také mělo být možné přenést a spustit v nástroji jiném. Někteří výrobci BPMS ale používají svá vlastní rozšíření jazyka BPEL, která tuto přenositelnost zněmožňují.

Kliknutím zvětšíte obrázek v novém okně.

První verze jazyka BPEL, pojmenovaného jako BPEL4WS, vznikla v červenci 2002 a spojila myšlenku jazyků WSFL od IBM a XLANG od spol. Microsoft. Kromě těchto dvou společností se na původním návrhu podílela i BEA. V květnu 2003 byl revidovaný návrh předložen organizaci pro rozvoj strukturovaných informačních standardů OASIS a BPEL4WS ve verzi 1.1 si začal získávat velkou podporu na poli modelování procesů. Jen o něco později byl uveden další jazyk pro definování spustitelných procesů, BPML 1.0, ten ale zejména díky silné podpoře pro konkurenční BPEL ze strany velkých hráčů na trhu neuspěl. Dnes není takřka využíván, přestože oproti BPELu toho má více co nabídnout (řeší např. business pravidla, lidskou interakci s procesem apod.). Současná verze 2.0 byla představena v prosinci 2005 a ratifikována v dubnu 2007 a nese již pozměněný název WS-BPEL 2.0. Oproti předchozí verzi představuje několik nových BPEL aktivit, přejmenovává některé existující a obsahuje několik dalších menších změn.

Struktura BPEL dokumentu

NetBeans IDE, stejně jako většina ostatních BPEL návrhářů, poskytuje grafické uživatelské rozhraní pro modelování procesu v jazyce BPEL. Je tedy možné celý proces „naklikat“ a kódem procesu se nezabývat. Čas od času je ovšem zapotřebí nahlédnout do XML kódu a provést nějaké úpravy, zejména při řešení chyb. Kromě toho nění úplně od věci se v procesu zapsaném v jazyce BPEL orientovat, a proto si krátce představíme strukturu BPEL dokumentu.

Základní struktura dokumentu je zobrazena na následujícím obrázku. Kořenový element {process} (pozor - u všech elementů jde o ostré závorky <...> - na tomto webu je pouze nejsme schopni s příslušnými elementy zobrazit) zahrnuje všechny ostatní XML elementy. Pomocí atributů tohoto elementů určíme název procesu a jmenné prostory (namespaces). Následuje element {import}, kterým definujeme odkazy na použité externí soubory, typicky popisovače webové služby, WSDL dokumenty. Pomocí elementů {partnerlink} specifikujeme účastníky procesu, tedy kromě WS rozhraní samotného procesu i WS modulů, které použijeme. Následuje definice proměnných v elementu {variables} a korelačních množin pomocí {correlationsets}. Pak se již nachází hlavní sekvence událostí, obsažená v XML elementu {sequence}, do které již umísťujeme BPEL aktivity, specifikující tok procesu.

Kliknutím zvětšíte obrázek v novém okně.

BPEL aktivity

Objekty, které v jazyce BPEL reprezentují události či defunují tok procesu, se nazývají BPEL aktivity. Aktivitami se tedy neoznačuje pouze nějaká činnost, jako tomu je v BPMN, nýbrž všechny elementy jazyka, jež značí nějakou akci či strukturu procesu. Následující výčet zahrnuje deset nejčastěji používaných BPEL aktivit.

Základní aktivity (basic activities):
Receive - zastaví proces a čeká na příchod specifikované zprávy
Reply - zašle zprávu jako odpověď na dříve přijatou zprávu
Invoke - vyvolá WS operaci typu one-way nebo request-response
Assign - manipulace s proměnnými
Exit - okamžitě ukončí vykonávání instance business procesu

Strukturované aktivity (structured activities):
Sequence - obsahuje aktivity, jež jsou spouštěny sekvenčně
Flow - obsahuje aktivity, jež jsou spouštěny paralelně
If-else - vybere jednu větev podle pravdivostního výrazu
Pick - zastaví proces a čeká na příchod první z více definovaných událostí
While - obsažené aktivity jsou opakovány, dokud platí určitý predikát

Pro získání více informací o těchto a ostatních BPEL aktivitách, lze doporučit tyto zdroje:

Specifikace WS-BPEL 2.0
Guide to BPEL
BPEL Activities

NetBeans BPEL a CA projekt

Nyní se dostáváme k samotnému vytvoření našeho projektu. K tomu budeme potřebovat vývojové prostředí NetBeans IDE. Pokud jej máte nainstalováno (odkaz ke stažení jsme uvedli ve druhém díle), můžete jej nyní spustit. Základní informace o tomto nástroji včetně několika jednoduchých tutoriálů lze najít zde.

Nejprve založíme v NetBeans projekt, který bude obsahovat implementovaný proces a soubory, popisující účastníky procesu, tedy definice datových typů (soubory XSD) a popisovače webových služeb (soubory WSDL). Z nabídky zvolíme File -> New Project -> Service Oriented Architecture -> BPEL Module, jako název projektu zvolíme „OrderingBPEL“, vybereme umístění a dokončíme tlačítkem „Finish“. Máme tedy vytvořený BPEL modul, ve kterém budeme mít samotný proces a k němu přidružené soubory.

Kliknutím zvětšíte obrázek v novém okně.

Druhým projektem, který budeme potřebovat, je kompozitní aplikace. Tato aplikace je souhrný projekt, skládající se z jednoho či více JBI modulů. BPEL modul je právě příkladem JBI modulu. Kompozitní aplikace s jedním či více moduly je pak nasazena na JBI server, v našem případě do OpenESB. Kompozitní aplikaci vytvoříme z File -> New Project -> Service Oriented Architecture -> Composite Application, jako jméno nastavíme OrderingCA. Pro přidání JBI modulu klikneme pravým tlačítkem myši na kořenový uzel nově vytvořeného projektu a vybereme „Add JBI Module“. Vybereme adresář, ve kterém máme BPEL modul a tvorba kompozitní aplikace je hotova. Až budeme mít hotový BPEL projekt, provedeme pak jednoduše deploy kompozitní aplikace na server pomocí „Deploy“ v kontextové nabídce projektu.

Účelem seriálu ovšem není návod pro modelování v BPEL, nebudeme si tedy uvádět jak vytvářet XSD a WSDL soubory, ani se dopodrobna zabývat postupem a přesným nastavením při tvorbě BPEL dokumentu. Spíše se budeme snažit ukázat, jak obecně modelování probíhá a jak funguje nasazení a vykonání procesu. Pro zájemce u návod tvorby BPELu v NetBeans můžeme doporučit následující tutoriály:

Dev Guide to the BPEL Designer
Hello World Composite Application
Developing Synchronous Process

Implementace první části procesu

Nyní si vytvoříme první krok procesu založení objednávky. Nebudeme v této chvíli ještě využívat webovou službu backendového modulu, tu zapojíme až v příštím díle. Předpokládáme, že již máme vytvořen XSD a WSDL soubor pro náš proces. Rozhraní procesu tvoří tři operace, z nichž zatím implementujeme tu první, a to sice createOrder. Do procesu vložíme aktivity Receive a Reply a spojíme je s touto operací. Mezi ně vložíme aktivitu Assign a v ní přiřadíme do návratové proměnné aktivity Reply zatím testovací hodnotu „123“.

Nyní máme hotový testovací BPEL a můžeme nasadit kompozitní aplikaci na server. V projektu OrderingCA zvolíme „Deploy“ a v záložce Services -> Servers -> Glassfish V2 -> JBI ->Service Assemblies můžeme zkontrolovat, že aplikace OrderingCA je skutečně nasazená na serveru.

Kliknutím zvětšíte obrázek v novém okně.

Když jsme nasadili proces na server, můžeme otestovat vstupní operaci createOrder. Podle návodu na netbeans.org vytvoříme v kompozitní aplikaci test case a pro tuto operaci a spustíme jej volbou „Run“ v kontextové nabídce testu. V uložené SOAP odpovědi „Output.xml“ můžeme zkontrolovat, že v elementu newOrderId se opravdu nachází hodnota „123“.

V příštím díle

Příště si nejprve představíme backendovou část aplikace, která obsahuje funkcionalitu pro práci s objednávkami. Pak pomocí NetBeans dotvoříme zbytek procesu a napojíme ho na webovou službu objednávkového modulu. Hotový proces pak otestujeme. Všechny tři vytvořené NetBeans projekty – BPEL modul, kompozitní aplikaci i objednávkový backend - umístíme ke stažení, abyste si mohli příklad sami vyzkoušet i bez nutnosti modelování procesu podle našeho návodu.

27 Comments:

Anonymní said...

Zatím jsem to jen přečetl a jsem z toho PAF. Hodně hutné!

Anonymní said...

Z textu není jasné, proč se musí tvořit kompozitní aplikace. Jaký je vlastně rozdíl mezi modulem, službou a kompozitní aplikací?

Anonymní said...

Taky jsem se v tomhle díle utopila. Chtělo by to ještě nějaké jednoduché schéma logiky postupu.

A s modelem ve Visual Paradigm už pracovat nebudeme? To bylo jen kreslítko na rozkrytí logiky?

Anonymní said...

Taky mě překvapilo, že najednou se všechno dělá v NetBeans. Čili vazba BPMN - BPEL žádná?

Anonymní said...

Účelem tohoto dílu bylo kromě představení BPEL nastínění, jak budeme proces modelovat po technické stránce. V příštím díle tak nebudou použité termíny a nástroje novinkou a budeme se již moci věnovat samotnému procesu.

Určitě se opět vrátíme k BPMN diagramu a celý proces převedeme do jazyka BPEL. Do příliš technických věcí zabíhat nebudeme. V tomto díle jsou zmíněny hlavně kvůli případným zájemcům o praktické vyzkoušení uvedeného příkladu.

Anonymní said...

Pane Vašíčku, Váš seriál považuji za jeden z nejlepších, jaké jsem kdy četl. Je i didkaticky správný a myslím, že manažerům a lidem odpovídajícím za procesy ve firmách otvírá správně technické oči. Doufám, že pochvalou nezpychnete a dopíšete ho!

Anonymní said...

Nemůžu si instalovat NetBeans (u nás nesmíme nic), takže prosím jedno teoretické vysvětlení - kód BPEL je xml? Ten vzniká tím, že proces modeluji? nebo ho musím psát ručně?

Miro Safranek said...

Taky jsem se trochu ztratil, snad se nam rozjasni priste, kdy to asi bude?

Anonymní said...

ad urban - BPEL je v xml, ale může mít svou grafickou prezentaci a tedy je možné ho vytvářet pomocí grafického rozhraní, třeba modelováním. Záleží na nástroji.

Anonymní said...

Je tu hodně různých pojmů - chtělo by to minislovníček. Šlo by to? Hlavně k IT pojmům typu služba, kompozitní aplikace...

Anonymní said...

Tendle článek mě fakt vyřídil. A to jsem si myslel, že se v IT docela orientuju. Teď čtu všechny ty manuály a jsem jelen.

Anonymní said...

Pokusím se jednoduše popsat jednotlivé pojmy:

webová služba - zapouzdřuje určitou funkcionalitu a umožňuje ji využít "na dálku", například z klientské aplikace nebo business procesu

bpel modul - NetBeans projekt, obsahující namodelovaný proces a popisovače webových služeb, které tento proces používá

kompozitní aplikace - NetBeans projekt, do něhož "zabalíme" bpel modul, abychom jej mohli nasadit do běhového prostředí

Anonymní said...

Přiznám se, že jsem tento díl (zatím jako první) nerozdýchal. Instalaci NetBeans jsem zvládl, založil BPEL modul a převedl do kompozitní aplikace (proč jsem to ale musel takto složitě udělat, nechápu). Nevím kde ale vytvořit createOrder.

Anonymní said...

Díky za slovníček - aspoň trochu mi vyjasnil, o co go...

Anonymní said...

Zde Kotas - mám dotaz: Jak je to s převodem modelů z BPMN do BPEL? To se musí dělat ručně? Viděl jsem někde prezentovat Ajbíemku, že to šlo převádět automaticky. U věštců to taky nějak skoro automaticky jde, když se to převádí z arisu.

Anonymní said...

Už to mám rozchozený a těším se na další pokračování.

ad kotas - co jsem zatím viděl, je i ve webspheru část služeb domapovat v bpel ručně. Navíc websphere zatím nepoužívá BPMN, má své vlastní specifické modely.

S arisem je to ještě horší, tam se musí mapovat všechny servisy ručně.

A jak jsem pochopil v openESB nás to čeká taky resp. už to děláme. Modely v BPMN tak slouží jenom pro pochopení rozdílu mezi byznys a IT pohledem - viz krásné debaty v minulém díle.

Anonymní said...

ke kotasovi:

jenom za licence IBM pro celý bpms zaplatíte bratru minimálně 200kUSD. Navíc jejich řešení je sice stabilní, ale proprietální (viz ta panotace v modeleru) a občas technologicky přepotopní...

takže můžete volit mezi socialismem (řešení od big4), která vás uzamkne, všechno sice funguje blbě, ale funguje. Nebo kapitalismem (o-s), kdy se vám prostředí mění po rukama, nevíte, jestli večer ještě process server poběží... Ale když to funguje, je to paráda.

Anonymní said...

Některé nástroje umožňují automatický převod BPMN->BPEL a to za cenu toho, že kontrolují už samotné modelování v BPMN podle svých omezení, aby zaručily, že budou moci převod provést. Tedy pokaždé když uživatel chce přidat nějaký objekt či spojit nějaké objekty, nástroj kontroluje, zda to bude moci přeložit do spustitelné podoby. Pokud zjistí že ne, tak tuto akci neumožní nebo označí diagram za nevalidní, i když by podle specifikace BPMN validní mohl být. Příkladem je například Intalio. Websphere nemá úplně BPMN, spíše využívá některé prvky z této notace.

BP-VA, který jsme použily pro modelování BPMN je pouze malovátko bez vazby na spustitelný proces. Nezabývá se tedy jeho překladem a tak nechává poměrně velkou volnost při tvorbě diagramu. Převod do BPELu je pak třeba provést "ručně".

Další obtíží při automatickém převodu BPMN->BPEL je to, že BPMN jednoduše nemá dostatek přesných informací pro vytvoření spustitelného procesu. Neví jaké WS používat, jaké jejich metody volat, s jakými proměnnými a jak přesně pracovat apod.

Anonymní said...

testuju testuju a uz mi to pada

Anonymní said...

Je to parada takto si to vyzkouset. Jeste se sice obcas ztracim, ale uz jsem si pripojil i vlastni ws.

Anonymní said...

Chtěla bych se zeptat možná hloupě - BPMN je taky v XML?

Anonymní said...

Taky se zeptam hloupe - proc se procesy nemodeluji rovnou v BPEL, kdyz ma skoro stejnou syntax?

Anonymní said...

BPMN je pouze grafická notace, tedy soubor grafických objektů a pravidla, jak je spojovat. BPMN není přímo spojeno s žádnou konkrétní formou zápisu. Modelovací nástroje si jej však většinou ukládají jako XML.

BPEL oproti tomu nemá žádnou implicitní grafickou reprezentaci a slouží k popisu procesu už na vykonatelné úrovni, v podstatě jde o programový kód. Tudíž se nehodí pro specifikování procesu v analytické fázi. NetBeans nám usnadňují přechod z BPMN na BPEL tím, že se snaží používat stejné grafické prvky, to ale rozhodně nebývá pravidlem.

Anonymní said...

Kdypak bude pokračování? Už máme všechno hotovo....

Anonymní said...

BPEL a BPMN je opravdu hodne jiny kafe. Kdyz clovek vidi jednoduchoucke BPMN a pak se podiva na specifikaci BPEL, je to sok!

Anonymní said...

Překvapilo mě, jak je to složité dostat se od návrhu procesů k jejich automatizaci. Velmi pěkný seriál a už prosím - dejte nám další stravu!!!

Anonymní said...

Zdravim

sice som sa dostal k tomu serialu trochu neskor, ale s nadejou ze bude up-to-date a ja si vsetko budem moct vyskusat.

Bohuzial NetBeans robi trochu problemy, kedze po stiahnuti aktualnej verzie (NetBeans IDE 6.0.1 (Build 200801291616)) sa rozchadza: clanok, NetBeans IDE a subory k stiahnutiu.

Mozno by bolo dobre pre zachovanie uzitocnosti tohto skveleho serialu bud:
a) umiestnit na web soubory, kompatibilne pre novsiu verziu NetBeans
b) informovat, ktoru presne verziu NetBeans IDE si mame stiahnut (alebo tato informacia tam niekde bola a ja som ju prehliadol?)

ISSN 1802-5676  | Copyright © 2003-2008 BPS Business Process Services