ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Real-Time Decisionsプラットフォーム開発者ガイド
11g リリース1 (11.1.1)
B72429-01
  目次へ移動
目次

前
 
次
 

9 PHPクライアント

この章では、インライン・サービスをOracle RTD PHPクライアントと統合する方法について、CrossSellインライン・サービスを例に説明します。

Webアプリケーションをデプロイ済インライン・サービスと統合する便利な方法として、PHPクライアント統合クラスを使用する方法があります。PHPを使用すると、対話型のWebページを作成できます。用意されているPHPクラスは、前の章で説明したJavaスマート・クライアントと同様の機能を備えています。

この章には次のトピックが含まれます:

9.1 作業前の準備

PHPクライアントのサンプルで作業を行う前に、次の作業を実行する必要があります。

  1. Java Development Kit (JDK)をインストールし、JAVA_HOME環境変数にそのインストール場所を設定します。JDKは次のサイトから取得できます。

    http://developers.sun.com/downloads

    サポートされるバージョンの詳細は、第6.4項「システム要件と動作保証情報」に掲載されているドキュメントを参照してください。

  2. Oracle RTDファイルをインストールし、Oracle RTDをアプリケーション・サーバーにデプロイします。詳細は、『Oracle Fusion Middleware Oracle Business Intelligenceインストレーション・ガイド』を参照してください。

  3. PHPクライアントのサンプルは、サンプルのCrossSellインライン・サービスと連携して動作します。そのため、最初にOracle RTD DatabaseにCrossSellのサンプル・データを移入してから、デシジョン・スタジオを使用してCrossSellインライン・サービスをデプロイする必要があります。詳細は、『Oracle Fusion Middleware Oracle Real-Time Decisions管理者ガイド』のCrossSellサンプル・データの移入に関する項を参照してください。インライン・サービスのデプロイについては、第III部「デシジョン・スタジオ・リファレンス」を参照してください。

  4. Real-Time Decision Serverを起動します。詳細は、『Oracle Fusion Middleware Oracle Real-Time Decisions管理者ガイド』を参照してください。

  5. Apacheとmod_phpなど、PHP 5.2スクリプトの評価に適した環境をインストールして構成します。サポートされるバージョンとオペレーティング・システムについては、第6.4項「システム要件と動作保証情報」に掲載されているドキュメントを参照してください。

  6. PHP SoapまたはNuSoap (リリース0.7.3)のどちらかをSourceForgeからインストールします。

9.2 Oracle RTD PHPクライアントによるインライン・サービスとの統合

一般に、Oracle RTD PHPクライアントを使用した統合は、次の手順で実行します。

  1. Oracle RTD PHPクライアントの.iniファイルを準備します。

  2. クライアント・オブジェクトを準備します。

  3. 次の情報を識別するリクエストを作成します。

    • 接続先の統合点

    • セッションを識別するパラメータ

    • 統合点による出力の決定に必要なその他の任意情報

  4. Oracle RTD PHPメソッドの構文を使用してインフォーマントのリクエストを作成します。

  5. Oracle RTD PHPメソッドの構文を使用してアドバイザからのレスポンスを解析します。

  6. 接続を切断します。

PHPクライアントの実践的な使用例がRTD_HOME\client\Client Examples\PHP Client Exampleに2つ用意されています。

この項の残り部分は、次のような内容となっています。

9.2.1 PHPクライアント・サンプルのデプロイ

この例では、簡単なPHPページよってCrossSellインライン・サービスを実行して、PHPクライアントの使用方法を説明します。次のセクションの説明に従って、PHPクライアントのサンプルをアプリケーション・サーバーにデプロイする必要があります。

PHPクライアントのサンプルをApacheにデプロイする手順は次のとおりです。

  1. 次のOracle RTD PHPクライアント・ライブラリを

    • RTD_HOME\client\Client Examples\PHP Client Example\rtd

    PHPインクルード・パス上の場所またはApache HTTPサーバーのWebサイト・ページ・フォルダ(htdocsなど)に置きます。

    このrtdフォルダには、次のファイルが格納されています。

    • DecisionService.wsdl

    • rtd.client.base.php

    • rtd.client.nusoap.php

    • rtd.client.phpsoap.php

    • rtd_client_conf.ini

    • rtd_client_nusoap_conf.ini


    注意:

    セットアップの一環として、使用する.iniファイルが使用環境に適切であることを確認してください。詳細は、第9.2.2項「Oracle RTD PHPクライアントの.iniファイルの設定」を参照してください。


  2. 該当するOracle RTD PHPクライアント・サンプル(PHP Soapの場合はexample.php 、NuSoapの場合はexample_nusoap.php)を、ApacheサーバーでPHPスクリプトを供給するパスとして構成されているパスに置きます(/home/www/example.phpなど)。

  3. アプリケーションにアクセスするには、Webブラウザを起動して、次の場所に移動します:

    http://apache_host:port/example.php (PHPの場合)

    または

    http://apache_host:port/example_nusoap.php (NuSoapの場合)

  4. 顧客ID(たとえば、5)を入力し、「OK」をクリックします。

このサンプルについては、後続の各項で説明します。

9.2.2 Oracle RTD PHPクライアントの.iniファイルの設定

Oracle RTDで用意されている.iniファイルは次のとおりです。

  • rtd_client_conf.ini (PHP Soap用)

  • rtd_client_nusoap_conf.ini (NuSoap用)

これらのファイルにあるPHPクライアントのプロパティは次のとおりです。

  • wsdl: wsdlファイルの場所。PHP Soapで使用します。


    注意:

    PHPクライアント・ライブラリがPHPインクルード・パス上の場所にある場合は、次のいずれかの方法でwsdlの場所を指定できます。

    • フル・パス名を指定する。例: c:\php\includes\rtd\DecisionService.wsdl

    • DecisionService.wsdlファイルをApache HTTPサーバーのWebサイト・ページ・フォルダ(htdocsなど)にコピーしてある場合は、 wsdlプロパティに相対パス名を指定する。例: rtd\DecisionService.wsdl


  • clientClass: クライアント・クラス名

  • appsCacheClass: キャッシュ・クラス名

  • appsCacheFile: デフォルト・レスポンスの一時ファイル

  • clientTimeout: Oracle RTD統合点の起動タイムアウト(秒)。これはオプションです。

  • endpointUrl: デシジョン・サービスのURL

  • username: サーバーとの接続に使用するユーザー名

  • password: サーバーとの接続に使用するパスワード

rtd_client_conf.iniの例

rtd_client_conf.iniの例を次に示します。

# RTD integration service wsdl file path
wsdl=rtd/DecisionService.wsdl
 
clientClass=Oracle_Rtd_Client_Impl
appsCacheClass=Oracle_Rtd_Client_File_Cache
 
# temp file for default response
appsCacheFile=c:/temp/rtd_default.dat
 
# RTD integration point invoke timeout in seconds
clientTimeout=2
 
# RTD service url
endpointUrl=http://localhost:8080/

rtd_client_nusoap_conf.iniの例

rtd_client_nusoap_conf.iniの例を次に示します。

# client class name
clientClass=Oracle_Rtd_Client_Nu
 
# cache class name
appsCacheClass=Oracle_Rtd_Client_File_Cache
 
# temp file for default response
appsCacheFile=c:/temp/rtd_default_nusoap.dat
 
# RTD integration point invoke timeout in seconds
clientTimeout=2
 
# RTD service url
endpointUrl=http://localhost:8080/

.iniファイルの編集

Oracle RTDには、構成用の基礎としてクライアントのサンプルが用意されています。ファイルの設定が使用するシステムと一致していることを確認する必要があります。必要な場合は、ファイルを編集し、構成に応じて正しく設定してください。

たとえば、Real-Time Decision Serverがlocalhost上で実行されており、そのリスニング・ポートが8080でない場合は、Oracle PHPクライアントのサンプルをデプロイする前に、該当する.iniをファイルを次のように編集する必要があります。

  1. RTD_HOME\client\Client Examples\PHP Client Example\rtdにある該当するファイル(rtd_client_conf.iniまたはrtd_client_nusoap_conf.ini)をテキスト・エディタで開きます。

  2. 次のエントリを検索します。

    endPointUrl = http://localhost:8080
    
  3. 使用しているReal-Time Decision Serverのホストとポートに一致するようにURLのlocalhost:8080を変更します。

  4. ファイルを保存します。

クライアントのプロパティの使用方法

クライアント・アプリケーションは、Oracle RTD PHPクライアントを作成すると、コンポーネントのエンドポイント構成を表す一連のプロパティをOracle RTD PHPクライアント・ファクトリに渡します。

引数が指定されていない場合、クライアント・ファクトリはparse_ini_filertd_client_conf.iniに適用して、その設定を導出します。

ファクトリ・メソッドは、これらの設定を使用してサーバーに接続します。Oracle RTD PHPクライアントは、サーバーに接続すると、詳細な構成情報をダウンロードします。これには、サーバーが使用できない状態でクライアントの実行が必要な場合にクライアントで使用する一連のデフォルト・レスポンスなどが含まれます。

詳細なクライアント構成は、Oracle RTD PHPクライアント構成キャッシュと呼ばれるローカル・ファイルに保存され、サーバーの構成が変更されるたびに自動的に更新されます。

9.2.3 Nusoapパス・ライブラリの場所の編集

Oracle RTDクライアント・ライブラリでは、nusoap.php<php_includes>/nusoap/nusoap.phpという形式のディレクトリ構造に配置されていることを前提としています。<php_includes>は、PHPインストールのインクルード・ディレクトリです。

しかし、nusoapファイルは、libおよびsampleディレクトリにダウンロードされています。

次の作業を実行してください。

  1. libディレクトリの中身を<php_includes>/nusoapにコピーします。

  2. rtd.client.nusoap.phpの次のエントリを編集し、

    • include_once "nusoap/nusoap.php"

    実際のnusoapライブラリの場所を反映させます。

NuSoapとのOracle RTD統合をサポートするには、 次のincludeを使用します。

  • include_once "rtd/rtd.client.nusoap.php"

9.2.4 Oracle RTD PHPクライアントの作成

Oracle RTD PHPクライアントを作成するには、使用環境に応じたサンプルPHPスクリプトのソース・ファイル(PHP Soapを使用する場合はexample.php、NuSoapを使用する場合はexample_nusoap.php)を開きます。

NuSoapとのOracle RTD統合をサポートするには、 次のincludeを使用します。

include_once "rtd/rtd.client.nusoap.php";

PHP SoapとのOracle RTD統合をサポートするには、 次のincludeを使用します。

include_once "rtd/rtd.client.phpsoap.php";

example.phpexample_nusoap.phpは、Oracle RTD PHPクライアントのインスタンスを取得する別々の方法を示しています。

example.phpが示すように、インラインで明示的に設定を指定してクライアントを取得できます。

$client = Oracle_Rtd_Client_Factory::createClient(array(
      "wsdl"=>"C:/OracleBI/RTD/client/Client Examples/PHP Client Example/rtd/DecisionService.wsdl",
      "clientClass"=>"Oracle_Rtd_Client_Impl",
      "appsCacheClass"=>"Oracle_Rtd_Client_File_Cache",
      "appsCacheFile"=>"C:/temp/rtd_default.dat",
      "clientTimeout"=>2,
      "username"=>"your name",
      "password"=>"your password",
      "endpointUrl"=>"http://localhost:9704/"
   ));

example_nusoap.phpでは、これらの設定が、サンプルPHPスクリプトと同じディレクトリにある.iniファイル(RTD_HOME\client\Client Examples\PHP Client Example\rtd\rtd_client_nusoap_conf.ini)から解析されます。

$config = parse_ini_file("rtd_client_nusoap_conf.ini");
$client = Oracle_Rtd_Client_Factory::createClient($config);

9.2.5 リクエストの作成

次のコード行でRequestオブジェクトを作成します。

$request = $client->createRequest();

リクエストは、宛先のインライン・サービスを指定して構成する必要があります。

$request->setServiceName("CrossSell");

デプロイメント状態を使用して、インライン・サービスの選択をさらに限定できます。省略すると、最も高い状態でデプロイされたインライン・サービスがリクエストを受信します(本番はQAより高く、QAは開発より高い)。

$request->setDeploymentState("Development");

リクエストの詳細は、インライン・サービスごとに異なります。次の例では、CallStartインフォーマントがcustomerIdという名前のセッション・キーとchannelという名前の追加パラメータを要求します。

   $request->setIntegrationPointName("CallStart");
   $request->setSessionKey("customerId", 3);
   $request->setArg("channel", "Call");

リクエストを移入したら、クライアント・アプリケーションはクライアントのinvokeメソッドを呼び出して、リクエストをRTD Serverに送信します。

   $client->invoke($request);

9.2.6 レスポンスの確認

アドバイザが起動されると、複数のレスポンス・アイテム(選択肢とも呼ばれる)が返されます。アプリケーションには、これらのレスポンス・アイテムを処理するコードが必要です。詳細は、第6.2.3項「アドバイザのレスポンスの決定」を参照してください。

クライアントPHPスクリプトでは、クライアントのinvokeメソッドによって返されたレスポンス・インタフェースを介して、それらの選択肢にアクセスできます。このオブジェクトによってResponseItemオブジェクトの配列にアクセスできます。各ResponseItemオブジェクトは、アドバイザのデシジョンによって選択された選択肢オブジェクトに対応しています。

選択肢の名前にはgetId()メソッドでアクセスできます。選択肢の属性にはgetAttributes()によってアクセスできます。

   $request->setIntegrationPointName("OfferRequest");
   $response = $client->invoke($request);

PHPサンプル・スクリプトでは、各レスポンス・アイテムが、RTDサーバーによって指定された順序でWebページに出力されます。

   $items = $response->getResponseItems();
   foreach ($items as $item) {
      echo "<h1>" . $item->getId() . "</h1>";
      foreach ($item->getAttributes() as $key => $value) {
         echo $key . ': '.$value."<br>";
      }
   }

9.2.7 ループのクローズ

多くのインライン・サービスは自己学習が行われるように設計されています。CrossSellインライン・サービスでは、OfferResponseインフォーマントにより、抱合せ販売オファーに対する関心度が選択肢イベント・モデルにフィードバックされます。単純化するため、次の例では、レスポンス・アイテムの中で最上位にランク付けされた選択肢に対して「Interested」選択肢イベントを登録します。

   if ($response->size() > 0) {
      $request->setIntegrationPointName("OfferResponse");
      $request->setArg("choiceName", $response->get(0)->getId());
      $request->setArg("choiceOutcome", "Interested");
   $client->invoke($request);
   }

選択肢イベント・モデルと選択肢の詳細は、第6.2.4項「Oracle RTDへのイベント・レスポンスの特定」を参照してください。

最後に、CallResolutionインフォーマントを起動してセッションをクローズします。CrossSellサンプルでは、このインフォーマントがセッションを終了し、リソースを解放して、セッションの終了を待機しているタスクの実行をトリガーするように設計されています。

   $request->setIntegrationPointName("CallResolution"); 
   $client->invoke($request);