Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 オラクル Senior Solution Architect Robert Baumgartner 2010 年 11 月 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 1
前提条件 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 をクリックします Show WSDL and endpoint URI をクリックします 図 1 図 2 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 2
図 3 WSDL ロケーションをコピーします はじめに JDeveloper で新規アプリケーションを作成します [Ctrl] を押しながら [N] を押し "SOAScheduler" という名前を付け Generic Application を選択します 図 4 次に "SchedulerProject" という名前の新規プロジェクトを作成し "Project Technologies" で Java と Web Services を選択します Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 3
図 5 Finish をクリックします File New の順にクリックするか または [Ctrl] を押しながら [N] を押して 新規の Web サービス プロキシを作成します 図 6 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 4
OK Next の順にクリックします 図 7 JAX-WS Style を選択し Next をクリックします 図 8 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 5
"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 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 6
プロジェクトへの Quartz ライブラリの追加 Application Project Properties Add JAR/Directory の順にクリックします JDeveloper ホームから jdeveloper soa modules quartz-all-1.6.5.jar を選択し Select をクリックします 図 11 図 12 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 7
OK をクリックします スケジューラ ジョブ コンポーネントの作成 JDeveloper で File New の順にクリックするか または [Ctrl] を押しながら [N] を押して 新規の "Java Class" を作成します OK をクリックします 図 13 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 8
図 14 Name に "HelloWorldJob" と入力し Package に "sample.oracle.otn.soascheduler.job" と入力したら OK をクリックします 生成されたソースを次の行で置き換えます Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 9
java クラス SOASchedulerServlet の作成 JDeveloper で File New の順にクリックするか または [Ctrl] を押しながら [N] を押して 新規の "Java Class" を作成します 図 15 Name に "SOASchedulerServlet" を Package に "sample.oracle.otn.soascheduler" を Extends に "javax.servlet.http.httpservlet" を入力したら OK をクリックします Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 10
生成されたソースを次の行で置き換えます Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 11
Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 12
Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 13
Quartz プロパティ ファイルの作成 JDeveloper で File New の順にクリックするか または [Ctrl] を押しながら [N] を押して 新規の File(General) を作成します Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 14
図 16 File (General) を選択します 図 17 File Name に "soa_quartz.properties" を入力し Directory にプロジェクトの src ディレクトリを入力したら OK をクリックします プロパティ ファイルに次の行を挿入します Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 15
J2EE デプロイメント ディスクリプタ (web.xml) の作成 JDeveloper で File New の順にクリックするか または [Ctrl] を押しながら [N] を押して 新規の web.xml を作成します 図 18 Java EE Deployment Descriptor をクリックします OK をクリックします Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 16
図 19 web.xml を選択し Next をクリックします 図 20 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 17
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 * * *?" を追加します Pages を選択し 緑色の + (Create "Welcome File") をクリックします "/soaschedulerservlet" を追加します 図 21 ソースは次のようになります 図 22 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 18
Save All をクリックします 注意 :"cronexpr" という名前は SOASchedulerServlet.java で指定されています またその値は SOA コンポジット bpel-101-helloworld が毎日 5 分ごとに起動されることを意味します その他の値については 本書後半の例を参照してください WAR ファイル ( デプロイメント プロファイル ) の作成 JDeveloper で File New の順にクリックするか または [Ctrl] を押しながら [N] を押して 新規の "WAR File" を作成します OK をクリックします 図 23 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 19
図 24 Deployment Profile Name に "SOAScheduler" と入力し OK をクリックします 図 25 "General" タブで "Web Context Root" に "SOAScheduler" と入力します Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 20
図 26 WEB-INF/lib の Filters サブタブで quartz-all-1.6.5.jar の選択を解除します このファイルは WebLogic Server 10.3.1/2/3 ですでに使用できる状態になっているためです OK をクリックします OK をクリックします 図 27 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 21
アプリケーションのデプロイ 対象プロジェクトを右クリックして Deploy を選択し SOAScheduler をクリックします 図 28 図 29 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 22
Deploy to Application Server を選択し Next をクリックします 図 30 Oracle SOA Suite がインストールされているアプリケーション サーバーを選択します アプリケーション サーバーの構成が完了していない場合は 緑色の + をクリックして新規接続を追加します Next をクリックします Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 23
図 31 AdminServer を選択し Finish をクリックします デプロイメントが成功すると メッセージ ウィンドウは次のように表示されます SOAScheduler のテスト 図 32 SOAScheduler アプリケーションがデプロイされると SOA コンポジット bpel-101-helloworld が 5 分ごとに起動されます これは Oracle Enterprise Manager(http://server:port/em 例 :http://localhost:7001/em) から確認できます Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 24
図 33 Instance ID をクリックすると SOA コンポジットの詳細情報が表示されます 図 34 図 35 また サーバーのログ ファイルへの出力も確認できます Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 25
高度な設定 SOAScheduler サーブレットの呼び出しと SOAScheduler の起動 / 停止 http://server:port/soascheduler/soaschedulerservlet( 例 :http://localhost:7001/soascheduler/soaschedulerservlet) へアクセスすると 最後に実行されたトリガーと次に実行されるトリガーを確認できます このサーブレットには action という名前のパラメータがあります 指定できる値は "start" "stop" "single" のいずれかです Start Stop Single SOAScheduler が停止されている場合 起動します SOAScheduler を停止します ただちにジョブを開始します スケジューラが実行されている場合のみ機能します 例 :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 個のフィールドで構成された文字列です フィールド名須許可される値許可される特殊文字 必 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 26
次に 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 を参照してください 上記は Oracle SOA Suite 11g(11.1.1.3) を使用したテストで検証されています Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 27