Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成
オラクル Senior Solution Architect、Robert Baumgartner
前提条件
https://soasamples.samplecode.oracle.com/から bpel-101-HelloWorld をダウンロードし、実行中の Oracle SOA Suite 11g にイン ストールします。これが SOAScheduler によって起動される SOA コンポジットのサンプルです。
このスケジューラは BPMN プロセスに対しても使用できますが、プロセスが SCA コンポジット内のサービスとして公開 されている場合に限ります。
Oracle JDeveloper を使用した SOAScheduler の実装
ここでは、単純な Web サービス・プロキシ・コンポーネント(SOAScheduler に呼び出されるスケジューラ・ジョブ・ク ラス)と、Quartz スケジューラを開始する java クラス(SOASchedulerServlet)を作成します。
Web サービス・プロキシ・コンポーネントの作成
最初に必要になるのが、サンプルの SOA コンポジットの WSDL です。これは、Oracle Enterprise Manager から入手できま す。Oracle Enterprise Manager には、http://server:port/em(例:http://localhost:7001/em)からアクセスできます。管理者ユー ザー(例:"weblogic")でログインします。ファームの概要ページで、新しくデプロイされた SOA サンプル・コンポジッ トの「bpel-101-HelloWorld」をクリックします。
図 1
「Show WSDL and endpoint URI」をクリックします。
図 3
WSDL ロケーションをコピーします。
はじめに、JDeveloper で新規アプリケーションを作成します。[Ctrl]を押しながら[N]を押し、"SOAScheduler"という名前 を付け、「Generic Application」を選択します。
図 4
次に、"SchedulerProject"という名前の新規プロジェクトを作成し、"Project Technologies"で「Java」と「Web Services」を 選択します。
図 5
「Finish」をクリックします。
「File」→「New」の順にクリックするか、または[Ctrl]を押しながら[N]を押して、新規の Web サービス・プロキシを作 成します。
「OK」→「Next」の順にクリックします。
図 7
「JAX-WS Style」を選択し、「Next」をクリックします。
"WSDL Document URL"に WSDL ロケーションを貼り付け、「Next」をクリックします。
図 9
"Package Name" に "sample.oracle.otn.soascheduler.proxy" と 入 力 し 、 "Root Package for Generated Types" に "sample.oracle.otn.soascheduler.proxy.types"と入力したら、「Finish」をクリックします。 HelloWorldProcess_ptClient.java に次の行を追加します。 System.out.println(helloWorldProcess.process("SOAScheduler")); [F11]キーを押すか、または「 」(run)アイコンをクリックします。新しく生成されたサービス・プロキシによって コンポジットが実行されます。 SOA サンプル・コンポジットからの正しい出力がメッセージ・ウィンドウに表示されます。 図 10
プロジェクトへの Quartz ライブラリの追加
「Application」→「Project Properties」→「Add JAR/Directory…」の順にクリックします。
図 11
JDeveloper ホームから「…¥jdeveloper¥soa¥modules¥quartz-all-1.6.5.jar」を選択し、「Select」をクリックします。
「OK」をクリックします。
スケジューラ・ジョブ・コンポーネントの作成
JDeveloper で「File」→「New」の順にクリックするか、または[Ctrl]を押しながら[N]を押して、新規の"Java Class"を作 成します。
図 13
図 14
Name に"HelloWorldJob"と入力し、Package に"sample.oracle.otn.soascheduler.job"と入力したら、「OK」をクリックします。 生成されたソースを次の行で置き換えます。
java クラス SOASchedulerServlet の作成
JDeveloper で「File」→「New」の順にクリックするか、または[Ctrl]を押しながら[N]を押して、新規の"Java Class"を作 成します。
図 15
Name に"SOASchedulerServlet"を、Package に"sample.oracle.otn.soascheduler"を、Extends に"javax.servlet.http.HttpServlet"を 入力したら、「OK」をクリックします。
Quartz プロパティ・ファイルの作成
JDeveloper で「File」→「New」の順にクリックするか、または[Ctrl]を押しながら[N]を押して、新規の File(General) を作成します。
図 16
「File (General)」を選択します。
図 17
File Name に"soa_quartz.properties"を入力し、Directory にプロジェクトの src ディレクトリを入力したら、「OK」をクリッ クします。
J2EE デプロイメント・ディスクリプタ(web.xml)の作成
JDeveloper で「File」→「New」の順にクリックするか、または[Ctrl]を押しながら[N]を押して、新規の web.xml を作成し ます。
図 18
図 19
「web.xml」を選択し、「Next」をクリックします。
「2.5」を選択し、「Finish」をクリックします。
「Servlets」を選択し、緑色の「+」(Create Servlet)をクリックします。
Name に"SOASchedulerServlet"と入力し、Servlet Class に"sample.oracle.otn.soascheduler.SOASchedulerServlet"と入力します。 "Load Servlet on"に"Application Start"を設定します。
「Servlet Mappings」を選択し、緑色の「+」(Create "Servlet Mappings")をクリックします。URL Pattern として "/soaschedulerservlet"を追加します。
「Initialization Parameters」を選択し、緑色の「+」(Create "Servlet Initialization parameters")をクリックします。Name に "cronExpr"を、Value に"0 0,5,10,15,20,25,30,35,40,45,50,55 * * * ?"を追加します。
図 21
「Pages」を選択し、緑色の「+」(Create "Welcome File")をクリックします。"/soaschedulerservlet"を追加します。
図 22
「Save All」をクリックします。
注意:"cronExpr"という名前は SOASchedulerServlet.java で指定されています。またその値は、SOA コンポジット bpel-101-helloworld が毎日 5 分ごとに起動されることを意味します。その他の値については、本書後半の例を参照してく ださい。
WAR ファイル(デプロイメント・プロファイル)の作成
JDeveloper で「File」→「New」の順にクリックするか、または[Ctrl]を押しながら[N]を押して、新規の"WAR File"を作成 します。
図 23
図 24
Deployment Profile Name に"SOAScheduler"と入力し、「OK」をクリックします。
図 25
図 26
WEB-INF/lib の Filters サブタブで、「quartz-all-1.6.5.jar」の選択を解除します。このファイルは、WebLogic Server 10.3.1/2/3 ですでに使用できる状態になっているためです。「OK」をクリックします。
図 27
アプリケーションのデプロイ
対象プロジェクトを右クリックして「Deploy」を選択し、「SOAScheduler」をクリックします。
図 28
「Deploy to Application Server」を選択し、「Next」をクリックします。
図 30
Oracle SOA Suite がインストールされているアプリケーション・サーバーを選択します。アプリケーション・サーバーの 構成が完了していない場合は、緑色の「+」をクリックして新規接続を追加します。「Next」をクリックします。
図 31
「AdminServer」を選択し、「Finish」をクリックします。
デプロイメントが成功すると、メッセージ・ウィンドウは次のように表示されます。
図 32
SOAScheduler のテスト
SOAScheduler アプリケーションがデプロイされると、SOA コンポジット bpel-101-helloworld が 5 分ごとに起動されます。 これは、Oracle Enterprise Manager(http://server:port/em、例:http://localhost:7001/em)から確認できます。
図 33
Instance ID をクリックすると、SOA コンポジットの詳細情報が表示されます。
図 34
図 35
高度な設定
SOAScheduler サーブレットの呼び出しと SOAScheduler の起動/停止
http://server:port/SOAScheduler/soaschedulerservlet(例:http://localhost:7001/SOAScheduler/soaschedulerservlet)へアクセスす ると、最後に実行されたトリガーと次に実行されるトリガーを確認できます。 このサーブレットには action という名前のパラメータがあります。指定できる値は、"start"、"stop"、"single"のいずれか です。 Start SOAScheduler が停止されている場合、起動します。 Stop SOAScheduler を停止します。 Single ただちにジョブを開始します。スケジューラが実行されている場合のみ機能します。 例:http://localhost:7001/SOAScheduler/soaschedulerservlet ?action=stopビジネス・カレンダー
SOASchedulerServlet には、カレンダーに休日を追加する例が含まれています。この機能を使用するには、次のコードの コメントを外し、地域の休日として正確な日付を追加します。クラスタでの SOAScheduler の使用
SOAScheduler は、クラスタ内で使用できます。SOAScheduler によって使用されるソフトウェアである Quartz には十分に 実証されたクラスタ化機能が含まれており、スケーリング機能と高可用性機能が提供されます。これらの機能について、 詳しくは『Quartz Configuration Reference』を参照してください。また、JDBC-JobStore の設定方法について、詳しくは http://www.quartz-scheduler.org/docs/configuration/ConfigJDBCJobStoreClustering.html を参照してください。
cron 式の例
cron 式は、空白で区切られた 6 個または 7 個のフィールドで構成された文字列です。フィールド名 必
次に cron の例を示します。 式 意味 0 0 12 * * ? 毎日午後 12 時(正午)に実行する 0 15 10 ? * * 毎日午前 10 時 15 分に実行する 0 15 10 * * ? 毎日午前 10 時 15 分に実行する 0 15 10 * * ? * 毎日午前 10 時 15 分に実行する 0 15 10 * * ? 2005 2005 年中、毎日午前 10 時 15 分に実行する 0 * 14 * * ? 毎日午後 2 時から午後 2 時 59 分まで 1 分ごとに実行する 0 0/5 14 * * ? 毎日午後 2 時から午後 2 時 55 分まで 5 分ごとに実行する 0 0/5 14,18 * * ? 毎日午後 2 時から午後 2 時 55 分、および午後 6 時から午後 6 時 55 分まで 5 分ごとに実行する 0 0-5 14 * * ? 毎日午後 2 時から午後 2 時 5 分まで 1 分ごとに実行する 0 10,44 14 ? 3 WED 3 月の毎週水曜日、午後 2 時 10 分と午後 2 時 44 分に実行する 0 15 10 ? * MON-FRI 毎週月曜日から金曜日まで、午前 10 時 15 分にする 0 15 10 15 * ? 毎月 15 日、午前 10 時 15 分に実行する 0 15 10 L * ? 毎月最終日、午前 10 時 15 分に実行する 0 15 10 ? * 6L 毎月最終金曜日、午前 10 時 15 分に実行する 0 15 10 ? * 6L 毎月最終金曜日、午前 10 時 15 分に実行する 0 15 10 ? * 6L 2002-2005 2002 年から 2005 年の毎月最終金曜日、午前 10 時 15 分に実行する 0 15 10 ? * 6#3 毎月第 3 金曜日、午前 10 時 15 分に実行する 0 0 12 1/5 * ? 毎月 1 日から 5 日ごとに、午後 12 時(正午)に実行する 0 11 11 11 11 ? 毎年 11 月 11 日、午前 11 時 11 分に実行する 詳しくは、http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html を参照してください。