外部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()));
}
}