TalendにJavaのコードを書く

2016.06.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Talendはソースコードを書かなくても(書けなくても)プログラムが作れてしまうのがメリットではありますが、Javaのソースコードを書くことも勿論できます。
『こういう処理を作りたいけど、どのコンポーネント使っていいのかが分からない』といった時にはソースコードを直接書いた方が手っ取り早い事もあるかと思います。

環境

今回使用した環境は、以下の通りです。
Talend最新版導入してみました。

  • Windows8.1
  • Talend Open Studio 6.2.0
  • Java 1.8(Talendのバージョン6.2.0ではJava8で動きます)
  • MySQL5.7

実装

例 その1

tJavaコンポーネントを使って、その中にJavaのコードを書くだけです。
基本設定タブにコード、
2016062901
詳細設定タブにimport文を書くことができます。
2016062902

例ですが、外出しにしているSQLファイルをTalendで読み込み、読み込んだSQLを実行するプログラムを作成する必要がありました。
ファイルを読み込んで文字列として保持しておきたい場合、どのコンポーネント使ってよいのかが分からなかったので、その部分をJavaで書きました。
ブログ用に簡略化してはいますが、大体以下のようなジョブです。
2016062903
tFileListでC:\File\sql以下にあるsqlファイルを取得し、tJavaでそのファイルを読み込みます。
2016062904
tJavaで読み込んだsqlを次のコンポーネントに渡すために保持しておきたいので、contextビューで変数を定義しておきました。
2016062905
tJavaのコードは以下です。

String fileName = (String)globalMap.get("tFileList_1_CURRENT_FILEDIRECTORY")
                   + "\\" + (String)globalMap.get("tFileList_1_CURRENT_FILE");
File file = new File(fileName);
try (FileReader fr = new FileReader(file);
	BufferedReader reader = new BufferedReader(fr)) {
	StringBuilder sql = new StringBuilder();
	String temp = "";
	while ((temp = reader.readLine()) != null) {
		sql.append(temp);
	}
	context.sql = sql.toString();
} catch(FileNotFoundException e) {
	throw new Exception(e);
}

tFileListの中でglobalMapの中に、"tFileList_1_CURRENT_FILEDIRECTORY"をキーにして現在のディレクトリ、"tFileList_1_CURRENT_FILE"をキーにして現在のファイルがセットされているので、そいつを取得してます。
ファイルのパスが分かれば単純にファイルを読み込む処理を書いているだけです。読込んだSQLはcontextのsqlに保持しておきます。
あとは、tMysqlで読込んだSQL実行するだけです。
tMysqlコンポーネントのクエリにcontext.sqlと書いておくだけでSQLが実行されます。
2016062906

例 その2

よく使う便利なメソッドとかはUtilクラスとしてまとめておくことも多々あると思うのですが、Talendでもそういうことができます。
リポジトリビューのコード→ルーチンで新たなフォルダを作り、その下にルーチンを作成します。
2016062908
ルーチンといってますが、中身はJavaのクラスです。
適当にstaticメソッドを定義しておけば、Talendのコンポーネント上で使うことができますよ。
2016062909 2016062910

少し不親切な点

個人的に少し不親切な点だと思ったのが、コンパイルエラーを教えてくれません。(コンパイルエラーがあれば赤波線が引かれるという環境に慣れきってしまっていたので。。)
ジョブの下の方にあるCodeをクリックしてコードを表示するとコンパイルエラーが分かりますので、tJavaでソースコードを書いた後は、codeをクリックして確認しておくといいと思います。
おそらく、デザイナーの画面ではコードが自動生成・ビルドされておらず、codeをクリックする時にソースコードの自動生成が行われているのだと思います。
2016062907

おわりに

Talendで行き詰ったらJavaの力で解決できる事もあると思います。
tJava以外にもソースコードが書けるコンポーネントがありますが、まだ触れてません。
機会があれば使用してみて、違いなどを調べてみたいと思います。