Table Of Contents

Previous topic

分散実行による負荷分散

Next topic

ProtocolBuffersで呼び出す

This Page

サービス定義XML

RaSCサービスの実行に用いる,サービス定義XMLの仕様を説明します.

サービス定義XMLは,ユーザプログラムのコマンドラインや,並列実行における並列数などを指定するための設定ファイルです.以下は,最低限の要素を持つサービス定義XMLの例です.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="target" class="jp.go.nict.langrid.servicecontainer.handler.TargetServiceFactory">
    <property name="service">
      <bean class="jp.go.nict.rasc.wrapper.StandardInputService">
        <property name="cmdLine" value="___PATH_TO_PROGRAM___" />
        <property name="delimiterIn" value="___INPUT_DELIMITER___" />
        <property name="delimiterOut" value="___OUTPUT_DELIMITER___" />
      </bean>
    </property>
  </bean>
</beans>

サービス定義XMLには,大きく分けて以下の2つの要素を指定します.

  • ユーザプログラム実行機構
  • ユーザプログラム実行に関わるパラメータ

以下では,それぞれについて説明します.

ユーザプログラム実行機構

並列・非並列の設定や,ユーザプログラムとのデータのやり取りの方式は,ユーザプログラムの実行機構を指定することで選択できます.

ユーザプログラム実行機構は, /beans/bean/property[@name='service']/bean/@class (XPathによる記述) に,下記のいずれかを指定することで選択します.

  • jp.go.nict.wisdom.wrapper.StandardInputService
  • jp.go.nict.wisdom.wrapper.StandardInputArrayJoinService
  • jp.go.nict.wisdom.wrapper.StandardInputParallelArrayService

それぞれについて,以下で説明します.

標準的な非並列実行 StandardInputService

サービス定義XMLには,jp.go.nict.wisdom.wrapper.StandardInputService を指定します.

もっとも標準的な処理を行う機構です.並列化の必要がない場合には,この機構を指定することを推奨します.

  • String analyze(String) の引数を,入力デリミタを追加したうえでユーザプログラムに与える
  • String[] analyze(String[]) が呼ばれると,引数の各要素に入力デリミタを追加したうえで,全要素がユーザプログラムに与えられる
  • 並列化は行わない

標準的な並列実行 StandardInputParallelArrayService

サービス定義XMLには,jp.go.nict.wisdom.wrapper.StandardInputParallelArrayService を指定します.

並列化を行うにあたってのもっとも標準的な処理を行います.並列化を行う場合には,この機構を指定することを推奨します.

  • String[] analyze(String[]) の引数を,複数起動されたユーザプログラムのプロセスに分割して与える
  • 各プロセスに対して, String[] analyzeArray(String[]) が実行される
  • ユーザプログラムのプロセス数は, poolSize で指定する

配列要素を文字列として結合して一括実行 StandardInputArrayJoinService

サービス定義XMLには,jp.go.nict.wisdom.wrapper.StandardInputArrayJoinService を指定します.

String[] analyzeArray(String[]) の実現方法として,String analyze(String) を複数回実行するのではなく, analayzeArray の引数を一つの文字列として結合して,一度の analyze の実行とします.

標準的な analyzeArray では,ユーザプログラムが効率的に実行できず,実行速度が上がらない場合に指定します.

StandardInputArrayJoinServiceの必須パラメータ に示す設定が必要になります.

配列要素1件ずつの解析を並列実行 StandardInputParallelService

サービス定義XMLには,jp.go.nict.wisdom.wrapper.StandardInputParallelService を指定します.

  • String[] analyze(String[]) の引数の各要素を,複数起動されたユーザプログラムのプロセスに分割して与える
  • 各プロセスに対して, String analyze(String) が実行される
  • ユーザプログラムのプロセス数は, poolSize で指定する

パラメータ

/beans/bean/property[@name='service']/bean/ 以下に,下記の形式でパラメータを指定します.

<property name="___PARAM_NAME___" value="___PARAM_VALE___" />

必須パラメータ

cmdLine:起動コマンドを指定.オプション等もここに記述する.ディレクトリ名やファイル名に空白が含まれる場合は,代わりに cmdArray を指定する.両方が指定されるとエラーになる.
cmdArray:コマンドラインの各要素を list タグ以下の value タグで指定する.実際の記述は 空白を含むディレクトリやファイル名をコマンドラインに指定するには を参照.
delimiterIn:入力の区切り文字.改行は \n とする(実際には環境ごとの改行コードに置き換えられる).本プロパティを指定しない場合は入力ソースがそのまま使用される。
delimiterOut:出力の区切り文字.改行は \n とする(実際には環境ごとの改行コードに置き換えられる).

オプショナルパラメータ

includeDelim:出力結果に区切り文字の有無を設定. true にすると,区切り文字も含まれる.例えば,形態素解析器において, delimiterOutEOS\n にした際に,RaSC非使用時と同様の EOS\n という文字列を末尾に含む結果を得たい場合に true にする.
poolSize:起動しておくユーザプログラムのプロセス数を設定.並列実行は,ここで指定した数を上限として行われる.
initPoolSize:RaSCサービスの起動直後から,起動しておくユーザプログラムのプロセス数を指定する.ここで指定がない場合,リクエストを受け,そのリクエストを処理するプロセスがない場合に poolSize を上限として,新たなプロセスが生成される.
pollTimeOut:起動したプロセス数が poolSize に達しており,空きプロセスがない場合に待つ時間.ここで指定した時間を経過してもプロセスが空かなければ,エラーが返る. (単位:ms)
timeOut:ユーザプログラムからの出力読み出しのタイムアウト.ここで指定した時間を経過しても出力がなければ,エラーが返り,ユーザプログラムは再起動される . (単位: ms)
startWait:ユーザプログラムを起動してから,リクエストを受け付けるまでの時間 (単位: ms)
restartWait:ユーザプログラムから応答がないなどの理由で,ユーザプログラムを再起動してから,リクエストを受け付けるまでの時間 (単位: ms)
bufSize:入出力のバッファサイズ (単位: byte)
delLastNewline:入力の末尾の改行を削除するかどうかを指定する.一行を1件の入力とするユーザプログラムにおいて, delimiterIn に改行が指定されていると,改行が自動的に付与されるため,入力の末尾に改行があると,改行が重複することになり,エラーになる.これを防ぐ場合に設定する.デフォルトは false
directory:実行ディレクトリを指定する.

実行機構依存パラメータ

StandardInputArrayJoinServiceの必須パラメータ

internalDelimiterIn:
 入力の各要素を繋ぐ際のデリミタ
internalDelimiterOut:
 出力結果を要素ごとに分解する位置を決めるデリミタ
includeInternalDelim:
 出力結果をinternalDelimiterOutで分解した際にデリミタを含めるかどうかの設定.指定が無い場合はfalse.