Passa ai contenuti principali

WS-HumanTask Parte 1 Introduzione

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.

Commenti

Post popolari in questo blog

Install Mysql JDBC Driver on WildFly 8.2

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 libraryUsed technologies in the tutorial:Wild Fly 8.2.0.FinalMysql Connector 5.1.33 1. Create the jboss moduleEnter 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 Page2. R…

Running Java Applications as a Windows Service with NSSM

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. Java 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.leng…

org.w3c.dom.Document convertion Utils

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 StringString to DocumentDocument to InputStreamInputStream 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 prettyPri…