SOA環境でのプロセスとサービスの依存関係を管理する
背景 BPEL プロセスがどのサービスに依存しているか知っていますか?異なるバージョンの BPEL プロセスが使用される場合、2 つのプロセス間の依存関係は急速に複雑になる可能性があります。 BPEL プロセスによって呼び出される Enterprise Service Bus (ESB) サービスを考慮すると、依存関係管理の複雑さはさらに増します。複雑さにより、展開とテストに時間がかかり、困難になり、エラーが発生しやすくなります。
多くの場合、最終的に Microsoft Visio モデリング ツールを使用して依存関係を手動で図表化し、プロセスに変更が加えられるたびに依存関係を更新する必要があります。これは、ビジネス プロセスへの機敏な変更を可能にするように設計されたサービス指向アーキテクチャ (SOA) インフラストラクチャの機敏性にとって大きな障害となります。
このテクニカル ノートでは、ビルド プロセスを適切に改善し、プロセスの依存関係グラフの自動生成を実装する方法を学びます。
私たちの課題は、多くの BPEL プロセスを含み、多くの BPEL サブプロセスと ESB サービスを参照する Oracle SOA Suite デモンストレーション プロジェクトを顧客向けに実装することです。最終的に、私たちは 12 個の BPEL プロセスと ESB サービス (パブリック サービスとして定義され、サービス レジストリで共有されていました)、およびその他の独自の BPEL プロセスと ESB サービスを使用することになりました。
まず、プロジェクトのすべてのサービスに対して Ant ベースのデプロイメントを作成し、BPEL プロセス (それらを実行するテスト ケースを含む) をさまざまな環境 (テスト、統合、本番) にデプロイし、さらに ESB サービスをデプロイすることにしました。これらの環境は Ant ベースです。コンピュータ電子書籍の無料ダウンロード
要件 最初のプロジェクトのリリースが完了した後、いくつかの要件があります。
、
BPEL プロセスまたは ESB サービスが変更された場合、プロジェクトのすべてのサービスをデプロイする必要はありません。したがって、プロジェクト中心の導入アプローチから公共サービス中心の導入アプローチに移行する必要があります。
BPEL プロセスをデプロイすると、すべての依存する (独自の) サブプロセスと ESB サービスも自動的にデプロイされます。
プロセスの特定のバージョンが上書きされないようにするには、そのバージョンのプロセスがまだサーバーにデプロイされていない場合にのみデプロイしてください。上書きするとすべてのインスタンス フロー情報が失われます。
すべてのプロセスとサービスの依存関係の視覚的なグラフは、この情報を個別に管理する必要がなく、展開中に自動的に作成される必要があります。視覚化は次のようになります。
未解決の質問 これらの新しい要件に応えて、私たちは次のような質問をし、次の回答を提供しました。
質問: プロセスとサービスの依存関係からの情報はどこに保存されますか?完全な依存関係グラフを作成するには、さらに情報を追加する必要がありますか?
回答: BPEL プロセスによって呼び出されるすべてのサービスは、partnerLinkBinding でマークされた bpel.xml ファイルに保存されます。呼び出される BPEL プロセスとバージョン情報も URL にエンコードされます。例: コンピューターの電子書籍の無料ダウンロード
<プロパティ名="wsdlRuntimeLocation">
${domain_url}/CustomerAccount_BES/1.3/CustomerAccount_BES?wsdl
</プロパティ>
デプロイされる BPEL プロセスの現在のバージョンは、build.properties ファイルにあります。 BPEL プロセスのバージョンを維持するには、build.properties ファイルの rev プロパティを変更するだけで済みます。
パブリック BPEL プロセスとプライベート BPEL プロセスを区別するために、次に示すように、bpel.xml ファイル内のクライアントのパートナー リンクは、「public」または「private」の値を持つ新しい属性「type」を提供します。
<partnerLinkBinding name="クライアント">
<property name="wsdlLocation">CustomerAccount_BES.wsdl</property>
<property name="type">public</property>
</partnerLinkBinding>
質問: 依存関係グラフを動的に生成できるツールまたはフレームワークはありますか?
回答: はい、オープン ソース ツールである Graphviz ( www.graphviz.org ) は、テキスト形式の入力ファイルからグラフを生成できます。
質問: 他の BPEL プロセスを参照するためのオプションは何ですか?
回答: オプションは次のとおりです。
デフォルトのバージョンを参照する 特定のバージョンを参照する UDDI サービス キーを参照する (エンコードされたバージョン情報の有無にかかわらず)
質問: これらすべての新しい展開要件はどのように実装できますか?
回答: これらの新しいデプロイメント要件は、カスタム Ant タスクを使用して最もよく達成できます。
開始時の質問に十分に答えられたので、カスタム Ant タスクの作成から始めましょう。 bpel.xml ファイルは Ant タスクで解析されます。見つかったすべての PartnerLinkBindings タグについて、対応する bpel.xml ファイルの解析が再帰的に開始されます。解析に加えて、バージョン プロパティ (「ref」) の現在の値が、見つかった各 BPEL プロジェクトの build.properties ファイルから抽出されます。再帰的解析の課題の 1 つは、循環依存関係をスキップすることです。
新しい「type」属性と bpel.xml ファイルの再帰解析は、サービスを念頭に置いた展開に必要なすべてのニーズを実装します。
さらに良いことに、Graphviz を使用して依存関係グラフの自動生成の問題を解決します。これを実現するには、次に示すように、再帰的な bpel.xml 解析から取得したすべての依存関係を単一の XML ファイルにマージします。 コンピュータ電子書籍の無料ダウンロード
<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<BPELスーツケース>
<BPELProcess id="Resource_BAS_SetForAccount" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_SetForAccount.bpel ">
<パートナーリンクバインディング>
<partnerLinkBinding name="クライアント">
<property name="wsdlLocation">Resource_BAS_SetForAccount.wsdl</property>
<property name="type">public</property>
<property name="version">1.2</property>
</partnerLinkBinding>
<partnerLinkBinding name="RemoveFromAccount">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<property name="version">1.5</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPELプロセス>
<BPELProcess id="Resource_BAS_RemoveFromAccount" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_RemoveFromAccount.bpel ">
<パートナーリンクバインディング>
<partnerLinkBinding name="クライアント">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<property name="type">public</property>
<property name="version">1.5</property>
</partnerLinkBinding>
<partnerLinkBinding name="CheckAvailability">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<property name="version">1.1</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPELプロセス>
<BPELProcess id="Resource_BES_CheckAvailability" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BES_CheckAvailability.bpel ">
<パートナーリンクバインディング>
<partnerLinkBinding name="クライアント">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<property name="type">public</property>
<property name="version">1.1</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPELプロセス>
...
</BPELスーツケース>
XSLT を使用して、マージされた XML ファイルをターゲット形式 (.dot) に変換します。これは、以下に示すように、Graphviz ジェネレーターへの入力として使用して PNG 画像を生成できます。
ダイグラフ構造体 {
ノード [shape=record,fontname="Arial",fontsize="10"];
エッジ [fontname="Arial",fontsize="8"];
ランクディレクトリ=LR;
ラベルジャスト=l;
"Resource_BAS_SetForAccount_1_2" [shape=record,label="{Resource_BAS_SetForAccount}|{1.2|public}",
塗りつぶし色=黄緑、スタイル=塗りつぶし];
"Resource_BAS_RemoveFromAccount_1_5" [shape=record,label="{Resource_BAS_RemoveFromAccount}|{1.5|public}",
塗りつぶし色=黄緑、スタイル=塗りつぶし];
"Resource_BES_CheckAvailability_1_1" [shape=record,label="{Resource_BES_CheckAvailability}|{1.1|public}",
塗りつぶし色=黄緑、スタイル=塗りつぶし];
"Resource_BAS_SetForAccount_1_2" -> "Resource_BAS_RemoveFromAccount_1_5" [decorate=true,label=""];
"Resource_BAS_RemoveFromAccount_1_5" -> "Resource_BES_CheckAvailability_1_1" [decorate=true,label=""];
}
上記の DOT ファイルによって生成された依存関係グラフは次のようになります。
サービス名、バージョン、タイプがボックス内に表示されます。ボックスの色はサービスの種類を示します。この図には 3 つの公共 (グリーン) サービスがあります。この記事の冒頭の図には、ESB サービス (白) と BPEL サービス (オレンジ) も示されています。
各パブリック BPEL プロセスの理想的な図を生成した後、関連するプロセスの自動デプロイメントを実装する必要があります。このサービス中心の展開では、以前に生成したプロセス リストを使用しました。標準のデプロイメント ターゲットは、リスト内のプロセスごとに呼び出されます。サーバー上の既存のプロセス バージョンが上書きされないように、サーバー上に現在のバージョンのプロセスが存在しない場合にのみ、デプロイメント ターゲットが呼び出されます。
特定のプロセス バージョンが利用可能かどうかを判断するには、プロセス WSDL URL への HTTP 接続を開き、返されたステータス コード (HTTP ステータス 200 ? デプロイ済み、HTTP ステータス 404 ? 未デプロイ) を確認します。 コンピュータ電子書籍の無料ダウンロード
カスタム Ant タスク (再帰解析を含む)、PNG イメージの生成、およびサービス中心のデプロイメントの出力は次のようになります。
...
[mkdir] 作成されたディレクトリ: /MyProject/Resource_BAS_SetForAccount/doc
[bpeltask] ** DeployWithDependencesTask を開始しています **
[bpeltask] Resource_BAS_SetForAccount-1.2
[bpeltask] ** パラメータ **
[bpeltask] ドットファイル名: doc/bpel-recursiv-all.dot
[bpeltask] dotfilenamepublic: doc/bpel-recursiv-public.dot
[bpeltask] デプロイターゲット: デプロイ
[bpeltask] デプロイメント: true
[bpeltask] 上書き: false
[bpeltask] stoponalreadydeployed: false
[bpeltask] ** すべての bpel.xml ファイルを再帰的に解決します **
[bpeltask] [Resource_BAS_SetForAccount-1.2]
[bpeltask] [Resource_BAS_SetForAccount-1.2、Resource_BAS_RemoveFromAccount-1.5]
[bpeltask] [Resource_BAS_SetForAccount-1.2、Resource_BAS_RemoveFromAccount-1.5、Resource_BES_CheckAvailability-1.1]
[bpeltask] ** 中央 bpel.xml ファイルの書き込み **
[bpeltask] ** ドット ファイルの変換 **
[bpeltask] ** サービスの展開 **
[bpeltask] ============================================== =========================
[bpeltask] サービスはすでにデプロイされています (HTTP/1.1 200 OK) バージョン '1.1' の 'Resource_BES_CheckAvailability' http://localhost:8888/orabpel/default/Resource_BES_CheckAvailability/1.1/ Resource_BES_CheckAvailability?wsdl
[bpeltask] ============================================== =========================
[bpeltask] ============================================== =========================
[bpeltask] サービスはすでにデプロイされています (HTTP/1.1 200 OK) バージョン '1.5' の 'Resource_BAS_RemoveFromAccount' http://localhost:8888/orabpel/default/Resource_BAS_RemoveFromAccount/1.5/ Resource_BAS_RemoveFromAccount?wsdl
[bpeltask] ============================================== =========================
[bpeltask] ============================================== =========================
[bpeltask] サービスはまだデプロイされていません (HTTP/1.1 404 が見つかりません) http://localhost:8888/orabpel/default/Resource_BAS_SetForAccount/1.2/ Resource_BAS_SetForAccount?wsdl
[bpeltask] バージョン 1.2 での Resource_BAS_SetForAccount のサービス デプロイメントの開始
[bpeltask] ============================================== =========================
...
結論 依存関係グラフを自動的に生成するサービス中心の展開は、SOA インフラストラクチャの透明性に対するすべてのニーズを満たします。デプロイメントは完全に Ant に基づいているため、Luntbuild の夜間ビルド ジョブや運用ビルド ジョブ (継続的ビルド環境) にも使用できます。
お客様の SOA ガバナンスをサポートするために、次に示すように、パブリック プロセスとそのドキュメント、および結果として得られる依存関係グラフをお客様の Wiki に公開します。
Wiki ページは、サービス レジストリの検索によって現在登録されているパブリック サービスのバージョンが取得されるときに動的に生成されます。 Wiki ページ内の図は、ソース リポジトリ (Subversion) へのリンクを提供します。そこには、ドキュメントと公開サービスの登録バージョンの実際のサイズの図が含まれています。サムネイルをクリックして、WebDAV 経由で Subversion から対応するファイルを取得します。