mercoledì 4 febbraio 2015

The tutorial explains how to install a jdbc driver on RedHat WildFly application server a module, in the sample will be used the mysql driver but the proposed steps can be applied to any other driver library

Used technologies in the tutorial:

  • Wild Fly 8.2.0.Final
  • Mysql Connector 5.1.33

1. Create the jboss module

Enter in the file path ${EAP_HOME}/modules/system/layers/base and create the directories com/mysql/driver/main.

Into the folder main copy the driver library jar (link) and create a file module.xml as showed in the sample below

<module xmlns="urn:jboss:module:1.3" name="com.mysql.driver">
 <resources>
  <resource-root path="mysql-connector-java-5.1.33.jar" />
 </resources>
 <dependencies>
  <module name="javax.api"/>
  <module name="javax.transaction.api"/>
 </dependencies>
</module>

For an explanation about the meaning of the fields take a look at Jboss Module Documentation Page

2. Register the module as driver with CLI.

Start the server from the directory ${EAP_HOME}/bin:

./standalone.sh --server-config=${server-profile}

Start the management CLI:

./jboss-cli.sh

Run the the command:

/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql.driver,driver-class-name=com.mysql.jdbc.Driver)

If the operation is successful then the message below will be showed {"outcome" => "success"}

and into the file of the standalone profile the code below is produced

...
<driver name="mysql" module="com.mysql.driver">
    <driver-class>com.mysql.jdbc.Driver</driver-class>
</driver>
...

mercoledì 4 giugno 2014

Indicazioni utili sulle località da visitare a creta, le località descritte di seguito rappresentano una selezione del tutto personale che ho realizzato durante il mio viaggio a Creta.

Spiagge

Balos

Balos è una baia rocciosa e spoglia, si può raggiungere in barca dal mare oppure percorrendo una tortuosa strada non asfaltata. Alle spalle della spiaggia si trovano falde assolate del monte Geroskinos. La Baia si affaccia su di un golfo orlato da un mare quasi caraibico, al centro del quale vi è l'isola di Gramvoussi, sulla quale erge una fortezza di età veneziana.

Phalasarna

La splendida spiaggia di Phalasarna offre uno dei litorali più belli e meno frequentati dell’isola di Creta. La lunga spiaggia è di sabbia finissima, il colore del mare va dal turchese al blu e l'acqua è limpidissima. Giunti all’altezza del mare, si incontrano due diramazioni. la seconda raggiunge il tratto di spiaggia meno frequentato. Alla fine di entrambe, si trovano piccole taverne che dispongono anche di lettini ed ombrelloni.

Elafonissi

La spiaggia di Elafonissi è situata all'estremo sud-ovest di Creta, si raggiunge percorrendo una lunga strada tortuosa nella quale si attraversano montagne e canyon. La spiaggia ha la sabbia bianchissima ed una bassa laguna con un'acqua limpidissima dai colori mozzafiato. Davanti la spiaggia si trova l'isola di Elafonissi, estremamente selvaggia, che si può raggiungere a piedi dal mare poichè l'acqua non supera le ginocchia. Sull'isola si trovano altre piccole spiagge, tutte splendide, caratterizzate dalla sabbia che in alcuni punti sembra rosa.

Skinaria

La spiaggia di Skinaria si raggiungere dopo circa 15 minuti di strada dalla località di Plakias, dopo aver percorso una stretta strada tra le montagne. La piccola spiaggia appare incantevole, incastonata tra due promontori rocciosi, con un mare dai colori turchesi che si perdono nel blu intenso del mare, la sabbia è grossa, in alcune parti mista a piccoli ciottoli ed il mare è profondo già a pochi metri dalla riva.

Città

Heraklion

Heraklion è il più grande centro urbano di Creta, la capitale della regione e il centro economico dell'isola. La prima civiltà europea, la civiltà minoica, fiori' su questa terra 5000 anni fa. Attualmente la popolazione del comune di Heraklion è di circa 150.000 persone. E' una città molto dinamica e cosmopolita, in particolare durante il periodo estivo, quando migliaia di visitatori possono essere visti fare shopping nel mercato o visitare i musei e altri luoghi di interesse. Durante gli ultimi 20 anni la città ha fatto un progresso notevole in ambito accademico e tecnologico.
La storia è molto viva nella città vecchia di Heraklion, ed la città è ricca di testimonianze della dominazione veneziana, come la cinta muraria, il porto, la bella loggia seicentesca (in realtà, ne è una fedele ricostruzione), e la Fontana dei Morosini, con quattro teste di leoni. E’ presente anche una moschea di età ottomana. Nel Museo Archeologico, sono esposti i reperti più belli della civiltà minoica, come il disco di Festo e affreschi dal Palazzo di Cnosso, quali quelli che raffigurano la Tauromachia e il Principe dei Gigli.

Plakias

Plakias è una località emergente dal punto di vista del turismo nell’isola di Creta: ancora lontana dagli standard elevati del nord dell’isola e principalmente frequentata da turismo non organizzato. Si estende con un piacevole lungomare pieno di negozietti, market e ristorantini idilliaci che offrono specialità di mare a prezzi davvero contenuti, anche meno della metà rispetto ai locali della costa nord. Incastonata tra imponenti montagne, presenta una lunga spiaggia ciottolosa bagnata da un mare cristallino.

Frangokastello

Per raggiungere frangokastello, situata nella parte sud di Creta, si percorrono strade sospese tra mare e montagne. Il castello sorge in prossimità della spiaggia e colpisce per l’imponente facciata, che fa presupporre che il castello sia ancora in buone condizioni: in realtà i muri esterni sono le poche cose rimanenti, mentre l’interno è praticamente in rovina. Dominata dall’imponente mole del castello, la spiaggia di Frangokastello è tra le più piacevoli di Creta, per via dello scarso affollamento e per la posizione idilliaca in cui è situata: guardando dal mare, la spiaggia appare incastonata tra le imponenti Montagne Bianche e sembra difesa dall’antica fortezza.

Rethymno

Rethymno è la capitale della prefettura omonima ed è costruita tra le altre due grandi città di Creta. A est è Iraklion (80 km) e ad ovest Chania (60 km). Si trova lungo la costa settentrionale, ed ha ad est una delle più grandi spiagge di sabbia di Creta (12 km) e ad ovest una costa rocciosa che finisce in un altra grande spiaggia di sabbia dopo 10 km.
La moderna Rethymno, con circa 20.000 abitanti, si sviluppa intorno al porto. Nelle sue pittoresche stradine si trovano insieme edifici contemporanei ed case tradizionali, e molti monumenti: moschee, chiese bizantine, e edifici testimonianzaa della dominazione veneziana e turca.
Tra questi di notevole interesse la Loggia veneziana, i palazzi sempre dello stesso periodo, la Cattedrale dell'Annunciazione della Vergine Maria, la chiese di Santa Maria, Signora degli Angeli, San Francesco, le moschee di Veli Pasha, di Kara Moysa Pasha, del Grande Ingresso e Neratzes. La fortezza di Rethymno fu costruita nel 1573-1580 dal comandante veneziano Alvico Lanto, progettato da un ingegnere, Pallavicini. Si trova sul sito di una fortezza medievale che in precedenza era stata il luogo dove sorgeva l'antica acropoli di Rethymno. E' circondata da quattro bastioni e da forti mura.

Chania

Chania è la capitale della prefettura omonima e la seconda più grande città di Creta , con una popolazione di 60.000 abitanti. È il centro amministrativo , economico , commerciale e culturale della Prefettura . Si trova lungo la costa nord dell'isola , a circa 55 km ad ovest della città di Rethymnon e 135 km dalla città di Heraklion. Fin dai tempi antichi , la città di Chania ha affrontato numerose dominazioni e le influenze di molte civiltà attraverso il tempo, evidente sui monumenti della città.
La bella città di Chania è riuscita a conservare i colori originali, percorrendo il lungomare la vista spazia sui suggestivi edifici che si affacciano sul mare, abitazioni colorate che sembrano appoggiate le une alle altre, nonostante l'industria del turismo in rapida crescita, è considerata come una delle più belle città della Grecia e la più pittoresca città di Creta. Il centro storico si estende lungo la zona del porto, il quartiere più tipico della città, sempre animato, sia di giorno che di notte, da un gran numero di turisti. Vi si accede percorrendo la strada più turistica, la Halidhon, dove si susseguono un’infinità di negozi.
Da visitare la Moschea dei Giannizzeri, il più antichi edifici ottomani di tutta Creta, moschea dall'aspetto bizzarro che domina il paesaggio con la sua ampia cupola.

Archeologia

Monastero di Prevelis

Il monastero di Preveli si trova a sud della Prefettura di Rethymnon, ed è la parte più sacra della Sacra Diocesi di Lambis e Sfakìon. Il monastero ha una storia gloriosa a causa del coinvolgimento attivo e di primo piano dei suoi confratelli in tutte le manifestazioni nazionali per la libertà e l'educazione popolo, così da meritare il rispetto in tutta l'isola di Creta. In questo monastero si sono rifugiati gli Alleati durante la seconda guerra mondiale, che da qui sono poi riusciti a fuggire dall’isola. La spiaggia di Preveli, conosciuta comunemente con il nome di Palm Beach, è una delle spiagge più incantevoli di Creta, ma anche una delle più faticosamente raggiungibili.

Palazzo di Cnosso

Il mitico palazzo di Cnosso risale al 2000 a.C. e fu il più famoso edificio minoico, famoso per leggenda del labirinto di Minosse. E’ stato riscoperto dall’archeologo inglese Sir Arthur Evans nel 1894. Nell’antichità il palazzo costituiva una vera e propria cittadella, sede del potere di tutta la civiltà minoica e sbalordiva per la sua sontuosità e vastità, comprendendo oltre 400 stanze collegate da monumentali scalinate. Visitando oggi il sito archeologico è davvero difficile immaginare il lusso e lo sfarzo del tempo, altro non restano che poche rovine, che comprendono la stanza del trono del re Minosse, i famosi bagni degli appartamenti della regina considerati i più innovativi dell’antichità e alcuni splendidi affreschi e dipinti che decoravano le sale.

Monastero di Arkadi

Il Monastero di Arkadi è un monastero ortodosso orientale, situato su un altopiano fertile 23 km a sud-est di Rethymno, risale al 16° secolo ed è segnato dall'influenza del Rinascimento. Questa influenza è visibile nell'architettura, che mescola sia elementi romani ed elementi barocchi. Già nel 16° secolo, il monastero era un luogo per la scienza e l'arte e aveva una scuola e una ricca biblioteca. La facciata della chiesa, particolarmente decorata, rappresenta l’elemento di spicco del monastero, di origini veneziane, con la caratteristica torre campanaria. Il monastero rappresenta oggi un santuario nazionale della lotta d’indipendenza, in quanto qui si rifugiarono molti cretesi che, presi d’assedio dai turchi, fecero esplodere la polveriera uccidendo sia loro stessi che i conquistatori.

Festo

Festo è il più importante palazzo minoico dopo quello di Cnosso sorge nella pianura di Messarà, nella parte meridionale dell’isola: gli scavi sono stati effettuati da spedizioni archeologiche italiane a cavallo tra l’Ottocento e il Novecento. Qui fu rinvenuto nel 1908 il famoso Disco in terracotta, grazie al quale è stato possibile ricostruire la scrittura sillabica, tipica di questo popolo. Il Disco è ricoperto da 241 simboli impressi a spirale il cui significato è in gran parte avvolto nel mistero.

Natura

Gole di Samaria

Le gole di Samaria si trovano nella parte sud-ovest, in provincia di Sfakiá della prefettura di Hania. Sono circondate da cime alte come Gigilos ( 2080m ) , Volakias ( 2116m ) , Melindaou ( 2153m ) , Avlimonakas ( 1806m ) e altre, che delimitano l'area del Parco Nazionale di Samaria. Le gole di Samaria sono fra e gole più lunghe d'Europa.
Il fiume Tarraios corre per tutta la lunghezza della gola, l'ambiente protetto, l'abbondanza di acqua, la topografia e il clima che varia da alpino a subtropicale, fanno di Samaria un paradiso per la fauna selvatica . Vi è abbondanza di specie vegetali dagli alberi secolari, ai fiori ed erbe selvatiche, alcune delle quali molto rare, come l'acero cretese, orchidee , dittamo e altri. Specie rare di uccelli come avvoltoi e aquile, e mammiferi come lo stambecco cretese, noto come Kri - Kri , vivono qui.
La gola era abitata ininterrottamente fin dall'antichità, per la ricchezza e la buona qualità del suo legno e la grandezza del paesaggio, Samaria divenne un centro di attività economica ed un luogo di culto. Antichi templi sono stati trovati non solo in Tarra , l'antica città all'uscita della gola, ma anche in molti luoghi all'interno della gola stessa. Il villaggio di Samaria situato nel centro della gola è stato abitato fino al 1962 quando la zona è stata dichiarata parco nazionale.

Altre informazioni

Acqua Potabile

Fatta eccezione per Iráklio, l’acqua si può bere tranquillamente ovunque, anche se contiene molto cloro. Nei ristoranti e nei caffè, l’acqua minerale naturale (metallikó neró) è leggermente più cara di quella che potete acquistare nei supermercati.

Banca

Le banche sono aperte dal lunedì al giovedì dalle 8 alle 14 e il venerdì dalle 8 alle 13.30. In molti bancomat potete prelevare contanti con la carta di credito, EC o Maestro.

Clima

Normalmente, Creta non è scelta come meta per il turismo invernale. Infatti, tra novembre e marzo può piovere e le temperature non sono molto alte. I mesi più adatti per le vacanze sono quelli da aprile a ottobre, mentre l’ideale per fare il bagno in mare è il periodo compreso tra maggio e novembre. Anche la primavera è molto bella grazie al verde e ai fiori. Da giugno a settembre non piove mai e le temperature possono superare i 40°C; tuttavia, in luglio e agosto, normalmente si oltrepassano di poco i 30°C di giorno e i 20 °C di notte. Bisogna però considerare la presenza del vento, anche forte, che pure in piena estate può far ritardare la partenza dei traghetti.

Documenti

La carta d’identità o il passaporto in corso di validità sono sufficienti per visitare Creta. Anche i minori dovranno essere muniti di un documento proprio.

Elettricità

La corrente è erogata a 220 V. Le prese sono del tipo standard europeo, con due spinotti rotondi.

martedì 22 gennaio 2013

Sometimes there is the request to run a Java Application as a windows service, for this scenario it is possible to use a java wrapper as NSSM.

The example uses a java application that log on file the boot operation, the alive status every 10 seconds, and the exit operation. The code of the example can be downloaded with SVN from the repository https://subversion.assembla.com/svn/gma-sample/trunk/WindowsServiceTutorial.
package org.gma.tutorial.nssm;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Date;

/**
 * A Simple service to register as Windows Service, the program will log on a
 * file when it starts, ends and every 10 seconds it will log is alive state
 * 
 * 
 */
public class WindowsServiceTutorial {

 public static void main(String[] args) throws FileNotFoundException {

  
  
  
  /* Set the custom message to display */
  String customMessage = "default";
  if (args.length > 0) {
   customMessage = args[0];
  }
  /*
   * Set the standard output stream as on a log file
   */
  String pathname = "./log.txt";
  FileOutputStream out = new FileOutputStream(new File(pathname), true);
  PrintStream printStream = new PrintStream(out);
  System.setOut(printStream);

  /*
   * Add the shutdown hook
   */
  Runtime.getRuntime().addShutdownHook(new Thread(new ShutdownHook()));
  

  onStart();

  doWork(customMessage);
  
  
  
 }

 /**
  * Log the alive state of the service
  * 
  * @param customMessage
  *          A custom message
  */
 private static void doWork(String customMessage) {
  while (true) {
   try {
    Thread.sleep(10000);
   } catch (InterruptedException e) {
    System.out.println("Interrupted at " + new Date());
   }
   System.out.println("Alive at " + new Date() + " " + customMessage);
  }
 }

 /**
  * Log the boot of the service
  */
 private static void onStart() {
  System.out.println("Starts at " + new Date());
 }

 /**
  * A shutdown hook
  * 
  * 
  */
 private static class ShutdownHook implements Runnable {

  /*
   * (non-Javadoc)
   * 
   * @see java.lang.Runnable#run()
   */
  public void run() {
   onStop();
  }

  /**
   * Logs when the service is stopped
   */
  private void onStop() {
   System.out.println("Ends at " + new Date());
   System.out.flush();
   System.out.close();
  }

 }

}
After the jar is created and copied to %YOUR_FOLDER% we need a batch to starts the application, the %1 is the first parameter of the batch file.
@ECHO OFF
REM start.bat  code
java -jar  WindowsServiceTutorial.jar %1
Finally we can download the NSSM wrapper and type the command
nssm install WindowsServicetutorial
A window will be showed to enter the path of the application and the options to start it:
Opening the Service manager we will our service installed and ready to be started and stopped.
Opening the log.txt file generated we can read the following log:
 Starts at Tue Jan 22 15:28:15 CET 2013
 Alive at Tue Jan 22 15:28:25 CET 2013 servicemessage
 Alive at Tue Jan 22 15:28:35 CET 2013 servicemessage
 Alive at Tue Jan 22 15:28:45 CET 2013 servicemessage
 Alive at Tue Jan 22 15:28:55 CET 2013 servicemessage
 Alive at Tue Jan 22 15:29:05 CET 2013 servicemessage
 Alive at Tue Jan 22 15:29:15 CET 2013 servicemessage
 Ends at Tue Jan 22 15:29:16

lunedì 3 dicembre 2012

How to convert an InputStream to a Document?
How to contert a Document to an InputStream?
The snippet of code posted is an utility
Java Class written in Java for org.w3c.dom.Document convertions, it supports:

  • Document to String
  • String to Document
  • Document to InputStream
  • InputStream to Document

package org.gma.util;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

public class DocumentUtils {

 /**
  * Convert a document to an Inputstream
  * @param document the document to convert
  * @param prettyPrint prettyPrinted if true
  * @return An input stream of the document
  * @throws IOException
  */
 public static InputStream document2InputStream(Document document, boolean prettyPrint) 
throws IOException {
  ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  OutputFormat outputFormat = new OutputFormat(document);
  if (prettyPrint) {
   outputFormat.setIndenting(true);
   outputFormat.setIndent(2);
   outputFormat.setLineWidth(65);
   outputFormat.setPreserveSpace(false);
  }
  XMLSerializer serializer = new XMLSerializer(outputStream, outputFormat);
  serializer.serialize(document);
  return new ByteArrayInputStream(outputStream.toByteArray());
 }

 /**
  * 
  * Convert a string to a Document Object
  * 
  * @param xml The xml to convert
  * @return A document Object
  * @throws IOException
  * @throws SAXException
  * @throws ParserConfigurationException
  */
 public static Document string2Document(String xml)
 throws IOException, SAXException, ParserConfigurationException {

  if (xml == null)
   return null;

  return inputStream2Document(new ByteArrayInputStream(xml.getBytes()));

 }

 /**
  * Convert an inputStream to a Document Object
  * @param inputStream The inputstream to convert
  * @return a Document Object
  * @throws IOException
  * @throws SAXException
  * @throws ParserConfigurationException
  */
 public static Document inputStream2Document(InputStream inputStream) throws IOException, 
SAXException, 
ParserConfigurationException {
  DocumentBuilderFactory newInstance = DocumentBuilderFactory.newInstance();
  newInstance.setNamespaceAware(true);
  Document parse = newInstance.newDocumentBuilder().parse(inputStream);
  return parse;

 }

 /**
  * Convert a Document object to a string
  * @param document The document to Convert
  * @param prettyPrint prettyPrinted if true
  * @return A string rapresentation of the document
  * @throws IOException
  */
 public static String documentToString(Document document, boolean prettyPrint) 
throws IOException {
  Writer writer = new StringWriter();
  char[] buffer = new char[1024];
  InputStream is = null;
  try {
   is = document2InputStream(document, prettyPrint);
   Reader reader = new BufferedReader(new InputStreamReader(is));
   int n;
   while ((n = reader.read(buffer)) != -1) {
    writer.write(buffer, 0, n);
   }
  } finally {
   if (is != null) {
    is.close();
   }
  }
  return writer.toString();
 }

}
SVN Repository link
<!-- Maven Configuration -->
<repositories>
 <repository>
  <id>org.gma</id>
  <name>gma repository</name>
  <url>https://repository-giordanomaestro.forge.cloudbees.com/release/</url>
 </repository>
</repositories>

<dependencies>
 <dependency>
  <groupId>org.gma.util</groupId>
  <artifactId>DocumentConversionUtils</artifactId>
  <version>1.0</version>
 </dependency>
</dependencies>

mercoledì 16 novembre 2011


La specifica WSRP è stata prodotta dal consorzio OASIS, organizzazione per la promozione di standard tecnici per l’interoperabilità, con l’obiettivo di definire una serie di interfacce per consentire il consumo inter-portale dei frammenti applicativi messi a disposizione da contenitori di portlet e consentire quindi l’interoperabilità fra portali consentendo l’implementazione con tecnologie eventualmente diverse.

Di seguito sono messe a confronto una architettura classica dei portali con una in un cui si fa utilizzo dello standard WSRP, nella prima sono coinvolti un fruitore rappresentato dal browser, una applicazione portale la quale utilizzando una comunicazione basata sullo stesso linguaggio del container recupera e successivamente aggrega i frammenti.

Nel secondo scenario  invece oltre che i meccanismi utilizzati nel precedente intervengono anche i seguenti componenti:
  •  Erogatore WSRP: è un servizio web che offre uno o più portlet e implementa WSRP varie interfacce/operazioni. A seconda dell'implementazione, un produttore può offrire solo un portlet, o può fornire un  contenitore per la distribuzione e la gestione di parecchi portlet.
  •   Fruitore WSRP: è un client del servizio web (in genere implementato come modulo in un portale) che richiama l’erogatore e fornisce un ambiente per gli utenti per interagire con portlet offerti da uno o più produttori


Come accennato in precedenza, WSRP definisce un insieme di interfacce comuni che tutti i produttori WSRP sono tenuti ad implementare e che i consumatori WSRP devono utilizzare per interagire con i portlet in remoto in esecuzione.

La standardizzazione di queste interfacce permette ad un portale di interagire con la portlet da remoto, la specifica WSRP richiede due implementazione obbligatorie e due opzionali:
  •  Service Description Interface (obbligatorio): consente ad un produttore WSRP di pubblicare dati sulle proprie capacità. Un consumatore WSRP può utilizzare questa interfaccia per interrogare un produttore e scoprire cosa offre il contenitore e metadati aggiuntivi su di questo. Questa interfaccia può agire come un meccanismo di rilevamento per determinare l'insieme di portlet offerti, ma soprattutto permette ai consumatori di determinare ulteriori informazioni sulla capacità tecnica del produttore.
  • Mark-up Interface (richiesto): L'interfaccia permette al WSRP consumatore di interagire con un portlet remoto in esecuzione su un produttore WSRP. E’ necessaria per l’interazione con la portlet, la gestione dello stato e l’invio di eventi,
  • Interfaccia di registrazione (opzionale): L'interfaccia di registrazione permette un produttore WSRP di richiedere che i consumatori WSRP eseguino una sorta di registrazione prima di poter interagire con il servizio attraverso la Mark-up interfacce. Attraverso questo meccanismo un produttore può personalizzare il proprio comportamento a un tipo specifico di consumatori.
  • Portlet Management Interface (opzionale): dà l'accesso al ciclo di vita della portlet in esecuzione in remoto. In modo da consentire la personalizzazione del comportamento di una portlet o addirittura distruggere l'istanza di una portlet in esecuzione in remoto.

martedì 15 novembre 2011

WS-Human Task è una specifica dal contesto di WS-*, che ha affrontato la questione di come integrare l'interazione umana nei processi di business, la specifica è stata sviluppata da Adobe, IBM, BEA , Oracle, SAP Active Endpoins e dal giugno 2007 è sottoposta a standardizzazione
WS-Human Task fornisce una sintassi XML in grado di descrivere i compiti (task) e le notifiche con soggetti umani. Inoltre, è possibile utilizzare diversi ruoli e gruppi di utenti (i cui tipi di dati sono inclusi), consentendo una astrazione a livello personale (es.: "impiegato" invece di "John Doe”), include inoltre una semantica per la descrizione di diversi stati ed un API per la facile interazione tra uomo e macchina lato client.
Mentre BPEL4People si occupa di una descrizione astratta delle interazioni umane, l'integrazione concreta è definita con l’utilizzo di WS-HumanTask.
Nelle architetture attuali i task con interazione umana sono generalmente fortemente accoppiati con un sistema di gestione del workflow (WFMS), il quale si occupa di gestire interamente il ciclo di vita dei task, ciò comporta la difficoltà di intervenire nel processo al di fuori del contesto del WFMS e porta quindi ad avere uno sviluppo incentrato su di questo che aumenta fortemente l’accoppiamento dei sistemi e quindi una diminuzione della portabilità.
WS-HumanTask introduce una architettura che supera queste limitazioni definendo un componente il Task Processor, interamente basato su web services, responsabile di creare ed interagire con un task per la transizioni fra stati, tale componente viene portato al di fuori del WFMS.
Una volta introdotto il Task Processor siamo in grado di definire tramite WS-HumanTask l’interfaccia di servizio del task che dovrà essere svolto e di rilasciarlo sul processor in modo che un componente esterno il Task Parent possa istanziare il task tramite un servizio per la creazione delle istanze.
Una volta creata l’istanza il Processor mette a disposizione dei client esterni una serie di operazioni per la gestione del ciclo di vita, ma al termine o al fallimento del compito il Parent deve essere notificato per poter continuare con il flusso di lavoro; rimanendo in ambito SOA viene utilizzato il protocollo di coordinazione WS-Coordinator con la definizione di un protocollo di ordinamento specifico per il contesto.
Lo scambio di messaggi Tra il Parent ed il procesor sarà quindi il seguente:
  • Il Parent crea una istanza del task e passa al Processor le informazioni di contesto, fra cui le informazioni del Register per registrasi alla cooperazione.
  • Il Processor a questo punto si registra passando il proprio indirizzo per la gestione del protocollo di coordinazione, la callback da invocare al termine del task e le informazioni di contesto ricevute precedentemente.
  • Il Register a sua volta comunica al Processor l’indirizzo per la gestione del procollo di coordinazione.
Al termine degli scambi di messaggio avremo quindi l’istanza del task con un collegamento logico al Parent per la notifica dei cambiamenti di stato come illustrato in Figura e per la gestione del protocollo di coordinazione utilizzato, nello scenario più semplice quindi al termine di un task il task processor invoca il coordinator del task parent per segnalare un cambiamento di stato ed il task parent invoca la callback (servizio web) per gli ricevere gli output del task.


Per completare l’architettura è necessario introdurre una interfaccia utente per la gestione delle attività, questo componente è necessario per prospettare agli utenti la lista di task attualmente assegnati e consentire loro di svolgere i compiti assegnati, a questo proposito il linguaggio introduce la possibilità di gestire i rendering, ovvero di definire diversi tipi di GUI con cui l’utilizzatore può inserire o visualizzare dati necessari al corretto svolgimento delle attività.

In questa rapida introduzione sono state riassunte le caretteristiche principali della specifica, nella seconda parte verranno mostrati alcuni esempi di codice per la definizione dei task.

Per ulteriori approfondimenti:
  • Active Endpoints. Architectural Description of WS-HumanTask. s.l. : Active Endpoints, 2010.
  • Ashish Agrawal, Mike Amend, Manoj Das et al. Web Services Human Task (WS-HumanTask), Version 1.0. 2007.
  • OASIS. Web Services – Human Task (WS-HumanTask) Specification Version 1.0. www.oasis-open.org. [Online] 04 11 2009. [Riportato: 15 05 2011.] docs.oasis-open.org/bpel4people/ws-humantask-1.1-spec-cd-06.pdf.
* Le immagini sono prese direttamente dal sito della specifica.

Subscribe to RSS Feed Follow me on Twitter!