第5章 Java EE アプリケーションサーバーの機能


この章でが、jBPM が提供する、Java EE インフラストラクチャーを活用するために使用できる機能を説明します。

5.1. エンタープライズ Bean

CommandServiceBeanステートレスセッション Bean であり、別の jBPM コンテキスト内の execute メソッドを呼び出すことにより、Business Process Manager コマンドを実行します。使用可能な環境エントリーとカスタマイズ可能なリソースを次の表にまとめます。
Expand
表5.1 コマンドサービス Bean 環境
名前 タイプ 説明
JbpmCfgResource 環境エントリー これは、jBPM 設定の読み取り元となるクラスパスリソースです。オプションであり、デフォルトは jbpm.cfg.xml です。
ejb/TimerEntityBean EJB 参照 これは、スケジューラーサービスを実装するローカルエンティティー Bean へのリンクです。タイマーを含むプロセスに必要です。
jdbc/JbpmDataSource リソースマネージャー参照 これは、jBPM 永続性サービスへの JDBC 接続を提供するデータソースの論理名です。Hibernate 設定ファイルの hibernate.connection.datasource プロパティーと一致する必要があります。
jms/JbpmConnectionFactory リソースマネージャー参照 これは、JMS 接続を jBPM メッセージサービスに提供するファクトリーの論理名です。非同期継続を含むプロセスに必要です。
jms/JobQueue メッセージ宛先参照 jBPM メッセージサービスは、ジョブメッセージをこのキューに送信します。ジョブリスナー Bean のメッセージ受信元のキューとこのキューが必ず同じになるように、message-destination-link は共通の論理宛先である JobQueue を参照します。
jms/CommandQueue メッセージ宛先参照 コマンドリスナー Bean は、このキューからメッセージを受信します。コマンドメッセージ送信先のキューとこのキューが必ず同じになるように、message-destination-link 要素は共通の論理宛先である CommandQueue を参照します。
CommandListenerBean は、コマンドメッセージの CommandQueue をリッスンするメッセージ駆動型 Bean です。この Bean は、コマンドの実行を CommandServiceBean に委譲します。
メッセージの本文は、org.jbpm.Command インターフェイスを実装できる Java オブジェクトでなければなりません。(メッセージプロパティーがある場合は無視されます。) メッセージが想定される形式でない場合、メッセージは DeadLetterQueue に転送され、それ以上処理されません。宛先参照が存在しない場合も、メッセージは拒否されます。
受信したメッセージで宛先 replyTo が指定されている場合、コマンド実行結果が オブジェクトメッセージ にラップされて送信されます。
コマンド接続ファクトリー環境参照 は、Java Message Service 接続を提供するために使用されるリソースマネージャーを参照します。
逆に、JobListenerBean は、非同期継続 をサポートするために、ジョブメッセージの JbpmJobQueue をリッスンするメッセージ駆動型 Bean です。
注記
メッセージには、long 型の jobId というプロパティーが必要であることに注意してください。このプロパティには、データベース内にある保留中の Job への参照が含まれている必要があります。メッセージ本文が存在する場合、それは無視されます。
この Bean は CommandListenerBean を拡張します。後者の環境エントリーとカスタマイズ可能なそのリソース参照を継承します。
Expand
表5.2 コマンド/ジョブリスナー Bean 環境
名前 タイプ 説明
ejb/LocalCommandServiceBean EJB 参照 これは、別の jBPM コンテキストでコマンドを実行するローカルセッション Bean へのリンクです。
jms/JbpmConnectionFactory リソースマネージャー参照 これは、結果メッセージを生成するための Java Message Service 接続を提供するファクトリーの論理名です。返信先を示すコマンドメッセージに必要です。
jms/DeadLetterQueue メッセージ宛先参照 コマンドを含まないメッセージは、ここで参照されているキューに送信されます。これはオプションです。これがない場合、そのようなメッセージは拒否され、コンテナーが再配信されることがあります。
-   
メッセージ宛先参照 コマンドを含まないメッセージは、ここで参照されているキューに送信されます。これがない場合、そのようなメッセージは拒否され、コンテナーが再配信されることがあります。 
TimerEntityBean は、Enterprise Java Bean タイマーサービス でスケジューリングに使用されます。Bean の有効期限が切れると、タイマーの実行が command service Bean に委譲されます。
TimerEntityBean は、Business Process Manager のデータソースへのアクセスを必要とします。Enterprise Java Bean デプロイメント記述子は、エンティティー Bean をデータベースにマップする方法を定義しません。(これはコンテナー提供者に任されています。) JBoss Application Server では、jbosscmp-jdbc.xml 記述子が、データソースの JNDI 名とリレーショナルマッピングデータ (テーブル名や列名など) を定義します。
注記
JBoss CMP (コンテナー管理永続性) 記述子は、リソースマネージャー参照 (java:comp/env/jdbc/JbpmDataSource) とは異なり、グローバル JNDI 名 (java:JbpmDS) を使用します。
注記
以前のバージョンの Business Process Manager は、TimerServiceBean というステートレスセッション Bean を使用して、Enterprise Java Bean タイマーサービスと対話していました。セッション方式は、cancelation メソッドのボトルネックが避けられなかったため、断念せざるを得ませんでした。セッション Bean には ID がないため、タイマーサービスは すべて のタイマーをイテレートして、キャンセルする必要のあるタイマーを見つける必要がありました。
この Bean は、下位互換性を確保する目的で引き続き使用できます。TimerEntityBean と同じ環境で動作するため、移行が容易です。
Expand
表5.3 タイマーエンティティー/サービス Bean 環境
名前 タイプ 説明
ejb/LocalCommandServiceBean EJB 参照 これは、別の jBPM コンテキストでタイマーを実行するローカルセッション Bean へのリンクです。

5.2. 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>
Copy to Clipboard Toggle word wrap
JtaDbPersistenceServiceFactory により、Business Process Manager は JTA トランザクションに参加できます。既存のトランザクションが進行中の場合、JTA 永続性サービスはそれを "保持" します。そうでない場合は、新しいトランザクションを開始します。Business Process Manager のエンタープライズ Bean は、トランザクション管理をコンテナーに委譲するように設定されています。ただし、トランザクションがアクティブでない環境 (Web アプリケーションなど) で JbpmContext を作成すると、新しいトランザクションが自動的に開始されます。 JTA 永続性サービスファクトリー には、以下で説明する設定可能なフィールドが含まれています。
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 は Hibernatetransaction API を介してトランザクションを開始し、JbpmConfiguration.createJbpmContext() メソッドを使用してトランザクションをコミットします。(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 インターフェイスを通じて公開される信頼性の高い通信インフラストラクチャーを利用して、非同期継続メッセージJobListenerBean に配信します。JmsMessageServiceFactory は、次の設定可能なフィールドを公開します。
connectionFactoryJndiName
これは、JNDI 初期コンテキストでの JMS 接続ファクトリーの名前です。デフォルトは java:comp/env/jms/JbpmConnectionFactory です。
destinationJndiName
これは、ジョブメッセージ送信先の JMS 宛先の名前です。これは、JobListenerBean がメッセージを受信する宛先と一致する必要があります。デフォルトは java:comp/env/jms/JobQueue です。
isCommitEnabled
これは、Business Process Manager が JbpmContext.close() で Java Message Service セッションをコミットする必要があるかどうかを指定します。JMS メッセージサービスによって生成されたメッセージは、現在のトランザクションがコミットされる前に受信されることを意図したものではありません。そのため、このサービスによって作成されたセッションは、常にトランザクション処理されます。デフォルト値は false です。これは、使用中の 接続ファクトリー が XA 対応である場合に適しています。Java Message Service セッションによって生成されるメッセージは、JTA トランザクション全体によって制御されるためです。JMS 接続ファクトリーが XA 対応でない場合は、Business Process Manager が JMS セッションのローカルトランザクションを明示的にコミットするように、このフィールドを true に設定する必要があります。
EntitySchedulerServiceFactory は、ビジネスプロセスタイマーをスケジュールするために使用されます。これは、Enterprise Java Bean コンテナーによって提供される時間指定イベントのトランザクション通知サービスに基づいて構築することによって行われます。EJB スケジューラーサービスファクトリー には、以下で説明する設定可能なフィールドがあります。
timerEntityHomeJndiName
これは、JNDI 初期コンテキストでの TimerEntityBean のローカルホームインターフェイスの名前です。デフォルト値は java:comp/env/ejb/TimerEntityBean です。

5.3. Hibernate エンタープライズ設定

hibernate.cfg.xml ファイルには、次の設定項目が含まれています。他のデータベースまたはアプリケーションサーバーをサポートするには、これらを変更します。
<!-- sql dialect -->
<property name="hibernate.dialect">
    org.hibernate.dialect.HSQLDialect
</property>

<property name="hibernate.cache.provider_class">
  org.hibernate.cache.HashtableCacheProvider
</property>

<!-- DataSource properties (begin) -->
<property name="hibernate.connection.datasource">
    java:comp/env/jdbc/JbpmDataSource
</property>
<!-- DataSource properties (end) -->

<!-- JTA transaction properties (begin) -->
<property name="hibernate.transaction.factory_class">
  org.hibernate.transaction.JTATransactionFactory
</property>
<property name="hibernate.transaction.manager_lookup_class">
  org.hibernate.transaction.JBossTransactionManagerLookup
</property>
<!-- JTA transaction properties (end) -->

<!-- CMT transaction properties (begin) ===
<property name="hibernate.transaction.factory_class">
  org.hibernate.transaction.CMTTransactionFactory
</property>
<property name="hibernate.transaction.manager_lookup_class">
  org.hibernate.transaction.JBossTransactionManagerLookup
</property>
==== CMT transaction properties (end) -->
Copy to Clipboard Toggle word wrap
hibernate.dialect 設定は、お使いのデータベース管理システムに適した設定に置き換えます。(詳細は、http://www.hibernate.org/hib_docs/v3/reference/en/html/session-configuration.html#configuration-optional-dialects を参照してください。)
HashtableCacheProvider は、サポートされている他のキャッシュプロバイダーに置き換えることができます。(詳細は、http://www.hibernate.org/hib_docs/v3/reference/en/html/performance.html#performance-cache を参照してください。)
初期状態で、jBPM は JTATransactionFactory を使用するように設定されています。既存のトランザクションが進行中の場合、JTA トランザクションファクトリーはそれを使用します。それ以外の場合は、新しいトランザクションが作成されます。jBPM のエンタープライズ Bean は、トランザクション管理をコンテナーに委譲するように設定されています。ただし、アクティブなトランザクションがないコンテキスト (Web アプリケーションなど) で jBPM API が使用されている場合、トランザクションが自動的に開始されます。
コンテナー管理トランザクション を使用するときに意図しないトランザクションが作成されるのを防ぐには、CMTTransactionFactory に切り替えます。この設定により、Hibernate が常に既存のトランザクションを探し、見つからない場合は問題を報告するようになります。

5.4. クライアントコンポーネント

エンタープライズサービスを活用できる Business Process Manager API に対して直接記述されたクライアントコンポーネントのデプロイメント記述子に対して、適切な環境参照が設定されていることを確認してください。以下の記述子は、クライアントセッション Bean の典型的なものと見なすことができます。
<session>

  <ejb-name>MyClientBean</ejb-name>
  <home>org.example.RemoteClientHome</home>
  <remote>org.example.RemoteClient</remote>
  <local-home>org.example.LocalClientHome</local-home>
  <local>org.example.LocalClient</local>
  <ejb-class>org.example.ClientBean</ejb-class>
  <session-type>Stateless</session-type>
  <transaction-type>Container</transaction-type>

  <ejb-local-ref>
    <ejb-ref-name>ejb/TimerEntityBean</ejb-ref-name>
    <ejb-ref-type>Entity</ejb-ref-type>
    <local-home>org.jbpm.ejb.LocalTimerEntityHome</local-home>
    <local>org.jbpm.ejb.LocalTimerEntity</local>
  </ejb-local-ref>

  <resource-ref>
    <res-ref-name>jdbc/JbpmDataSource</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

  <resource-ref>
    <res-ref-name>jms/JbpmConnectionFactory</res-ref-name>
    <res-type>javax.jms.ConnnectionFactory</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

  <message-destination-ref>
    <message-destination-ref-name>
        jms/JobQueue
    </message-destination-ref-name>
    <message-destination-type>javax.jms.Queue</message-destination-type>
    <message-destination-usage>Produces</message-destination-usage>
  </message-destination-ref>

</session>
Copy to Clipboard Toggle word wrap
上記の環境参照は、次のようにターゲット運用環境のリソースにバインドできます。JNDI 名は、Business Process Manager エンタープライズ Bean で使用される値と一致することに注意してください。
<session>

  <ejb-name>MyClientBean</ejb-name>
  <jndi-name>ejb/MyClientBean</jndi-name>
  <local-jndi-name>java:ejb/MyClientBean</local-jndi-name>

  <ejb-local-ref>
    <ejb-ref-name>ejb/TimerEntityBean</ejb-ref-name>
    <local-jndi-name>java:ejb/TimerEntityBean</local-jndi-name>
  </ejb-local-ref>

  <resource-ref>
    <res-ref-name>jdbc/JbpmDataSource</res-ref-name>
    <jndi-name>java:JbpmDS</jndi-name>
  </resource-ref>

  <resource-ref>
    <res-ref-name>jms/JbpmConnectionFactory</res-ref-name>
    <jndi-name>java:JmsXA</jndi-name>
  </resource-ref>

  <message-destination-ref>
    <message-destination-ref-name>
        jms/JobQueue
    </message-destination-ref-name>
    <jndi-name>queue/JbpmJobQueue</jndi-name>
  </message-destination-ref>

</session>
Copy to Clipboard Toggle word wrap
クライアントコンポーネントがエンタープライズ Bean ではなく Web アプリケーションである場合、デプロイメント記述子は次のようになります。
<web-app>

  <servlet>
    <servlet-name>MyClientServlet</servlet-name>
    <servlet-class>org.example.ClientServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>MyClientServlet</servlet-name>
    <url-pattern>/client/servlet</url-pattern>
  </servlet-mapping>

  <ejb-local-ref>
    <ejb-ref-name>ejb/TimerEntityBean</ejb-ref-name>
    <ejb-ref-type>Entity</ejb-ref-type>
    <local-home>org.jbpm.ejb.LocalTimerEntityHome</local-home>
    <local>org.jbpm.ejb.LocalTimerEntity</local>
    <ejb-link>TimerEntityBean</ejb-link>
  </ejb-local-ref>

  <resource-ref>
    <res-ref-name>jdbc/JbpmDataSource</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

  <resource-ref>
    <res-ref-name>jms/JbpmConnectionFactory</res-ref-name>
    <res-type>javax.jms.ConnectionFactory</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

  <message-destination-ref>
    <message-destination-ref-name>
        jms/JobQueue
    </message-destination-ref-name>
    <message-destination-type>javax.jms.Queue</message-destination-type>
    <message-destination-usage>Produces</message-destination-usage>
    <message-destination-link>JobQueue</message-destination-link>
  </message-destination-ref>

</web-app>
Copy to Clipboard Toggle word wrap
上記の環境参照は、次のコードサンプルのとおり、ターゲット運用環境のリソースにバインドすることもできます。
<jboss-web>

  <ejb-local-ref>
    <ejb-ref-name>ejb/TimerEntityBean</ejb-ref-name>
    <local-jndi-name>java:ejb/TimerEntityBean</local-jndi-name>
  </ejb-local-ref>

  <resource-ref>
    <res-ref-name>jdbc/JbpmDataSource</res-ref-name>
    <jndi-name>java:JbpmDS</jndi-name>
  </resource-ref>

  <resource-ref>
    <res-ref-name>jms/JbpmConnectionFactory</res-ref-name>
    <jndi-name>java:JmsXA</jndi-name>
  </resource-ref>

  <message-destination-ref>
    <message-destination-ref-name>
        jms/JobQueue
    </message-destination-ref-name>
    <jndi-name>queue/JbpmJobQueue</jndi-name>
  </message-destination-ref>

</jboss-web>
Copy to Clipboard Toggle word wrap

5.5. まとめ

この章では、Java EE インフラストラクチャーを活用するために使用できる jBPM によって提供される機能を詳しく説明しました。本章の説明をもとに、お客様の企業環境でこれらをテストすることをお勧めします。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat