Oracle® Fusion Middleware Oracle Real-Time Decisionsプラットフォーム開発者ガイド 11g リリース1 (11.1.1) B72429-01 |
|
前 |
次 |
この章では、インライン・サービスをOracle RTD PHPクライアントと統合する方法について、CrossSellインライン・サービスを例に説明します。
Webアプリケーションをデプロイ済インライン・サービスと統合する便利な方法として、PHPクライアント統合クラスを使用する方法があります。PHPを使用すると、対話型のWebページを作成できます。用意されているPHPクラスは、前の章で説明したJavaスマート・クライアントと同様の機能を備えています。
この章には次のトピックが含まれます:
PHPクライアントのサンプルで作業を行う前に、次の作業を実行する必要があります。
Java Development Kit (JDK)をインストールし、JAVA_HOME
環境変数にそのインストール場所を設定します。JDKは次のサイトから取得できます。
http://developers.sun.com/downloads
サポートされるバージョンの詳細は、第6.4項「システム要件と動作保証情報」に掲載されているドキュメントを参照してください。
Oracle RTDファイルをインストールし、Oracle RTDをアプリケーション・サーバーにデプロイします。詳細は、『Oracle Fusion Middleware Oracle Business Intelligenceインストレーション・ガイド』を参照してください。
PHPクライアントのサンプルは、サンプルのCrossSellインライン・サービスと連携して動作します。そのため、最初にOracle RTD DatabaseにCrossSellのサンプル・データを移入してから、デシジョン・スタジオを使用してCrossSellインライン・サービスをデプロイする必要があります。詳細は、『Oracle Fusion Middleware Oracle Real-Time Decisions管理者ガイド』のCrossSellサンプル・データの移入に関する項を参照してください。インライン・サービスのデプロイについては、第III部「デシジョン・スタジオ・リファレンス」を参照してください。
Real-Time Decision Serverを起動します。詳細は、『Oracle Fusion Middleware Oracle Real-Time Decisions管理者ガイド』を参照してください。
Apacheとmod_phpなど、PHP 5.2スクリプトの評価に適した環境をインストールして構成します。サポートされるバージョンとオペレーティング・システムについては、第6.4項「システム要件と動作保証情報」に掲載されているドキュメントを参照してください。
PHP SoapまたはNuSoap (リリース0.7.3)のどちらかをSourceForgeからインストールします。
一般に、Oracle RTD PHPクライアントを使用した統合は、次の手順で実行します。
Oracle RTD PHPクライアントの.iniファイルを準備します。
クライアント・オブジェクトを準備します。
次の情報を識別するリクエストを作成します。
接続先の統合点
セッションを識別するパラメータ
統合点による出力の決定に必要なその他の任意情報
Oracle RTD PHPメソッドの構文を使用してインフォーマントのリクエストを作成します。
Oracle RTD PHPメソッドの構文を使用してアドバイザからのレスポンスを解析します。
接続を切断します。
PHPクライアントの実践的な使用例がRTD_HOME
\client\Client Examples\PHP Client Example
に2つ用意されています。
example_nusoap.php
は、Oracle RTD PHPクライアントをNuSoapと併用する方法を示しています。
example.php
は、同じ機能を、PHP Soapを使用して実装しています。
この項の残り部分は、次のような内容となっています。
この例では、簡単なPHPページよってCrossSellインライン・サービスを実行して、PHPクライアントの使用方法を説明します。次のセクションの説明に従って、PHPクライアントのサンプルをアプリケーション・サーバーにデプロイする必要があります。
PHPクライアントのサンプルをApacheにデプロイする手順は次のとおりです。
次の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
注意: セットアップの一環として、使用する |
該当するOracle RTD PHPクライアント・サンプル(PHP Soapの場合はexample.php
、NuSoapの場合はexample_nusoap.php
)を、ApacheサーバーでPHPスクリプトを供給するパスとして構成されているパスに置きます(/home/www/example.php
など)。
アプリケーションにアクセスするには、Webブラウザを起動して、次の場所に移動します:
http://apache_host:port
/example.php (PHPの場合)
または
http://apache_host:port
/example_nusoap.php (NuSoapの場合)
顧客ID(たとえば、5)を入力し、「OK」をクリックします。
このサンプルについては、後続の各項で説明します。
Oracle RTDで用意されている.iniファイルは次のとおりです。
rtd_client_conf.ini
(PHP Soap用)
rtd_client_nusoap_conf.ini
(NuSoap用)
これらのファイルにあるPHPクライアントのプロパティは次のとおりです。
wsdl: wsdlファイルの場所。PHP Soapで使用します。
注意: PHPクライアント・ライブラリがPHPインクルード・パス上の場所にある場合は、次のいずれかの方法で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
をファイルを次のように編集する必要があります。
RTD_HOME
\client\Client Examples\PHP Client Example\rtd
にある該当するファイル(rtd_client_conf.ini
またはrtd_client_nusoap_conf.ini
)をテキスト・エディタで開きます。
次のエントリを検索します。
endPointUrl = http://localhost:8080
使用しているReal-Time Decision Serverのホストとポートに一致するようにURLのlocalhost:8080
を変更します。
ファイルを保存します。
クライアントのプロパティの使用方法
クライアント・アプリケーションは、Oracle RTD PHPクライアントを作成すると、コンポーネントのエンドポイント構成を表す一連のプロパティをOracle RTD PHPクライアント・ファクトリに渡します。
引数が指定されていない場合、クライアント・ファクトリはparse_ini_file
をrtd_client_conf.ini
に適用して、その設定を導出します。
ファクトリ・メソッドは、これらの設定を使用してサーバーに接続します。Oracle RTD PHPクライアントは、サーバーに接続すると、詳細な構成情報をダウンロードします。これには、サーバーが使用できない状態でクライアントの実行が必要な場合にクライアントで使用する一連のデフォルト・レスポンスなどが含まれます。
詳細なクライアント構成は、Oracle RTD PHPクライアント構成キャッシュと呼ばれるローカル・ファイルに保存され、サーバーの構成が変更されるたびに自動的に更新されます。
Oracle RTDクライアント・ライブラリでは、nusoap.php
が<php_includes>
/nusoap/nusoap.php
という形式のディレクトリ構造に配置されていることを前提としています。<php_includes>
は、PHPインストールのインクルード・ディレクトリです。
しかし、nusoapファイルは、libおよびsampleディレクトリにダウンロードされています。
次の作業を実行してください。
libディレクトリの中身を<php_includes>
/nusoap
にコピーします。
rtd.client.nusoap.php
の次のエントリを編集し、
include_once "nusoap/nusoap.php"
実際のnusoapライブラリの場所を反映させます。
NuSoapとのOracle RTD統合をサポートするには、 次のinclude
を使用します。
include_once "rtd/rtd.client.nusoap.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.php
とexample_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);
次のコード行で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);
アドバイザが起動されると、複数のレスポンス・アイテム(選択肢とも呼ばれる)が返されます。アプリケーションには、これらのレスポンス・アイテムを処理するコードが必要です。詳細は、第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>"; } }
多くのインライン・サービスは自己学習が行われるように設計されています。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);