首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF 2+ Quartz调度库

JSF 2+ Quartz调度库
EN

Stack Overflow用户
提问于 2011-10-27 12:26:04
回答 2查看 3.5K关注 0票数 2

我有一个使用JSF2的web应用程序。在这个应用程序中,我使用了一个图表库,它从一个xml文件中获取数据,当有人访问该网站时,该应用程序会因为JSF2操作而更新xml文件。现在我想实现Quartz库,即开放源码调度库,以更新xml文件而不依赖于用户操作,但我不知道如何使用JSF2从Quartz调用action。

提前谢谢各位。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-27 14:22:17

一般来说,您应该实现已调度的逻辑,定义它何时运行,并在应用程序服务器启动时初始化已调度的作业。

实现调度逻辑

您的调度类应该实现org.quartz.Job接口并覆盖它的execute(),它包含您的调度作业的逻辑。在本例中,它是更新XML文件的方法。您应该使此方法不依赖于JSF,这样它就可以在JSF外部调用。

代码语言:javascript
复制
public class MyScheduledJob implements Job {

   public void execute(JobExecutionContext context) throws JobExecutionException {
          updateXML();
   }
}

初始化并启动Quartz

Quartz提供了一个名为QuartzInitializerListenerServletContextListener,它允许您在应用程序服务器启动时初始化和启动Quartz。

将此监听程序添加到web.xml

代码语言:javascript
复制
<listener>
     <listener-class> org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>

默认情况下,它将在类路径中查找一个名为quartz.properties的文件来初始化Quartz。有关quartz.properties中提供的可配置选项的详细信息,请参阅this

定义哪个作业将在哪个时间运行

您可以在XML文件中定义它(其模式定义可以在here中找到),并在quartz.properties中配置XMLSchedulingDataProcessorPlugin,以便在Quartz初始化时加载此XML。

例如,在quartz.properties

=org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin = quartz-config.xml org.quartz.plugin.jobInitializer.failOnFileNotFound =

org.quartz.plugin.jobInitializer.class org.quartz.plugin.jobInitializer.fileNames = true

然后在quartz-config.xml

代码语言:javascript
复制
<?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>MyScheduledJob</name>
                <group>MyScheduledGroup</group>
                <description>Job to update XML </description>
                <job-class>com.xxxx.xxxx.xxxx.MyScheduledJob </job-class>
            </job>

            <trigger>
                    <cron>
                            <name>midNightTrigger</name>
                            <job-name>MyScheduledJob</job-name>
                            <job-group>MyScheduledGroup</job-group>
                            <!-- It will run every night at 3:30 am -->
                            <cron-expression>0 30 3 * * ?</cron-expression>  
                    </cron>
              </trigger>
        </schedule>
    </job-scheduling-data>

以上所有内容都是针对Quartz的最新版本2.1。您可以查看Quartz的sample codestutorials以获取更多信息。

票数 8
EN

Stack Overflow用户

发布于 2011-10-28 20:03:47

如果您实际上希望从调度的作业中调用JSF操作,则该作业的execute()方法需要包含向该JSF操作发出HTTP请求的代码。如果java的URLConnection类不能很容易地满足您的需求,那么您可能希望使用诸如Apache HttpClient或HTTP Unit之类的代码库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7911695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档