トランスフォーメーション > Javaトランスフォーメーション > Javaコードの開発
  

Javaコードの開発

Javaトランスフォーメーションの機能を定義するには、[Java]タブでJavaコードスニペットを入力します。コードスニペットを入力してJavaパッケージをインポートし、Helperコードを書き込み、特定のトランスフォーメーションイベントの動作を定義するJavaコードを書き込みます。Javaエディタでは任意の順序でコードスニペットを開発することができます。
Javaエディタの以下のセクションでJavaコードスニペットを入力します。
パッケージのインポート
サードパーティ製のJavaパッケージ、ビルトインJavaパッケージ、またはカスタムJavaパッケージをインポートします。
ヘルパーコード
[パッケージのインポート]セクション以外のすべてのセクションで使用できる変数およびメソッドを定義します。
入力行に達したとき
入力行を受け取ったときのトランスフォーメーションの動作を定義します。
データの終わり
すべての入力データを処理したときのトランスフォーメーションの動作を定義します。
トランザクションを受け取ったとき
トランザクション通知を受け取ったときのトランスフォーメーションの動作を定義します。アクティブなJavaトランスフォーメーションで使用します。
詳細モードでは、[受信トランザクション]セクションを使用できません。
入力データへのアクセスおよび出力データの設定は、[入力行に達したとき]セクションで実行します。アクティブなトランスフォーメーションの場合、[データの終わり]セクションおよび[トランザクションを受け取ったとき]セクションでも、出力データを設定できます。

Javaコードスニペットの作成

トランスフォーメーション動作を定義するコードスニペットを作成するには、[Java]タブでJavaエディタを使用します。
次の画像は、[Java]タブと展開されているJavaエディタを示しています。
JavaトランスフォーメーションのJavaタブに、Javaエディタが含まれています。この画像では、[Helperコード]セクションが選択されています。[API]タブには、[Helperコード]セクションで使用できるAPIメソッドのリストが表示されます。
  1. 1[入力]、[出力]、および[API]タブです。入力および出力フィールドを変数として追加し、JavaコードスニペットでAPIメソッドを呼び出すには、これらのタブを使用します。これらのタブに表示されるフィールドおよびメソッドは、コードエントリ領域でどのセクションが選択されているかに基づいて異なります。
  2. 2[移動]リストです。コードエントリ領域でセクション間の切り替えに使用します。
  3. 3[最小化]、[両方とも開く]、および[最大化]アイコンです。[最小化]および[最大化]ボタンを使用すると、トランスフォーメーションのプロパティを最小化および最大化できます。[両方とも開く]アイコンを使用すると、Mapping Designerのキャンバスとトランスフォーメーションのプロパティを同時に開けます。
  4. 4コードエントリ領域です。[パッケージのインポート]、[Helperコード]、[入力行に達したとき]、[データの終わり]、および[トランザクションを受け取ったとき]セクションにJavaコードスニペットを入力します。
  5. 5コンパイル結果です。コンパイル結果を展開すると、コンパイル結果の詳細、コンパイルエラー、およびコード全体を表示します。
ヒント: トランスフォーメーションのプロパティを展開してコードエントリ領域を詳しく表示するには、[最大化]をクリックします。
    1[移動]リストで、コードスニペットを入力するセクションを選択します。
    2スニペットの入力および出力フィールドにアクセスするには、[入力]または[出力]タブでフィールドを選択し、[追加]をクリックします。
    また、[出力]タブで出力フィールドを作成し、[新しいフィールドの作成]をクリックしても作成できます。
    3スニペットでJavaトランスフォーメーションのAPIメソッドを呼び出すには、[API]タブでメソッドを選択し、[追加]をクリックします。
    [API]タブに表示されるメソッドは、選択されているセクションによって変わります。例えば、getInRowTypeメソッドは[入力行に達したとき]セクションでのみ使用でき、他のセクションでは使用できません。このため、このメソッドは、[入力行に達したとき]セクションが選択されている場合にのみ表示されます。
    4必要に応じて、メソッドの入力値を設定します。
    5セクションに基づいて適切なJavaコードを書き込みます。
Javaコードスニペットの作成が完了したら、コードをコンパイルして、トランスフォーメーションを検証します。

Javaパッケージのインポート

Javaパッケージは、アクティブまたはパッシブなJavaトランスフォーメーションでインポートできます。Javaエディタの[パッケージのインポート]セクションでパッケージをインポートします。
例えばJava I/Oパッケージをインポートする場合、[パッケージのインポート]セクションに以下のコードを入力します。
import java.io.*;
組み込み、サードパーティ製、またはカスタムのJavaパッケージをインポートできます。サードパーティ製またはカスタムのJavaパッケージをインポートする場合は、パッケージをクラスパスに追加する必要があります。クラスパスの設定の詳細については、クラスパス設定を参照してください。
Javaパッケージのインポート後、インポートされたパッケージを他のセクションで使用できます。
[パッケージのインポート]セクションでは、静的変数、インスタンス変数、またはユーザーメソッドの宣言または使用はできません。
注: Javaトランスフォーメーションが含まれるマッピングまたはマッピングタスクをエクスポートするときに、Javaトランスフォーメーションに必要なサードパーティ製またはカスタムのパッケージが含まれるjarまたはclassファイルは、エクスポートXMLファイルに含まれません。そのため、マッピングまたはタスクをインポートする場合は、必要なサードパーティ製またはカスタムのパッケージが含まれるjarまたはclassファイルをSecure Agentマシンにコピーする必要があります。

Helperコードの定義

アクティブまたはパッシブJavaトランスフォーメーションでJavaトランスフォーメーションクラスのユーザー定義変数およびメソッドを宣言できます。Javaエディタ[Helperコード]セクションでHelperコードを定義します。
[Helperコード]領域で変数およびメソッドを宣言すると、[パッケージのインポート]領域を除く任意のコードエントリ領域でそれらを使用できます。
以下のタイプのコード、変数、およびメソッドを宣言できます。
静的コードおよび静的変数
静的ブロック内では、静的変数および静的コードを宣言できます。静的コードは、Javaトランスフォーメーション内の他のどのコードよりも先に実行されます。
例えば、次のコードでは、Javaトランスフォーメーションのエラーしきい値を保存するための静的変数を宣言します。
static int errorThreshold;
ユーザー定義の静的メソッドまたはインスタンスメソッド
これらのメソッドは、Javaトランスフォーメーションの機能を拡張します。[Helperコード]セクションで宣言したJavaメソッドは、出力変数を使用および変更することができます。[Helperコード]セクションのJavaメソッドからは、入力変数にアクセスできません。
例えば、[Helperコード]セクションの以下のコードを使用して2つの整数を追加する関数を宣言します。
private int myTXAdd (int num1,int num2)
{
     return num1+num2;
}

入力行の動作の定義

入力行を受け取る際のJavaトランスフォーメーションの動作を定義できます。Javaエディタの[入力行に達したとき]セクションで入力行の動作を定義します。このセクションのJavaコードは、各入力行に対して1回ずつ実行されます。
以下の入出力フィールドのデータ、変数、およびメソッドは、[入力行に達したとき]セクションでアクセスして使用します。
入力フィールドおよび出力フィールドの変数
入力および出力フィールドのデータに変数としてアクセスするには、フィールドの名前を変数の名前として使用します。例えば「in_int」が整数の入力フィールドである場合、Javaプリミティブデータ型intで「in_int」変数として参照することで、このフィールドのデータにアクセスできます。入力および出力フィールドを変数として宣言する必要はありません。
入力フィールド変数に値は割り当てないでください。[入力行に達したとき]セクションの入力変数に値を割り当てると、対応するフィールドの入力データを現在の行では取得できません。
静的変数とユーザー定義メソッド
[Helperコード]セクションで宣言した任意の静的変数またはユーザー定義メソッドを使用します。
例えば、アクティブJavaトランスフォーメーションに、integerデータ型の2つの入力フィールド(BASE_SALARYとBONUSES)、およびintegerデータ型の1つの出力フィールド(TOTAL_COMP)があるとします。また[Helperコード]セクションで、2つの整数を加算して結果を返すユーザー定義メソッド(myTXAdd)を作成したとします。
この場合、[入力行に達したとき]セクションで以下のJavaコードを使用し、入力フィールドの合計値を出力フィールドに割り当てて出力行を生成します。
TOTAL_COMP = myTXAdd (BASE_SALARY,BONUSES);
generateRow();
Javaトランスフォーメーションは、入力行を受け取ると2つの入力フィールド(BASE_SALARYおよびBONUSES)の値を加算した値を出力フィールド(TOTAL_COMP)に割り当て、出力行を生成します。
JavaトランスフォーメーションAPIメソッド
Javaトランスフォーメーションによって提供されるAPIメソッドを呼び出すことができます。

データの終わりに達したときの動作の定義

入力データをすべて処理したときのアクティブまたはパッシブJavaトランスフォーメーションの動作を定義できます。Javaエディタの[データの終わり]セクションでデータの終わりの動作を定義します。
[データの終わり]セクションで出力行を生成するには、[詳細]タブでトランスフォーメーションのトランスフォーメーション範囲を[トランザクション]または[すべての入力]に設定します。このセクションでは、入力フィールドの変数にアクセスしたり、値を設定したりすることはできません。
以下の変数およびメソッドは、[データの終わり]セクションでアクセスして使用します。
出力フィールドの変数
アクティブなJavaトランスフォーメーションで出力データへのアクセスまたは設定を実行する場合、出力フィールド名を変数として使用します。
ユーザー定義メソッド
[Helperコード]セクションで宣言した任意のユーザー定義メソッドを使用します。
JavaトランスフォーメーションAPIメソッド
Javaトランスフォーメーションによって提供されるAPIメソッドを呼び出します。例えば、以下のJavaコードを使用して、データの終わりに達したときにセッションログに情報を書き込みます。
logInfo("Number of null rows for partition is: " + partCountNullRows);
詳細モードでJavaトランスフォーメーションを使用する場合は、次のガイドラインを考慮してください。

トランザクション通知動作の定義

トランザクション通知を受け取る際のアクティブJavaトランスフォーメーションの動作を定義できます。Javaエディタの[トランザクションを受け取ったとき]セクションでトランザクション通知動作を定義します。
[トランザクションを受け取ったとき]セクションのコードスニペットは、トランスフォーメーションのトランザクションスコープが[トランザクション]に設定されている場合に限り実行されます。このセクションでは、入力フィールドの変数にアクセスしたり、値を設定したりすることはできません。
[トランザクションを受け取ったとき]セクションでは、以下の出力データ、変数、およびメソッドにアクセスして使用できます。
出力フィールドの変数
出力データへのアクセスまたは設定を実行する場合、出力フィールド名を変数として使用します。
ユーザー定義メソッド
[Helperコード]セクションで宣言した任意のユーザー定義メソッドを使用します。
JavaトランスフォーメーションAPIメソッド
Javaトランスフォーメーションによって提供されるAPIメソッドを呼び出します。

Javaコードによるフラットファイルの解析

フラットファイルを解析するJavaコードを作成できます。スキーマがさまざまに異なるフラットファイルまたはJMSメッセージから特定のデータカラムを抽出するには、Javaコードを使用します。
例えば、区切りフラットファイルから先頭2つのデータカラムを読み込むものとします。区切りフラットファイルからデータを読み込んで、1つ以上の出力フィールドに渡すマッピングを作成します。
マッピングは、以下のようなコンポーネントから構成されています。
ソーストランスフォーメーション
ソースは区切りフラットファイルです。各行を単一文字列としてJavaトランスフォーメーションに渡すソースを設定します。ソースファイルには下記のデータが含まれています。
1a,2a,3a,4a,5a,6a,7a,8a,9a,10a
1b,2b,3b,4b,5b,6b,7b,8b,9b
1c,2c,3c,4c,5c,6c,7c
1d,2d,3d,4d,5d,6d,7d,8d,9d,10d
Javaトランスフォーメーション
Javaトランスフォーメーションの機能をJavaエディタで定義します。
Javaエディタの[入力行に達したとき]セクションを使用して各入力行を読み取り、最初の2つのフィールドを[outputRow]出力フィールドに渡します。[入力行に達したとき]セクションで、以下のコードを入力します。
// Collect the first two fields of the row and output them into outputRow.
String[] rowsSplit = row.split(",", 3);
if (rowsSplit.length >= 2) {
outputRow = rowsSplit[0] + "," + rowsSplit[1];
}
generateRow();
ターゲットトランスフォーメーション
ターゲットがJavaトランスフォーメーションから[outputRow]出力フィールドを受け取るように設定します。マッピングを実行すると、ターゲットファイルには以下のデータが含まれます。
1a,2a
1b,2b
1c,2c
1d,2d