65535バイトの制限に起因するコード生成時のエラーを防ぐ方法
Talend Studioの場合、一部のジョブがコードコンパイルで失敗し、65535バイト制限のエラーが表示されることがあります。この記事では、このエラーの原因を説明し、トラブルシューティングのアイデアと解決策をお伝えします。
たとえばサブジョブのコンポーネント数やスキーマのカラム数が多すぎる場合、Talendジョブのコンパイルが失敗し、以下の例外が発生することがあります。
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The code of method tFileInputDelimited_1Process(Map) is exceeding the 65535 bytes limit
これは、Talend Studioがコードジェネレーターであり、それぞれのTalendジョブに対してJavaコードを作成することが理由です。サブジョブはそれぞれ、ジョブクラスにあるメソッドです。サブジョブが大きすぎると、最終的に生成されるコードのサイズが65536バイトを超えてしまいます。Javaの仕様によると、この非ネイティブかつ非抽象メソッドのコード量は65536バイトのサイズに制限されているため、サブジョブの生成コードがこの制限を超えることはできません。
このエラーを防ぐため、Talend Studioインストールディレクトリーのconfigurationフォルダーにあるconfig.iniファイルに次のパラメーターを追加してみます。
deactivate_extended_component_log=true
このオプションを設定すると、ジョブの依存項目もアップデートされます。継続的インテグレーションを使用している場合は、プロジェクト内のPOMをすべて再生成することをお勧めします。これを行うには、[Project Settings] (プロジェクト設定)に移動し、 ノードを開いて[Force full re-synchronize poms] (POMの全再同期を強制)をクリックします。
上記のパラメーターを追加しても問題が解決しない場合は、回避策として、ジョブを最適化し、サブジョブの最終生成コードのサイズが小さくなるよう、次の方法を試してみてください。
- サブジョブ内のコンポーネント数(特にtLogRowなどのデバッグ用コンポーネント)を最小限にする。
- サブジョブを複数のサブジョブに分割する。
このエラーはまた、Talend StudioでLog4jロガーを無効にすれば防げることもできます。詳細は、Log4を有効化して設定をご覧ください。