A- A A+

Alfresco e il jBPM di JBoss

tag  Alfresco  JBoss  jBPM 

30/12/2011

Lavorare con Alfresco e jBPM di JBoss (Parte 1)

Il software utilizzato:

jboss-5.1.0.GA
Alfresco Community 3.2r2 (MySql 5)
jBPM 3.2.6 SP1 (jbpm-installer-3.2.6.SP1.jar)
Eclipse con JBoss Graphical Process Designer (GPD)


Sono partito nello studio del jBPM avendo già una discreta esperienza con Alfresco.

Il tool grafico e' molto robusto e permette di creare, modificare e deployare i workflow in maniera comoda.

Il framework jBPM utilizzata il linguaggio xml jPDL. Il jPDL si basa sul concetto di nodo, e ogni nodo rappresenta una attività all'interno del nostro workflow.

Tokens: un token rappresenta la posizione corrente all'interno di un flusso e punto allo stato di esecuzione del processo. Il token si sposta da nodo a nodo in funzione dell'avanzamento del processo. Il token si muove solo quando riceve un comando signal.

Tipi di Nodi: I nodi sono tipizzati (nel senso inteso in Java). Il tipo determina il suo comportamento.

Start Node: Uno solo per processo. Solo una transizione in uscita è permessa.
Fork: Consente di parallelizzare il processo su più percorsi concorrenti.
Join: E' il punto di ricongiunzione dei flussi paralleli. Rimane in attesa di tutti i flussi paralleli per elaborarne i contenuti.
Decision: Consente di gestire il routing attraverso i diversi path di esecuzione.
Node: Un nodo generico che consente di inserire all'interno del processo la nostra logica di business.
State: Un stato di attesa. L'esecuzione del processo attende un comando signal.
Process State: Consente l'esecuzione di un sottoprocesso. Rimane in attesa dell'esecuzione del sotto processo.
Task Node: Uno nodo che contiene una o più attività assegnate a persone.
End State: Uno solo per processo. Solo transazioni in ingresso sono consentite.

I processi possono essere modificati, il framework jBPM si occuperà di tutte le versioni portando a termine i flussi già avviati mantenendo il comportamento relativo alla versione con cui è stato avviato.

jBPM e Alfresco.
Per i task che richiedono l'intervento umano all'interno del processo, Alfresco richiede la creazione di modelli e interfacce applicative che all'interno del WCM permetteranno di visualizzare e agire sul processo stesso.

Per avviare un flusso complesso all'interno di Alfresco si puo' selezionare dal menu' associato ai contenuti "Start Advanced Workflow".
A questo punto vedremo tutti i flussi complessi configurati e disponibili.


Vediamo un esempio di flusso che non richiede l'intervento umano:

<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="helloWorld">
<start-state name="start">
<transition name="" to="hello"></transition>
</start-state>
<node name="hello">
<transition name="" to="end1">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
logger.log("Hello World!");
</script>
</action>
</transition>
</node>
<end-state name="end1"></end-state>
</process-definition>


Attraverso il GPD di Eclipse, tab "Deployment" impostare i valori:
Server Name: Host del server Alfresco
Server Port: La porta del WCM
Server Deployer: /alfresco/jbpm/deployprocess

Dopo avere verificato la connessione al server con "Test Connection" potete deployare il Workflow cliccando su Deploy Process Archive. Un messaggio di esito positivo ci confermerà l'avvenuta pubblicazione del processo.

Prima di procedere con il resto delle operazioni eseguite questa midifica.
Nel file log4j.properties impostare su debug queste voci (questa modifica richiede il riavvio di Alfresco)

# Repository
...
log4j.logger.org.alfresco.repo.jscript=debug
log4j.logger.org.alfresco.repo.jscript.ScriptLogger=debug
...

Una volta riavviato il server possiamo verificare la presenza del workflow su Alfresco con la pagina 
http://host:porta/alfresco/faces/jsp/admin/workflow-console.jsp
Per accedere a questa pagina bisogna prima effettuare il login come amministratore.

Con il comando "show definitions" (premendo submit) vediamo tutti i flussi deployati, dovremmo vedere anche il nostro. Per vedere tutte le versioni e non solo quelle correnti è necessario usare il comando "show definitions all".


Dovremmo vedere tra gli altri il nostro flusso dove {ID} è l'identificativo univoco assegnato al nostro flusso.
...
id: jbpm${ID} , name: jbpm$helloWorld , title...
....

All'interno di Alfresco posizioniamoci nella "Company Home > User Homes", creiamo un nuovo contentuto e nel menu relativo clicchiamo su "Start Advanced Workflow".
Tra i workflow vedremo anche il nostro nuovo processo che potremo avviare...

Nella console di jBoss tra gli altri messaggi troveremo "Hello World!", abbiamo eseguito il nostro primo processo con jBPM su Alfresco.