12.2. Instâncias do Processo

As instâncias do processo são persistentes como entidades ProcessInstanceInfo, que persistem o estado de uma instância do processo em tempo de execução e armazenam os seguintes dados:

Tabela 12.2.

CampoDescriçãoAnulável
instanceid
chave primária
falso
lastmodificationdate
última vez salvo no armazenamento de dados
N/A
lastreaddate
última leitura do armazenamento de dados
N/A
processid
Id do processo em que a instância se baseia
falso
processinstancebytearray
conjunto de dados binário com o estado de instância do processo (blob binário)
falso
startdate
data de início da instância do processo
optlock
número da versão usado para bloquear o valor para o bloqueio otimista.
state
estado da instância do processo
falso
ProcessInstanceInfo possui uma relação 1:N com a entidade EventTypes.
A entidade EventTypes contém os seguintes dados:

Tabela 12.3.

CampoDescriçãoAnulável
instanceid
referência à Instância do Processo (chave estrangeira para processinstanceinfo)
falso
element
campo de texto relacionado a um evento ao qual a Instância do processo foi submetida

Suporte de Bloqueio Pessimista

O mecanismo padrão de bloqueio para a persistência dos processos é otimista. Mas, com uma simultaneidade alta e multi-thread na mesma instância do processo, essa estratégia de bloqueio pode gerar um mau desempenho.
Com o lançamento da versão 6.1 do Red Hat JBoss BPM Suite, isso pode ser alterado durante o tempo de execução, permitindo que o usuário defina o bloqueio de acordo com o processo e permitindo, assim, que ele seja pessimista (essa alteração pode ser feita ao nível da Sessão Kie ou ao nível do Gerenciador do Tempo de Execução também e não apenas ao nível do processo).
Para configurar um processo para usar o bloqueio pessimista, utilize o ambiente de tempo de execução:
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);