12.2. Instancia del proceso

Las instancias de procesos se persisten como entidades ProcessInstanceInfo, las cuales persisten el estado de una instancia de proceso en tiempo de ejecución y almacenan los siguientes datos:

Tabla 12.2.

CampoDescripciónNullable
instanceid
llave primaria
falso
lastmodificationdate
última vez guardado en el almacén de datos
N/A
lastreaddate
última lectura desde el almacén de datos
N/A
processid
El ID del proceso sobre el cual se basa la instancia
falso
processinstancebytearray
grupo de datos binario con estado de instancia del proceso( blob binario)
falso
startdate
Fecha de inicio de la instancia del proceso
optlock
número de la versión utilizado para bloquear el valor para el bloqueo optimista
estado
Estado de la instancia del proceso
falso
ProcessInstanceInfo tiene una relación 1:N con la entidad EventTypes.
La entidad EventTypes contiene los siguientes datos:

Tabla 12.3.

CampoDescripciónNullable
instanceid
referencia a la instancia de proceso (llave foránea a la processinstanceinfo)
falso
elemento
campo de texto relacionado a un evento por el cual ha pasado una instancia de proceso

Soporte de bloqueo pesimista

El mecanismo de bloqueo predeterminado para la persistencia de procesos es optimista. With multi-thread high concurrency to the same process instance, this locking strategy can result in bad performance.
Con el lanzamiento de la versión 6.1de Red Hat JBoss BPM Suite, esto se puede cambiar en tiempo de ejecución para permitirle al usuario el establecer el bloqueo proceso por proceso y permtir que sea pessimista (el cambio se puede realizar a nivel de sesión KIE o también a nivel del gestor en tiempo de ejecución y no solo a nivel del proceso).
Para hacer que un proceso use un bloqueo pesimista, haga esto en el entorno del tiempo de ejecución:
import org.kie.api.runtime.Environment;
import org.kie.api.runtime.EnvironmentName;
import org.kie.api.runtime.manager.RuntimeManager;
import org.kie.api.runtime.manager.RuntimeManagerFactory;

...

// here env is an instance of org.kie.api.runtime.Environment
env.set(EnvironmentName.USE_PESSIMISTIC_LOCKING, true);

// now create your Runtime Manager using this enviornment
RuntimeManager manager = RuntimeManagerFactory.Factory.get().newPerRequestRuntimeManager(environment);