外部Javaクラスをインスタンス化して実行します。
入力 | フォーマット | すべて |
---|---|---|
接続数 | 1 | |
説明 | すべてのストリームを入力できます。 | |
出力 | フォーマット | すべて |
説明 | 入力をそのまま出力が「いいえ」の場合は、外部Javaクラスはメソッドの中で出力ストリームを設定する必要があります。 「はい」の場合は、入力ストリームをそのまま出力します。 |
名前 | プロパティ型 | マッピング | 説明 | ||||||
---|---|---|---|---|---|---|---|---|---|
クラス名 | string | 入力&出力 |
実行する外部Javaクラスのクラス名を指定します。 指定するクラスは「com.infoteria.asteria.flowlibrary2.component.system.UserJavaClass」を継承し、executeメソッドを実装している必要があります。 |
||||||
入力をそのまま出力 | streamPassThrough | - |
コンポーネントの入力ストリームをそのまま出力ストリームにするかどうかを指定します。
|
||||||
パラメータ | category | 入力 |
外部Javaクラスで使用するプロパティを定義します。 ここで定義したプロパティはUserJavaClass#getPropertyメソッドにより取得できます。また、このプロパティは自動的にストリーム変数になります。本コンポーネントの後に連結したマッパーで、ストリーム変数として見えるようになっています。ストリーム変数については、フローデザイナーマニュアルのストリーム変数、コンポーネント定義のストリーム変数を参照してください。 |
コミット | 何もしません。 |
---|---|
ロールバック | 何もしません。 |
タイプ | パラ メータ | エラー処理フロー へのストリーム | エラー コード | 説明 |
---|---|---|---|---|
汎用 | なし | コンポーネントの入力ストリーム | なし | クラス名で指定したクラスが存在しなかった場合 |
なし | 外部JavaクラスがExceptionをthrowした場合 |
外部Javaクラスの中では通常のコンポーネントが行えるほとんどのことが行えます。
通常のコンポーネントとの違いは
などです。
作成した外部Javaクラスは[INSTALL_DIR]/flow/lib/userlibに配置します。
配置後にはFlowServiceの再起動が必要です。
UserJavaClassや内部で使用する他のクラスのJavaDocは「フローサービス開発キット」で提供されます。入力ストリームや変数類の扱い方、出力ストリームの作成方法などについて記述されています。詳しくは、「関連リンク」から「フローサービス開発キット」のリンクを参照してください。
パラメータの「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())); } }
パラメータの「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())); } }