このチュートリアルでは、Quartzライブラリの `QuartzInitializerListener`リスナー・クラスを介してJSF Webアプリケーション中にQuartzジョブを実行する方法を説明します。このソリューションは、JSF 2で動作するだけでなく、ほぼすべての標準Java Webアプリケーションに適用されます。
使用されるツール:
-
JSF 2.1.11
-
クォーツ2.1.5
-
Maven 3
-
Eclipse 4.2
-
Tomcat 7
以前のリンク://jsf2/jsf-2-0-hello-world-example/[JSF 2.0 hello worldの例]が再利用され、 `QuartzInitializerListener`リスナークラスを介してQuartzジョブをサポートするように拡張します。
P.Sこのチュートリアルでは、Quartzの統合に焦点を当てています.JSFについては、JSFのhello world example.
を読んでください。
1.プロジェクトフォルダ
最終的なプロジェクトのディレクトリ構造を確認します。
2.依存関係
Tomcatにデプロイするには、多くのJSF依存関係が必要です。詳細についてはXMLコメントを読んでください。
File:pom.xml
<dependencies> ... JSF 2ライブラリ - > <dependency> <groupId> com.sun.faces </groupId> <artifactId> jsf-api </artifactId> <version> 2.1.11 </version> </dependency>依存関係> <groupId> com.sun.faces </groupId> <artifactId> jsf-impl </artifactId> <version> 2.1.11 </version> </dependency> <dependency> <groupId> javax.servlet </groupId> <artifactId> jstl </artifactId> <version> 1.2 </version> </dependency> <servlet-api> </version> </version> </dependency> </ <dependency> <groupId> javax.servlet.jsp </groupId> <artifactId> jsp-api </artifactId> <version> 2.1 </version> </dependency> <! - Tomcat 6はこれを必要とします - > <dependency> <groupId> com.sun.el </groupId> <artifactId> el-ri </artifactId> <version> 1.0 </version> </dependency> <! - Quartzスケジューラフレームワーク - > <依存関係> <groupId> org.quartz-scheduler </groupId> <artifactId> quartz </artifactId> <version> 2.1.5 </version> </dependency> <! - Quartz need transaction - > <依存関係> <groupId> javax.transaction </groupId> <artifactId> jta </artifactId> <version> 1.1 </version> </dependency> ...
3.クォーツ・ジョブ
Quartzジョブクラスを作成します。このクラスは後でスケジュールして実行します。
File:SchedulerJob.java
package com.mkyong.scheduler; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class SchedulerJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("JSF 2 + Quartz 2 example"); } }
4.クォーツの構成
quartz.properties`と
quartz-config.xml`を作成し、それをMaven以外のプロジェクトのリソース “folder”(Maven構造体)に入れて、プロジェクトのクラスパスに配置できることを確認してください。
File:quartz.properties
– Quartzインスタンスを設定し、 `quartz-config.xml`から設定を読み込みます
org.quartz.scheduler.instanceName = MyScheduler org.quartz.threadPool.threadCount = 3 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = quartz-config.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true
File:quartz-config.xml
– `com.mkyong.scheduler.SchedulerJob`を実行するようにトリガーを設定する
<?xml version="1.0" encoding="UTF-8"?> <job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job__scheduling__data__1__8.xsd" version="1.8"> <schedule> <job> <name>AJob</name> <group>AGroup</group> <description>Print a welcome message</description> <job-class>com.mkyong.scheduler.SchedulerJob</job-class> </job> <trigger> <cron> <name>dummyTriggerName</name> <job-name>AJob</job-name> <job-group>AGroup</job-group> <!-- It will run every 5 seconds --> <cron-expression>0/5 ** ** ** ** ?</cron-expression> </cron> </trigger> </schedule> </job-scheduling-data>
5.クォーツを統合する
ここで統合が行われました。
web.xml`ファイルのリスナークラスとして
org.quartz.ee.servlet.QuartzInitializerListener`を宣言しました。
ファイル:web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app ...> <listener> <listener-class> org.quartz.ee.servlet.QuartzInitializerListener </listener-class> </listener> </web-app>
6.デモ
プロジェクトの起動時に、Quartzが起動され、スケジュールされたジョブが5秒ごとに実行されます。
Jul 26, 2012 3:32:18 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler["http-bio-8080"]Jul 26, 2012 3:32:18 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler["ajp-bio-8009"]Jul 26, 2012 3:32:18 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 3591 ms JSF 2 + Quartz 2 example JSF 2 + Quartz 2 example JSF 2 + Quartz 2 example
ソースコードをダウンロードする
ダウンロードする –
JSF-Quartz- Example.zip
(25 kb)
参考文献
構成リファレンス]。
JSF 2.0 hello worldの例
-
http://www.quartz-scheduler.org/api/2.1.0/org/quartz/plugins/xml/XMLSchedulingDataProcessorPlugin.html
[XMLSchedulingDataProcessorPlugin
JavaDoc]。
http://www.openscope.net/2010/02/05/quartz-scheduled-jobs/
[Good Quartz
スケジューラジョブの例]