第3章 設定


この章では、例を通じて jBPM の設定方法を説明します。
Business Process Manager を設定する最も簡単な方法は、jbpm.cfg.xml 設定ファイルをクラスパスのルートに配置することです。ファイルをリソースとして使用できない場合は、代わりにデフォルトの最小設定が使用されます。この最小設定は jBPM ライブラリー (org/jbpm/default.jbpm.cfg.xml) に含まれています。 jBPM 設定ファイルが提供されている場合、そこに含まれる値がデフォルト値として使用されます。したがって、デフォルトの設定ファイルの値とは異なる値を指定するだけで済みます。
jBPM 設定は、org.jbpm.JbpmConfiguration と呼ばれる Java クラスによって表されます。これは、シングルトン インスタンスメソッド (JbpmConfiguration.getInstance()) を使用して取得します。
注記
別のソースから設定をロードするには、JbpmConfiguration.parseXxxx メソッドを使用します。
static JbpmConfinguration jbpmConfiguration = JbpmConfinguration.parseResource("my.jbpm.cfg.xml");
Copy to Clipboard Toggle word wrap
JbpmConfiguration は "スレッドセーフ" であるため、静的メンバー に保持できます。
すべてのスレッドは、JbpmContext オブジェクトの ファクトリー として JbpmConfiguration を使用できます。JbpmContext は通常、1 つのトランザクションを表します。これらは、次のような コンテキストブロック 内でサービスを利用できるようにします。
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
  // This is what we call a context block.
  // Here you can perform workflow operations

} finally {
  jbpmContext.close();
}
Copy to Clipboard Toggle word wrap
JbpmContext は、一連のサービスと構成設定の両方を Business Process Manager で使用できるようにします。サービスは、jbpm.cfg.xml ファイルの値によって設定されます。これらは、環境内で利用可能なあらゆるサービスを使用して、jBPM を任意の Java 環境で実行できるようにします。
JbpmContext のデフォルトの構成設定は次のとおりです。
<jbpm-configuration>

<jbpm-context>
    <service name='persistence'
      factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' />
    <service name='message'
      factory='org.jbpm.msg.db.DbMessageServiceFactory' />
    <service name='scheduler'
      factory='org.jbpm.scheduler.db.DbSchedulerServiceFactory' />
    <service name='logging'
      factory='org.jbpm.logging.db.DbLoggingServiceFactory' />
    <service name='authentication'
      factory=
'org.jbpm.security.authentication.DefaultAuthenticationServiceFactory' />
</jbpm-context>

<!-- configuration resource files pointing to default
     configuration files in jbpm-{version}.jar -->
<string name='resource.hibernate.cfg.xml' value='hibernate.cfg.xml' />
  
  <!-- <string name='resource.hibernate.properties'
       value='hibernate.properties' /> -->
  <string name='resource.business.calendar'
    value='org/jbpm/calendar/jbpm.business.calendar.properties' />
  <string name='resource.default.modules'
    value='org/jbpm/graph/def/jbpm.default.modules.properties' />
  <string name='resource.converter'
    value='org/jbpm/db/hibernate/jbpm.converter.properties' />
  <string name='resource.action.types'
    value='org/jbpm/graph/action/action.types.xml' />
  <string name='resource.node.types'
    value='org/jbpm/graph/node/node.types.xml' />
  <string name='resource.parsers'
    value='org/jbpm/jpdl/par/jbpm.parsers.xml' />
  <string name='resource.varmapping'
    value='org/jbpm/context/exe/jbpm.varmapping.xml' />
  <string name='resource.mail.templates' 
    value='jbpm.mail.templates.xml' />

  <int name='jbpm.byte.block.size' value="1024" singleton="true" />
  <bean name='jbpm.task.instance.factory' 
    class='org.jbpm.taskmgmt.impl.DefaultTaskInstanceFactoryImpl'
    singleton='true' />
    
  <bean name='jbpm.variable.resolver' 
    class='org.jbpm.jpdl.el.impl.JbpmVariableResolver'
    singleton='true' />
    
    <string name='jbpm.mail.smtp.host' value='localhost' />
    
    <bean name='jbpm.mail.address.resolver' 
        class='org.jbpm.identity.mail.IdentityAddressResolver' 
        singleton='true' />
    <string name='jbpm.mail.from.address' value='jbpm@noreply' />

    <bean name='jbpm.job.executor' 
        class='org.jbpm.job.executor.JobExecutor'>
      <field name='jbpmConfiguration'><ref bean='jbpmConfiguration' />
      </field>
      <field name='name'><string value='JbpmJobExecutor' /></field>
      <field name='nbrOfThreads'><int value='1' /></field>
      <field name='idleInterval'><int value='60000' /></field>
      <field name='retryInterval'><int value='4000' /></field>
      <!-- 1 hour -->
      <field name='maxIdleInterval'><int value='3600000' /></field> 
      <field name='historyMaxSize'><int value='20' /></field>
      <!-- 10 minutes -->
      <field name='maxLockTime'><int value='600000' /></field> 
      <!-- 1 minute -->
      <field name='lockMonitorInterval'><int value='60000' /></field> 
       <!-- 5 seconds -->
      <field name='lockBufferTime'><int value='5000' /></field>
    </bean>
</jbpm-configuration>
Copy to Clipboard Toggle word wrap
上記のファイルには、次の 3 つの部分が含まれています。
  1. JbpmContext を設定する一連の サービス実装。(可能な設定オプションは、特定のサービスの実装に関する章で詳しく説明されています。)
  2. 設定リソースへの参照をリンクするすべてのマッピング。設定ファイルの 1 つをカスタマイズする場合は、これらのマッピングを更新します。これを行うには、必ず最初にデフォルトの設定ファイル (jbpm-3.x.jar) をクラスパス上の別の場所にバックアップしてください。その後、jBPM が使用するカスタマイズされたバージョンを指すように、このファイルの参照を更新してください。
  3. jBPM で使用するためのさまざまな設定。(これらは、該当する特定のトピックに関する章で説明されています。)
デフォルト設定は、依存関係が最小限の単純な Web アプリケーション環境向けに最適化されています。永続性サービスは、他のすべてのサービスで使用される JDBC 接続を取得します。したがって、すべてのワークフロー操作は、JDBC 接続上の単一のトランザクションに配置されるため、一元化されます (トランザクションマネージャーは必要ありません)。
JbpmContext には、ほとんどの一般的なプロセス操作のための 便利なメソッド が含まれています。これらを次のコードサンプルに示します。
public void deployProcessDefinition(ProcessDefinition processDefinition)
public List getTaskList()
public List getTaskList(String actorId)
public List getGroupTaskList(List actorIds)
public TaskInstance loadTaskInstance(long taskInstanceId)
public TaskInstance loadTaskInstanceForUpdate(long taskInstanceId)
public Token loadToken(long tokenId)
public Token loadTokenForUpdate(long tokenId)
public ProcessInstance loadProcessInstance(long processInstanceId)
public ProcessInstance loadProcessInstanceForUpdate(long processInstanceId)
public ProcessInstance newProcessInstance(String processDefinitionName)
public void save(ProcessInstance processInstance)
public void save(Token token)
public void save(TaskInstance taskInstance)
public void setRollbackOnly()
Copy to Clipboard Toggle word wrap
注記
save メソッドを明示的に呼び出す必要はありません。XxxForUpdate メソッドは、ロードされたオブジェクトを "自動保存" に登録するように設計されているためです。
複数の jbpm-context を指定することができます。これを行うには、それぞれに一意の name 属性を指定する必要があります。(JbpmConfiguration.createContext(String name); を使用して、名前付きコンテキストを取得します。)
service 要素は、独自の名前と、関連する サービスファクトリー を指定します。このサービスは、JbpmContext.getServices().getService(String name) によって作成を要求された場合にのみ作成されます。
注記
ファクトリー は、属性ではなく 要素 として指定することもできます。これは、一部の設定情報をファクトリーオブジェクトに挿入するときに必要です。
オブジェクトの作成とワイヤリング、および XML の解析を担当するコンポーネントは、オブジェクトファクトリー と呼ばれることに注意してください。

3.1. ファクトリーのカスタマイズ

警告
ファクトリーをカスタマイズする際によく発生する間違いは、長い表記と短い表記を混在させることです。(短い表記の例は、デフォルトの設定ファイルで確認できます。)
Hibernate は、StateObjectStateException 例外をログに記録し、スタックトレース を生成します。後者を削除するには、org.hibernate.event.def.AbstractFlushingEventListenerFATAL に設定します。(log4j を使用している場合、削除するには設定に log4j.logger.org.hibernate.event.def.AbstractFlushingEventListener=FATAL 行を設定します。
&lt;service name='persistence' 
    factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' /&gt;
Copy to Clipboard Toggle word wrap
重要
サービスに関する特定のプロパティーを記述する必要がある場合は、長い表記しか使用できません。
<service name="persistence">
    <factory>
        <bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory">
            <field name="dataSourceJndiName">
                <string value="java:/myDataSource"/>
            </field>
            <field name="isCurrentSessionEnabled"><true /></field>
            <field name="isTransactionEnabled"><false /></field>
        </bean>
    </factory>
</service>
Copy to Clipboard Toggle word wrap

3.2. 設定プロパティー

jbpm.byte.block.size
添付ファイルとバイナリー変数は、固定サイズのバイナリーオブジェクトリストの形式でデータベースに格納されます。(これの目的は、異なるデータベース間の移植性を向上させることです。これにより、jBPM をより簡単に埋め込むこともできます。) このパラメーターは、これらの固定長チャンクのサイズを制御します。
jbpm.task.instance.factory
タスクインスタンスの作成方法をカスタマイズするには、このプロパティーに対して完全修飾クラス名を指定します。(これは、TaskInstance Bean をカスタマイズして新しいプロパティーを追加する場合に必要になることがよくあります。) 指定されたクラス名が org.jbpm.taskmgmt.TaskInstanceFactory インターフェイスを実装していることを確認してください。(詳細は、「 タスクインスタンスのカスタマイズ 」 を参照してください。)
jbpm.variable.resolver
これを使用して、"JSF" ライクな式に含まれる最初の用語を jBPM が検索する方法をカスタマイズします。
jbpm.class.loader
このプロパティーを使用して jBPM クラスをロードします。
jbpm.sub.process.async
このプロパティーを使用して、サブプロセスの非同期シグナリングを許可します。
jbpm.job.retries
この設定は、失敗したジョブを破棄するタイミングを決定します。設定ファイルを確認すれば、そのようなジョブを破棄する前に指定した回数だけ処理を試行するようにエントリーを設定できます。
jbpm.mail.from.address
このプロパティーは、ジョブがどこから来たかを表示します。デフォルトは jbpm@noreply です。

3.3. その他の設定ファイル

jBPM には、カスタマイズ可能な多数の設定ファイルがあります。
hibernate.cfg.xml
これには、Hibernate マッピングリソースファイルへの参照と設定の詳細が含まれます。
jBPM が使用する hibernate.cfg.xml ファイルを変更するには、jbpm.cfg.xml ファイルで次のプロパティーを設定します。
<string name="resource.hibernate.cfg.xml" value="new.hibernate.cfg.xml"/> jbpm.cfg.xml ファイルは、${soa.home}/jboss-as/server/${server.config}/jbpm.esb にあります。
org/jbpm/db/hibernate.queries.hbm.xml
このファイルには、jBPM セッション (org.jbpm.db.*Session) で使用される Hibernate クエリーが含まれています。
org/jbpm/graph/node/node.types.xml
このファイルは、XML ノード要素を Node 実装クラスにマップするために使用されます。
org/jbpm/graph/action/action.types.xml
このファイルは、XML アクション要素を Action 実装クラスにマップするために使用されます。
org/jbpm/calendar/jbpm.business.calendar.properties
これには、"業務時間" と "自由時間" の定義が含まれています。
org/jbpm/context/exe/jbpm.varmapping.xml
これは、プロセス変数の値 (Java オブジェクト) を変数インスタンスに変換して jBPM データベースに保存する方法を指定します。
org/jbpm/db/hibernate/jbpm.converter.properties
これは、id-to-classname マッピングを指定します。id はデータベースに格納されます。org.jbpm.db.hibernate.ConverterEnumType クラスは、識別子を シングルトン オブジェクトにマップするために使用されます。
org/jbpm/graph/def/jbpm.default.modules.properties
これは、新しい ProcessDefinition にデフォルトで追加するモジュールを指定します。
org/jbpm/jpdl/par/jbpm.parsers.xml
これは、プロセスアーカイブ解析 のフェーズを指定します。

3.4. 楽観的な並行処理の例外のロギング

jBPM をクラスター設定で実行すると、jBPM は 楽観的ロック を使用してデータベースと同期します。これは、各操作をトランザクションで実行し、最後に競合が検出された場合、そのトランザクションをロールバックし、再試行して処理する必要があることを意味します。これにより、org.hibernate.StateObjectStateException 例外が発生することがあります。これが発生した場合、Hibernate は単純なメッセージで例外をログに記録します。
optimistic locking
            failed
Copy to Clipboard Toggle word wrap
.
Hibernate は、スタックトレース付きで StateObjectStateException をログに記録することもできます。これらのスタックトレースを削除するには、org.hibernate.event.def.AbstractFlushingEventListener クラスを FATAL に設定します。次の設定を使用して、log4j でこれを行います。
log4j.logger.org.hibernate.event.def.AbstractFlushingEventListener=FATAL
Copy to Clipboard Toggle word wrap
jBPM スタックトレースをログに記録するには、パッケージのログカテゴリーのしきい値を ERROR より上に設定します。

3.5. オブジェクトファクトリー

オブジェクトファクトリー は、"Bean ライク" な XML 設定ファイルに含まれる仕様に合わせてオブジェクトを構築できます。このファイルは、完全なオブジェクトグラフを形成するためにオブジェクトを作成、設定、およびワイヤリングする方法を指示します。また、オブジェクトファクトリーを使用して、設定と他の Bean を単一の Bean に注入します。
以下の例に示すように、最も基本的な形式では、オブジェクトファクトリーはそのような設定から基本 と Java Bean の両方を作成できます。
<beans>
    <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance"/>
    <string name="greeting">hello world</string>
    <int name="answer">42</int>
    <boolean name="javaisold">true</boolean>
    <float name="percentage">10.2</float>
    <double name="salary">100000000.32</double>
    <char name="java">j</char>
    <null name="dusttodust" />
</beans>
Copy to Clipboard Toggle word wrap
ObjectFactory of = ObjectFactory.parseXmlFromAbove();
assertEquals(TaskInstance.class, of.getNewObject("task").getClass());
assertEquals("hello world", of.getNewObject("greeting"));
assertEquals(new Integer(42), of.getNewObject("answer"));
assertEquals(Boolean.TRUE, of.getNewObject("javaisold"));
assertEquals(new Float(10.2), of.getNewObject("percentage"));
assertEquals(new Double(100000000.32), of.getNewObject("salary"));
assertEquals(new Character('j'), of.getNewObject("java"));
assertNull(of.getNewObject("dusttodust"));]]>
Copy to Clipboard Toggle word wrap
このコードは、リストを設定する方法を示しています。
<beans>
    <list name="numbers">
        <string>one</string>
        <string>two</string>
        <string>three</string>
    </list>
</beans>
Copy to Clipboard Toggle word wrap
このコードは、マップを設定する方法を示しています。
<beans>
    <map name="numbers">
        <entry>
            <key><int>1</int></key>
            <value><string>one</string></value>
        </entry>
        <entry>
            <key><int>2</int></key>
            <value><string>two</string></value>
        </entry>
        <entry>
            <key><int>3</int></key>
            <value><string>three</string></value>
        </entry>
    </map>
</beans>
Copy to Clipboard Toggle word wrap
ダイレクトフィールドインジェクション とプロパティーの setter メソッドを使用して、Bean を設定します。
<beans>
    <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance" >
        <field name="name"><string>do dishes</string></field>
        <property name="actorId"><string>theotherguy</string></property>
    </bean>
</beans>
Copy to Clipboard Toggle word wrap
Bean を参照できます。参照されるオブジェクトは、Bean 自体である必要はありません。文字列や整数など、必要なものを参照できます。
<beans>
    <bean name="a" class="org.jbpm.A" />
    <ref name="b" bean="a" />
</beans>
Copy to Clipboard Toggle word wrap
次のコードが示すように、Bean は任意のコンストラクターで構築できます。
<beans>
    <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance" >
        <constructor>
            <parameter class="java.lang.String">
                <string>do dishes</string>
            </parameter>
            <parameter class="java.lang.String">
                <string>theotherguy</string>
            </parameter>
        </constructor>
    </bean>
</beans>
Copy to Clipboard Toggle word wrap
Bean は、factory メソッドを使用して構築できます。
<beans>
    <bean name="taskFactory" 
        class="org.jbpm.UnexistingTaskInstanceFactory" 
        singleton="true"/>

    <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance" >
        <constructor factory="taskFactory" method="createTask" >
            <parameter class="java.lang.String">
                <string>do dishes</string>
            </parameter>
            <parameter class="java.lang.String">
                <string>theotherguy</string>
            </parameter>
        </constructor>
    </bean>
</beans>
Copy to Clipboard Toggle word wrap
Bean は、クラスの static factory メソッドを使用して構築できます。
<beans>
    <bean name="task" class="org.jbpm.taskmgmt.exe.TaskInstance" >
        <constructor
            factory-class="org.jbpm.UnexistingTaskInstanceFactory"
            method="createTask" >
            <parameter class="java.lang.String">
                <string>do dishes</string>
            </parameter>
            <parameter class="java.lang.String">
                <string>theotherguy</string>
            </parameter>
        </constructor>
    </bean>
</beans>
Copy to Clipboard Toggle word wrap
属性 singleton="true" を使用して、名前付きの各オブジェクトを シングルトン としてマークします。そうすることで、特定の オブジェクトファクトリー が各リクエストに対して常に同じオブジェクトを返すようになります。
注記
シングルトン は、異なるオブジェクトファクトリー間で共有できません。
シングルトン 機能は、getObjectgetNewObject というメソッドの区別を生み出します。通常は、getNewObject を使用する必要があります。これを使用すると、新しいオブジェクトグラフを構築する前に、オブジェクトファクトリーオブジェクトキャッシュ がクリアされるためです。
オブジェクトグラフの構築時に、非シングルトンオブジェクト は、オブジェクトファクトリー のキャッシュに格納されます。これにより、1 つのオブジェクトへの参照を共有できます。シングルトンオブジェクトキャッシュプレーンオブジェクトキャッシュ とは異なることに注意してください。シングルトン キャッシュは決してクリアされませんが、プレーンキャッシュは getNewObject メソッドが開始されるたびにクリアされます。
この章では、jBPM のさまざまな設定方法について詳しく説明しました。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat