JSF 2 Quartz 2の例

このチュートリアルでは、Quartzライブラリの `QuartzInitializerListener`リスナー・クラスを介してJSF Webアプリケーション中にQuartzジョブを実行する方法を説明します。このソリューションは、JSF 2で動作するだけでなく、ほぼすべての標準Java Webアプリケーションに適用されます。

使用されるツール:

  1. JSF 2.1.11

  2. クォーツ2.1.5

  3. Maven 3

  4. Eclipse 4.2

  5. 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.プロジェクトフォルダ

最終的なプロジェクトのディレクトリ構造を確認します。

プロジェクトディレクトリ構造、title = "jsf-quartz-project-directory"、width = 435、height = 395

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)