Configuração ProcessEngine nas atividades
1. Visão geral
Em nosso artigo de introdução anteriorActiviti with Java, vimos a importância doProcessEnginee criamos um por meio da API estática padrão fornecida pela estrutura.
Além do padrão, existem outras maneiras de criar umProcessEngine - que exploraremos aqui.
2. Obtenção de uma instânciaProcessEngine
Existem duas maneiras de obter uma instância deProcessEngine:
-
usando a classeProcessEngines
-
programaticamente, por meio doProcessEngineConfiguration
Vamos dar uma olhada nos exemplos de ambas as abordagens.
3. ObtenhaProcessEngine usando a classeProcessEngines
Normalmente, oProcessEngine é configurado usando um arquivo XML chamadoactiviti.cfg.xml, com o que o processo de criação padrão também usará.
Aqui está um exemplo rápido de como essa configuração pode ser:
Observe como o aspecto de persistência do mecanismo está configurado aqui.
E agora, podemos obter oProcessEngine:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
4. ObtenhaProcessEngine usandoProcessEngineConfiguration
Ultrapassando a rota padrão de obtenção do mecanismo - há duas maneiras de criarProcessEngineConfiguration:
-
Usando XML Config
-
Usando Java Config
Vamos começar com a configuração XML.
Como mencionado na seção 2.1. - podemos definirProcessEngineConfiguration programaticamente e construirProcessEngine usando essa instância:
@Test
void whenCreateDefaultConfiguration_thenGotProcessEngine() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createProcessEngineConfigurationFromResourceDefault();
ProcessEngine processEngine
= processEngineConfiguration.buildProcessEngine();
assertNotNull(processEngine);
}
O métodocreateProcessEngineConfigurationFromResourceDefault() também irá procurar o arquivoactiviti.cfg.xml, e agora só precisamos chamar a APIbuildProcessEngine().
Nesse caso, o nome do bean padrão que ele procura éprocessEngineConfiguration. Se quisermos mudar o nome do arquivo de configuração ou o nome do bean, podemos usar outros métodos disponíveis para criar oProcessEngineConfiguration.
Vejamos alguns exemplos.
Primeiro, vamos alterar o nome do arquivo de configuração e pedir à API para usar nosso arquivo personalizado:
@Test
void whenGetProcessEngineConfig_thenGotResult() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"my.activiti.cfg.xml");
ProcessEngine processEngine = processEngineConfiguration
.buildProcessEngine();
assertNotNull(processEngine);
}
Agora, vamos também mudar o nome do bean:
@Test
void whenGetProcessEngineConfig_thenGotResult() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"my.activiti.cfg.xml",
"myProcessEngineConfiguration");
ProcessEngine processEngine = processEngineConfiguration
.buildProcessEngine();
assertNotNull(processEngine);
assertEquals("root", processEngine.getProcessEngineConfiguration()
.getJdbcUsername());
}
Obviamente, agora que a configuração espera nomes diferentes, precisamos alterar o nome do arquivo (e o nome do bean) para corresponder - antes de executar o teste.
Outras opções disponíveis para criar o mecanismo sãocreateProcessEngineConfigurationFromInputStream(InputStream inputStream),createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName).
Se não quisermos usar a configuração XML,we can also set things up using Java config only.
Vamos trabalhar com quatro classes diferentes; cada um deles representa um ambiente diferente:
-
org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration – oProcessEngine é usado de forma autônoma, apoiado pelo DB
-
org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration – por padrão, um banco de dados H2 na memória é usado. O banco de dados é criado e descartado quando o mecanismo é iniciado e encerrado - portanto, esse estilo de configuração pode ser usado para testar
-
org.activiti.spring.SpringProcessEngineConfiguration – para ser usado no ambiente Spring
-
org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration – o mecanismo é executado em modo autônomo, com transações JTA
Vamos dar uma olhada em alguns exemplos.
Aqui está um teste JUnit para criar uma configuração de mecanismo de processo independente:
@Test
void whenCreateProcessEngineConfig_thenCreated() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
ProcessEngine processEngine = processEngineConfiguration
.setDatabaseSchemaUpdate(ProcessEngineConfiguration
.DB_SCHEMA_UPDATE_TRUE)
.setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")
.buildProcessEngine();
assertNotNull(processEngine);
assertEquals("sa", processEngine.getProcessEngineConfiguration()
.getJdbcUsername());
}
Da mesma forma, vamos escrever um caso de teste JUnit para criar a configuração do mecanismo de processo autônomo usando o banco de dados na memória:
@Test
void whenCreateInMemProcessEngineConfig_thenCreated() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration();
ProcessEngine processEngine = processEngineConfiguration
.buildProcessEngine();
assertNotNull(processEngine);
assertEquals("sa", processEngine.getProcessEngineConfiguration()
.getJdbcUsername());
}
5. Configuração do banco de dados
Por padrão, a API da Activiti usará o banco de dados na memória H2, com o nome do banco de dados "activiti" e o nome de usuário "sa".
Se precisarmos usar qualquer outro banco de dados, teremos que configurar as coisas explicitamente - usando duas propriedades principais.
databaseType - os valores válidos sãoh2, mysql, oracle, postgres, mssql, db2. Isso também pode ser descoberto na configuração do banco de dados, mas será útil se a detecção automática falhar.
databaseSchemaUpdate – esta propriedade nos permite definir o que acontece ao banco de dados quando o mecanismo é inicializado ou desativado. Pode ter estes três valores:
-
false (padrão) - esta opção valida a versão do esquema do banco de dados na biblioteca. O mecanismo lançará uma exceção se não corresponderem
-
true - quando a configuração do mecanismo de processo é construída, uma verificação é executada no banco de dados. O banco de dados será criado / atualizado criar e soltar em conformidade
-
“–” - isso criará o esquema de banco de dados quando o mecanismo de processo for criado e o descartará quando o mecanismo de processo for desligado.
Podemos definir a configuração do banco de dados como propriedades JDBC:
Alternativamente, se estivermos usandoDataSource:
6. Conclusão
Neste tutorial rápido, nos concentramos em várias maneiras diferentes de criarProcessEngine no Activiti.
Também vimos diferentes propriedades e abordagens para lidar com a configuração do banco de dados.
Como sempre, o código dos exemplos que vimos pode ser encontradoover on GitHub.