JavaClass - 外部Javaクラスの実行

外部Javaクラスをインスタンス化して実行します。

■ストリーム情報

入力フォーマットすべて
接続数1
説明すべてのストリームを入力できます。
出力フォーマットすべて
説明入力をそのまま出力が「いいえ」の場合は、外部Javaクラスはメソッドの中で出力ストリームを設定する必要があります。
はい」の場合は、入力ストリームをそのまま出力します。

■コンポーネントプロパティ

名前プロパティ型マッピング説明
クラス名string入力&出力 実行する外部Javaクラスのクラス名を指定します。
指定するクラスは「com.infoteria.asteria.flowlibrary2.component.system.UserJavaClass」を継承し、executeメソッドを実装している必要があります。
入力をそのまま出力streamPassThrough コンポーネントの入力ストリームをそのまま出力ストリームにするかどうかを指定します。
はい [true] - 入力ストリームがそのまま出力ストリームになります。
いいえ [false] - 外部Javaクラスがストリームプロパティ、フィールド定義の内容に従った出力ストリームを設定する必要があります。
パラメータcategory入力    外部Javaクラスで使用するプロパティを定義します。
ここで定義したプロパティはUserJavaClass#getPropertyメソッドにより取得できます。また、このプロパティは自動的にストリーム変数になります。本コンポーネントの後に連結したマッパーで、ストリーム変数として見えるようになっています。ストリーム変数については、フローデザイナーマニュアルのストリーム変数コンポーネント定義のストリーム変数を参照してください。

■トランザクション処理

コミット何もしません。
ロールバック何もしません。

■エラー処理

タイプパラ
メータ
エラー処理フロー
へのストリーム
エラー
コード
説明
汎用 なし コンポーネントの入力ストリーム なし クラス名で指定したクラスが存在しなかった場合
なし 外部JavaクラスがExceptionをthrowした場合

■外部Javaクラスの概要

外部Javaクラスの中では通常のコンポーネントが行えるほとんどのことが行えます。
通常のコンポーネントとの違いは

などです。

作成した外部Javaクラスは[INSTALL_DIR]/flow/lib/userlibに配置します。
配置後にはFlowServiceの再起動が必要です。

UserJavaClassや内部で使用する他のクラスのJavaDocは「フローサービス開発キット」で提供されます。入力ストリームや変数類の扱い方、出力ストリームの作成方法などについて記述されています。詳しくは、「関連リンク」から「フローサービス開発キット」のリンクを参照してください。

■サンプル

サンプル1

パラメータの「a」「b」というプロパティ値を足し算し、結果を「c」に設定します。
入力をそのまま出力が「はい」で、パラメータに「a」「b」「c」というプロパティが設定されている必要があります。

import com.infoteria.asteria.flowengine2.execute.ExecuteContext;
import com.infoteria.asteria.flowlibrary2.FlowException;
import com.infoteria.asteria.flowlibrary2.component.system.UserJavaClass;
import com.infoteria.asteria.value.Value;

/**
 * 作成するクラスは「com.infoteria.asteria.flowlibrary2.component.system.UserJavaClass」を
 * 継承する必要があります。
 */
public class UserClassTest1 extends UserJavaClass {
    
    /** 作成するクラスでは必ずexecuteメソッドを実装する必要があります。 */
    public void execute(ExecuteContext context) throws FlowException {
        context.info("UserClassTest1 execute");//ExecuteContext#infoメソッドでログに情報を出力できます。
        
        //パラメータに設定した値はgetPropertyメソッドで取得できます。返り値はValueです。
        //Valueからは
        //  String strValue()
        //  int intValue()
        //などのメソッドを使用して値を取得できます。
        Value v1 = getProperty("a");
        Value v2 = getProperty("b");
        if (v1 == null || v2 == null)
            throw new FlowException("Required property not found");
        
        //setPropertyメソッドでパラメータに値を設定することができます。
        setProperty("c", new Value(v1.intValue() + v2.intValue()));
    }
    
}

サンプル2

パラメータの「pre」「post」というプロパティを定義し、入力ストリームの前後にその文字列を足した文字列を出力ストリームとします。
入力をそのまま出力が「いいえ」で、出力ストリーム型がText、パラメータに「pre」「post」というプロパティが設定されている必要があります。

import com.infoteria.asteria.flowengine2.execute.ExecuteContext;
import com.infoteria.asteria.flowlibrary2.FlowException;
import com.infoteria.asteria.flowlibrary2.component.system.UserJavaClass;
import com.infoteria.asteria.flowlibrary2.stream.StreamFactoryText;
import com.infoteria.asteria.value.Value;

public class UserClassTest2 extends UserJavaClass {
    
    public void execute(ExecuteContext context) throws FlowException {
        context.info("UserClassTest2 execute");
        
        Value v1 = getProperty("pre");
        Value v2 = getProperty("post");
        if (v1 == null || v2 == null)
            throw new FlowException("Required property not found");
        
        //getInputStreamメソッドで入力ストリームが取得できます。返り値はStreamDataObjectです。
        //StreamDataObjectからは
        //  String strValue()     でストリームの文字列が、
        //  byte[] byteValue()    でストリームのバイト列が、
        //取得できます。
        StreamDataObject is = getInputStream();
        
        //ストリームはStreamFactoryから作成します。
        //詳細はSDK開発者ガイドを参照してください。
        //setOutputStreamメソッドで出力ストリームを設定することができます。
        //入力をそのまま出力が「いいえ」の場合はsetOutputStreamが必須です。
        StreamFactoryText factory = (StreamFactoryText)getStreamFactory();
        setOutputStream(factory.create(v1.strValue() + is.strValue() + v2.strValue()));
    }
    
}