このマニュアルでは、BPEL サービスエンジンの概要を説明し、JBI プロジェクトでサービスエンジンを設定および配備するために必要な詳細について記述します。BPEL サービスエンジンは、WS-BPEL 2.0 (または単に BPEL) 準拠のビジネスプロセスを実行するためのサービスを提供する、JSR 208 準拠の JBI ランタイムコンポーネントです。WS-BPEL 2.0 (Web Services Business Process Execution Language) は、ビジネスプロセスのプログラムに使用される XML ベースの言語です。
BPEL デザイナを使用した BPEL プロセスの作成と編集については、「Developer Guide to the BPEL Designer」を参照してください。
詳細は、Java CAPS の Web サイト http://goldstar.stc.com/support を参照してください。
必要な知識
次のトピックでは、BPEL サービスエンジンの概要と概念について説明します。
必要な作業
次のトピックでは、プロジェクトで BPEL サービスエンジンを設定および使用する手順について説明します。
追加情報
次のトピックでは、BPEL サービスエンジンの使用に関する追加情報について説明します。
BPEL サービスエンジンは、BPEL プロセスを配備するための実行時サービスを提供します。BPEL サービスエンジンは、WS-BPEL 2.0 (または単に BPEL) 準拠のビジネスプロセスを実行するために使用されます。WS-BPEL 2.0 (Web Services Business Process Execution Language) は、ビジネスプロセスのプログラムに使用される XML ベースの言語です。
通常、ビジネスプロセスには、プロセスと、「パートナーサービス」と呼ばれるほかの Web サービスとのメッセージ交換 (「オーケストレーション」) が伴います。ビジネスプロセスとパートナーサービスの間の規約は WSDL 1.1 に記述されています。ビジネスプロセスとパートナーサービスの間のメッセージ交換は、JBI 仕様の定義に従って WSDL 1.1 メッセージラッパーにラップされ、JBI 正規化メッセージルーター (NMR) によってルーティングされます。NMR は、ローカルの JVM 上にはない外部 Web サービスと、バインディングコンポーネントを介して対話します。バインディングコンポーネントは、プロトコル固有の詳細をカプセル化します。BPEL サービスエンジンと同じ場所にある EJB または Web コンポーネントの間のトランザクションは、Java EE サービスエンジンを介して処理されます。
WS-BPEL 2.0 では、いくつかの XML 仕様が使用されます。WSDL 1.1、XML スキーマ 1.0、XPath 1.0、および XSLT 1.0 です。JBI 仕様は WSDL 2.0 を対象としており、ラッパーを定義することによって WSDL 1.1 にも対応できます。
BPEL サービスエンジンは、WSDL 1.1 で定義されている片方向の要求-応答オペレーションを、2 者以上が関連するステートフルな長期間の対話の中でサポートします。非同期の要求-応答は 2 つの片方向オペレーションを使用して実現されます。1 つはパートナーによって実装され、もう 1 つはビジネスプロセスによって相関を使用して実装されます。
BPEL エディタでは、ユーザーが BPEL プロジェクトの構築や編集、BPEL サービスエンジンへのプロジェクトの配備、および BPEL サービスのテストを行うことができるように、使いやすいインタフェースが提供されています。BPEL サービスエンジンにはほとんどのコンストラクトが実装されています。実装されていないコンストラクトは、ほとんど使用されることはありません。
BPEL サービスエンジンは、NetBeans IDE 6.1 の一部として SOA および Project Open ESB にバンドルされています。これらのコンポーネントは、Sun Developer Network (http://java.sun.com/downloads/) からダウンロードできます。
BPEL サービスエンジンでは次の機能がサポートされています。
標準の JBI 1.0 エンジンコンポーネント
BPEL 2.0 のサポート。詳細は、「BPEL 2.0 言語構造」を参照
WSDL 1.1 を使用して定義されている Web サービスの提供および消費
ラップされた WSDL 1.1 メッセージパート用に JBI で定義された XML ドキュメント形式でのメッセージの交換
エンドポイント状態監視の実装
複数スレッドの実行のサポート
ビジネスプロセスのデバッグのサポート
システム障害から信頼性の高い復旧を行うためのビジネスプロセスインスタンスでのデータベース持続性サポート
クラスタ化した場合の負荷分散とフェイルオーバーのサポート
BPEL サービスエンジンの実行時プロパティーは、NetBeans IDE から、あるいはインストール中にコマンドプロンプト (コマンド行インタフェース) から設定できます。
BPEL サービスエンジンの実行時プロパティーへのアクセス
NetBeans IDE でプロパティーを表示または編集するには、次の手順を実行します。
NetBeans IDE の「サービス」タブで、「サーバー」ノードを展開します。
GlassFish v2 など、使用しているアプリケーションサーバーを起動します。そのためには、アプリケーションサーバーを右クリックし、ショートカットメニューから「開始」を選択します。
アプリケーションサーバーの下で、「JBI」->「サービスエンジン」ノードを展開し、「BPEL サービスエンジン」を選択します。現在の BPEL サービスエンジンのプロパティーが NetBeans IDE の右側に表示されます。「BPEL サービスエンジン」をダブルクリックしてプロパティーウィンドウを開くこともできます。
必要に応じてプロパティーを編集します。加えた変更を BPEL サービスエンジンの実行時プロパティーに適用するには、BPEL サービスエンジンを停止してから再起動します。
次の表では、BPEL サービスエンジンの実行時プロパティーについて説明します。
BPEL サービスエンジンでビジネスプロセスを実行するには、次のアーティファクトが必要です。
BPEL ドキュメント: 実行するアクティビティーの順序を定義します。
WSDL ドキュメント: ビジネスプロセスとパートナーサービスの間の規約を定義します。
省略可能な XSD: 交換される XML ドキュメントを定義します。XSD は WSDL ドキュメント内にインラインで定義できます。
内部/外部パートナーサービスの要件に基づき、これらのアーティファクトはサービスユニット内にパッケージ化され、このサービスユニットはほかの JBI コンポーネントのサービスユニットとともにサービスアセンブリ内にパッケージ化されます。
NetBeans IDE で提供されている Ant スクリプトを使用して、サービスアセンブリとサービスユニットを JBI ランタイムコンポーネントおよび対応するコンポーネントに配備できます。JBI DeploymentServiceMBean は配備記述子 jbi.xml を解釈し、サービスユニットを関連するコンポーネントに配備します。
システム障害が発生した場合のビジネスプロセスデータの完全性を確保するために、ビジネスプロセスデータがデータベースで持続されるように BPEL サービスエンジンを設定することができます。BPEL の持続性が有効になっている場合、BPEL サービスエンジンはビジネスプロセスデータを復旧し (持続性が有効でない場合はデータは失われる)、システム障害が発生したポイントから処理を続行します。
BPEL サービスエンジンは Sun Java System Application Server (GlassFish) に作成された JDBC リソースを使用して、持続性に必要なデータベース接続を作成します。NetBeans は JavaDB データベースにバンドルされています。これは、オープンソースの Apache Derby データベースの、Sun がサポートしている配布です。BPEL サービスエンジンは、デフォルトで JavaDB データベースに接続するように設定されています。
BPEL サービスエンジンでは、サポートされている Oracle データベースへの接続を使用してデータを持続することもできます。Oracle データベースを作成して接続するには、「Oracle 用 JDBC 接続プールの作成」および「Oracle 用 JDBC リソースの作成」を参照してください。
この節の内容は次のとおりです。
BPEL の持続性の詳細については、「Using BPEL Persistence」を参照してください。
ここでは、JavaDB 用 JDBC 接続プールを作成する手順について説明します。
Web ブラウザで、Sun Java System Application Server の管理コンソールにログインします。次に例を示します。
http://localhost:4848, username:admin, password: adminadmin
ナビゲーションツリーで、「リソース」->「JDBC」ノードを展開します。
「接続プール」を選択し、右のパネルで「新規」ボタンをクリックします。
「一般設定」で、名前を指定します (bpelseDB など)。
「リソースタイプ」を javax.sql.XADatasource に設定します。
データベースベンダーを Derby に設定し、「次へ」をクリックします。
「接続検証」の下で、「有効」チェックボックスを選択して「コンポーネント以外の呼び出し側を許可」を有効にします。
「追加のプロパティー」で、サーバー名、ユーザー、パスワード、およびデータベース名を指定します。
次の値を使用するか、独自のユーザー、パスワード、およびデータベース名 (create=true フラグを保持) を選択することができます。
サーバー名: machine-name
データベース名: DatabaseName: bpelseDB;create=true
ユーザー: bpelse_user
パスワード: bpelse_user
「完了」をクリックし、接続プール名をクリックしてから「Ping」ボタンをクリックします。
これによってデータベース接続が検証されます。
「完了」をクリックして、新しい JDBC リソースの作成準備を行います。
ここでは、Oracle 用 JDBC 接続プールを作成する手順について説明します。Oracle 用 JDBC 接続を作成する前に、必要なアクセス権を備えた Oracle ユーザーと、BPEL サービスエンジンの持続性に使用するテーブルスペースを作成する必要があります。
Oracle に sysdba としてログインします (SQLPlus から、connect sys/manager@machine-name as sysdba を使用して接続する)。
次のスクリプトをデフォルト値で実行します。
注釈付きのスクリプトをダウンロードするには、ここをクリックしてください。
CREATE TABLESPACE bpelsedb DATAFILE 'bpelsedb.dat' SIZE 512M REUSE AUTOEXTEND ON NEXT 2048M MAXSIZE UNLIMITED; CREATE USER bpelse_user IDENTIFIED BY bpelse_user DEFAULT TABLESPACE bpelsedb QUOTA UNLIMITED ON bpelsedb TEMPORARY TABLESPACE temp QUOTA 0M ON system; GRANT CREATE session to bpelse_user; GRANT CREATE table to bpelse_user; GRANT CREATE procedure to bpelse_user; GRANT select on sys.dba_pending_transactions to bpelse_user; GRANT select on sys.pending_trans$ to bpelse_user; GRANT select on sys.dba_2pc_pending to bpelse_user; GRANT execute on sys.dbms_system to bpelse_user; GRANT select on SYS.dba_2pc_neighbors to bpelse_user; GRANT force any transaction to bpelse_user; |
NetBeans IDE またはいくつかの SQL クライアントを使用して、ユーザー名 sys as sysdba を入力することによって接続することもできます。パスワードはシステムユーザーと同じものにしてください。ユーザー、テーブルスペース、データファイル名、およびサイズ/割り当て制限を必要に応じて変更することもできます。
Web ブラウザで、Sun Java System Application Server の管理コンソールにログインします。次に例を示します。
http://localhost:4848, username:admin, password: adminadmin
Oracle JDBC ドライバクラスをアプリケーションサーバーのクラスパスに追加します。
アプリケーションサーバーのクラスパスにクラスを追加する方法の詳細については、Sun Java System Application Server のマニュアルを参照してください。1 つの方法は、「アプリケーションサーバー」>「JVM 設定」>「パス設定」に移動し、「クラスパスのサフィックス」ボックスに jar ファイルのパス (jar ファイル名も含む) を指定することです。続行する前に、アプリケーションサーバーを再起動する必要があります。
ナビゲーションツリーで、「リソース」->「JDBC」ノードを展開し、「接続プール」を選択します。
右のパネルで「新規」ボタンをクリックします。
「一般設定」で、名前を指定します (bpelseDB など)。
「リソースタイプ」を javax.sql.XADatasource に設定します。
データベースベンダーを Oracle に設定し、「次へ」をクリックします。
「接続検証」の下で、「有効」チェックボックスを選択して「コンポーネント以外の呼び出し側を許可」を有効にします。
「追加のプロパティー」で、URL、ユーザー、およびパスワードを次のように指定します。
次の値を使用するか、独自のユーザー、パスワード、および URL を指定できます。
URL: jdbc:oracle:thin:@machine-name:port:sid
ユーザー: bpelse_user
パスワード: bpelse_use
「完了」をクリックし、接続プール名をクリックしてから「Ping」ボタンをクリックします。
これによってデータベース接続が検証されます。
「完了」をクリックして、新しい JDBC リソースを作成する準備をします。
ここでは、アプリケーションサーバーデータベースの JDBC リソースを作成する手順について説明します。
Sun Java System Application Server (GlassFish) のナビゲーションツリーで、「リソース」->「JDBC」ノードを展開し、「JDBC リソース」を選択します。
右のパネルで「新規」ボタンをクリックします。
JNDI 名 (jdbc/bpelseDB など) を指定し、前の手順で作成した JDBC 接続プール (bplseDB) を指定します。
この JNDI 名は、あとで BPEL サービスエンジンのプロパティーで持続性を有効にするときに使用します。
「設定」ノードを展開し、「トランザクションサービス」を選択します。
「再起動時」パラメータで、「有効」チェックボックスを選択して「自動復旧」を有効にします。
ここでは、BPEL サービスエンジンの持続性を設定する手順について説明します。
NetBeans IDE の「サービス」ウィンドウで、「Sun Java System Application Server (GlassFish)」->「JBI」->「サービスエンジン」ノードを展開します。
「sun-bpel-engine」を右クリックし、「プロパティー」を選択します。
sun-bpel-engine のプロパティーウィンドウが表示されます。
PersistenceEnabled プロパティーの値を true に設定します。
JNDIName プロパティーの値を設定して、データベースを設定したときに作成した JDBC リソースの JNDI 名を指定します。
「閉じる」をクリックして設定を保存します。
プロパティーの説明については、「BPEL サービスエンジンの実行時プロパティーの設定」を参照してください。
新しい設定を有効にするために、BPEL サービスエンジンを停止し、シャットダウンしてから起動します。
次のメモでは、ドロップと切り詰めのスクリプトのほか、持続性の設定に関する追加情報について説明します。ここに記載された説明の一部は変更される可能性があるため、更新情報を再確認するか、質問がある場合は BPEL サービスエンジンチームに問い合わせてください。
BPEL サービスエンジンは起動時にデータベースを照会して、持続性に必要なテーブルが存在するかどうかを調べます。必要なテーブルが存在しない場合、BPEL サービスエンジンはそれらを作成します。
derby および oracle 用の、テーブルのドロップおよび切り詰めのスクリプト。スクリプトをダウンロードするには、ここをクリックしてください。
Oracle ユーザーをドロップするには、次のスクリプトを使用します。このスクリプトはここからダウンロードできます。
DROP TABLESPACE BPELSE_USER_DB INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
スケーラビリティーの高いシステムでビジネスプロセスのスループットを最適化して確保するために、BPEL サービスエンジンではクラスタ化とフェイルオーバーがサポートされています。クラスタ化は、複数の BPEL サービスユニットを介して複数の BPEL サービスエンジンに処理を分散します。フェイルオーバーは、障害の発生したシステムからビジネスプロセスを引き取って処理を完了させることにより、処理が中断されることを防止します。
クラスタ化
ビジネスプロセスを処理能力増加のニーズに応じてスケーリングする必要がある場合は、複数のプロセッサまたはシステムで稼働している複数のサービスエンジンにビジネスプロセスを分散してスループットを向上させることができます。BPEL サービスエンジンのクラスタ化アルゴリズムでは、処理が複数のエンジンに自動的に分散されます。
BPEL サービスエンジンでアプリケーションサーバーのクラスタを設定する方法の詳細については、Sun Java System (GlassFish) Application Server のマニュアルを参照してください。
フェイルオーバー
ビジネスプロセスがクラスタ化に対応するように設定されている場合は、BPEL サービスエンジンのフェイルオーバー機能により、実行中のビジネスプロセスインスタンスのスループットが確保されます。エンジンに障害が発生した場合、中断したビジネスプロセスインスタンスは、クラスタ内で次に使用可能な BPEL サービスエンジンに引き取られます。
フェイルオーバーを設定するには、BPEL サービスエンジンのプロパティー EngineExpiryInterval を設定して、システムの必要に応じた頻度で BPEL サービスエンジンが自己を利用可能な状態として登録するようにします。このプロパティーの設定を最適化するには、テストが必要になる場合があります。デフォルト設定は 15 です。
BPEL サービスエンジンのクラスタを設定するには、次のガイドラインに従う必要があります。
クラスタ化とフェイルオーバーの両方の持続性を有効にする必要があります。
持続性を実行するには、すべての BPEL サービスエンジンを再起動する必要があります。
クラスタ化されたすべての JBI 環境にサービスアセンブリを手動で配備する必要があります。
クラスタ化とフェイルオーバーは、特定のビジネスプロセスに関連する特定のプロトコルおよびバインディングコンポーネントに、整合性を保って実装されます。
クラスタ化とフェイルオーバーを実装する場合は、すべての BPEL サービスエンジンに単一のデータベースだけを使用できます。
データベースに障害が発生するとクラスタ化とフェイルオーバーは機能しなくなるため、可用性の高いデータベースが必要です。
ある BPEL サービスエンジンに障害が発生すると、そのインスタンスは単一の BPEL サービスエンジンに引き取られます。クラスタに分散されることはありません。したがって、多数のインスタンスがフェイルオーバーされた場合、一度に 1 つずつサービスエンジンが過負荷状態になり、一種のドミノ効果によってクラスタ全体が過負荷状態になる可能性があります。
クラスタ内の BPEL サービスエンジンはすべて同じタイムゾーンに存在する必要があります。
BPEL サービスエンジンのクラスタ化とフェイルオーバーのサポートに関する詳細は、「Practical Guide for Testing Clustering Support for the BPEL Service Engine」を参照してください。
BPEL BluePrint は、ビジネスプロセスの開発における良いプラクティスを指導し奨励するために開発されました。これらは全体として、Web サービスを論理的に組み合わせ、統合し、消費するビジネスプロセスを開発するためのソリューションを提供します。
BPEL BluePrint は次の場所にあります。
https://blueprints.dev.java.net/bpcatalog/ee5/soa/index.html
次の BPEL BluePrint がダウンロード可能です。
BPEL BluePrint 1: BPEL を使用した同期 Web サービス対話
BPEL BluePrint 2: BPEL を使用した非同期 Web サービス対話
BPEL BluePrint 3: BPEL を使用した障害処理
BPEL BluePrint 4: BPEL を使用したメッセージベースのイベント調整
BPEL BluePrint 5: BPEL を使用した並行非同期のイベント調整
次の表に、WS-BPEL 2.0 言語構造のリストと、それらが BPEL サービスエンジンで実装されているかどうかを示します。