67.4. プロセスエンジンでの永続性の設定


永続性を設定せずにプロセスエンジンを使用する場合は、ランタイムデータをデータベースに保存しません。インメモリーデータベースはデフォルトで利用できません。パフォーマンス上の理由で必要な場合や永続性を独自に管理する場合に、このモードを使用できます。

プロセスエンジンで JPA 永続性を使用するには、これを設定する必要があります。

設定には、通常、必要な依存関係の追加、データソースの設定、および永続性が設定されたプロセスエンジンクラスの作成が必要になります。

67.4.1. persistence.xml ファイルの設定

JPA 永続性を使用するには、persistence.xml 永続性設定をクラスパスに追加して、Hibernate および H2 データベース (または任意の他のデータベース) を使用するように JPA を設定する必要があります。このファイルをプロジェクトの META-INF ディレクトリーに配置します。

persistence.xml サンプルファイル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence
      version="2.0"
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
      http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
      xmlns="http://java.sun.com/xml/ns/persistence"
      xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <persistence-unit name="org.jbpm.persistence.jpa" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/jbpm-ds</jta-data-source>
    <mapping-file>META-INF/JBPMorm.xml</mapping-file>
    <class>org.drools.persistence.info.SessionInfo</class>
    <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
    <class>org.drools.persistence.info.WorkItemInfo</class>
    <class>org.jbpm.persistence.correlation.CorrelationKeyInfo</class>
    <class>org.jbpm.persistence.correlation.CorrelationPropertyInfo</class>
    <class>org.jbpm.runtime.manager.impl.jpa.ContextMappingInfo</class>

    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.release_mode" value="after_transaction"/>
            <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform"/>
    </properties>
  </persistence-unit>
</persistence>
Copy to Clipboard Toggle word wrap

この例では jdbc/jbpm-ds データソースを参照します。データソースの設定方法については、「プロセスエンジンの永続性のデータソースの設定」を参照してください。

67.4.2. プロセスエンジンの永続性のデータソースの設定

プロセスエンジンで JPA 永続性を設定するには、データベースバックエンドを表すデータソースを指定する必要があります。

Red Hat JBoss EAP などのアプリケーションサーバーでアプリケーションを実行する場合、たとえば、データソース設定ファイルを deploy ディレクトリーに追加することで、アプリケーションサーバーを使用してデータソースを設定できます。データソースの作成方法は、アプリケーションサーバーのドキュメントを参照してください。

アプリケーションを Red Hat JBoss EAP にデプロイする場合は、deploy ディレクトリーに設定ファイルを作成してデータソースを作成できます。

Red Hat JBoss EAP のデータソース設定ファイルの例

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>jdbc/jbpm-ds</jndi-name>
    <connection-url>jdbc:h2:tcp://localhost/~/test</connection-url>
    <driver-class>org.h2.jdbcx.JdbcDataSource</driver-class>
    <user-name>sa</user-name>
    <password></password>
  </local-tx-datasource>
</datasources>
Copy to Clipboard Toggle word wrap

アプリケーションがプレーンな Java 環境で実行される場合は、Red Hat Process Automation Manager が提供する kie-test-util モジュールの DataSourceFactory クラスを使用すると、Narayana および Tomcat DBCP を使用できます。以下のコードフラグメントを参照してください。この例では、Narayana および Tomcat DBCP と H2 インメモリーデータベースを使用します。

H2 インメモリーデータベースデータソースの設定コード例

Properties driverProperties = new Properties();
driverProperties.put("user", "sa");
driverProperties.put("password", "sa");
driverProperties.put("url", "jdbc:h2:mem:jbpm-db;MVCC=true");
driverProperties.put("driverClassName", "org.h2.Driver");
driverProperties.put("className", "org.h2.jdbcx.JdbcDataSource");
PoolingDataSourceWrapper pdsw = DataSourceFactory.setupPoolingDataSource("jdbc/jbpm-ds", driverProperties);
Copy to Clipboard Toggle word wrap

67.4.3. 永続性の依存関係

永続性には、特定の JAR アーティファクトの依存関係が必要です。

jbpm-persistence-jpa.jar ファイルが常に必要になります。このファイルには、必要に応じてランタイム状態を保存するコードが含まれます。

使用している永続ソリューションおよびデータベースによっては、追加の依存関係が必要になる場合があります。デフォルト設定の組み合わせには、以下のコンポーネントが含まれます。

  • Hibernate を JPA 永続プロバイダーとする
  • H2 インメモリーデータベース
  • JTA ベースのトランザクション管理用の Narayana
  • 接続プール機能用の Tomcat DBCP

この設定には、以下の追加の依存関係が必要です。

  • jbpm-persistence-jpa (org.jbpm)
  • drools-persistence-jpa (org.drools)
  • persistence-api (javax.persistence)
  • hibernate-entitymanager (org.hibernate)
  • hibernate-annotations (org.hibernate)
  • hibernate-commons-annotations (org.hibernate)
  • hibernate-core (org.hibernate)
  • commons-collections (commons-collections)
  • dom4j (org.dom4j)
  • jta (javax.transaction)
  • narayana-jta (org.jboss.narayana.jta)
  • tomcat-dbcp (org.apache.tomcat)
  • jboss-transaction-api_1.2_spec (org.jboss.spec.javax.transaction)
  • javassist (javassist)
  • slf4j-api (org.slf4j)
  • slf4j-jdk14 (org.slf4j)
  • simple-jndi (simple-jndi)
  • h2 (com.h2database)
  • jbpm-test (org.jbpm) はテスト専用で、実稼働アプリケーションにこのアーティファクトを含めないでください。

67.4.4. 永続性のある KIE セッションの作成

コードで KIE セッションを直接作成した場合は、JPAKnowledgeService クラスを使用して KIE セッションを作成できます。この方法では、基礎となる設定への完全アクセスが可能です。

手順

  1. KIE ベース、KIE セ ッション設定 (必要な場合)、および環境に基づいて、JPAKnowledgeService クラスを使用して KIE セッションを作成します。環境には、永続性に使用する Entity Manager Factory への参照が含まれている必要があります。

    永続性のある KIE セッションの作成

    // create the entity manager factory and register it in the environment
    EntityManagerFactory emf =
        Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa" );
    Environment env = KnowledgeBaseFactory.newEnvironment();
    env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
    
    // create a new KIE session that uses JPA to store the runtime state
    StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
    int sessionId = ksession.getId();
    
    // invoke methods on your method here
    ksession.startProcess( "MyProcess" );
    ksession.dispose();
    Copy to Clipboard Toggle word wrap

  2. 特定のセッション ID に基づいてデータベースからセッションを再作成するには、JPAKnowledgeService.loadStatefulKnowledgeSession() メソッドを使用します。

    永続データベースからの KIE セッションの再作成

    // re-create the session from database using the sessionId
    ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbase, null, env );
    Copy to Clipboard Toggle word wrap

67.4.5. ランタイムマネージャーの永続性

コードで RuntimeManager クラスを使用する場合は、RuntimeEnvironmentBuilder クラスを使用して永続性の環境を設定します。デフォルトでは、ランタイムマネージャーは org.jbpm.persistence.jpa 永続ユニットを検索します。

以下の例は、空のコンテキストで KieSession を作成します。

ランタイムマネージャーを使用した空のコンテキストでの KIE セッションの作成

RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory.get()
        .newDefaultBuilder()
        .knowledgeBase(kbase);
RuntimeManager manager = RuntimeManagerFactory.Factory.get()
        .newSingletonRuntimeManager(builder.get(), "com.sample:example:1.0");
RuntimeEngine engine = manager.getRuntimeEngine(EmptyContext.get());
KieSession ksession = engine.getKieSession();
Copy to Clipboard Toggle word wrap

上の例では、kbase パラメーターとして KIE ベースが必要です。クラスパスで kmodule.xml KJAR 記述子を使用して、KIE ベースを設定できます。

KJAR 記述子 kmodule.xml からの KIE ベースの構築

KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieBase kbase = kContainer.getKieBase("kbase");
Copy to Clipboard Toggle word wrap

kmodule.xml 記述子ファイルには、スキャンしてプロセスエンジンのワークフローを検索およびデプロイするリソースパッケージの属性を含めることができます。

kmodule.xml 記述子ファイルのサンプル

<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
  <kbase name="kbase" packages="com.sample"/>
</kmodule>
Copy to Clipboard Toggle word wrap

永続性を制御するには、RuntimeEnvironmentBuilder::entityManagerFactory メソッドを使用できます。

ランタイムマネージャーでの永続性の設定の制御

EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");

RuntimeEnvironment runtimeEnv = RuntimeEnvironmentBuilder.Factory
        .get()
        .newDefaultBuilder()
        .entityManagerFactory(emf)
        .knowledgeBase(kbase)
        .get();

StatefulKnowledgeSession ksession = (StatefulKnowledgeSession) RuntimeManagerFactory.Factory.get()
        .newSingletonRuntimeManager(runtimeEnv)
        .getRuntimeEngine(EmptyContext.get())
        .getKieSession();
Copy to Clipboard Toggle word wrap

この例では、KIE セッション ksession を作成したら、ksession でメソッドを呼び出すことができます (例: StartProcess())。プロセスエンジンは、設定されたデータソースのランタイム状態を永続化します。

プロセスインスタンス ID を使用して永続ストレージからプロセスインスタンスを復元できます。ランタイムマネージャーが必要なセッションを自動的に再作成します。

プロセスインスタンス ID を使用した永続データベースからの KIE セッションの再作成

RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId));

KieSession session = runtime.getKieSession();
Copy to Clipboard Toggle word wrap

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat