ScriptRunnerProxy

ScriptRunnerProxyとは

ScriptRunnerProxyとは、スクリプトの実行要求を行うコンポーネントです。
ScriptRunnerProxyは専用のJava APIが用意されており、Javaアプリケーションから使用することができます。
Java APIについては、「APIドキュメント(Javadoc)」をブラウザヘルプから参照してください。
Studioヘルプから参照すると正しく表示されません。

ScriptRunnerProxyの使用方法

環境設定

ScriptRunnerProxyを実行するためには、以下の製品が必要となります。ScriptRunnerProxyの実行環境に事前にインストールしてください。

事前に必要な情報

ScriptRunnerProxyを実行するためには、実行対象となるDataSpiderServerの以下の情報が必要となります。

実行手順

ScriptRunnerProxyの実行手順は以下の通りです。
  1. Java APIを使用し、Javaプログラムを作成します。

  2. Javaプログラムをコンパイルし、Javaアプリケーションを生成します。

  3. Javaアプリケーションを実行します。

Javaプログラムの作成方法

クラスパスの設定

ScriptRunnerProxyをJavaで使用するためには以下のモジュールをクラスに通す必要があります。

プログラム作成の流れ

  1. ScriptRunnerConnectionManagerのインスタンスを取得します。

  2. ScriptRunnerConnectionManagerからScriptRunnerConnectionFactoryを生成します。

  3. ScriptRunnerConnectionFactoryに接続に必要な情報をセットします。
    接続にはホスト名、ポート番号、実行ユーザ、実行ユーザのパスワードが必要です。

  4. ScriptRunnerConnectionFactoryからScriptRunnerConnectionを生成します。ScriptRunnerConnectionは、スクリプトを実行するにあたり、スクリプトの実行エンジンであるDataSpiderServerとの接続を行うクラスとなります。

  5. ScriptRunnerParamを作成します。ScriptRunnerParamには、スクリプトの所在や引数情報などのスクリプトを実行する際の各種パラメータを設定します。

  6. ScriptPKを作成します。ScriptPKは、スクリプトを一意に表すクラスです。ScriptPKには、サービス名やスクリプト名を設定します。

  7. ScriptRunnerParamScriptPKをセットします。これでパラメータにスクリプトを実行する情報がセットされました。

  8. ScriptRunnerConnectionScriptRunnerParamをセットします。これでスクリプトを実行するために必要な準備は完了しました。

  9. ScriptRunnerConnection#execute()によりスクリプトを実行します。

  10. ScriptRunnerResultから実行結果を取り出します。

作成例

以下にJavaプログラムの作成例を示します。

class ScriptRunnerTest {
	public static void main (String[] args) throws Exception {
		// ScriptRunnerConnectionManager のインスタンスの取得
		ScriptRunnerConnectionManager manager = ScriptRunnerConnectionManager.getInstance();

		// ScriptRunnerConnectionFactory の生成
		ScriptRunnerConnectionFactory factory = manager.createConnectionFactory();

		// ホスト名の設定
		factory.setHost("127.0.0.1");
		// ポート番号の設定
		factory.setPort(7700);
		// 実行ユーザの設定
		factory.setUser("test");
		// 実行ユーザのパスワードの設定
		factory.setPassword("test");
		// HTTPS通信を行うかどうかの設定
		factory.setSSLEnabled(false);

		ScriptRunnerConnection conn = null;
		try {
			// ScriptRunnerConnection の生成
			conn = factory.newConnection();

			// ScriptRunnerParam の作成
			ScriptRunnerParam param = new ScriptRunnerParam();

			// ScriptPK の作成
			// 第一引数は「サービス名」, 第二引数は「スクリプト名」
			// デフォルトのサービス名の形式は「ユーザ名@プロジェクト」となります。
			ScriptPK pk = ScriptPK.ofDeployedProject("test@project", "script");
			param.setScriptPK(pk);

			// 引数の作成
			// 引数を渡さない場合には必要ありません。
 			Map<String, Object> input = new HashMap<String, Object>();
			// 文字列型の入力変数を設定
			// String 型を取ります
			input.put("in.string", "test");
			// 数値型の入力変数の設定
			// Integer 型を取ります
			input.put("in.integer", Integer.valueOf(111));
			// 10 進数型の入力変数の設定
			// BigDecimal 型を取ります
			input.put("in.decimal", new BigDecimal(222));
			// 日付型の入力変数の設定
			// Date 型を取ります
			input.put("in.date", new Date());
			// 真偽値型の入力変数の設定
			// Boolean 型を取ります
			input.put("in.boolean", Boolean.valueOf("true"));
			// バイナリの入力変数の設定
			// byte[] 型を取ります
			input.put("in.binary", new byte[]{0x42, 0x43});
			// XML 型の入力変数の設定
			// XML 文書の文字列表現を取ります
			input.put("in.xml", "<?xml version=\"1.0\"?><root />");
			param.setInput(input);

			// オプションの作成
			// オプションを設定しない場合には必要ありません。
			ScriptRunnerOption option = new ScriptRunnerOption();
			option.setType(ExecutionTypes.TYPE_PRODUCTION); // 本番用種別で実行。省略した場合は ExecutionTypes.TYPE_DEFAULT で実行。
			// option.setType("<ユーザ指定種別>"); // ユーザ指定種別で実行。指定した種別を直接指定してください。
			option.setEnableTypeSwitch(false);
			option.setEnableXMLLog(true);
			option.setLogLevel("DEBUG");
			param.setOption(option);

			// 実行および結果の取得
			ScriptRunnerResult result = conn.execute(param);

			// 終了ステータスの取得
			System.out.println("Exit Status: " + result.getExitStatus());
			if (result.isSucceeded()) {
				// 処理が成功の場合
				Map output = result.getResultData();
				for (Object key : output.keySet()) {
					Object value = output.get(key);
					if (value == null) {
						System.out.println(key + "(null): " + value);
					} else {
						System.out.println(key + "(" + value.getClass().getName() + "): " + value);
					}
				}
			} else {
				// 処理が失敗の場合
				for (Failure f = result.getFailure(); f != null; f = f.next()) {
					System.out.println(f.toString());
				}
			}
		} finally {
			if (conn != null) conn.close();
		}
	}
}

引数の設定方法

引数をスクリプトに渡す場合には、ScriptRunnerParamに引数の情報を設定します。引数の情報はMapに格納します。

Mapには、スクリプトで定義された入力変数の名前をキーとして値を設定します。値は入力変数として定義された変数の型と合致している必要があります。引数の値として渡す際の入力変数の型とJavaの型との対応は以下の通りです。

入力変数の型 設定できるJavaの型 備考
文字列型 java.lang.String  
整数型 java.lang.Integer  
10進数型 java.math.BigDecimal  
日付/時間型 java.util.Date  
真偽値型 java.lang.Boolean  
バイナリ型 byte[]  
XML型 byte[]もしくはjava.lang.String  

オプションの指定方法

ScriptRunnerParamには、スクリプト実行時のオプションを指定することができます。オプションをセットするには、ScriptRunnerOptionを作成しセットします。
指定可能なオプションは以下の通りです。

キー 説明 備考
TYPE - 実行時の種別を指定します。  
default "デフォルト"種別で実行します。
TYPEが指定されなかった場合も"デフォルト"で実行します
 
test "テスト用"種別で実行します。  
production "本番用"種別で実行します。  
<ユーザ指定種別> サービス登録時、グローバルリソース作成時にユーザが任意で指定した種別で実行します。  
ENABLE_TYPE_SWITCH - 指定した種別のグローバルリソースが存在しなかった場合、種別を切り替えて再検索するかどうかの ON/OFF を設定します。  
true 指定した種別のグローバルリソースが存在しなかった場合、"デフォルト"種別で再検索します。  
false 指定した種別のグローバルリソースが存在しなかった場合、エラーとします。
ENABLE_TYPE_SWITCH が省略された場合は false として動作します。
 
ENABLE_XML_LOG - XML ログの ON/OFF を設定します。  
true XML ログを出力します  
false XML ログを出力しません(既定値)  
LOG_LEVEL - ログレベルを設定します。  
NOTICE 重要なログのみを出力するログレベル(既定値)  
INFO 運用時推奨のログレベル  
FINFO 開発時推奨のログレベル  
FINEST より詳細にログを出力するログレベル  
DEBUG 非常に詳細なログを出力するログレベル  

実行結果の取得方法

ScriptRunnerResultから実行結果を取り出します。getResultDataメソッドで結果となるMapを取得することができます。

Mapから結果を取り出す場合、スクリプトの出力変数をキーとして結果データを取得できます。スクリプト出力変数の型と結果データのJavaの型との対応は以下の通りです。

出力変数の型 設定できるJavaの型 備考
文字列型 java.lang.String  
整数型 java.lang.Integer  
10進数型 java.math.BigDecimal  
日付/時間型 java.util.Date  
真偽値型 java.lang.Boolean  
バイナリ型 byte[]  
XML型 byte[]もしくはorg.w3c.dom.Document
  • XMLデータがbyte[]として戻された場合、取得したbyte[]をXMLとしてパースしてください。
    byte[]をXMLとしてパースするには、byte[]を一度java.io.ByteArrayInputStreamに変換し、org.xml.sax.InputSourceに渡します。

XML型結果データのアサーション方法

XML型の結果データをアサートする場合は、XmlAssertが用意されています。詳細はAPIドキュメントを参照してください。

スクリプト実行のタイムアウト設定方法

スクリプトから実行結果が返ってくるまでの待ち時間(タイムアウト時間)を設定することができます。
タイムアウトを設定しない場合の待ち時間は無制限です。

タイムアウトを設定するには、Java起動時のオプションに以下のプロパティを指定します。

キー 説明 備考
sun.net.client.defaultReadTimeout スクリプト実行後、スクリプトから終了ステータスが返ってくるまでの待ち時間です。
  • デフォルト値は「-1」です。「0」以下を指定したときのタイムアウト時間は無制限です。
  • 「1000」以上の整数を指定してください。
  • 単位はミリ秒です。
  • 設定例:
    -Dsun.net.client.defaultReadTimeout=600000

サンプルプログラムについて

サンプルプログラムは$DATASPIDER_HOME/<server|client>/doc/scriptrunnerproxy/ja/sampleディレクトリに格納されています。

ScriptRunnerTest.java

スクリプトを呼び出すための簡単なプログラムです。

サンプルプログラムを実行するには、以下の情報を確認し、変更してください。

コマンドライン(バッチ)からの実行

  1. setenvscriptrunner.batのDS_HOME変数に$DATASPIDER_HOME/<server|client>ディレクトリパスを指定してください。
    例: インストールディレクトリに半角スペースが入っている場合、ダブルクォーテーションで囲む必要があります。

  2. compilescriptrunner.batにコンパイルしたいJavaファイル名を指定してください。
    (初期状態ではScriptRunnerTest.javaと指定されています。)
    例:javac -encoding %SRC_ENCODING% -cp %CP% ScriptRunnerTest.java

  3. execscriptrunner.batに実行したいクラス名を指定してください。
    (初期状態ではScriptRunnerTestと指定されています。)
    例:java -cp %CP%;. ScriptRunnerTest

  4. compilescriptrunnerを実行してコンパイルします。

  5. execscriptrunnerでスクリプトの実行が可能です。
タイムアウトを設定する場合は、以下の設定を行います。
execscriptrunner.batのjavaコマンドにオプションを指定してください。
REM 待ち時間10分でタイムアウトを設定
java -Dsun.net.client.defaultReadTimeout=60000 -cp %CP%;. ScriptRunnerTest

antからの実行

  1. build.propertiesのdataspider.install.dirに$DATASPIDER_HOME/<server|client>ディレクトリパスを指定してください。
    例: build.propertiesに記述する場合にはパス区切り文字「\」は「/」に変換して指定してください。

  2. build.xmlのjavaタスクのclassname属性に実行するクラス名を指定してください。
    初期状態ではScriptRunnerTestと指定されています。

  3. sampleディレクトリに移動し、antを実行します。デフォルトタスクでコンパイルができます。

  4. ant executeでスクリプトの実行が可能です。
タイムアウトを設定する場合は、以下の設定を行います。
build.xmlのjavaタスクにjvmarg要素を追加し、オプションを指定してください。
<target name="execute">
  <java classname="ScriptRunnerTest" fork="yes" classpathref="class.path">
    <classpath>
      <pathelement path="." />
    </classpath>
    <!-- 待ち時間10分でタイムアウトを設定 -->
    <jvmarg value="-Dsun.net.client.defaultReadTimeout=60000"/>
  </java>
</target>

注意事項