ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Data Integrator開発者ガイド
11g リリース1 (11.1.1)
B62260-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
 

C Oracle Data IntegratorでのGroovyスクリプトの使用

この付録では、Groovy言語の概要を示し、Oracle Data IntegratorでGroovyスクリプトを使用する方法について説明します。この付録には次のセクションがあります。

C.1 Groovyの概要

Groovyは、Javaプラットフォーム用のスクリプト言語で、Javaと同様の構文を持ちます。Groovyスクリプト言語では、ドット区切り表記法の採用により、コードの作成が簡素化されていますが、コレクション、文字列およびJavaBeansを操作する構文は引き続きサポートされています。強い型付け言語であるJavaがコンパイル時に実行されるのに対してGroovy式はランタイムに実行されるため、ADFビジネス・コンポーネントのGroovy言語式は、ビジネス・コンポーネント・カスタムJavaクラスで使用されるJavaコードとは異なります。また、Groovy式は動的にコンパイルされるため、式を使用するビジネス・コンポーネントのXML定義ファイル内に保存されます。ADFビジネス・コンポーネントは、エンティティ・オブジェクトの属性やビュー・オブジェクトの属性へのアクセスが有用な場所でGroovyスクリプト言語の使用をサポートしており、これには属性バリデータ(エンティティ・オブジェクトの場合)、属性のデフォルト値(エンティティ・オブジェクトまたはビュー・オブジェクトの場合)、一時属性値の計算(エンティティ・オブジェクトまたはビュー・オブジェクトの場合)、バインド変数のデフォルト値(ビュー・オブジェクトの問合せ文およびビュー基準フィルタの場合)、およびエラー・メッセージのプレースホルダ(エンティティ・オブジェクトの検証ルールの場合)などが含まれます。さらに、ADFビジネス・コンポーネントには、Groovy式で使用できる組込みキーワードの限定されたセットが用意されています。

Groovy言語の詳細は、次のWebサイトを参照してください:

http://groovy.codehaus.org/

C.2 Groovyエディタの概要

Groovyエディタは、ODI Studioのコンテキスト内でGroovyスクリプトを作成、編集および実行するための単一の環境を提供します。図C-1に、Groovyエディタの概要を示します。

図C-1 Groovyエディタ

図C-1の説明が続きます。
「図C-1 Groovyエディタ」の説明

Groovyエディタには、構文の強調表示やデバッグを除く共通のコード・エディタ・コマンドなど、コード・エディタのすべての標準的な機能が用意されています。次のコマンドがサポートされており、コンテキスト・メニューまたは「ソース」メイン・メニューからアクセスできます。

C.3 Groovyエディタの使用

Groovyエディタでは、次のアクションを実行できます:

C.3.1 Groovyスクリプトの作成

ODI StudioでGroovyスクリプトを作成するには:

  1. 「ツール」メイン・メニューから、「Groovy」「新規スクリプト」を選択します。

    Groovyエディタが開きます。

  2. Groovyコードを入力します。

これで、スクリプトを保存または実行できます。

C.3.2 既存のGroovyスクリプトを開いて編集

以前に作成されたGroovyスクリプトを編集するには:

  1. 「ツール」メイン・メニューから、「Groovy」「スクリプトを開く」または「最近のスクリプト」を選択します。

  2. Groovyファイルを選択して、「開く」をクリックします。

    選択したファイルがGroovyエディタで開きます。

  3. Groovyスクリプトを編集します。

これで、スクリプトを保存または実行できます。

C.3.3 Groovyスクリプトの保存

Groovyエディタで現在開いているGroovyスクリプトを保存するには:

「ツール」メイン・メニューから、「Groovy」「スクリプトの保存」または「スクリプトの別名保存」を選択します。


注意:

メイン・ツールバーの「保存」オプションは、Groovyエディタに関連付けられていません。


C.3.4 Groovyスクリプトの実行

1つ以上のGroovyスクリプトを同時に実行することも、1つのスクリプトを並列で複数回実行することもできます。

実行できるのは、Groovyエディタで開かれているスクリプトのみです。ODI Studioでは、スクリプトの一部ではなく、Groovyスクリプト全体が実行されます。

ODI StudioでGroovyスクリプトを実行するには:

  1. Groovyエディタで実行するスクリプトを選択します。

  2. ツールバーの「実行」をクリックします。

  3. スクリプトが実行されます。

これで、「ログ」ウィンドウで実行を確認できます。

スクリプトを実行するたびに独自の「ログ」ウィンドウが開かれることに注意してください。「ログ」ウィンドウの名前は、<script_name>の実行中の形式になります。

C.3.5 Groovyスクリプトの実行の停止

停止できるのは実行中のスクリプトのみです。実行中のスクリプトがない場合は、「停止」ボタンが非アクティブ化されます。

Groovyスクリプトの実行は、2つの方法で停止できます:

  • 「ログ」タブで「停止」をクリックします。これにより、特定のスクリプトの実行が停止します。

  • ツールバーで「停止」をクリックします。複数のスクリプトが実行中の場合は、実行を停止するスクリプトをドロップ・ダウン・リストから選択します。

C.3.6 拡張アクションの実行

この項では、Groovyエディタで実行できる拡張アクションを説明します。

カスタム・ライブラリの使用

たとえば外部ドライバが必要な場合、Groovyエディタは外部ライブラリにアクセスできます。

外部ライブラリを使用するには、次のいずれかを行います:

  • カスタム・ライブラリをuserlibフォルダにコピーします。このフォルダは次の場所にあります:

    • Windowsオペレーティング・システムの場合:

      %APPDATA%/odi/oracledi/userlib

    • UNIXオペレーティング・システムでは、次のようにします。

      ~/.odi/oracledi/userlib

  • カスタム・ライブラリをadditional_path.txtファイルに追加します。このファイルはuserlibフォルダにあり、内容は次のとおりです:

    ; Additional paths file
    ; You can add here paths to additional libraries
    ; Examples:
    ;       C:\ java\libs\myjar.jar
    ;       C:\ java\libs\myzip.zip
    ;       C:\java\libs\*.jar will add all jars contained in the C:\java\libs\ directory
    ;       C:\java\libs\**\*.jar will add all jars contained in the C:\java\libs\ directory and subdirectories
    

追加のGroovy実行クラスパスの定義

ODI Studioで使用可能なすべてのクラスパスのエントリに加えて、Groovy実行クラスパスを定義できます。

追加のGroovy実行クラスパスを定義するには:

  1. Groovyスクリプトを実行する前に、「ツール」メイン・メニューから「プリファレンス...」を選択します。

  2. 「プリファレンス」ダイアログで、Groovyプリファレンス・ページに移動します。

  3. クラスパスを入力し、「OK」をクリックします。


    注意:

    クラスパスを追加または変更した後、ODI Studioを再起動する必要はありません。


odiInputStream変数による入力の読込み

Oracle Data Integratorには、入力ストリームを読み込むためのodiInputStream変数が用意されています。この変数は次のように使用されます:

odiInputStream.withReader { println (it.readLine())}

この機能が使用されると、「ログ」タブの下部に「入力」テキスト・フィールドが表示されます。文字列テキストを入力し、[Enter]を押して、この値をスクリプトに渡します。値がスクリプトに渡されると、スクリプトは終了します。

例C-1は、入力ストリームの使用方法についての別の例を示しています。この例では、<script_name>の停止をクリックするまで入力を続けられます。

例C-1 InputStream

odiInputStream.withReader { reader ->
  while (true) {
    println reader.readLine(); 
  }
}
 

複数のスクリプトの使用

複数のスクリプトを同時に使用する場合は、次の点に注意してください:

  • 実行ごとにログ・タブが開きます。

  • スクリプトが別のスクリプトを参照している場合は、2番目のスクリプトの出力はログ・タブにリダイレクトされません。これはGroovyの既知の制限で、回避策はありません。

ODIインスタンスの使用

Oracle Data Integratorには、変数odiInstanceが用意されています。この変数は、ODI Studioで実行されるすべてのGroovyスクリプトに使用できます。これは、スクリプトを実行するODIインスタンス(より正確には、リポジトリへの接続)を表します。ODI Studioがリポジトリに接続されていない場合、このインスタンスはNullになることに注意してください。

odiInstance変数は、コードを実行する前にODI Studioコードによって初期化されます。この目的にはGroovy SDKのバインドAPIを使用できます。例C-2は、odiInstance変数の使用方法を示しています。

C.4 開発タスクの自動化 - 例

Oracle Data Integratorでは、開発タスクを自動化するためにGroovyの使用がサポートされています。タスクの例は次のとおりです:

例C-2では、Groovyスクリプトを使用してODIプロジェクトを作成する方法を示します。

例C-2 プロジェクトの作成

import oracle.odi.core.persistence.transaction.ITransactionDefinition;
import oracle.odi.core.persistence.transaction.support.DefaultTransactionDefinition;
import oracle.odi.core.persistence.transaction.ITransactionManager;
import oracle.odi.core.persistence.transaction.ITransactionStatus;
import oracle.odi.domain.project.OdiProject;
import oracle.odi.domain.project.OdiFolder;
 
 
ITransactionDefinition txnDef = new DefaultTransactionDefinition();
ITransactionManager tm = odiInstance.getTransactionManager()
ITransactionStatus txnStatus = tm.getTransaction(txnDef)
OdiProject myProject = new OdiProject("New Project 1","NEW_PROJECT_1")
OdiFolder myFolder = new OdiFolder(myProject,"Test Folder 001")
odiInstance.getTransactionalEntityManager().persist(myProject)
tm.commit(txnStatus)

例C-3では、外部Groovyスクリプトをインポートする方法を示します。

例C-3 外部Groovyファイル

//Created by ODI Studio
import gd.Test1;
println "Hello World"
Test1 t1 = new Test1()
println t1.getName()
 

例C-4では、別のGroovyスクリプトからクラスをコールする方法を示します。

例C-4 外部ファイルからのクラス

import gd.GroovyTestClass
 
GroovyTestClass tc = new GroovyTestClass()
println tc.getClassLoaderName()
 

例C-5では、Studio UIの自動化を実装する方法を示します。

例C-5 Studio UIの自動化

import javax.swing.JMenuItem;
import javax.swing.JMenu;
import oracle.ide.Ide;
 
((JMenuItem)Ide.getMenubar().getGUI(false).getComponent(4)).doClick();
JMenu mnu = ((JMenu)Ide.getMenubar().getGUI(false).getComponent(4));
((JMenuItem)mnu.getMenuComponents()[0]).doClick()