ProcessEngine-Konfiguration in Activiti

ProcessEngine-Konfiguration in Activiti

1. Überblick

In unserem vorherigen Intro-Artikel zuActiviti with Javahaben wir die Bedeutung vonProcessEngineerkannt und einen über die vom Framework bereitgestellte statische Standard-API erstellt.

Über die Standardeinstellung hinaus gibt es andere Möglichkeiten, einProcessEngine zu erstellen - die wir hier erforschen.

2. Erhalten einerProcessEngine-Instanz

Es gibt zwei Möglichkeiten, eine Instanz vonProcessEngine abzurufen:

  1. unter Verwendung der KlasseProcessEngines

  2. programmgesteuert über dieProcessEngineConfiguration

Schauen wir uns die Beispiele für diese beiden Ansätze genauer an.

3. ProcessEngine mitProcessEngines Klasse abrufen

In der Regel wirdProcessEngine mithilfe einer XML-Datei mit dem Namenactiviti.cfg.xml, konfiguriert, wobei auch der Standarderstellungsprozess verwendet wird.

Hier ist ein kurzes Beispiel, wie diese Konfiguration aussehen kann:


    
        
        
        
        
        
    

Beachten Sie, wie der Persistenzaspekt der Engine hier konfiguriert wird.

Und jetzt können wir dieProcessEngine erhalten:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

4. Holen Sie sichProcessEngine mitProcessEngineConfiguration

Über die Standardroute zum Abrufen der Engine hinaus gibt es zwei Möglichkeiten, dieProcessEngineConfigurationzu erstellen:

  1. Verwenden von XML Config

  2. Verwenden von Java Config

Beginnen wir mit der XML-Konfiguration.

Wie in Abschnitt 2.1 erwähnt. - Wir können dieProcessEngineConfiguration programmgesteuert definieren und dieProcessEngine mithilfe dieser Instanz erstellen:

@Test
void whenCreateDefaultConfiguration_thenGotProcessEngine() {
    ProcessEngineConfiguration processEngineConfiguration
      = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResourceDefault();
    ProcessEngine processEngine
      = processEngineConfiguration.buildProcessEngine();

    assertNotNull(processEngine);
}

Die MethodecreateProcessEngineConfigurationFromResourceDefault() sucht auch nach der Dateiactiviti.cfg.xml, und jetzt müssen wir nur noch die APIbuildProcessEngine() aufrufen.

In diesem Fall lautet der Standard-Bean-NameprocessEngineConfiguration. Wenn wir den Namen der Konfigurationsdatei oder den Bean-Namen ändern möchten, können wir andere verfügbare Methoden zum Erstellen derProcessEngineConfiguration. verwenden

Schauen wir uns einige Beispiele an.

Zuerst ändern wir den Namen der Konfigurationsdatei und bitten die API, unsere benutzerdefinierte Datei zu verwenden:

@Test
void whenGetProcessEngineConfig_thenGotResult() {
    ProcessEngineConfiguration processEngineConfiguration
      = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResource(
          "my.activiti.cfg.xml");
    ProcessEngine processEngine = processEngineConfiguration
      .buildProcessEngine();

    assertNotNull(processEngine);
}

Ändern wir nun auch den Bean-Namen:

@Test
void whenGetProcessEngineConfig_thenGotResult() {
    ProcessEngineConfiguration processEngineConfiguration
      = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResource(
          "my.activiti.cfg.xml",
          "myProcessEngineConfiguration");
    ProcessEngine processEngine = processEngineConfiguration
      .buildProcessEngine();

    assertNotNull(processEngine);
    assertEquals("root", processEngine.getProcessEngineConfiguration()
      .getJdbcUsername());
}

Natürlich müssen wir, da die Konfiguration andere Namen erwartet, den Dateinamen (und den Bean-Namen) entsprechend ändern, bevor wir den Test ausführen.

Andere verfügbare Optionen zum Erstellen der Engine sindcreateProcessEngineConfigurationFromInputStream(InputStream inputStream),createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName).

Wenn wir keine XML-Konfiguration verwenden möchten,we can also set things up using Java config only.

Wir werden mit vier verschiedenen Klassen arbeiten. Jedes davon repräsentiert eine andere Umgebung:

  1. org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration –ProcessEngine wird eigenständig verwendet und von der Datenbank unterstützt

  2. org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration – Standardmäßig wird eine H2-In-Memory-Datenbank verwendet. Die Datenbank wird erstellt und gelöscht, wenn der Motor gestartet und heruntergefahren wird. Daher kann dieser Konfigurationsstil zum Testen verwendet werden

  3. org.activiti.spring.SpringProcessEngineConfiguration –, die in der Frühlingsumgebung verwendet werden sollen

  4. org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration – Die Engine wird im Standalone-Modus mit JTA-Transaktionen ausgeführt

Schauen wir uns einige Beispiele an.

Hier ist ein JUnit-Test zum Erstellen einer eigenständigen Process Engine-Konfiguration:

@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());
}

In ähnlicher Weise schreiben wir einen JUnit-Testfall zum Erstellen der eigenständigen Process Engine-Konfiguration mithilfe der In-Memory-Datenbank:

@Test
void whenCreateInMemProcessEngineConfig_thenCreated() {
    ProcessEngineConfiguration processEngineConfiguration
      = ProcessEngineConfiguration
      .createStandaloneInMemProcessEngineConfiguration();
    ProcessEngine processEngine = processEngineConfiguration
      .buildProcessEngine();

    assertNotNull(processEngine);
    assertEquals("sa", processEngine.getProcessEngineConfiguration()
      .getJdbcUsername());
}

5. Datenbank-Setup

Standardmäßig verwendet Activiti API die H2-In-Memory-Datenbank mit dem Datenbanknamen "activiti" und dem Benutzernamen "sa".

Wenn wir eine andere Datenbank verwenden müssen, müssen wir die Dinge explizit einrichten - unter Verwendung von zwei Haupteigenschaften.

databaseType - Gültige Werte sindh2, mysql, oracle, postgres, mssql, db2. Dies kann auch aus der DB-Konfiguration ermittelt werden, ist jedoch hilfreich, wenn die automatische Erkennung fehlschlägt.

databaseSchemaUpdate –Mit dieser Eigenschaft können wir definieren, was mit der Datenbank passiert, wenn die Engine hochfährt oder herunterfährt. Es kann diese drei Werte haben:

  1. false (Standard) - Diese Option überprüft die Version des Datenbankschemas anhand der Bibliothek. Die Engine löst eine Ausnahme aus, wenn sie nicht übereinstimmt

  2. true - Wenn die Process Engine-Konfiguration erstellt wird, wird die Datenbank überprüft. Die Datenbank wird entsprechend erstellt / aktualisiert

  3. “ - Hiermit wird das DB-Schema erstellt, wenn die Prozess-Engine erstellt wird und es fallen lässt, wenn die Prozess-Engine herunterfährt.

Wir können die DB-Konfiguration als JDBC-Eigenschaften definieren:





Alternativ, wenn wirDataSource verwenden:


    
    
    
    
    
    

6. Fazit

In diesem kurzen Tutorial haben wir uns auf verschiedene Arten konzentriert,ProcessEnginein Activiti zu erstellen.

Wir haben auch verschiedene Eigenschaften und Ansätze für die Datenbankkonfiguration kennengelernt.

Wie immer ist der Code für Beispiele, die wir gesehen haben,over on GitHub.