メイン コンテンツをスキップする

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] (プロジェクト設定)に移動し、[Build] (ビルド) > Mavenノードを開いて[Force full re-synchronize poms] (POMの全再同期を強制)をクリックします。

上記のパラメーターを追加しても問題が解決しない場合は、回避策として、ジョブを最適化し、サブジョブの最終生成コードのサイズが小さくなるよう、次の方法を試してみてください。

  • サブジョブ内のコンポーネント数(特にtLogRowなどのデバッグ用コンポーネント)を最小限にする。
  • サブジョブを複数のサブジョブに分割する。

このエラーはまた、Talend StudioでLog4jロガーを無効にすれば防げることもできます。詳細は、Log4を有効化して設定をご覧ください。

このページは役に立ちましたか?

このページまたはコンテンツに、タイポ、ステップの省略、技術的エラーなどの問題が見つかった場合は、お知らせください。改善に役立たせていただきます。