RSS
 

Jolie – Lezione 2 – Servizi ed Operazioni

24 Jun

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

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.

^topOperazioni
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:

  • OneWay: che è la ricezione di un messaggio;
  • RequestResponse: riceve un messaggio e quindi ne restituisce una risposta;
  • 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.

    ^topInvocazione dei servizi
    ^topPorte 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:

  • Name: ogni porta in uscita ha un nome univoco, nel nostro caso la porta si chiama MathService;
  • Location: questo è un URI (external link), che dice dove si trova il servizio. Nel nostro caso abbiamo localhost perchè il nostro servizio è in locale sul nostro computer;
  • Protocol: qui indichiamo il protocollo da utilizzare per comunicare con il servizio. Possiamo indicare http, https, … e nuovi protocolli sono in uso. In questo caso specifico, il protocollo utilizzato è sodep;
  • 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: sodep

    RequestResponse:

    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.

    ^topComunicazione 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.

    ^topCreare un servizio
    ^topPorte 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.

    ^topComunicazione 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.

    Condividi questo post sui tuoi social network preferiti:
    • Print
    • Digg
    • del.icio.us
    • Facebook
    • Google Bookmarks
    • LinkedIn
    • MySpace
    • Twitter
    • Wikio IT
    • Live
    • RSS
    • StumbleUpon
    • Technorati
     
    View Comments

    Posted in tutto

     

    Tags: , , ,

    blog comments powered by Disqus