Jolie (programovací jazyk)
Author
Albert FloresJolie je open source programovací jazyk zaměřený na orchestraci webových služeb a tvorbu distribuovaných aplikací. Umožňuje jednoduše a efektivně namodelovat business proces zahrnující volání webových služeb. Na rozdíl od jazyku BPEL, který je spjat s WSDL a SOAP zprávami, Jolie umožňuje i volání služeb, které jsou založeny na jiném než SOAP protokolu, například XML/RPC, JSON/RPC atd.
Jolie je aktuálně podporován interpretem napsaným v programovacím jazyce Java, který může být provozován na různých platformách zahrnujících operační systémy založené na Linuxu, Apple OS X či Microsoft Windows. Projekt Jolie započal Fabrizio Montesi v roce 2006 v rámci svých studií na Univerzitě v Boloni. +more Projekt začal jako implementace procesního kalkulu SOCK, formální model navržený Claudio Guidiem ve spolupráci s Univerzitou v Boloni byl inspirován procesním kalkulem CCS a jazykem WS-BPEL. Jolie rozšiřuje SOCK například podporou vlastní stromové datové struktury (inspirované XML, ale se syntaxí podobnou jazyku C a Java), integraci s Javou a JavaScriptem či programováním webových aplikací. V současné době je projekt udržován Fabriziem Montesim a jeho vývoj je veden Fabriziem Montesim a Claudiem Guidim.
Koncept SOA
Servisně orientovaný svět se od toho objektového podstatně liší. Zatímco objekty mají metody, které popisují jejich chování a mohou měnit stav objektu, servisně orientované programování pracuje s konceptem služeb. +more Tyto služby nemají, na rozdíl od objektů, vnitřní stav, pouze poskytují určitou funkcionalitu - operace, která nějakým způsobem zpracovává data a vrací výsledek z pracování (lze přirovnat ke klasické funkci v programování). Obrázek znázorňuje vztah mezi službami a objekty, z nějž je vidět, že služba v servisně orientovaném světě nahrazuje objekty a operace svou podstatou plní funkci metod, služby však nemohou měnit svůj stav, jelikož jej postrádají.
Aplikace SOA v jazyku Jolie Podstata jazyka Jolie spočívá v tom, že ke všemu přistupuje jako ke službám, jejichž operace využívá pro zpracování programu. Příklad „Hello World“ jednoduše znázorňuje princip tohoto konceptu v Jolie. +more Zatímco v objektově orientovaném jazyce typu např. Java voláme při výpisu na konzolu statickou metodu println (System. out. println), v Jolie voláme operaci println na službě Console. Stejně tak, jako má Java ve svém jádru již naprogramované třídy připravené k použití, i Jolie má připravené služby, které může programátor kdykoliv využít. V prvním řádku je vidět obdoba klíčového slova „import“ v Javě - „include“, která do programu zahrne právě službu Console ze své standardní knihovny.
Hello World
Behaviour
Autoři popisují pojem „Behaviour“ v souvisloti s Jolie jako tu část programu, kde probíhá samotná logika programu. V části „behaviour“ se definuje logická podstata programu, přičemž nás nezajímá, jak jsou jednotlivé služby definovány či dokonce přes jaký protokol komunikují. +more Je to podobné, jako když programátor využívá naimplementované funkce nějaké knihovny. Využívá pouze jejich funkčnost a nic jiného jej nemusí zajímat, pokud je vše naimplementované správně.
"Jolie podporuje základní orchestrační vzory jako je paralelní a sekvenční zpracování aktivit. Sekvence se označuje středníkem, kdy v případě, že má být v nějaké proceduře několik aktivit jsoucích po sobě, dělí je právě tento středník. +more To je podstatná změna například oproti jazyku Java, kde středník slouží k ukončení příkazu. Naopak paralelní zpracování je vyjádřeno svislicí, s níž se pracuje stejně jako se středníkem. ".
Deployment
Část označovaná jako „deployment“ se naopak zabývá definováním služeb samotných. Jolie nepodporuje jen klasické webové služby ze skupiny Web Services (WS- *), ale také řadu dalších protokolů jako např. +more XML-RPC či HTTP. Jolie může operace webových služeb volat, zároveň však často také sadu operací poskytuje. Tato komunikace probíhá přes komunikační porty. Výstupní porty k vystavení služby, zatímco vstupní porty umožňují službu zavolat. Komunikace se službami probíhá pomocí rozhraní, jehož implementace se pro jednotlivé služby může lišit v závislosti na použitém protokolu. In our example the TwiceInterface interface declares the operation twice as a request-response operation. A request-response operation receives a request and sends back a response. Both input and output messages of twice are typed as int (denoting integers): Oficiální dokumentace uvádí jako příklad rozhraní TwiceInterface, které deklaruje operaci „twice“ jako operaci požadavek-odpověď. Oprace obdrží požadavek a pošle zpět odpověď. Vstupní i výstupní zprávy operace „twice“ jsou typu int (integer).
interface TwiceInterface { RequestResponse: twice( int )( int ) }
Následující ukázky představují „deployment“ kód pro klienta i pro server.
Server include "twiceInterface.iol"
inputPort TwiceService { Location: "socket://localhost:8000" Protocol: sodep Interfaces: TwiceInterface }
Client include "console.iol" include "twiceInterface.iol"
outputPort TwiceService { Location: "socket://localhost:8000" Protocol: sodep Interfaces: TwiceInterface }
Reprezentace dat
Jolie pro práci s daty používá vlastní stromovou reprezentaci dat, která se mírně podobá JSONu. Veškeré zprávy přijaté službou implementovanou v Jolie se automaticky převádějí do této reprezentace, takže v kódu není nutné zpracovávat různými nástroji XML zprávu, ale lze rychle programově přistupovat přímo k hodnotám, které chceme v aplikaci použít. +more Pokud chceme světu vystavit webovou službu typu SOAP, je samozřejmě nutné mít odpovídající WSDL. Jolie se snaží usnadnit programátorům práci, a tak vývojáři představili jednoduchý nástroj, který umí nekonvertovat službu popsanou v Jolie do WSDL a obráceně.
Ukázka reprezentace dat v Jolie
main { animals.pet[0].name = "cat"; animals.pet[1].name = "dog"; animals.wild[0].name = "tiger"; animals.wild[1].name = "lion" }
Ekvivalent v XML
cat
dog
tiger
lion
Volání Javy z Jolie
Jelikož Jolie běží na platformě Java, je s tímto jazykem úzce spjata. V ukázce Hello World byl uveden příklad výpisu na konzolu, z čehož vyplývá, že v Jolie musí existovat služba, který tento výpis umožňuje. +more Toho lze dosáhnout právě například voláním javovského kódu. Třída, jejíž kód chceme z Jolie volat, musí dědit z abstraktní třídy jolie. runtime. JavaService. Zároveň musí být třída zkompilována jako JAR a umístěna do složky JavaServices v instalačním adresáři Jolie.
Příklad
package example; import jolie.runtime.JavaService;
public class MyConsole extends JavaService {
public void println( String s ){ System.out.println( s ); } }
Jakmile je javovská knihovna dostupná a tedy je i samotná služba dostupná, můžeme tuto službu použít následujícím způsobem. interface MyConsoleInterface { OneWay: println( string ) }
outputPort MyConsole { Interfaces: MyConsoleInterface }
embedded { Java: "example.MyConsole" in MyConsole }
main { println@MyConsole("Hello World!") }
Podobně lze v Jolie využívat i JavaScript, pro detailnější informace navštivte dokumentaci.
Webový server Leonardo
Leonardo je webový server vyvinutý čistě v jazyce Jolie, který je velmi flexibilní a podporuje od poskytování klasického statického obsahu až po mocný dynamický web. V dokumentaci je podrobněji popsán způsob zacházení s webovým serverem včetně využití GWT modulu s názvem JolieGWT, který je součástí instalace Jolie a umožňuje snadnější vývoj webových aplikací.