ステップ 5: JMS コントロールと EJB コントロールを追加する
このステップでは、収集したデータを取り出して、社内アプリケーションにクレジット スコアを生成するよう要求します。次に、申込者の信用リスクを評価する EJB にクレジット スコアを渡します。
クレジット スコアの生成には、特定の用途に限定して設計された社内クレジット スコアリング アプリケーションを使用します。このレガシー アプリケーションは、他のコンポーネントで利用できるよう、メッセージング システムで社内の他の部署にも公開されています。こうした作業を前提として、Web サービスは機能します。ここでは、申込者のデータが入った XML メッセージをアプリケーションに送信し、クレジット スコアが入った XML メッセージを受信します。
メッセージング システムは、互換性のないソフトウェア コンポーネント間でブリッジを作成する場合によく使用されます。また、リクエスト側のコンポーネントが作業を続行するために応答を待機できないため、非同期通信が必要な場合にも、メッセージングは役立ちます。このステップでも、クレジット スコアリング アプリケーションがリクエストに応答するまでの時間がわからないので、非同期性が効果を発揮します(メッセージングの詳細については、概要 : メッセージング システムと JMSを参照)。
WebLogic Server で提供される Java Message Service(JMS)では、アプリケーションでメッセージを使用するための方法を複数サポートしています。ここで使用するポイント ツー ポイント メッセージングでは、メッセージの送信側と受信側は、ともにメッセージング システム(「JMS プロバイダ」)のクライアントになります。メッセージの交換は、最初のクライアントがメッセージをキューに送信することから開始されます。キューとは、他のクライアントがリスンしている一種の中間地点のようなものです。メッセージがキューに届くと、受信側のクライアントはメッセージを取り出して読み込みます。このステップでは、JMS コントロールを使用して、クレジット スコアリング アプリケーションがリスンしているキューに、収集したデータの入ったメッセージを送信します。その後、アプリケーションはサービスがリスンしているキューに、クレジット スコアの入った応答メッセージを送信します。
このステップでのタスクは次のとおりです。
クレジット スコアを要求するための JMS コントロールを追加するには
デザイン ビューを表示していない場合は、[デザイン ビュー] タブをクリックします。
[コントロールの追加] ドロップダウン リストから [JMS コントロールの追加] を選択します。[JMS コントロールの追加] ダイアログが表示されます。
以下の図に示すとおりに値を入力します。
[メッセージ タイプ] には [XML マップ] を指定します。XML マップは、Java タイプを XML に変換する強力なツールです。XML マップの詳細については、チュートリアルのこの後のステップで説明します。
Click Create.
サービスの設計に、次のように creditScoreJMS コントロールが追加されました。
sendMessage メソッドに対応する矢印をダブルクリックします。[マップおよびインタフェースの編集] ダイアログが表示されます。
[メッセージ XML] タブが選択されていることを確認します。
[Java] フィールドの内容を次のように編集します。
public void sendMessage(int availableCredit, boolean bankruptcy)
このメソッドにより、申込者に関するデータがクレジット スコアリング アプリケーションに送信されます。
ダイアログを開いたまま、上部のボックスの内容を次のように編集します。
<score_request> <credit_remaining>{availableCredit}</credit_remaining> <is_bankrupt>{bankruptcy}</is_bankrupt> </score_request>
注意 : このコードは XML マップを表します。クレジット スコアリング アプリケーションで想定されている XML は、<score_request>、<credit_remaining>、および <is_bankrupt> 要素で定義します。中括弧内のテキストが宣言のパラメータと一致していることに注目してください。これは、sendMessage メソッドに渡される値の XML への挿入方法を WebLogic Server に指示しています。その後、XML はアプリケーションに送信されます。
[OK] をクリックします。
receiveMessage コールバック ハンドラに対応する矢印をダブルクリックします。[マップおよびインタフェースの編集] ダイアログが表示されます。
[メッセージ XML] タブで次のように XML マップ コードを編集します。
<score_response> <calculated_score>{score}</calculated_score> </score_response>
Java コードを次のように編集します。
public void receiveMessage(int score)
このコードによって、XML マップがコールバック ハンドラに追加されます。マップは、想定される XML 応答のフォーマットと一致します。中括弧内に score パラメータを配置することで、返されたデータをコールバック ハンドラの score パラメータに渡すよう WebLogic Server に指示しています。
[OK] をクリックします。
デザイン ビューで creditCardDataResult コールバック ハンドラの名前をクリックすると、そのソース コードが表示されます。
creditCardDataResult コールバック ハンドラのコードを次のように編集します。取り消し線で消されているコード行は必ず削除します。
private void creditCardReportControl_creditCardDataResult(CreditCard[] cards)
{
for(int i = 0; i < cards.length; i++)
{
m_currentApplicant.availableCCCredit += cards[i].availableCredit;
}
/*
* Use the JMS control to send the available credit and bankruptcy information to the credit
* scoring application.
*/
creditScoreJMS.sendMessage(m_currentApplicant.availableCCCredit,
m_currentApplicant.currentlyBankrupt);
callback.onCreditReportDone(m_currentApplicant, null);
}
次のように、ソース ビューの [ソース ビュー] タブのすぐ下にある クラス ドロップダウン リストから [creditScoreJMS] を選択します。
次のように、クラス ドロップダウン リストの右側にある メンバー ドロップダウン リストから [receiveMessage] を選択します。
JMS コントロールのコールバック ハンドラのソース コードが表示されます。
receiveMessage コールバック ハンドラのコードを次のように編集します。
private void creditScoreJMS_receiveMessage(int score) { /* Store the score returned with other data about the applicant. */ m_currentApplicant.creditScore = score; }
信用評定を要求するための EJB コントロールを追加するには
以上の作業でクレジット スコアを取得できるようになったので、ここからは、取得したスコアを基に申込者が信用承認に値するかどうかを判定します。これには、既存のステートレス セッション EJB を使用します。EJB はエンタープライズ アプリケーションの Java ソフトウェア コンポーネントです。EJB の種類および機能、また EJB をデプロイおよび実行する環境(またはコンピュータ)については、Java 2 Enterprise Edition(J2EE)仕様で定義されています。ソフトウェア開発者から見ると、EJB には EJB の開発およびデプロイメントと、クライアント ソフトウェアからの EJB の使用という 2 つの側面があります。WebLogic Workshop では、Web サービス内から既存の EJB のクライアントとして動作するための簡単な方法として EJB コントロールが用意されています。注意 : EJB コントロールを Web サービス プロジェクトに追加するには、EJB のコンパイル済みホーム インタフェースとリモート インタフェースがプロジェクト内になければなりません。このチュートリアルのために、ValidateCredit Bean の入った JAR ファイルが samples プロジェクトの WEB-INF\lib フォルダにあらかじめコピーされています。WEB-INF\lib フォルダに Bean の JAR ファイルがあると、これらのインタフェースを WebLogic Workshop で確実に見つけることができます(詳細については、新しいデータベース コントロールを作成するを参照)。
デザイン ビューを表示していない場合は、[デザイン ビュー] タブをクリックします。
[コントロールの追加] ドロップダウン リストから [EJB コントロールの追加] を選択します。[EJB コントロールの追加] ダイアログが表示されます。
次の図のように値を入力します。ダイアログの [手順 3] で指定が必要な jndi-name 値を参照します。リストから値を選択して [選択] をクリックすると、[ホーム インタフェース] と [Bean インタフェース] の値が自動的に追加されます。
[作成] をクリックします。
デザイン ビューを表示していない場合は、[デザイン ビュー] タブをクリックします。
receiveMessage コールバック ハンドラの名前をクリックすると、そのソース コードがソース ビューに表示されます。
receiveMessage のコードを次のように編集します。
ここまでの作業で多くの機能を追加しました。次に、これらをテストして、すべて正常に機能するかどうかを確認します。private void creditScoreJMS_receiveMessage(int score) throws java.rmi.RemoteException { m_currentApplicant.creditScore = score; /* * Pass the credit score to the EJB's validate method. Store the value returned * with other applicant data. */ m_currentApplicant.approvalLevel = validateCreditEJB.validate(m_currentApplicant.creditScore); /* * Send the Applicant object, now complete with all the data the client requested, * to the client using the callback. */ callback.onCreditReportDone(m_currentApplicant, "Credit score received."); }
[開始] ボタンをクリックすると、これまでと同様、Web ブラウザにテスト ビューが表示されます。
テスト ビューが起動したら、次のように、requestCreditReportAsync の [taxID] ボックスに次の 9 桁の番号のいずれかを入力します。
123456789, 111111111, 222222222, 333333333, 444444444, 555555555
requestCreditReportAsync をクリックします。
[Message Log] に callback.onCreditReportDone が表示されるまで、[更新] ボタンをクリックしてテスト ビューを再ロードします。その結果、画面表示は次のようになります。
応答の <creditScore> 要素と <approvalLevel> 要素に値が代入されていることに注目してください。これは、このステップでの作業の結果、Investigate Web サービスが JMS メッセージング システムおよび EJB に接続されていることを意味します。
次のステップでは、サービスの結果をより汎用性の高いフォーマットで返すようにサービスのデザインを拡張して、より広範にサービスを利用できるようにします。
コントロールを使用する