1. 概要

以前のActivitiwith Java の紹介記事では、 ProcessEngine の重要性を確認し、フレームワークによって提供されるデフォルトの静的APIを介して作成しました。

デフォルト以外にも、 ProcessEngine を作成する方法があります。これについては、ここで説明します。

2. ProcessEngineインスタンスの取得

ProcessEngineのインスタンスを取得する方法は2つあります。

  1. ProcessEnginesクラスを使用する
  2. プログラムで、ProcessEngineConfigurationを介して

これら両方のアプローチの例を詳しく見てみましょう。

3. ProcessEnginesクラスを使用してProcessEngineを取得します

通常、 ProcessEngine は、activiti.cfg.xmlというXMLファイルを使用して構成されます。withは、デフォルトの作成プロセスでも使用されます。

この構成がどのように見えるかの簡単な例を次に示します。

<beans xmlns="...">
    <bean id="processEngineConfiguration" class=
      "org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcUrl"
          vasentence you have mentioned and also changed thelue="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
        <property name="jdbcDriver" value="org.h2.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="" />
        <property name="databaseSchemaUpdate" value="true" />
    </bean>
</beans>

ここで、エンジンの永続性の側面がどのように構成されているかに注目してください。

これで、ProcessEngineを取得できます。

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

4. ProcessEngineConfigurationを使用してProcessEngineを取得します

エンジンを取得するデフォルトルートを通過する– ProcessEngineConfigurationを作成する方法は2つあります。

  1. XML構成の使用
  2. JavaConfigの使用

XML構成から始めましょう。

セクション2.1で述べたように。 – ProcessEngineConfiguration をプログラムで定義し、そのインスタンスを使用してProcessEngineを構築できます。

@Test 
public void givenXMLConfig_whenCreateDefaultConfiguration_thenGotProcessEngine() {
    ProcessEngineConfiguration processEngineConfiguration 
      = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResourceDefault();
    ProcessEngine processEngine 
      = processEngineConfiguration.buildProcessEngine();
    
    assertNotNull(processEngine);
    assertEquals("root", processEngine.getProcessEngineConfiguration()
      .getJdbcUsername());
}

メソッドcreateProcessEngineConfigurationFromResourceDefault() activiti.cfg.xml ファイルを検索するため、 buildProcessEngine()APIを呼び出すだけで済みます。

この場合、検索されるデフォルトのBean名はprocessEngineConfigurationです。 構成ファイル名またはBean名を変更する場合は、他の使用可能な方法を使用して作成できます。 ProcessEngineConfiguration。

いくつかの例を見てみましょう。

まず、構成ファイル名を変更し、APIにカスタムファイルを使用するように依頼します。

@Test 
public void givenDifferentNameXMLConfig_whenGetProcessEngineConfig_thenGotResult() {
    ProcessEngineConfiguration processEngineConfiguration 
      = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResource(
          "my.activiti.cfg.xml");
    ProcessEngine processEngine = processEngineConfiguration
      .buildProcessEngine();
    
    assertNotNull(processEngine);
    assertEquals("baeldung", processEngine.getProcessEngineConfiguration()
      .getJdbcUsername());
}

それでは、Bean名も変更しましょう。

@Test 
public void givenDifferentBeanNameInXMLConfig_whenGetProcessEngineConfig_thenGotResult() {
    ProcessEngineConfiguration processEngineConfiguration 
      = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResource(
          "my.activiti.cfg.xml", 
          "myProcessEngineConfiguration");
    ProcessEngine processEngine = processEngineConfiguration
      .buildProcessEngine();
    
    assertNotNull(processEngine);
    assertEquals("baeldung", processEngine.getProcessEngineConfiguration()
      .getJdbcUsername());
}

もちろん、構成で異なる名前が想定されているため、テストを実行する前に、ファイル名(およびBean名)を一致するように変更する必要があります。

エンジンを作成するために使用できるその他のオプションは、 createProcessEngineConfigurationFromInputStream(InputStream inputStream)、 createProcessEngineConfigurationFromInputStream(InputStream inputStream、String beanName)です。

XML構成を使用したくない場合は、Java構成のみを使用して設定することもできます。

4つの異なるクラスで作業します。 これらはそれぞれ異なる環境を表しています。

  1. org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration – ProcessEngine は、DBに支えられたスタンドアロンの方法で使用されます
  2. org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration – デフォルトでは、H2インメモリデータベースが使用されます。 DBは、エンジンの起動時とシャットダウン時に作成および削除されます。したがって、この構成スタイルをテストに使用できます。
  3. org.activiti.spring.SpringProcessEngineConfiguration –はSpring環境で使用されます
  4. org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration – エンジンは、JTAトランザクションを使用してスタンドアロンモードで実行されます

いくつかの例を見てみましょう。

スタンドアロンのプロセスエンジン構成を作成するためのJUnitテストは次のとおりです。

@Test 
public void givenNoXMLConfig_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());
}

同様に、インメモリデータベースを使用してスタンドアロンプロセスエンジン構成を作成するためのJUnitテストケースを作成します。

@Test 
public void givenNoXMLConfig_whenCreateInMemProcessEngineConfig_thenCreated() {
    ProcessEngineConfiguration processEngineConfiguration 
      = ProcessEngineConfiguration
      .createStandaloneInMemProcessEngineConfiguration();
    ProcessEngine processEngine = processEngineConfiguration
      .buildProcessEngine();
    
    assertNotNull(processEngine);
    assertEquals("sa", processEngine.getProcessEngineConfiguration()
      .getJdbcUsername());
}

5. データベースの設定

デフォルトでは、Activiti APIは、データベース名が「activiti」、ユーザー名が「sa」のH2インメモリデータベースを使用します。

他のデータベースを使用する必要がある場合は、2つの主要なプロパティを使用して明示的に設定する必要があります。

databaseType –有効な値は h2、mysql、oracle、postgres、mssql、db2です。 これはDB構成からも理解できますが、自動検出が失敗した場合に役立ちます。

databaseSchemaUpdate – このプロパティを使用すると、エンジンの起動時またはシャットダウン時にデータベースに何が起こるかを定義できます。 次の3つの値を持つことができます。

  1. false (デフォルト)–このオプションは、データベーススキーマのバージョンをライブラリに対して検証します。 それらが一致しない場合、エンジンは例外をスローします
  2. true –プロセスエンジン構成が構築されると、データベースに対してチェックが実行されます。 データベースはそれに応じて作成/更新されますcreate-drop
  3. 」–これにより、プロセスエンジンの作成時にDBスキーマが作成され、プロセスエンジンのシャットダウン時にDBスキーマが削除されます。

DB構成をJDBCプロパティとして定義できます。

<property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
<property name="databaseType" value="mysql" />

または、 DataSource を使用している場合:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/activiti" />
    <property name="username" value="activiti" />
    <property name="password" value="activiti" />
    <property name="defaultAutoCommit" value="false" />
    <property name="databaseType" value="mysql" />
</bean>

6. 結論

このクイックチュートリアルでは、ActivitiでProcessEngineを作成するいくつかの異なる方法に焦点を当てました。

また、データベース構成を処理するためのさまざまなプロパティとアプローチも確認しました。

いつものように、私たちが見た例のコードは、GitHubにあります。