16 Groovyスクリプトの使用
この付録の内容は次のとおりです。
Groovyの概要
Groovyは、Javaプラットフォーム用のスクリプト言語で、Javaと同様の構文を持ちます。Groovyスクリプト言語では、ドット区切り表記法の採用により、コードの作成が簡素化されていますが、コレクション、文字列およびJavaBeansを操作する構文は引き続きサポートされています。
Groovy言語の詳細は、次のWebサイトを参照してください:
Groovyエディタの概要
Groovyエディタは、ODI Studioのコンテキスト内でGroovyスクリプトを作成、編集および実行するための単一の環境を提供します。図16-1に、Groovyエディタの概要を示します。
Groovyエディタには、構文の強調表示やデバッグを除く共通のコード・エディタ・コマンドなど、コード・エディタのすべての標準的な機能が用意されています。次のコマンドがサポートされており、コンテキスト・メニューまたは「ソース」メイン・メニューからアクセスできます。
-
空白の表示
-
テキスト編集
-
行の結合
-
現在の行を削除
-
後続空白のトリミング
-
先頭のタブをスペースに変換
-
先頭のスペースをタブに変換
-
-
ブロックのインデント
-
ブロックのインデント解除
-
上に移動
-
下に移動
Groovyエディタの使用
Groovyエディタでは、次のアクションを実行できます:
Groovyスクリプトの保存
Groovyエディタで現在開いているGroovyスクリプトを保存するには:
「ツール」メイン・メニューから、「Groovy」→「スクリプトの保存」または「スクリプトの別名保存」を選択します。
注意:
メイン・ツールバーの「保存」オプションは、Groovyエディタに関連付けられていません。
Groovyスクリプトの実行
1つ以上のGroovyスクリプトを同時に実行することも、1つのスクリプトを並列で複数回実行することもできます。
実行できるのは、Groovyエディタで開かれているスクリプトのみです。ODI Studioでは、スクリプトの一部ではなく、Groovyスクリプト全体が実行されます。
ODI StudioでGroovyスクリプトを実行するには:
- Groovyエディタで実行するスクリプトを選択します。
- ツールバーの「実行」をクリックします。
- スクリプトが実行されます。
これで、「ログ」ウィンドウで実行を確認できます。
注意:
-
スクリプトを実行するたびに、独自の「ログ」ウィンドウが開かれます。「ログ」ウィンドウの名前は、<script_name>の実行中という形式になります。
-
Groovyでは、出力が2つの異なるストリームに書き込まれます。クラスの場合、グローバル出力ストリームであるSystem.outに書き込まれます。(クラスでない)スクリプトの場合は、実行のたびに1つのストリームが作成されます。ODIはこれを取得できます。したがって、スクリプトに書き込まれた出力のみが「ログ」ウィンドウに表示されます。
Groovyスクリプトの最初に
System.setOut(out)
を追加すると、外部クラスにより出力されたメッセージをメッセージ・ログにリダイレクトできます。
Groovyスクリプトの実行の停止
停止できるのは実行中のスクリプトのみです。実行中のスクリプトがない場合は、「停止」ボタンが非アクティブ化されます。
Groovyスクリプトの実行は、2つの方法で停止できます:
-
「ログ」タブで「停止」をクリックします。これにより、特定のスクリプトの実行が停止します。
-
ツールバーで「停止」をクリックします。複数のスクリプトが実行中の場合は、実行を停止するスクリプトをドロップ・ダウン・リストから選択します。
拡張アクションの実行
この項では、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実行クラスパスを定義するには:
-
Groovyスクリプトを実行する前に、「ツール」メイン・メニューから「プリファレンス...」を選択します。
-
「プリファレンス」ダイアログで、Groovyプリファレンス・ページに移動します。
-
クラスパスを入力し、「OK」をクリックします。
注意:
クラスパスを追加または変更した後、ODI Studioを再起動する必要はありません。
odiInputStream変数による入力の読込み
Oracle Data Integratorには、入力ストリームを読み込むためのodiInputStream変数が用意されています。この変数は次のように使用されます:
odiInputStream.withReader { println (it.readLine())}
この機能が使用されると、「ログ」タブの下部に「入力」テキスト・フィールドが表示されます。文字列テキストを入力し、[Enter]を押して、この値をスクリプトに渡します。値がスクリプトに渡されると、スクリプトは終了します。
例16-1は、入力ストリームの使用方法についての別の例を示しています。この例では、 <script_name>の停止をクリックするまで入力を続けられます。
例16-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を使用できます。16-2は、odiInstance変数の使用方法を示しています。
開発タスクの自動化 - 例
Oracle Data Integratorでは、開発タスクを自動化するためにGroovyの使用がサポートされています。タスクの例は次のとおりです:
例16-2では、Groovyスクリプトを使用してODIプロジェクトを作成する方法を示します。
例16-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)
例16-3では、外部Groovyスクリプトをインポートする方法を示します。
例16-3 外部Groovyファイル
//Created by ODI Studio import gd.Test1; println "Hello World" Test1 t1 = new Test1() println t1.getName()
例16-4では、別のGroovyスクリプトからクラスをコールする方法を示します。
例16-4 外部ファイルからのクラス
import gd.GroovyTestClass GroovyTestClass tc = new GroovyTestClass() println tc.getClassLoaderName()
例16-5では、Studio UIの自動化を実装する方法を示します。
例16-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()