この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。DI部の大高です。
今回はTalendのコンポーネント「tDie」を利用したジョブのエラー発生を紹介したいと思います。
前提条件
Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.1.1」で検証しています。
tDieについて
「tDie」を利用するとジョブに対してエラーを発生させることができます。また、これを「tLogCatcher」を利用してハンドリングすることができます。
「tDie」コンポーネントのTalend Helpページはこちらです。
なお「tLogCatcher」については、下記の記事でご紹介していますのでご参照ください。
[Talend]tLogCatcherを利用してジョブの例外をハンドリングする | DevelopersIO
では、具体的に以下で解説していきます。
ジョブの説明
「tDie」で意図的にエラーを発生させて「tLogCatcher」で「tDie」をハンドリングをし、「tLogRow」でエラー内容を出力しています。
「tDie」コンポーネントの設定
「tDie」コンポーネントでは、「警告メッセージ」、「コード」、「優先度」の3つを設定して警告を発生させています。今回はすべてデフォルトの値のままにしています。
停止メッセージ
「tLogCatcher」におけるmessage
カラムに渡されるメッセージの値になります。
エラーコード
「tLogCatcher」におけるcode
カラムに渡されるコードの値になります。
優先度
「tLogCatcher」におけるpriority
カラムに渡される優先度の値になります。なお、優先度と値の関係は以下の通りです。
優先度 | 値 |
---|---|
トレース | 1 |
デバッグ | 2 |
情報 | 3 |
警告 | 4 |
エラー | 5 |
致命的 | 6 |
JVMをすぐに終了
「詳細設定」にあるオプションです。
2019/01/16 現在、ヘルプには詳細内容が見受けられなかったのですが「有効」、「無効」にすると生成されるJavaコードに以下の違いがありました。
有効にした場合
System.exit(4);
無効にした場合
if (true) {
throw new TDieException();
}
「tLogCatcher」コンポーネントの設定
「tLogCatcher」は以下のように設定し「tDie」をハンドリングするように設定しました。
こちらのコンポーネントの詳細については以下の記事もご参照ください。
[Talend]tLogCatcherを利用してジョブの例外をハンドリングする | DevelopersIO
「tLogRow」コンポーネントの設定
「tLogRow」コンポーネントでは、結果が見やすいように「モード」を「縦に表示」に設定しました。
実行結果
設定は以上です。実際にこのジョブを実行すると以下のように出力されます。
[statistics] connecting to socket on port 3446
[statistics] connected
the end is near
.----------------------------------.
| #1. tLogRow_1 |
+------------+---------------------+
| key | value |
+------------+---------------------+
| moment | 2019-01-16 10:52:26 |
| pid | KWGDSO |
| root_pid | KWGDSO |
| father_pid | KWGDSO |
| project | SANDBOX |
| job | tDie |
| context | Default |
| priority | 5 |
| type | tDie |
| origin | tDie_1 |
| message | the end is near |
| code | 4 |
+------------+---------------------+
[statistics] disconnected
「tDie」コンポーネントでエラーメッセージthe end is near
が表示され、その後に「tLogRow」でエラー内容が表示されています。なお、3行目のthe end is near
はSystem.err.println("the end is near");
で出力されるため、標準だと赤字で表示されます。
まとめ
以上、「tDie」コンポーネントの紹介でした。
ジョブを実行する場合に「業務エラーとしてジョブを意図的に停止させたい」というケースなどに利用できるコンポーネントだと思います。
それでは!