| Oracle® Fusion Middleware Oracle Business Intelligence Enterprise Editionジョブ・スケジューリング・ガイド 11gリリース1(11.1.1) B66707-01 |
|
![]() 前 |
![]() 次 |
この章では、Oracle BI Schedulerを使用して、Oracle Business Intelligenceの機能を拡張するJavaジョブと呼ばれるJavaプログラムをスケジュールする方法について説明します。Javaジョブは、ジョブ・マネージャでスタンドアロンのSchedulerジョブ(Windows)にするか、エージェントの末尾に追加されてリリース10gからアップグレードされたOracle BI Deliversの既存のJavaアクション(WindowsまたはUNIX)にできます。
リリース10gからアップグレードされた既存のJavaアクションは実行できますが、リリース11gでは作成できません。かわりに、このリリースで利用可能なEJBベースのJavaアクションを使用する必要があります。アクションの詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionユーザーズ・ガイド』を参照してください。
この章では、Oracle BI SchedulerのJavaジョブをプログラミングする方法について説明します。内容は次のとおりです。
Javaジョブは、Oracle BI SchedulerのかわりにJavaHostプロセスで実行されるJavaプログラムです。JavaジョブはJava EJBアクションとは異なります。1つのクラスでエントリ・ポイントが定義されているJavaジョブがJARファイルでデプロイされます。このクラスはSchedulerJavaExtensionインタフェースを実装する必要があります。ジョブのコンテキストは、入力SchedulerJobInfoパラメータにより提供されます。
この項の内容は次のとおりです。
ジョブ・マネージャの「ジョブの変更」とジョブの追加のダイアログ・ボックスでカスタムJavaジョブの追加と構成を行います。第3.2項「ジョブ・マネージャにおけるOracle BI Schedulerのジョブの追加」と第3.3項「ジョブ・マネージャにおけるOracle BI Schedulerのジョブの変更」を参照してください。
|
注意: ジョブをジョブ・マネージャで作成する前に、Oracle BI Schedulerのサーバー・コンピュータにJavaプログラムが存在する必要があります。Javaプログラムを作成してから、Javaプログラムをコールするジョブを作成します。 |
ジョブ・マネージャでカスタムJavaジョブの追加と構成を行うには:
第6.4項「ジョブ・マネージャで利用可能なジョブ・アクション・プロパティ」の説明に従ってカスタム・プロパティを設定します。
「新規ジョブの追加」ウィンドウで、プロパティを入力します。
たとえば、Javaプログラムのfilecopy.jarの場合、次の表に記載されている値を使用します。filecopy.jarプログラムの例を表示するには、第5.1.2項「例: エージェントのJavaプログラムの作成」を参照してください。
| フィールド | 値または設定 |
|---|---|
|
スクリプト・タイプ |
Java |
|
クラス名 |
sched.sched 第5.1.2項「例: エージェントのJavaプログラムの作成」で作成したJavaクラス。 |
|
クラス・パス |
filecopy.jar Javaクラスが含まれているJARファイル。 |
|
パラメータ |
c:\tmp\report.pdf 注意: JavaHostプロセスの所有者は、このディレクトリ・ポイントで書込み権限を所有している必要があります。 |
「OK」をクリックします。
エージェントの条件付きリクエストが実行された後にJavaプログラムが実行されます。
Oracle BI Deliversでは新しいJavaジョブ・アクションをエージェントに追加できません。このリリースにアップグレードされた既存のもののみを使用できます。ただし、ジョブ・マネージャで新しいJavaジョブをジョブに追加することは可能です。詳細は、第3.2項「ジョブ・マネージャにおけるOracle BI Schedulerのジョブの追加」を参照してください。
この例では、エージェントの結果を別のディレクトリにコピーするJavaプログラムを作成します。例ではファイルをコピーするロジックのあるJavaクラスを作成します。
エージェントで使用するJavaプログラムを作成するには:
Javaエディタを使用してJavaプログラムを作成します。
schedという新しいJavaクラスを作成します。
次のコードをJavaエディタに貼り付けます。
package sched;
import java.io.*;
import java.lang.Thread;
import com.siebel.analytics.scheduler.javahostrpccalls.SchedulerJavaExtension;
import com.siebel.analytics.scheduler.javahostrpccalls.SchedulerJobException;
import com.siebel.analytics.scheduler.javahostrpccalls.SchedulerJobInfo;
public class sched implements SchedulerJavaExtension{
public void run(SchedulerJobInfo jobInfo) throws SchedulerJobException
{
System.out.println("JobID is:" + jobInfo.jobID());
System.out.println("Instance ID is:" + jobInfo.instanceID());
System.out.println("JobInfo to string is:" + jobInfo.toString());
try
{
// File outputFile = new File("D:\\JavaJob.txt");
File attachFile = jobInfo.getResultSetFile();
InputStream in = new FileInputStream(attachFile.getAbsolutePath());
OutputStream out = new FileOutputStream(jobInfo.parameter(0));
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
}
in.close();
out.close();
}
catch(Exception ex)
{
throw new SchedulerJobException(1, 1, ex.getMessage());
}
}
public void cancel()
{
}
}
schedulerrpccalls.jarファイルを\MW_HOME\ORACLE_HOME\bifoundation\javahost\lib\schedulerディレクトリから各自のクラス・パスに追加します。
Javaクラスをエラーなしでコンパイルします。
コンパイル済出力をファイルにJar形式でアーカイブします。たとえば、filecopy.jarなどです。
ファイルの場所に注意して、エラーのないようにしてください。
この例では、第5.1.2項「例: エージェントのJavaプログラムの作成」で作成したJavaプログラムを構成し、Javaジョブがエージェントで機能するようにします。
エージェントで使用するJavaプログラムを構成するには:
第5.1.2項「例: エージェントのJavaプログラムの作成」で作成したfilecopy.jarファイルを次のディレクトリにコピーします。
ORACLE_HOME\bifoundation\javahost\lib
次の変更をconfig.xmlというJavaHost構成ファイルに対して行います。
<Scheduler> <Enabled>True</Enabled>
<DefaultUserJarFilePath>D:\<ORACLE_HOME>\bifoundation\javahost\lib</DefaultUserJarFilePath> </Scheduler>
JavaHost構成ファイルの使用方法の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』のOracle BI Presentation ServicesのJavahostサービスの使用に関する項を参照してください。
JavaHostファイルが正しく構成されていないと、エージェントとSchedulerが実行中でも、エージェントのログ・ファイルへの書込みが停止する場合があります。この場合、Windows タスク マネージャを使用してSchedulerを停止します。
その後、JavaHostサービスを再起動してください。
Oracle BI SchedulerはJavaHostサービスと統合して、カスタムJavaプログラムをサポートします。Oracle BI Schedulerには2つのJavaインタフェース(SchedulerJavaExtensionとSchedulerJobInfo)と1つのJavaクラス(SchedulerJobException)が用意されています。SchedulerJavaExtensionインタフェースを実装するクラスを用意します。
|
注意: JavaHostサービスの詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』のOracle BI Presentation ServicesのJavahostサービスの使用に関する項を参照してください。 |
次の手順を使用して、Oracle BI SchedulerのJavaジョブを追加します。
|
注意: プロパティを構成する前に、コンパイル済Javaクラス・ファイルがJavaHostコンピュータに存在する必要があります。 |
Oracle BI SchedulerのJavaジョブを追加するには:
ジョブ・マネージャにアクセスし、「ジョブ」メニューで、「新規ジョブの追加」を選択します。
「新規ジョブの追加」ウィンドウが表示されます。
「スクリプト・タイプ」フィールドで「Java」を選択します。
カスタム・プロパティを指定します。これらの値を設定する方法の詳細は、第6.4項「ジョブ・マネージャで利用可能なジョブ・アクション・プロパティ」を参照してください。
クラス名がsample.Test、ファイル・パスがSampleのJavaジョブの値と設定の例を次に示します。追加のパスおよびパラーメータは含まれていません。
| フィールド | 値または設定 |
|---|---|
|
スクリプト・タイプ |
Java |
|
クラス名 |
sample.Test |
|
クラス・ファイル(JARファイル) |
Sample |
「OK」をクリックします。
Oracle BI SchedulerのカスタムJavaプログラムの公開インタフェースとクラスは、com.siebel.analytics.scheduler.javahostrpccallsでパッケージ化されています。インタフェースが2つ、クラスが1つあり、これらについては次のトピックで説明します。
カスタム・コードでは次のインタフェースを実装する必要があります。
package com.siebel.analytics.scheduler.javahostrpccalls;
public interface SchedulerJavaExtension {
public void run(SchedulerJobInfo jobInfo) throws SchedulerJobException;
public void cancel();
}
このインタフェースは、runとcancelのメソッドを備えています。次の表で、これらのメソッドについて説明します。
| メソッド | 説明 |
|---|---|
|
run |
このメソッドはJavaHostにより起動されます。1つのSchedulerJobInfoオブジェクト(次に説明されています)が用意されており、これには、ユーザーID、ジョブID、インスタンスIDなどのインスタンス関連プロパティとパラメータが含まれています。SchedulerJobExceptionをスローするようにメソッドが宣言されます。これについても次に説明します。 |
|
cancel |
ジョブ・インスタンスがまだ実行中にSchedulerが実行を取り消そうとすると、このメソッドが起動されます。cancelメソッドは別のスレッドにより同時にコールされます。そのため、実装では実行で共有されるデータを保護して、同期ブロックによりメソッドを取り消す必要があります。通常の実装では、cancelメソッド実装でcancelCalledブール値を設定し、run実装の長時間実行ループでこれをチェックします。 |
SchedulerJobInfoインタフェースは、現在実行されているジョブ・インスタンスに関する情報をカスタム・コードに提供します。
package com.siebel.analytics.scheduler.javahostrpccalls;
import java.io.*;
public interface SchedulerJobInfo {
public final int kJavaJobInformation = 0;
public final int kJavaJobWarning = 1;
public final int kJavaJobError = 2;
int jobID();
int instanceID();
int parameterCount();
String parameter(int index);
boolean hasResultSet();
File getResultSetFile();
String userID();
int getExitCode();
void setExitCode(int exitCode);
int getStatus();
void setStatus(int status);
String getMessage();
void setMessage(String message);
void appendMessage(String message);
}
3つのpublic final整数値であるkJavaJobInformation、kJavaJobWarningおよびkJavaJobErrorは、状況に応じたステータスの設定に使用される推奨値です。次の表は、これらの状況を示しています。
| メンバー | 説明 |
|---|---|
|
public final int kJavaJobInformation = 0 |
情報メッセージが格納されます。 |
|
public final int kJavaJobWarning = 1 |
警告メッセージが格納されます。 |
|
public final int kJavaJobError = 2 |
エラー・メッセージが格納されます。 |
次の表で、インタフェースで宣言されるすべてのメソッドについて説明します。
| メソッド | 説明 |
|---|---|
|
int jobID() |
エージェントに関連付けられているジョブIDを戻します。 |
|
int instanceID() |
エージェントに関連付けられているインスタンスIDを戻します。 |
|
int parameterCount() |
エージェントに関連付けられているパラメータの数を戻します。 |
|
String parameter(int index) |
エージェントの索引付きパラメータを戻します。(1) |
|
boolean hasResultSet() |
このエージェントに結果セットがあるかどうかを指定します。 |
|
File getResultSetFile() |
このエージェントの結果セットのファイルを戻します。(2) |
|
String userID() |
エージェントを実行しているユーザーのIDを戻します。 |
|
int getExitCode() |
エージェントの終了コードを戻します。 |
|
void setExitCode(int exitCode) |
ユーザーはエージェントの終了コードを設定できます。 |
|
int getStatus() |
エージェントのステータス・コードを戻します。 |
|
void setStatus(int status) |
ユーザーはエージェントのステータス・コードを設定できます。 |
|
String getMessage() |
エージェントに関連付けられているメッセージを戻します。 |
|
void setMessage(String message) |
ユーザーはエージェントに関連付けられているメッセージを設定できます。既存のメッセージが置換されます。 |
|
void appendMessage(String message) |
ユーザーは追加メッセージをエージェントに追加できます。 |
カスタム・コードが正常に完了できない場合、この例外クラスのインスタンスをスローします。
package com.siebel.analytics.scheduler.javahostrpccalls;
public final class SchedulerJobException extends Exception {
public SchedulerJobException(int exitCode, int status, String message) {
m_exitCode = exitCode;
m_status = status;
m_message = message;
}
public int getExitCode() {
return m_exitCode;
}
public int getStatus() {
return m_status;
}
public String getMessage() {
return m_message;
}
private int m_exitCode;
private int m_status;
private String m_message;
}
SchedulerJavaExtensionインタフェースのrunメソッドは、SchedulerJobExceptionをスローするように宣言されています。次の表で、3つのメンバーについて説明します。
| メンバー | 説明 |
|---|---|
|
int m_exitCode |
フレームワークによりこの終了コードがエージェントに割り当てられます。 |
|
int m_status |
フレームワークによりこのステータス・コードがエージェントに割り当てられます。 |
|
String m_message |
フレームワークによりこのメッセージがエージェントに割り当てられます。 |
次の例では、以前に説明したインタフェースとクラスを使用して、カスタムJavaアクションを作成する方法について示しています。詳細は、第5.1項「Oracle BI SchedulerのJavaジョブの使用方法」を参照してください。
この例には長時間実行コードがないので、cancelメソッドでは処理が行われないのが妥当です。
コンパイルされたクラスが実行されると、エージェントを実行したユーザーのID、エージェントのジョブID、エージェントのインスタンスIDおよびすべての可能なパラメータを出力ファイルに収集します。
package sample;
import java.io.*;
import java.lang.Thread;
import com.siebel.analytics.scheduler.javahostrpccalls.SchedulerJavaExtension;
import com.siebel.analytics.scheduler.javahostrpccalls.SchedulerJobException;
import com.siebel.analytics.scheduler.javahostrpccalls.SchedulerJobInfo;
/**
*
* @author
*/public class SimpleTest implements SchedulerJavaExtension
{
public void run(SchedulerJobInfo jobInfo) throws SchedulerJobException
{
System.out.println("JobID is:" + jobInfo.jobID());
System.out.println("Instance ID is:" + jobInfo.instanceID());
System.out.println("JobInfo to string is:" + jobInfo.toString());
try
{
File outputFile = new File("D:\\temp\\JavaJob.txt");
FileWriter out = new FileWriter(outputFile);
out.write("User ID:\t\t" + jobInfo.userID() + "\r\n");
out.write("Job ID:\t\t" + jobInfo.jobID() + "\r\n");
out.write("Instance ID:\t\t" + jobInfo.instanceID() + "\r\n");
out.write("Parameter Count:\t\t" + jobInfo.parameterCount() + "\r\n");
for(int i = 0; i < jobInfo.parameterCount(); ++i)
{
out.write("\tParameter ");
out.write(new Integer(i).toString());
out.write(":\t" + jobInfo.parameter(i) + "\r\n");
}
out.close();
}
catch(Exception ex)
{
throw new SchedulerJobException(1, 1, ex.getMessage());
}
}
public void cancel()
{
}
}