================================================ 各種のネットワーク呼び出しプロトコルに対応させる ================================================ ここでは,ユーザプログラムをRaSC上で稼働させることにより,ネットワークを介した呼び出しを可能とする手順を説明します. 呼び出しプロトコルとして,MessagePack RPC, JSON RPC, ProtocolBuffers, SOAPが利用可能になり,用途に応じてプロトコルを使い分けることができます. - MessagePack RPC, ProtocolBuffers: 高効率なバイナリプロトコル.性能を重視する場合に利用 - JSON RPC: 人間にも理解しやすいテキスト表現を使用.対応するプログラミング言語が多数あることに加え,コマンドラインツール等からも利用しやすい - SOAP: XMLベースのプロトコル.相互運用性の厳密なチェックが行われる.各種のサービス指向システムと連携しやすい RaSC上で稼働させられるプログラムは, :ref:`rasc_ready_program` で述べられたような条件を満たす必要があります. ここでは,そのような条件を満たす形態素解析エンジン `MeCab `_ を例に説明します. RaSCサービスとしてユーザプログラムを起動する ============================================ まず RaSC の基本パッケージをダウンロードして解凍します. [#f1]_ .. code-block:: bash $ curl -o rasc-basic-%RASC_VERSION%.zip "%DL_FILE_URL|rasc-basic-%RASC_VERSION%,zip%" $ unzip rasc-basic-%RASC_VERSION%.zip 解凍すると,以下のファイルが展開されます.:: rasc-basic-%RASC_VERSION%/ + build.xml + jp.go.nict.wisdom.wrapper/ + lib/ + … (必須ライブラリ群) + script/ + webapps/ + WEB-INF + services/ + SampleService.xml (サービス定義XMLの例) このチュートリアルで作成するRaSCサービスは,Webアプリケーションをパッケージした war として作成し,それをJava ServletコンテナのJettyで動作させることになります. WEB-INF/services 以下に置かれたサービス定義XMLのファイル名(拡張子を除いた部分)がサービス名になります.ここでは,MeCabをRaSCサービス化することを想定して,名称を変更します. .. code-block:: bash $ mv webapps/WEB-INF/services/SampleService.xml webapps/WEB-INF/services/MeCabService.xml また,サービスの名前を設定するのに,以下の3つのファイルの編集が必要です. - webapps/WEB-INF/services/MeCabService.xml - build.xml - script/settings.json まず,webapps/WEB-INF/serviceimpl/MeCabService.xml を開いて, 下記のように ___PATH_TO_PROGRAM___ となっている箇所に,実行したいユーザプログラムのコマンドラインを設定します. このファイルでは,RaSCが呼び出す実行プログラムに応じた設定を記述しています. .. code-block:: xml :emphasize-lines: 8 次に,war を作成する build.xml を編集します.下記の ___WAR_NAME___ となっている箇所を変更し,war のファイル名を設定します. ここでは, jp.go.nict.rasc.mecabservice とすることにします.先に編集したXMLと同じ名前である必要はありません. .. code-block:: xml :emphasize-lines: 2 最後に, サーバの設定を記述した settings.json を編集します.___WAR_NAME___ には,先に設定したものを使います. また, ___SERVICE_NAME___ には,先に設定したXMLファイルの名前 (MeCabService) を設定します. .. code-block:: json :emphasize-lines: 6-8, 11-13 { "serverName" : "RaSCServer", "jettyPort" : 8080, "controlPort" : 0, "httpServices" : [ { "contextPath":"/___WAR_NAME___", "serviceName":"___SERVICE_NAME___", "warPath":"../build/___WAR_NAME___.war" } ] "msgpackServices" : [ { "contextPath":"/___WAR_NAME___", "serviceName":"___SERVICE_NAME___", "warPath":"../build/___WAR_NAME___.war", "msgpackPort":9090 } ] } 同梱されたデフォルトの設定では,MessagePack RPCにポート9090,JSON RPC, ProtocolBuffers, SOAPなどHTTP上のプロトコルにポート8080を割り当てます. パッケージを展開したパスで,下記のコマンドを実行すると,warが作成され,RaSCサービスが起動します. このサービスは,MessagePack RPC,JSON RPC, ProtocolBuffers, SOAPのいずれのプロトコルでも呼び出せます. .. code-block:: bash $ ant $ cd script $ sh ./basic_server.sh start なお,停止は下記のコマンドで行います. .. code-block:: bash $ sh ./basic_server.sh stop 以下では,JSON RPCによる呼び出し方法を紹介します.JSON RPCを用いることのメリットは,簡便さと理解しやすさです. 例えば下記のように,curlコマンドを用いて,JSON RPCでサービスを実行することができます. GETパラメータに,メソッド名とパラメータを渡しています. .. code-block:: bash $ curl "http://localhost:8080/jp.go.nict.rasc.mecabservice/jsonServices/MeCabService?method=analyze¶ms=\[\"今日の天気はどうですか\"\]" JSON RPCについては,簡易的にブラウザ上からテストするためのインターフェースを用意しています. 下記のURLをブラウザで開くと,インタフェースが表示され,サービス呼び出しを行えます.___WAR_NAME___ は先に設定したものに置き換えてください.:: http://localhost:8080/___WAR_NAME___/jsonServices/ 以下にスクリーンショットを示します.String analyze(String) というメソッドについて, "+"をクリックすると,入力欄が開きます. ユーザプログラムに与えたい内容を入力して,"invoke" を押すとJSON RPCでの呼び出しが行われ,結果が表示されます. .. figure:: img/json_gui.png :width: 60% :align: center 図1: JSON RPC呼び出しGUI その他のプロトコルでの呼び出しについては,以下で説明しています. - :doc:`rasc_core` - :doc:`rasc_client_pb` - :doc:`rasc_client_soap` .. [#f1] このパッケージは,GitHubに登録されたプロジェクトpkg_basicから生成されたものです.