C è un linguaggio molto potente, ma se doveste scrivere il codice in C necessario per fare quello che sto per mostrarvi, avreste a che fare con un numero decisamente più grande di righe di codice. Anche se so ancora poco di questo lignuaggio, per ora posso dire che può permettermi di scrivere una semplice applicazione client-server mettendo mano a veramente poco codice. Adesso veniamo alla seconda lezione
- Servizi ed operazioni
Jolie è un linguaggio di programamzione incentrato sulla comunicazione tra diversi servizi. Potete invocare un servizio o anche essere il servizio che viene invocato. Altri linguaggi di programmazione sono più complicati nello scrivere codice che comporre messaggi da inviare o ricevere. Per questo motivo la cosa fondamentale da sapere per programmare con JOLIE è la definizione di un servizio e come questo può comunicare con il resto del mondo. Nello specifico, creeremo un servizio che invia un messaggio, e che ne attente la rielaborazione, quindi un altro servizio che riceve questo messaggio lo elabora e poi successivamente lo restituisce. Più o meno come se volessimo richiamare una funzione di un altro programma e ci attendessimo un risultato da questo.
^top – Operazioni
Una operazione è una funzionalità messa a disposizione da un servizio, il quale può essere invocato da un’altra applicazione.
Ci sono due tipi di operazione:
Utilizzando lo statement One-Way possiamo scrivere una operazione che ascolta una determianta porta ed attende di ricevere un messaggio. In alternativa si può utilizzare lo statement di notifica. Per quanto riguarda l’invocazione delll’operazione di request-response la sintassi è analoga e lo statement leggermente diverso.
Le operazioni sui servizi sono simili ai metodi che si possono trovare nel paradigma della programmazione ad oggetti.
^top – Invocazione dei servizi
^top – Porte in uscita
Per invocare un servizio bisogna definire la porta di uscita nel preambolo del programma. Fin troppo facile: voglio una porta in uscita e voglio chiamarla MathService, metterla sulla porta 8000 dell’host locale e voglio anche che usi il protocollo sodep. Ecco fatto:
outputPort MathService {
Location: “socket://localhost:8000″
Protocol: sodep}
Ora vediamo i 3 componenti principali:
Ora diamo un occhio di riguardo a Location e Protocol per una migliore comprensione su che cosa realmente possiamo fare con questi due elementi. Abbiamo definito MathService, che è la nostra porta, ma non abbiamo specificato quali operazioni sono disponibili per comunicare con essa. Vediamo ora come aggiungere un’operazione a MathService:
outputPort MathService {
Location: “socket://localhost:8000″
Protocol: sodepRequestResponse:
twice
}
Per descrivere il comportamento della porta, abbiamo aggiunto lo statement RequestResponse. Ora la nostra porta può richeidere e rispondere twice. Per aiutarvi alla comprensione… twice è il nome dell’operazione, MathService è il nome del servizio.
^top – Comunicazione verso l’esterno
E per invocare MathService da un altro programma? Il tutto è decisamente molto semplice: dobbiamo utilizzare loo statement solicit-response:
main
{// <operation>@<service>(<output-message>)(<input-message>)
twice@MathService(5)(result)}
Il nostro piccolo programma, chiama l’operazione twice del servizio MathService, passando 5 come valore di invocazione. Questo comando, aspetterà di ricevere un paramentro di risposta nella variabile result. Decisamente molto semplice.
^top – Creare un servizio
^top – Porte in ingresso
Ora andremo a creare una applicazione JOLIE che realizza un ambiente per MathService. Per creare un servizio, dobbiamo prima scrivere la porta in ingresso, la quale somiglia decisamente molto alla porta in uscita. Una porta in ingresso per MathService potrebbe essere la seguente:
inputPort MathService {
Location: “socket://localhost:8000″
Protocol: sodep
RequestResponse:
twice
}
Banalmente, usa la stessa porta, lo stesso protocollo e la stessa operazione.
^top – Comunicazione in ingresso
Ora che il nostro programma JOLIE è stato istruito per ricevere una invocazione per l’operazione twice, noi dobbiamo scrivere il codice per il suo ambiente. In poche parole noi abbiamo detto che c’è una porta in ingresso che riceverà twice e dobbiamo quindi dire che cosa fa twice.
main
{twice(number)(result) {
result = number * 2
}
}
L’operazione twice, riceve number e restituisce result, che altro non è che “number * 2″. Siamo appena riusciti a creare due programmi distinti che sanno inviare un numero, riceverlo e rielaborarlo e reinviarlo al mittente. Con questo, la lezione è finita. Per semplificare le cose, più avanti pubblicherò qualche sorgente che aiuterà senz’altro a capire i meccanismi di JOLIE.