隔叶黄莺 The Blog of Unmi

〖隔叶黄莺三四声,挂壁飞瀑千万尘。若是人间无净土,此处为何妙语真! 隔叶黄莺四字,本非取自此句,而有寄寓他意,因见妙语,亦与予心合!〗

BlogJava 首页 新随笔 联系 聚合 管理
  209 Posts :: 84 Stories :: 392 Comments :: 0 Trackbacks

Quartz

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目.
     摘要: 七. 使用 JobStoreTX

我们首先要讨论的持久性 JobStore 是 JobStoreTX。名字中的 "TX" 代表着 "事物"。我们在前面提过,JobStoreTX 是设计用于想要 Quartz 来管理事物的环境中。例如,假如你正构建一个 J2EE 应用,并且不使用到应用服务器,如 WebLogic 或者 JBoss 等,那么 JobStoreTX 会是持久性 JobStore 正确的选择。

在之前章节中,我们看到配置 RAMJobStore 是多么的容易。我们提到 RAMJobStore 的其中一个优点就是易于配置。我们已经讨论过让数据库准备就绪该做的事情;现在我们讲述使 Quartz 应用支持 JDBC JobStore 需要对它配置些什么。

·配置 JobStoreTX

要告诉 Quartz 运行环境你想使用一个别的 JobStore 而不是默认的 RAMJobStore,你必须配置几个属性。配置它们的顺序无关紧要,只要保证在第一次运行程序之前都做了设置。  阅读全文
posted @ 2008-05-17 12:03 隔叶黄莺 阅读(317) | 评论 (0)  编辑

     摘要: 四. 使用持久性的 JobStore

在很多方面,JobStore 有用内存来存储的,还有些使用某种能长期持久的方式来共享相拟的特征。这不该有什么惊奇的,因为他们都服务于同一目的。

和 RAMJobStore 一样,特久性的 JobStore 有优点也有其缺点。在你选择持久性的 JobStore 之前应该认真理解其利与弊。这节就来解释它们的区别,以及在什么情况下你会希望使用持久性的 JobStore。

目前,Quartz 提供了两种类型的持久性 JobStore,每一种类型都有其独特的持久化机制。

持久性 JobStore = JDBC + 关系型数据库

尽管有几种不同的持久化机制可被 Quartz 用于持久化 Scheduler 信息,Quartz 依赖于一个关系型数据库管理系统(RDMS) 来持久化存储。假如你想用某种别的而不是数据库来持久化存储,那么你必须通过实现 JobStore 接口自己构建它。假定你想用文件系统来持久化存储。你可以创建一个类,这个类要实现 J  阅读全文
posted @ 2008-05-11 20:54 隔叶黄莺 阅读(749) | 评论 (0)  编辑

     摘要: 第六章. Job 存储和持久化

Quartz 用 JobStores 对 Job、Trigger、calendar 和 Schduler 数据提供一种存储机制。Scheduler 应用已配置的 JobStore 来存储和获取到部署信息,并决定正被触发执行的 Job 的职责。所有的关于哪个 Job 要执行和以什么时间表来执行他们的信息都来自于 JobStore。本章就来看 Quartz 中可用的各种类型的 JobStore,和如何使用他们,以及哪一个能适应你的需求。

"罗马非一日建成"

道格拉斯.亚当斯,《宇宙环游指南》

一. Job 存储

在前面章节中,我们未曾花过任何时间来讨论 Scheduler 的 Job 和 Trigger 是保存在哪儿的。我们也许已经实现了,然而,当你停止了 Scheduler 后,那些有关哪些 Job 已经运行和哪些 Job 没有运行的信息就会丢失掉。实际上,所有的关于正在运行中的 Job 的信息也被销毁。

  阅读全文
posted @ 2008-05-10 20:24 隔叶黄莺 阅读(936) | 评论 (0)  编辑

     摘要: 六. 介绍 Quartz Web 程序

早期的 Quartz 框架开发者意识到一个 GUI 对于某类用户群体是必需的。几年前,一个 Web 应用被创立,它可用于管理 Quartz 框架。虽说是历经了几年有相当投入的开发,但不得不说的,总是时断时续的。

近来出现有更多的要求对这个应用的更新与支持,因而又重新吸引了新的开发者自愿的工作并使之保持不断更新。这个应用就是知名的 Quartz Web 程序。(译者注:实际上这个应用程序基本驻步不前,当前版本还是 RC-1 2004-06-26 22:00 的,仅作参考来应用)

·Quartz Web 程序的截屏

Quartz Web 程序主界面的左上方展示了它所拥有的特征列表(看 图 13.4)。  阅读全文
posted @ 2008-05-01 22:50 隔叶黄莺 阅读(1260) | 评论 (2)  编辑

     摘要: 五. 使用 ServletContextListener

很值得一提的是你可以配置和集成 Quartz 到 Web 应用的另一种方式。从 2.3 版本的 Servlet API 开始,你能创建监听器,由容器在其生命周期中的某个特定时间回调。其中的一个监听器接口叫做 java.servlet.ServletContextListener,它包括有两个方法:

public void contextInitialized(ServletContextEvent sce);
public void contextDestroyed(ServeltContextEvent sce);

容器会在启动和关闭的时候相应的调用这两个方法。这就可以在 contextInitialized() 方法中初始化 Quartz Scheduler,并通过 contextDestroyed() 方法关闭它。代码 13.5 描述了这种用法:  阅读全文
posted @ 2008-05-01 16:38 隔叶黄莺 阅读(1045) | 评论 (1)  编辑

     摘要: 四. QuartzInitializerServlet 可谓救命草

Quartz 框架包括一个叫做 org.quartz.ee.servlet.QuartzInitializerServlet 的 Java 类,它继承自标准的 HttpServlet。你可应用这个 servlet 于你的 Web 应用中,它将会创建一个 StdSchedulerFactory 实例并在你的程序后续中一直可用。通常的,它就是做了命令行版本的 Quartz 程序的 main() 方法所做的事性。

QuartzInitializerServlet 在 Quartz 1.5 中有所改变

在 Quartz 的 1.5 发布版中,QuartzInitializerServlet 被修改为会存储 StdSchedulerFactory 实例到 Web 应用的 ServletContext 中。这就允许你的程序在任何地方都能访问到 Scheduler 实例,只要获取到了 HttpServletRequest 或 HttpSessi  阅读全文
posted @ 2008-04-30 01:26 隔叶黄莺 阅读(854) | 评论 (1)  编辑

     摘要: 三. 在 Struts 框架中使用 Quartz

第一步就是要下载 Apache Struts 并创建好你的 Web 应用的目录结构。Struts 框架可从 Apache Struts 站点 http://struts.apache.org 上找到。也很欢迎你直接抓取到源代码来编译它,尽管你能够及时下载到最新版本的二进制版。

因为 Quartz 不直接依赖于 Struts 框架,所以你也就不必为该使用哪一版本的 Struts 而忧心。只管下载到当前的最新版本就是了。不过,你应该认识到,Struts 和 Quartz 框架共同依赖了一些第三方的包。实际上,在前面列出的 Quartz 所需要的库也是 Struts 框架所必须的。就是要留心混在一起不同的版本,如在最后一节的警告所注明的。

·创建你的 Web 应用目录结构

下载到了 Struts 之后,你就可以创建你的目录结构并引入必须的文件。作为例子,我们将创建一个虚构的 Web 应用,叫做 Job 管理控制台。因为这仅是一个假想的应用,我们  阅读全文
posted @ 2008-04-25 23:47 隔叶黄莺 阅读(1053) | 评论 (3)  编辑

     摘要: 第十三章. Quartz 和 Web 应用

到目前为止,我们与 Quartz 框架的交互主要还是通过命令行。对于有些使用者,比如我的一个大学计算机科学老教授(它曾每天都告诉我说,"GUI 是给能力差的人用的!"),使用命令行让他们很乐意接受。当应用程序被开发完成后,它们常要移交给终端用户或支持团队。在命令行应用程序上层架设一个 GUI 前端会非常有帮助也是很增值的。本章记述如何在 Web 应用中用 Quartz 来使得部署和维护 Job 更轻松。

一. 在 Web 应用中使用 Quartz

至此,你已经看到过许多在 J2SE 环境中独立运行的 Quartz 的例子。在第十章,"J2EE 中使用 Quartz",你也学到了 Quartz 良好的运作于 J2EE 环境中。但是,我们还没有向你介绍的是如何部署 Quartz 到一个 Java Web 应用(通常简写为 Web app)中。这就是本章唯一意图  阅读全文
posted @ 2008-04-23 23:40 隔叶黄莺 阅读(1107) | 评论 (4)  编辑

     摘要: ·替换已部署的 Job

Quartz 提供了对已部署 Job 进行修改的灵活性。它是通过允许用修改后的 JobDetail 替换已有的 JobDetail 来支持这一特性的。为展未这一例子,让我们更新代码 12.4 中的 CheckEmailJob 类。代码 12.4 是硬编码了邮件属性值到 Job 类中的。更好的做法是传入那些属性,如此则可以随意的改变它们;那让我们改动 CheckEmailJob 来做到这一点。代码 12.7 显示的是那个 Job 的更新后的版本。

代码 12.7. 更新后的允许传入属性的 CheckEmailJob  阅读全文
posted @ 2008-04-06 13:30 隔叶黄莺 阅读(803) | 评论 (0)  编辑

     摘要: 二. 与 Job 一同工作

本节为使用 Quartz 的 Job 提供了一些例子。

·创建一个新的 Job 类

创建一个新的 Job 类很简单。仅需创建一个类,让它实现 org.quartz.Job 接口即可。这个接口需要你实现 execute() 方法,它会在 Scheduler 决定 Job 要执行时被调用。

代码 12.4 演示了一个简单的 Job,它会为某个用户检查邮件服务器上是否有新的邮件。当 Scheduler 执行这个 Job 时,方法 execute() 被调用,然后其中的代码就会连接到邮件服务器并获取任何邮件消息。这一 Job 只简单的打印邮件是谁发的和邮件的主题。

代码 12.4. 一个检查邮件服务器上的邮件的 Quartz Job  阅读全文
posted @ 2008-04-05 15:02 隔叶黄莺 阅读(805) | 评论 (1)  编辑

Full Quartz Archive