【Talend Open Studio】tJava,tJavaRow,tJavaFlexの使い方まとめ

はじめに。今回使用するジョブの説明など

みなさん、こんにちは!

今回は、Talendのコンポーネントである、tJava, tJavaRow, tJavaFlexについてまとめます。

これら3コンポーネントの共通点としては、Javaのコードを直接記述して使用するという点です。
が、全て使い所が異なりますので、それらの使い分けや違いなどを、サンプルジョブを用いて説明していきます。

今回は、こんな感じのジョブを作りました。あまり処理内容に意味がないのが悲しいです。

1

前述の3コンポーネントを全て使用しています。無理やりですが。

一応、tJavaRow確認 の流れの中で使用している行設定も載せておきます。

3

tJava, tJavaRow, tJavaFlexってどんなもの?

tJavaコンポーネント

tJavaは、1回のみ実行される処理を記述するためのコンポーネントです。
よく使用する場面としては、変数の初期値設定などが挙げられます。

2

初期値設定以外にも、Talendのコンポーネントを使用するより、自前でコードを書いた方が良いな…なんて時に使用します。
他にも、tJavaの使い方として適切かどうかはともかく、実行有無判定のために使ったりもします。

tJavaRowコンポーネント

名称から察する通り、JavaのコードをRow(行)単位に適用する場合に使用します。

4

tJavaRowコンポーネント内では、入力側のrowをinput_row、出力側をoutput_rowとして参照します。
2行目の

output_row.ID = "CSV" + input_row.ID;

のように、とある項目を編集できます。

また、出力側に直接関係のないコードの記述ができます。

if("1".equals(input_row.SAVE_FLG)){
java.util.ArrayList<String> list = (java.util.ArrayList<String>)globalMap.get("FLG_ROWS");
list.add(input_row.ID);
globalMap.put("FLG_ROWS", list);
}

このコードでは、とある条件を満たす入力行のIDを、グローバル変数のハッシュに保存しています。

入力行の項目を編集して出力に渡すという点では、tMapと被りますが、出力に関係のないコードを記述できるという点でtMapとは異なることが分かります。

tJavaFlexコンポーネント

tJava, tJavaRowと比べると、取っつきにくい上、使いどころが少ない(個人の感想です)コンポーネントです。
このコンポーネントは、上記2コンポーネントと異なり、Javaコードを開始コード、メインコード、終了コードの3つの部分に分けて記述します。

5

開始コードでは、ループ処理の頭部分を書く、ようです。
終了コードはその対になるコードを書きます。(他に書いてもいいとは思いますが)
メインコードに、その名の通りこのコンポーネントにさせたいメイン処理を書きます。

今回の例では、tJavaRow確認 のフローでグローバル変数に保存しておいたArrayListを取り出し、その件数分だけループ、出力側に吐いています。

ご覧の通り、このコンポーネントは、Rowとして保存されていないデータからRowデータを作り出せるという力を持っています。
今回の様に一旦JavaのArrayやHashに入れてしまったデータからRowのフローを作れます。

実践で使うことになったケースとしては、tSoapでSOAP通信をした結果をDocument型で受けて、一旦Hashに保存。その後に保存しておいたDocument型オブジェクトからtJavaFlexで行を生成して…なんかがありました。

まとめ。使い分けなど

まとめると、全てJavaのコードを書く必要がある場合に使用使い分けとしては、

  • tJava ⇒ 1度のみJavaコードを実行する場合
  • tJavaRow ⇒ 行データにJavaコードを適用する場合
  • tJavaFlex ⇒ 行データでないデータから行データを作る場合など(他にも使用用途は沢山あると思いますが)

tJavaFlexは情報が少ないので、どういう場面で使うのが最も効果的か分からないんですが…
個人的に使ってみてこんな住み分けかなと思います。

今回は以上です!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です