5.2. JBPM エンタープライズ設定

jBPM 設定は、jbpm.cfg.xml に含まれています。
<jbpm-context>
  <service name="persistence"
    factory="org.jbpm.persistence.jta.JtaDbPersistenceServiceFactory" />
  <service name="message"
    factory="org.jbpm.msg.jms.JmsMessageServiceFactory" />
  <service name="scheduler"
    factory="org.jbpm.scheduler.ejbtimer.EntitySchedulerServiceFactory" />
</jbpm-context>
JtaDbPersistenceServiceFactory は、Business Process Manager がJTAトランザクションに参加できるようにします。既存のトランザクションがある場合は、JTAの永続サービスがそのトランザクションに「紐付け」されますが、そうでない場合は新規トランザクションが開始されます。Business Process Manager のエンタープライズ bean はトランザクション管理をコンテナに委譲するよう設定されます。ただし、(Web アプリケーションなど) 有効なトランザクションがない環境においてJbpmContext を作成する場合、新規トランザクションが自動的に開始されます。JTA persistence service factory には、下記の設定可能なフィールドが含まれます。
isCurrentSessionEnabled
これがtrueに設定されている場合、Business Process Manager は、作動中のJTAトランザクションに関連付いた現在のHibernate セッションを使います。これはデフォルト設定です (詳細は http://www.hibernate.org/hib_docs/v3/reference/en/html/architecture.html#architecture-current-session を参照してください)。
コンテキストセッションの仕組みを活用しアプリケーションの別の箇所で JBPMと同じセッションを使います。これは SessionFactory.getCurrentSession() への呼び出しを使うことで実行します。または、isCurrentSessionEnabledfalse に設定し、JbpmContext.setSession(session) メソッドを使い当セッションを投入することで、JBPM へ Hibernate セッションを提供します。これにより、JBPM が同アプリケーションの他の部分と同じHibernate セッションを使うようにします。

注記

Hibernate セッションは (永続コンテキストなどを使い) ステートレスセッション bean に注入可能です。
isTransactionEnabled
これが true に設定されると、JBPMは JbpmConfiguration.createJbpmContext() メソッドを使いコミットさせることで、Hibernatetransaction API からトランザクションを開始します(JbpmContext.close()が呼び出されると Hibernate セッションは終了します)。

警告

Business Process Manager がEARとしてデプロイされている、つまりisTransactionEnabledがデフォルトでfalse に設定されている場合、これは望ましい動作ではありません(詳細はhttp://www.hibernate.org/hib_docs/v3/reference/en/html/transactions.html#transactions-demarcation を参照してください)。
JmsMessageServiceFactory は、Java Message Service インターフェースで公開された信頼性のある通信インフラストラクチャーを活用することで、asynchronous continuation messagesJobListenerBean に配信します。JmsMessageServiceFactoryは以下の設定可能なフィールドを公開します。
connectionFactoryJndiName
JNDIの初期コンテキストでのJMS 接続ファクトリ名で、デフォルトはjava:comp/env/jms/JbpmConnectionFactoryとなっています。
destinationJndiName
ジョブメッセージが送信されるJMSの宛て先名で、JobListenerBean のメッセージ受信元と一致します。デフォルトはjava:comp/env/jms/JobQueueとなっています。
isCommitEnabled
Business Process Manager がJava Message Service セッションをJbpmContext.close()時にコミットすべきか指定します。JMSメッセージサービスが作成するメッセージは、現在のトランザクションがコミットする前に受信されるべきではありません。そのため、このサービスが作成したセッションは常に処理されます。デフォルト値は falseですが、JTAトランザクション全体でJava Message Service セッションが制御されているため、使用中のconnection factoryがXA対応である場合に適しています。反対に、JMS接続ファクトリがXA対応でない場合、このフィールドをtrueに設定し、Business Process Manager がJMSセッションのローカルトランザクションを明示的にコミットするようにしてください。
EntitySchedulerServiceFactory を使いビジネスプロセスタイマーをスケジュールします。Enterprise Java Bean コンテナ提供の予定イベントに対してトランザクション通知サービス上に構築することで行います。EJBscheduler service factoryには、以下のような設定可能なフィールドがあります。
timerEntityHomeJndiName
JNDI初期コンテキストにおけるTimerEntityBeanのローカルホームインターフェース名で、デフォルト値はjava:comp/env/ejb/TimerEntityBeanとなっています。