Jolie (programovací jazyk)
Jolie 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. 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. 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í).

 
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. 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í. 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. 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ř. 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. 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. 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í.

Odkazy

Reference 

Programovací jazyky