Configuração ProcessEngine nas atividades

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:

  1. usando a classeProcessEngines

  2. 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:

  1. Usando XML Config

  2. 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:

  1. org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration – oProcessEngine é usado de forma autônoma, apoiado pelo DB

  2. 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

  3. org.activiti.spring.SpringProcessEngineConfiguration – para ser usado no ambiente Spring

  4. 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:

  1. 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

  2. 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

  3. ” - 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.