Oracle BPEL Process Manager クイック・スタート・ガイド 10g(10.1.3.1.0) B31876-01 |
|
この章では、第2章「信用フローのチュートリアル」で作成したBPELプロセスより高度なプロセスの実行方法について説明します。 フォルト処理、非同期サービスとの対話、ユーザーのタスクと手動のタスク、JavaとJ2EEコードの統合およびカスタム・ユーザー・インタフェースとポータルは、すべてが、多くのビジネス・フローにとって主要な要件となります。 この章では、これらすべての要件を満たすBPELプロセスの作成、テスト、デバッグおよび管理の方法を説明します。
この章の内容は次のとおりです。
この章ではLoanFlowPlusプロセスについて説明します。このプロセスはOracle BPEL Process Managerのサンプルとともに出荷され、インストール後に次のディレクトリで使用可能になります。
SOA_Oracle_Home¥bpel¥samples¥demos¥LoanDemoPlus
図3-1に、LoanFlowPlusで実装される要件を示します。
このプロセスは実行時間の長いBPELフローで、融資申込書を入力として受け取り、選択および承認された融資提案を非同期で返します。
このフローでは、プロセス実行の最初に、(ネイティブなEJB Web Services Invocation Framework(WSIF)バインディングを介してサービスとしてアクセスした)Enterprise Java Bean(EJB)から顧客の社会保障番号を取得し、第2章「信用フローのチュートリアル」で説明した同期の信用格付けサービスにアクセスして顧客の信用格付けをリクエストします。
このプロセスは、顧客に信用上のマイナス事例(破産など)が確認された場合に信用格付けサービスから通知される可能性があるマイナスの信用フォルトを処理できるようにコーディングされています。 このような例外が通知された場合、LoanFlowPlusプロセスは顧客サービス担当者が手動で例外を処理するためのヒューマン・タスクを開始し、そのタスクの完了を待機します。 顧客サービス担当者は、ダッシュボード・ユーザー・インタフェースを使用してタスクを表示し、信用格付けを指定したり申込みを取り消すことができます。
信用格付けが提示された後は、手動または自動のアクティビティのどちらを介したものでもプロセスは自動処理に入ります。 次にプロセスは、完了した融資申込みを2つの融資プロセッサに送付します。 各プロセッサが融資提案を返すまでにかかる時間は不定です。 融資プロセッサは、実行時間が長い場合あるため、非同期のサービスとして実装され、BPELプロセスから並列起動されます。
このBPELフローのケースでは、両方の融資提案の受信を待った後、簡単なブランチ・ロジックを使用して最適な提案(最も低金利のもの)を選択します。 最後に、別のヒューマン・タスクによって、顧客は選択された融資提案を確認し承認することができます。 このタスクが完了した後、選択および承認された提案がフローの結果として返されます。
この項では、BPELプロセスで使用する外部サービスを作成およびデプロイする方法と、Oracle JDeveloperでプロセスを起動および表示する方法を説明します。
第2章「信用フローのチュートリアル」と同様に、LoanFlowPlusプロセスは、ant
コマンドを使用してすぐに作成およびデプロイできるいくつかの外部サービスに依存しています。 これを実行するには、次のようにします。
SOA_Oracle_Home
¥bpel¥samples
ディレクトリで開きます。
demos¥LoanDemoPlus
ディレクトリへ移動します。
cd demos¥LoanDemoPlus
ant
これで、LoanFlowPlusプロセス自体も含め、プロセスに必要な外部の融資サービスが作成およびデプロイされます。
「開く」ウィンドウが表示されます。
SOA_Oracle_Home
¥bpel¥samples¥demos¥LoanDemoPlus¥LoanFlowPlus
ディレクトリに移動します。
「LoanFlowPlus.jpr」
を選択して「開く」をクリックします。 このLoanFlowPlusのプロジェクト・ファイルが、Oracle JDeveloperで表示されます。
これでプロセスの「ダイアグラム」ビューが表示されます。
creditRatingServiceパートナ・リンクは、第2章「信用フローのチュートリアル」で使用したものと同じ同期のサービスです。 ただし、StarLoanServiceとUnitedLoanServiceのパートナ・リンクは非同期のサービスで、一方向の開始操作と融資提案の準備完了後に各サービスからコールされる非同期のonResultコールバックをサポートしています。 これは任意の場所から利用でき、数秒から数日以上かかることがあります。 前のプロセスと同様に、LoanFlowPlusに対するクライアント・インタフェースも非同期です。
以降の各項では、このプロセスを実装するコードを確認します。
LoanFlowPlusプロセスは、社会保障番号と信用格付けサービスによって通知された例外を、BPELのフォルト処理を使用して捕捉および管理します。 フォルト・ハンドラは特定のscopeアクティビティに関連付けられており、あるスコープ内で発生してそのスコープで処理されないフォルトは包含するスコープに渡されます。 これは、Javaのtry-catch
とまったく同じです。
getCreditRating用に定義されたNegativeCreditフォルト・ハンドラを表示するには、次のようにします。
これでそのスコープのビューが開きます。
フォルト処理を実装するコードの一部を示します。
<scope name="getCreditRating" variableAccessSerializable="no"> <variables> . . . . . . </variables> <!-- Watch for faults (exceptions) being thrown from creditRatingService --> <faultHandlers> <catch faultName="services:NegativeCredit" faultVariable="crError"> . . . </catch> </faultHandlers> <sequence> . . . . . . <!-- Invoke the CreditRating Service, the URL of this service's WSDL is specified in the deployment descriptor --> <invoke name="invokeCR" partnerLink="creditRatingService" portType="services:CreditRatingService" operation="process" inputVariable="crInput" outputVariable="crOutput"/> . . . </sequence> </scope>
記入が完了すると、融資申込書は2つの非同期融資プロセッサ・サービスへ送付されます。 この項では、BPELプロセス内の非同期サービスとの対話に必要な事項について検討します。 前述のとおり、BPELは根本的に非同期のアクティビティをサポートし、Oracle BPEL Process Managerはデハイドレーション機能をサポートします。 それは、フローが非同期イベントを待機しているときは常に、現在の状態情報とともに確実かつ効率的にデータ・ストアに永続格納されることを意味しています。
また、BPELでは非同期メッセージの相関についていくつかの標準的な方法がサポートされるため、非同期コールバックは適切な待機プロセス・インスタンスを探し出すことができます。 具体的には、Oracle BPEL Serverでは次のメカニズムがサポートされています。
LoanFlowPlusプロセスによるUnitedLoanサービスの起動方法と非同期コールバックの待機方法を確認するには、次のようにします。
「起動」ウィンドウで、このアクティビティが融資申込書を入力変数(loanApplication)としてUnitedLoanServiceに渡します。 「開始」操作はすぐに戻ります。 ただし、次のアクティビティであるonResultコールバックのreceiveアクティビティは、融資提案とともにサービスがコールバックされるまで待機します。
WS-Addressingはメッセージの相関に対して(デフォルトで)使用され、Oracle BPEL Serverで完全に透過的に処理されます。 WS-Addressingの相関情報を確認する場合は、サービスと置き換えられたSOAPメッセージをTCPトンネルを使用して確認できます。
UnitedLoanServiceから返される提案を受け取るinvokeアクティビティおよびreceiveアクティビティのBPELソース・コードは、BPELの「ソース」ビューを選択するか、「ビュー」→「ソースに移動」を選択して確認できます。 このソース・コードは次のとおりです。
<sequence> <!-- initiate the remote service --> <invoke name="invokeUnitedLoan" partnerLink="UnitedLoanService" portType="services:LoanService" operation="initiate" inputVariable="loanApplication"/> . . . . . . <!-- receive the result of the remote service --> <receive partnerLink="UnitedLoanService" portType="services:LoanServiceCallback" operation="onResult" variable="loanOffer1" createInstance="no"/> </sequence>
「LoanFlowPlusプロセスの概要」の説明にあるように、LoanFlowPlusは2つの融資サービス・プロバイダを並列起動する必要があります。これは、プロバイダの処理時間が不定なためです。 これにはBPELでflowアクティビティを使用しますが、このアクティビティによりいくつかのアクションの並列実行が可能になります。 この例が、「非同期融資プロセッサ・サービスとの対話」にあるcollectOffers flowアクティビティに示されています。 このflowには、2つの並列アクティビティ、つまりUnitedLoanServiceを起動するシーケンスとStarLoanServiceを起動するシーケンスが含まれています。
このflowアクティビティを実装する簡単なBPELソース・コードは、次のとおりです。
<flow name="collectOffers"> <!-- ************************************************************ Invoke the first loan provider (UnitedLoan) ************************************************************ --> <!-- invoke first loan provider --> <sequence> <!-- initiate the remote service --> <invoke name="invokeUnitedLoan" partnerLink="UnitedLoanService" portType="services:LoanService" operation="initiate" inputVariable="loanApplication"/> <!-- receive the result of the remote service --> <receive partnerLink="UnitedLoanService" portType="services:LoanServiceCallback" operation="onResult" variable="loanOffer1" createInstance="no"/> </sequence> <!-- ************************************************************ Invoke the second loan provider (StarLoan) ************************************************************ --> <sequence> <!-- initiate the remote service --> <invoke name="invokeStarLoan" partnerLink="StarLoanService" portType="services:LoanService" operation="initiate" inputVariable="loanApplication"/> <!-- receive the result of the remote service --> <receive partnerLink="StarLoanService" portType="services:LoanServiceCallback" operation="onResult" variable="loanOffer2" createInstance="no"/> </sequence> </flow>
BPELには非同期サービスに対する基本的なサポートが用意されており、人と手動タスクをBPELプロセスに統合できます。 一連の組込みサービスがOracle BPEL Serverに統合されており、プロセスにヒューマン・ワークフローを含めることができます。 これを真のBPELサービスとして実装することにより、これらのサービスに対するインタフェースがWSDLで記述され、人をBPELの100%標準のプロセスに含めることができます。 BPELプロセスには、人と手動タスクは他の非同期Webサービスと同じように見えます。
LoanFlowPlusプロセスでは、手動タスクがいくつかの場所で示されています。
ヒューマン・ワークフローの実装方法を確認するには、次のようにします。
「ヒューマン・タスク」というパレット要素は、開発者がヒューマン・タスクをより高いレベルの抽象概念として処理できるようにするテンプレート・アクティビティですが、一連のBPELアクティビティとして実装されています。
最初にいくつかのassignアクティビティがあります。 次にプロセスがTaskServiceパートナ・リンクをコールします。 このパートナ・リンクが、タスクに対して必要な操作を公開します。
ユーザーに割り当てられたタスクの問合せやタスク・データの更新およびタスクの実行または取消しをクライアントが実行できるように、APIが用意されています。 さらに、タスクに関するグループとロールのサポート有効期間のチェック、エスカレーションおよびその他の一般的なヒューマン・タスクの要件がタスク・サービスによって実装されています。
LoanFlowPlusプロセスでは、ユーザーの対話はすべてカスタムJava Server PagesでJava APIを使用して処理されます。 顧客による確認中に、次の項目を実行します。
http://localhost:8888/LoanFlowPlusUI
)を介したプロセスとの対話
http://localhost:8888/ExceptionDashboardUI
)を介したプロセスとの対話
オラクルでは、特別な設定なしでワークフロー対応プロセス内でのヒューマン・インタフェースの処理に使用(およびカスタマイズ)できるOracle BPEL Worklist Applicationも提供しています。
企業では、バックエンド・システムへのアクセスのために既存のJavaコードまたはJava APIをBPELプロセス内で使用する場合がよくあります。 このためには、一般的に次の3つの方法があります。
最初の2つの方法は、Oracle BPEL Process Managerで提供されるいくつかのコード例にわかりやすく示されています。
3つ目の方法の例として、LoanFlowPlusプロセスではWSIFを使用してEJBを起動し、これが顧客の社会保障番号を返します。 BPELプロセスから、EJBサービスをWSDLインタフェースを持つ他のサービスの場合と同じように扱い、そのためのパートナ・リンクをBPELプロセス内に作成することができます。 EJBにより提供される機能は、WSDLがインタフェースをとるサービスにEJBバインディングを介して直接マップされます。 「アプリケーション・ナビゲータ」内のCustomerService.wsdlファイルに、このバインディングが示されています。
<!-- binding declns --> <binding name="EJBBinding" type="tns:CustomerService"> <ejb:binding/> <format:typeMapping encoding="Java" style="Java"> <format:typeMap typeName="xsd:string" formatType="java.lang.String" /> <format:typeMap typeName="tns:CustomerNotFoundExceptionType" formatType="com.otn.samples.CustomerNotFoundException" /> </format:typeMapping> <operation name="getCustomerSSN"> <ejb:operation methodName="getCustomerSSN" parameterOrder="email" interface="remote" returnPart="ssn" /> <input name="GetCustomerSSNRequest"/> <output name="GetCustomerSSNResponse"/> <fault name="CustomerNotFoundException"/> </operation> </binding> <!-- service decln --> <service name="CustomerService"> <port name="EJBPort" binding="tns:EJBBinding"> <!-- Put appserver vendor-specific deployment information here --> <ejb:address className="com.otn.samples.CustomerServiceHome" jndiName="ejb/session/CustomerService" initialContextFactory="com.evermind.server.rmi.RMIInitialContextFactory" jndiProviderURL="ormi://${hostname}/CustomerService"/> </port> </service> <plnk:partnerLinkType name="CustomerService"> <plnk:role name="CustomerServiceProvider"> <plnk:portType name="tns:CustomerService"/> </plnk:role> </plnk:partnerLinkType> </definitions>
このコードは、EJBがWSDLで記述されたサービスとしてアクセスされていることを意味しています。ここでは、WSIFが操作をEJBメソッドへマップしています。
BPELプロセスはすべて、それ自身がWebサービスです。 またOracle BPEL Process Managerには、デプロイされたBPELフローの起動や、アクティブ・インスタンスの状態とステータス情報のフェッチなどのためのJava APIが提供されています。 BPELプロセスは、ポータルまたはその他のカスタム・ユーザー・インタフェースからインスタンス化されることがよくあります。 たとえば、LoanFlowPlusプロセスにはJSP融資インタフェースがあり、顧客はこれを使用して新規の融資申込みの開始や、受け取った提案の確認、提案の承認を行うことができます。 LoanFlowPlusのユーザー・インタフェースは、Oracle BPEL Process Managerと同じアプリケーション・サーバー上にデプロイされ、その全ソースが次の場所のサンプル内にあります。
SOA_Oracle_Home¥bpel¥samples¥demos¥LoanDemoPlus¥LoanFlowPlusUI
デプロイされたBPELプロセスを開始するためのJava APIのJavaDocsは、次のファイルにあります。
SOA_racle_Home¥bpel¥docs¥apidocs¥index.html
さらに、このJava APIをJSPから簡単に使用するためのJSPタグ・ライブラリが利用できます(このタグ・ライブラリは、LoanFlowPlusUIのサンプルで使用されています)。 開発者は、WebサービスのSOAPおよびWSDL APIを使用してBPELプロセスを起動することもできます。 Webサービスを使用する方法では、Webサービスをサポートする任意の言語またはツール・キットからBPELフローを起動したりアクセスできます。
ここでは、ポータル・ユーザー・インタフェースを使用してLoanFlowPlusインスタンスを開始および実行し、Oracle Enterprise Manager 10g BPEL Controlを使用してステータス、監査証跡、デバッグ情報、パフォーマンス・メトリックおよびOracle BPEL Serverで自動収集されたその他の情報を表示します。
LoanFlowPlus BPELプロセスは、「サービスの起動とテスト」でant
コマンドを実行したときに、依存するサービスとポータル・ユーザー・インタフェースとともにコンパイルおよびデプロイされています。 Oracle JDeveloperからも、第2章「信用フローのチュートリアル」の場合と同じようにプロセスを作成およびデプロイできます。
LoanFlowPlusインスタンスを開始および実行するには、次のようにします。
http://localhost:8888/LoanFlowPlusUI/Homepage.html
融資申込みを発行して新しいLoanFlowPlusインスタンスを開始するためのWebページが表示されます。
開発者または管理者のタスクを実行し、Oracle Enterprise Manager 10g BPEL Controlを使用してこのプロセスに関する監査証跡とその他のステータス情報を確認します。
フィールド | 値 |
---|---|
ユーザー名 |
|
パスワード |
|
password
は、インストール時に「Oracle Application Server SOA Suiteのインストール」で入力した値です。
BPELプロセスのインスタンスで、進行中のものと終了したものがいくつか表示されます。
Oracle Enterprise Manager 10g BPEL Controlに表示されるものはすべて、APIでも利用できます。 実際に、Oracle Enterprise Manager 10g BPEL ControlはJSPの集合であり、Oracle BPEL Server APIの使用方法を示すコード例として機能します。 開発者がこれらのAPIを使用して頻繁にプロセスのダッシュボードや検索画面およびその他のインタフェースをカスタマイズするため、ユーザーや管理者はより効率的にプロセス・インスタンスにアクセスおよび管理できます。 これは特に、管理対象のプロセス・インスタンスが何千または何百万にもなる可能性がある本番環境にアプリケーションがデプロイされる場合によくあることです。
Oracle Enterprise Manager 10g BPEL ControlでLoanFlowPlusインスタンスを選択すると、プロセスの現在のステータスとその実行履歴を示したビジュアル監査証跡が表示されます。 この監査証跡は、Oracle BPEL Serverによって自動的に生成、保守されますが、記録される情報は制御可能です。
ここでプロセスを完了させる場合は、StarLoanの顧客サービス担当者のダッシュボードを開始します。これは、StarLoanでは融資申込みの手動処理が必要なためです。 StarLoanはBPELプロセスとしても実装されており(ただしStarLoan がMicrosoft .Net、Apache Axisなどの他のWebサービス・ツール・キットで作成された場合に実装できます)、別のBPELコード例として機能します。
StarLoanの融資担当者の役割を実行するには、次のようにします。
http://localhost:8888/StarLoanUI/home.jsp
フィールド | 値 |
---|---|
ユーザー名 |
|
パスワード |
|
保留中の融資申込みが表示されます。
<?xml version="1.0" encoding="UTF-8" ?> - <loanOffer xmlns="http://www.autoloan.com/ns/autoloan"> <providerName>Star Loan</providerName> <selected /> <approved>true</approved> <APR>5.5</APR> </loanOffer>
パフォーマンス(スループットと応答時間の要件を含む)は、BPELプロセスを効率よく実装するための重大な要件となることがよくあります。 Oracle BPEL ServerとOracle Enterprise Manager 10g BPEL Controlに組み込まれているのが、パフォーマンス・チューニングのフレームワークです。 このフレームワークにより、開発者はそのアプリケーションのパフォーマンスを理解し、(開発者のコード、外部サービスまたはOracle BPEL Serverに存在する)ボトルネックを特定して解決することができます。
完了したフローのパフォーマンス・データを含んだページが表示されます。
Oracle Enterprise Manager 10g BPEL Controlでは、デプロイしたすべてのプロセスを、自動生成されたHTMLフォームのインタフェースを介して、または特定のXMLメッセージ・コンテンツを渡すことでテストできます。 このテスト・ページにはストレス・テスト機能が含まれており、デプロイされたBPELプロセスの負荷テストを実行し、ストレスを受けた状態のフローのパフォーマンス統計を表示することができます。
Oracle BPEL Process ManagerとOracle Enterprise Manager 10g BPEL Controlでは、プロセスのライフサイクル管理がサポートされています。 たとえば、プロセスの新しい実装を、現在進行中の古い実装のインスタンスに影響を与えずにホット・デプロイできるように並列バージョニングがサポートされています。 さらに、Oracle Enterprise Manager 10g BPEL Controlでは、プロセス全体の停止、プロセスのアンデプロイ、または既存のインスタンスは終了可能だが新しいインスタンスは認めない、プロセスのリタイアを実行できます。
Oracle BPEL Process Managerには、次のプロセス・レポート機能が用意されています。
ビジネス・プロセスの自動化で重要な機能は、多くの場合、プロセスの状態情報がよりわかりやすく表示されることにあります。 これは、集約サマリー情報やプロセス・インスタンスの状態情報を表示するプロセス・ダッシュボードを作成することで実現される場合がよくあります。 たとえば、経営者にとって、処理の各段階にある現在の融資数、顧客への融資提案に要する平均時間、または進行中のインスタンスと完了したインスタンスに関するその他の主要なパフォーマンス・インディケータが必要な場合があります。
Oracle BPEL Process Managerでは、プロセスの状態に関する大量の情報が保持され、この情報をAPIを介して使用することができます。 また、簡単なレポート・ダッシュボードのテンプレートがいくつかOracle BPEL Serverに付属しており、専門のサービス組織やサポート組織からも入手できます。
LoanFlowPlusプロセスに含まれるテンプレートに、次のURLでアクセスします。
http://localhost:8888/LoanFlowPlusUI/dashboard.jsp
Oracle BPEL Process Managerでは、プロセスの最適化を可能にするための組込みレポートもOracle Enterprise Manager 10g BPEL Controlに提供されています。
オラクルでは、Oracle BPEL Process Managerと統合されたBusiness Activity Monitoring(BAM)コンポーネントも提供しています。 Oracle BAMにより、企業の経営陣は、企業内のビジネス・イベントおよびプロセスの監視、メッセージの関連付けとKPI(キー・パフォーマンス・インディケータ: 重要業績評価指数)の定義、およびライブ・データつまりシン・クライアントのWebインタフェースを介してアクセスされたリアルタイム情報に基づいた警告の定義と修正アクションの実行が可能になります。
図3-2に、情報を表示しているOracle BAMのユーザー・インタフェースの例を示します。
Oracle JDeveloperには、BPELプロセスからOracle BAM Serverに簡単にイベントを送信するためのセンサーのサポートが含まれています。 ただし、Oracle BAM Serverは、BPELプロセス・イベントに限らず、企業内のどのソースのイベントでも(JMSメッセージ、データベース・イベントなど)JMSキューに書き込めるものはすべて収集できます。
Oracle BPEL Process Managerでは、BPELプロセスを含んだテスト・スイートを作成しOracle BPEL Serverにデプロイできます。 テスト・スイートは、開発環境でBPELプロセスのテストを自動化するためのXMLテスト・ファイルで構成されます。 テストには、パートナWebサービスとの対話のシミュレーション、テスト・データを使用したプロセス・アクションの検証、および単純なアクティビィにおけるソース・コードの実行率の計算を行うために作成した手順が含まれます。 このテストにより、本番環境へのデプロイの前に、プロセスが正常に動作することを確認できます。
テスト・スイートを作成およびデプロイするには、次のようにします。
ant
からBPELプロセスにテスト・スイートを実行し、XML文書のレポートを作成します。 レポート結果を確認し、エラーがあれば修正し、テストの実行を繰り返すことができます。
サービス指向アーキテクチャ(SOA)を採用している企業内で、サービスとそれを統合するBPELプロセスの、両方のセキュリティ保護と管理をどのように実行するのかという質問がよく出されます。 Oracle Web Services Manager(OWSM)などのWebサービス管理(WSM)ソリューションでは、認証、認可、暗号化、ロギングなどの機能がポリシー定義を介してサービスとプロセスに提供されます。 図3-3に示されているとおり、Webサービス管理ソリューションは一般に、Webサービスの前にプロキシまたはゲートウェイを提供します。 これには、様々なテクノロジで実装可能なバックエンドWebサービスと、Oracle BPEL Serverやその他のBPELサーバーにデプロイされたBPELプロセスの両方が含まれます。これは、BPELプロセス自身がWebサービスであるためです。
OWSMは、ここで管理対象エンドポイントを提供しているため、BPELプロセスには基礎となるWebサービスとまったく同じように見えます。 BPELプロセスは、サービス自体ではなく管理対象エンドポイントに接続していることを認識する必要はありません。 OWSM(または同じ標準をサポートするその他の製品)は、暗号化、認証、サービスの仮想化およびその他の主要な要件を同じ方法で実装できるように、ステップのパイプラインを提供しています。 同様に、OWSMは、論理的にOracle BPEL Process Managerの前に配置してBPELプロセスへの接続を管理できます。
図3-4と図3-5に、Oracle Web Services Managerのユーザー・インタフェースを示します。
一連のデモ、アクティビティと概念の参照資料、およびチュートリアルも、Oracle BPEL Process Managerの概要に関する知識と実地経験を増やすために用意されています。 これらの資料は、Oracle BPEL Process Managerとともに、SOA_Oracle_Home
¥bpel¥samples
ディレクトリにインストールされます。
|
![]() Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|