Este artículo contiene un enlace para a una aplicación de OpenXava
diseñada para Integrar el BPM de Bonita Open Solution.
La aplicacion corre sobre Liferay 6.1 y Tomcat 7.0.
Este es el enlace:
http://200.29.153.50:8080/novedades
Pueden ingresar con los usarios siguientes:
Rol 1: Solicitante
usuario: demo1
clave: password
Rol 2: Coordinador
usuario: demo2
clave password
Los fuentes estan disponibles en la comunidad de bonitasoft,
www.bonitasoft.org
El enlace es:
http://www.bonitasoft.org/exchange/extension_view.php?eid=93
Los invito a unirse y participar en la comunidad de Bonita Open Solution.
Bonita Open Solution es una solución potente e intuitiva para crear
aplicaciones basadas en procesos
por un coste inmejorable. Totalmente opensource y con la calidad y
funcionalidad de las aplicaciones comerciales.
En la demo tambien se incluye un Proceso Orden de Compra de Ejemplo que
esta integrado con OXBPM antes señalado.
Fuentes de OXBP en Comunidad de Bonita:
http://www.bonitasoft.org/exchange/extension_view.php?eid=93&rid=113#rev113
Detalles Tècnicos:
En cuanto al acceso a la API de Bonita
Open Solution (BOS) desde nuestra aplicaciòn de Openxava es muy simple.
En el programa OXBPM esto se lleva a cabo en la clase org.zzeus.ox.bpm.integration.runtime.facade.OXBPMModule.
En esta clase se centra toda la funcionalidad BPM del sistema. El truco
básico es hacer un login programatico antes de acceder a cualquier método
de la API de BOS.
Acá un fragmento de código de la clase:
public class OXBPMModule {
// the api facades
final RuntimeAPI runtimeAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getRuntimeAPI();
final QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getQueryRuntimeAPI();
final ManagementAPI managementAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getManagementAPI();
final QueryDefinitionAPI queryDefinitionAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getQueryDefinitionAPI();
final RepairAPI repairAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getRepairAPI();
// the realm login to galssfish
final ProgrammaticLogin programmaticLogin = new ProgrammaticLogin();
public static final int BAR = 0;
public static final int XPDL = 1;
private String currentUserUID;
public OXBPMModule(){
OXConstants.loadConstants();
User liferayUser;
try {
liferayUser = UserLocalServiceUtil.getUserById(new Long(Users.getCurrent()));
this.currentUserUID= liferayUser.getLogin();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public OXBPMModule(String currentUserUID) {
OXConstants.loadConstants();
this.currentUserUID = currentUserUID;
}
public Set<ActivityDefinition> getProcessActivities(ProcessDefinitionUUID uuid) throws ProcessNotFoundException, VariableNotFoundException, Exception {
programmaticLogin.login(currentUserUID, "", "processBaseRealm", false);
return queryDefinitionAPI.getProcessActivities(uuid);
}
public Collection<OXTaskInstance> getTaskList(ActivityState state) throws Exception {
Collection<OXTaskInstance> result = new TreeSet<OXTaskInstance>();
programmaticLogin.login(currentUserUID, "", "processBaseRealm", false);
Collection<TaskInstance> tasks = queryRuntimeAPI.getTaskList(state);
if (tasks != null)
for (TaskInstance task : tasks){
result.add(new OXTaskInstance(task));
}
return result;
}
public Set<ProcessInstance> getUserInstances() throws Exception {
programmaticLogin.login(currentUserUID, "", "processBaseRealm", false);
return queryRuntimeAPI.getUserInstances();
}
}
Note el uso de la sentencia:
programmaticLogin.login(currentUserUID, "", "processBaseRealm", false);
antes de cada llamada a función o método de la API.
La API de BOS se configura en estas líneas de codigo:
final RuntimeAPI runtimeAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getRuntimeAPI();
final QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getQueryRuntimeAPI();
final ManagementAPI managementAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getManagementAPI();
final QueryDefinitionAPI queryDefinitionAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getQueryDefinitionAPI();
final RepairAPI repairAPI = AccessorUtil.getAPIAccessor(OXConstants.BONITA_EJB_ENV).getRepairAPI();
De igual forma, el siguiente fragmento de código se utiliza para obtener y
configurar en el sistema el Usuario de Liferay que actualmente ejecuta la
aplicación:
liferayUser = UserLocalServiceUtil.getUserById(new Long(Users.getCurrent()));
this.currentUserUID= liferayUser.getLogin();
Como vemos, no hay mayor dificultad en usar la API de BOS desde una
aplicación de Openxava corriendo sobre Liferay.