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.
| Campo | Descrição | Anulá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.
| Campo | Descrição | Anulá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);