レベル: 中級 川瀬 智 (KAWASES@jp.ibm.com), 情報マネジメント・テクノロジ / ソフトウェア開発研究所, IBM
2007年 3月 02日 IBM OmniFind Enterprise Edition V8.4 (以下、OmniFind)は、2006年11月にリリースされたIBM のエンタープライズ・サーチ・システムの最新バージョンです。OmniFindV8.4からWeb サービスの機能が提供され、比較的簡単に Web サービスを利用した検索アプリケーションを開発することができるようになりました。今回は、製品付属のWeb サービス・クライアント・アプリケーション(WebServiceClient)を使ってWeb サービス経由で OmniFind の検索を行う手順をご紹介します。
<前提知識> OmniFind 検索アプリケーション開発の基礎スキル、Web サービスに関する基礎スキル
第1章 : OmniFind V8.4 の Webサービスへのアクセス
OmniFind V8.4 が提供している wsdl の URL およびエンド・ポイントは次のとおりです。<hostname>は、OmniFind のサーバーのホスト名です。
WSDL の URL
http://<hostname>/ESSearchServer/wsdl/com/ibm/es/ws6/server/search/ofsearch.wsdl |
エンド・ポイント
http://<hostname>/ESSearchServer/services/ofserchBinding |
また、wsdl ファイルは OmniFindのサーバー上の次の場所にあります。<ES_INSTALL_ROOT>は OmniFind の導入ディレクトリーです。
<ES_INSTALL_ROOT>/installedApps/ESSearchServer.ear/ESSearchServer.war/wsdl/
com/ibm/es/ws6/server/search/ofsearch.wsdl
|
検索アプリケーションの開発([文献1])で使用する esapi.jarには新たに WebサービスのクライアントAPI がパッケージされました。また、この Web サービスのクライアント API を利用した簡単な検索アプリケーションが付属しています。
第2章 : 環境の準備
ここでは、実際に検索アプリケーションを実行するための環境の準備を行います。
サーバー環境の準備
まず始めに、OmniFind V8.4 のサーバーを用意します。次のサーバー構成情報をあらかじめ確認しておいてください。
| <hostname> | OmniFind サーバーのホスト名 (4ノード構成の場合は検索サーバーのホスト名) |
|---|
| <portNumber> | 検索サービスの Web サーバーポート番号 (通常は 80) |
|---|
| <applicationName> | アプリケーション名 (デフォルトは Default) |
|---|
| オペレーション名 | quote |
|---|
| オペレーション・タイプ | 要求-応答(Request-Response)タイプ |
|---|
上記のサーバーにはあらかじめ索引を作成しておき、開発環境から anonymousで接続できように、検索サービスを起動させておいてください。
開発環境の準備
今回は開発環境としてRational Application Developer 6.0 (以下、RAD)を使用します。
OmniFind V8.4 サーバー環境の lib ディレクトリー(例えば C:\Program Files\IBM\es\lib)にあるツールキット(es.siapi.toolkit.jar)を開発環境の任意のディレクトリーにコピーしておきます。この es.siapi.toolkit.jarは展開して使用します。jar コマンドが使える場合は「jar -xvf es.siapi.toolkit.jar」を実行しますが、通常のWindows 環境では、ファイルの拡張子を .jar から .zip に変更した後、Windowsの機能でファイルを展開しておきます。
サンプル・コードのビルドに必要なモジュールは siapi.jar とesapi.jar の2つです。これらは、接続先のOmniFindサーバー上にあるものを開発環境の任意のディレクトリーにコピーしておきます。バージョンによって挙動が異なる場合がありますので、かならず接続先のサーバーにあるもの(またはそれと同じバージョンのもの)を用意してください。
以上で準備は完了です。
第3章 : サンプルを使った Web サービス版検索アプリケーションの実行
上記の準備ができたら、サンプル・コードを開発環境にインポートし、Web サービス版検索アプリケーションを実行してみましょう。
1.新規プロジェクトの作成
1.1 RAD を起動し、「ファイル」→「新規」→「プロジェクト」をクリックします。
1.2 「java プロジェクト」を選択し、「次へ」をクリックします。
1.3 プロジェクト名 (ここでは 「SampleWebService」)を指定して、「終了」をクリックします。
※ここで、自動的に「java パースペクティブ」に切り替わります。切り替わらない場合は「ウィンドウ」→「パースペクティブを開く」→「java」をクリックします。
2.ライブラリーのインポート
1.1 java パースペクティブ上のパッケージ・エクスプローラ(ウィンドウ左のペイン)にあるSampleWebService プロジェクト上に、es.siapi.toolkit.jar を展開したディレクトリー内にあるlib ディレクトリーをドラッグ&ドロップします。ドロップされると、図1のように表示されます。
図 1. ライブラリーのインポート
1.2 SampleWebService プロジェクトを右クリックして、「プロパティ」を選択します。
1.3 「java のビルド・パス」から「ライブラリー」タブをクリックし「JAR の追加」をクリックし、先ほどのlib ディレクトリーにある以下のファイルを追加します。追加すると図2のようになります。
- clusteradapter.jar
- es.siapi.jar
- esapi.jar
- ibm-jaxrpc-client.jar
- j2ee.jar
- siapi.jar
- webservices.jar
- xerces.jar
図 2 ビルド・パスの追加
2.4 「OK」をクリックしてプロパティを閉じます。
3.サンプル・コードのインポート
java パースペクティブ上のパッケージ・エクスプローラ(ウィンドウ左のペイン)にあるSampleWebService プロジェクト上に、es.siapi.toolkit.jar を展開したディレクトリー内にあるsamples/webservices ディレクトリー上の3つのファイル(endpoint.properties、WebServiceClient.java、 WebServiceDetailClient.java)をドラッグ&ドロップします。ドロップされると、図3のように表示されます。
図 3 サンプル・コードのインポート
※ここで、自動的に「(デフォルト・パッケージ)」が生成され、「WebServiceClient.java」および「WebSerDetailClient.jara」が自動的にコンパイルされます。コンパイルエラーがないことを確認してください。もしもエラーが出る場合は、ライブラリーのインポートなどが正しく行われているか確認してください。
4.プロパティ・ファイルの設定
SampleWebService プロジェクトの endpoint.properties を開き、以下の「localhost」および「yourserchserver」にOmniFind サーバーのホスト名を指定します。
# omnifind search nodes
SearchServer=locahhost\:80
# Accessible WSDL
# Modify the localhost below to one of the search servers
WSDL=http\://yoursearchserver/ESSearchServer/wsdl/com/ibm/es/ws6/server/search/ofsearch.wsdl
|
(注) OmniFind サーバー側をカスタマイズしている(例: アプリケーション名をDefault 以外にしているなど)場合は、それに合わせて上記プロパティ・ファイルを編集してください。
5.実行
5.1 上記「WebServiceClient.java」を右クリックして「実行」→「実行」をクリックします。
5.2 「新規」をクリックします。「WebServiceClient」という名前の Javaアプリケーションが登録されます。2回目以降は「新規」をクリックする必要はありません。
5.3「引数」タブをクリックし、引数として「endpoints.properties」を指定します。
5.4 「実行」をクリックします。照会語「IBM」で検索した結果がコンソールに表示されます。
以下は、OmniFind の導入先ディレクトリーの docs/ja_JP ディレクトリーがクロールされ、索引に入っている時の検索結果例です。
Number of results found = 6
Query evaluation time=16ms
***
results[0].getDocumentID=file:///C:/Program+Files/IBM/es/docs/ja_JP/install_reqs.txt
results[0].getDescription=...<SPAN CLASS="OFHighlightTerm1">IBM</SPAN> Lotus R Domino R サ
ーバー<SPAN CLASS="OFHighlightTerm1">IBM</SPAN> DB2 R Administration Client Windows AIX
R Solaris またはLinux 用の<SPAN CLASS="OFHighlightTerm1">IBM</SPAN> ...条<SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> プログラムのご使用条件またはそれと同等の条に基づい
て<SPAN CLASS="OFHighlightTerm1">IBM</SPAN> より提供されます. ...<SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> XSLT Processor Licensed Materials Property of <SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> C Copyright <SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> Corp. ...ここでは<SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> の商標と特定の<SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> 以外の商標をリストします. <SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> の商標にする情報についてはhttp www <SPAN
CLASS="OFHighlightTerm1">ibm</SPAN> com legal copytrade shtml を参照してください...
results[0].getDocumentSource=winfs
results[0].getScore=96.49309491043883
results[0].getTitle=install_reqs.txt
***
...
|
期待する結果が得られず、以下の表示が出た場合は、endpoint.properties が正しく構成されているか確認してください。
Number of results found = 6
Query evaluation time=16ms
***
results[0].getDocumentID=file:///C:/Program+Files/IBM/es/docs/ja_JP/install_reqs.txt
results[0].getDescription=...<SPAN CLASS="OFHighlightTerm1">IBM</SPAN> Lotus R Domino R サ
ーバー<SPAN CLASS="OFHighlightTerm1">IBM</SPAN> DB2 R Administration Client Windows AIX
R Solaris またはLinux 用の<SPAN CLASS="OFHighlightTerm1">IBM</SPAN> ...条<SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> プログラムのご使用条件またはそれと同等の条に基づい
て<SPAN CLASS="OFHighlightTerm1">IBM</SPAN> より提供されます. ...<SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> XSLT Processor Licensed Materials Property of <SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> C Copyright <SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> Corp. ...ここでは<SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> の商標と特定の<SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> 以外の商標をリストします. <SPAN
CLASS="OFHighlightTerm1">IBM</SPAN> の商標にする情報についてはhttp www <SPAN
CLASS="OFHighlightTerm1">ibm</SPAN> com legal copytrade shtml を参照してください...
results[0].getDocumentSource=winfs
results[0].getScore=96.49309491043883
results[0].getTitle=install_reqs.txt
***
...
|
また、以下の表示が出た場合は、endpoint.properties に OmniFind のサーバー名が正しく指定されている確認してください。
com.ibm.es.ws6.client.types.SiapiException: WSWS3713E: リモート・ホスト localhost との接続が失
敗しました。次のエラーを受信しました: Connection refused: no further information
at com.ibm.es.ws6.client.OmniFindSearchable.search(OmniFindSearchable.java:179)
at WebServiceClient.search(WebServiceClient.java:79)
at WebServiceClient.main(WebServiceClient.java:49)
Search failed!! with following error *** WSWS3713E: リモート・ホスト localhost との接続が失敗しま
した。次のエラーを受信しました: Connection refused: no further information ***
|
なお、サンプル・コード(WebServiceClient.java) は、照会語が "IBM"に固定されています。コード中の以下の場所を変更することで照会語を変更できます。
request.setQueryText("IBM");
参考文献
著者について  | |  | 川瀬 智は、ソフトウェア開発研究所のプロジェクト・マネージャー兼ソフトウェア・エンジニアで、OmniFind の Lab. Based Service に従事しています。OmniFind に関する多く案件をサポートさせていただいているほか、日本アイ・ビー・エム研修サービス(株)主催の OmniFind セミナーの講師も担当しています。オフでは日本テニス協会の公式ランキング保持者としてオープン大会に参戦しています。
|
記事の評価
|