<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>隔叶黄莺 Unmi Blog &#187; Quartz</title>
	<atom:link href="http://unmi.cc/category/quartz/feed" rel="self" type="application/rss+xml" />
	<link>http://unmi.cc</link>
	<description></description>
	<lastBuildDate>Wed, 22 Feb 2012 14:20:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>发布 Quartz Job Scheduling Framework 中文 PDF 版</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-chinese-pdf</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-chinese-pdf#comments</comments>
		<pubDate>Mon, 28 Sep 2009 07:22:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[Scheduler]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/%e5%8f%91%e5%b8%83-quartz-job-scheduling-framework-%e4%b8%ad%e6%96%87-pdf-%e7%89%88</guid>
		<description><![CDATA[还是在一年前翻译完 Quartz Job Scheduling Framework 这篇手册、并做成了 CHM 文档，见此：Quartz Job Scheduling Framework［翻译］- 中文版 CHM 文件发布。 Quartz Job Scheduling Framework 中文 PDF 版下载地址：Quartz Job Scheduling Framework 中文版 V1.0.0.pdf 也应不少网友的要求，应该出一个 PDF 版本的文件来，一来可能多数人觉得 PDF 看着舒服，又适于打印；再则可能就是当初制作 CHM 文件时有几个问题未解决： 1. BlogJava 上所用的字符集是 UTF-8、而我的那些文章转成 GBK 的 HTML 文件，有此地方会乱码，且版面会不同 2. 还有就是用的 CHM 制作工具识别的 HTML 的 &#60;title&#62; 中内容来作标题也是产生乱码，无论是 UTF-8，还是 GBK 都是；所以使用了中文的文件名，这就造成该 CHM 文件在有些平台下不可阅读 3. [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-chinese-pdf/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］附录 A. Quartz 配置参考 (第六部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-appendix-6</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-appendix-6#comments</comments>
		<pubDate>Tue, 03 Feb 2009 07:51:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e9%99%84%e5%bd%95-a-quartz-%e9%85%8d%e7%bd%ae%e5%8f%82%e8%80%83-%e7%ac%ac%e5%85%ad%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[十. 配置 Quartz 数据源 如果你在使用 JDBC JobStore，就需定义要用到的数据源。而如果使用的是 JobStoreCMT，你实际上需要定义两个数据源。数据源可由三种方式来配置： ·在 quartz.properties 文件中指定连接池属性，这样 Quartz 能亲自创建数据源。 ·指定应用服务器管理的数据源所在 JNDI 的位置，Quartz 直接使用它。 ·还可使用自定义的 org.quartz.utils.ConnectionProvider 实现类。 每一个你定义的 datasource 都必须给予一个名称，并且你为它们配置的属性也必须包含这个名称。datasource 的 NAME 可以是你任何想要的；它没有特别的意思，只是用来指定给 JDBC JobStore 时标识 datasource。 当使用 quartz.properties 来定义连接池的所有属性来配置 datasource 时，表 A.6 是可用的属性。 表 A.6. 配置 Quartz Datasource 的属性 名称 必须 类型 默认值 org.quartz.dataSource.NAME.driver 是 String null org.quartz.dataSource.NAME.URL 是 String null org.quartz.dataSource.NAME.user [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-appendix-6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］附录 A. Quartz 配置参考 (第五部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-appendix-5</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-appendix-5#comments</comments>
		<pubDate>Wed, 14 Jan 2009 13:57:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e9%99%84%e5%bd%95-a-quartz-%e9%85%8d%e7%bd%ae%e5%8f%82%e8%80%83-%e7%ac%ac%e4%ba%94%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[九. 配置 JobStoreCMT JobStoreCMT 提供了另一类型的 JobStore，它能工作于一个关系型数据库之下。你能通过设置 org.quartz.jobStore.class 属性来选用 JobStoreCMT： org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT 当使用 JobStoreCMT 时，可设置一些附加属性，它们是表 A.5 所示的。 表 A.5. 配置 Quartz JobStoreCMT 的属性 名称 必须 类型 默认值 org.quartz.jobStore.nonManagedTXDataSource 是 String null org.quartz.jobStore.dontSetNonManagedTX- ConnectionAutoCommitFalse 否 Boolean false org.quartz.jobStore.txIsolationLevelReadCommited 否 Boolean false ·org.quartz.jobStore.nonManagedTXDataSource JobStoreCMT 需要一个(即第二个) 数据源，其中包含的连接不作为容器管理事物的一部分。这个属性值必须是在属性配置文件中定义的某一个 DataSource 的名称。这个数据源必须包含非 CMT 的连接，换句话说就是，其中的连接的 commit() 和 rollback() 方法能够由 Quartz 直接且合法的调用。 ·org.quartz.jobStore.dontSetNonManagedTXConnectionAutoCommitFalse 这个属性意义同 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-appendix-5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］附录 A. Quartz 配置参考 (第四部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-appendix-4</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-appendix-4#comments</comments>
		<pubDate>Thu, 08 Jan 2009 13:23:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e9%99%84%e5%bd%95-a-quartz-%e9%85%8d%e7%bd%ae%e5%8f%82%e8%80%83-%e7%ac%ac%e5%9b%9b%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[八. 配置 JobStoreTX JobStore 你可以像下面那样设定类名来选择 JobStoreTX 类： org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 表 A.4 列出了配置 Quartz JobStore 的可用属性。只有少数几个属性是必须的，而且其他的都有合理的默认值。 表 A.4. 配置 Quartz JobStore 可用的属性 名称 必须 类型 默认值 org.quartz.jobStore.driverDelegateClass 是 String null org.quartz.jobStore.dataSource 是 String null org.quartz.jobStore.tablePrefix 否 String QRTZ_ org.quartz.jobStore.useProperties 否 Boolean false org.quartz.jobStore.misfireThreshold 否 Integer 60000 org.quartz.jobStore.isClustered 否 Boolean false org.quartz.jobStore.clusterCheckinInterval 否 Long 15000 org.quartz.jobStore.maxMisfiresToHandleAtATime [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-appendix-4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］附录 A. Quartz 配置参考 (第三部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-appendix-3</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-appendix-3#comments</comments>
		<pubDate>Mon, 22 Dec 2008 07:58:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e9%99%84%e5%bd%95-a-quartz-%e9%85%8d%e7%bd%ae%e5%8f%82%e8%80%83-%e7%ac%ac%e4%b8%89%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[六. 配置 Quartz RMI 选项 当通过 RMI 使用 Quartz 启动一个 Quartz 实例时，你需要把它配置为经由 RMI "导出" 服务。然后你就能创建客户端，配置它们的 Quartz Scheduler 作为 "代理" 工作而连接到服务端来。表 A.3 列出了可用的 RMI 设定。 表 A.3. Quartz 使用 RMI 时的属性 名称 必须 类型 默认值 org.quartz.scheduler.rmi.export 否 Boolean false org.quartz.scheduler.rmi.registryHost 否 String localhost org.quartz.scheduler.rmi.registryPort 否 Integer 1099 org.quartz.scheduler.rmi.createRegistry 否 String never org.quartz.scheduler.rmi.serverPort 否 Integer Random org.quartz.scheduler.rmi.proxy 否 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-appendix-3/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］附录 A. Quartz 配置参考 (第二部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-appendix</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-appendix#comments</comments>
		<pubDate>Sat, 20 Dec 2008 11:46:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e9%99%84%e5%bd%95-a-quartz-%e9%85%8d%e7%bd%ae%e5%8f%82%e8%80%83-%e7%ac%ac%e4%ba%8c%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[二. 配置 Quartz ThreadPool 表 A.2 列出了配置 Quartz ThreadPool 可用的属性。只有少些属性是必须的，剩下的都有合理的默认值。 表 A.2. 配置 Quartz ThreadPool 的属性 名称 必须 类型 默认值 org.quartz.threadPool.class 是 String null org.quartz.threadPool.threadCount 是 Integer -1 org.quartz.threadPool.threadPriority 否 Integer 5 org.quartz.threadPool.makeThreadsDaemons 否 boolean false org.quartz.threadPool.threadsInheritGroup-         OfInitializingThread 否 boolean true org.quartz.threadPool.threadsInheritContext-         ClassLoaderOfInitializingThread 否 boolean false ·org.quartz.threadPool.class 用于指定你想要使用的 ThreadPool 实现的类名。Quartz 自带的 ThreadPool 实现是 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-appendix/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］附录 A. Quartz 配置参考 (第一部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-appendix-1</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-appendix-1#comments</comments>
		<pubDate>Sat, 20 Dec 2008 05:55:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e9%99%84%e5%bd%95-a-quartz-%e9%85%8d%e7%bd%ae%e5%8f%82%e8%80%83-%e7%ac%ac%e4%b8%80%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[附录 A. Quartz 配置参考 本附录编写作为配置一个 Quartz 应用的快速参考。尽管这些信息在 Quartz 文档中都有，但是这个附录提供了一种更快的方式来查找配置属性和它们可能的值。 一. 主要的 Quartz 属性 表 A.1 列出了主要的 Scheduler 属性。它们用于声明和标识 Scheduler 和其他高层次的设置。 表 A.1. 主要的 Quartz Scheduler 属性 名称 必须 类型 默认值 org.quartz.scheduler.instanceName 否 String 'QuartzScheduler' org.quartz.scheduler.instanceId 否 String 'NON_CLUSTERED' org.quartz.scheduler.instanceIdGenerator.class 否 String org.quartz.simpl.SimpleInstanceIdGenerator org.quartz.scheduler.threadName 否 String instanceName+'_QuartzSchedulerThread' org.quartz.scheduler.idleWaitTime 否 Long 30000 org.quartz.scheduler.dbFailureRetryInterval 否 Long 15000 org.quartz.scheduler.classLoadHelper.class [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-appendix-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］- 中文版 CHM v1.0.0 文件发布</title>
		<link>http://unmi.cc/quartz-job-sche00pkk</link>
		<comments>http://unmi.cc/quartz-job-sche00pkk#comments</comments>
		<pubDate>Fri, 24 Oct 2008 14:26:48 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[chm]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=2701</guid>
		<description><![CDATA[Quartz Job Scheduling Framework 中 文 版 Chuck Cavaness 著 Unmi(隔叶黄莺) 译 译者博客：http://unmi.cc/ 下载地址：Quartz Job Scheduling Framework 中文版.chm 写在最前面的 这一次的版本更新主要是因为创立了自己的独立博客 http://unmi.cc，从 blogjava.net 上脱离了开来，所以原来可以点击 进行探讨的链接全都更新到这个博客来了，因为原链接已无效了。还有稍稍改了点原文中的一些差错。 Quartz 是什么，大概不需多加说明，简单讲就是一个纯 Java 实现的作业调度工具，相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron，但 Quartz 可以把排程控制的更精细。也许大多数人听说 Quartz 是在学习或使用 Spring 的时候，也就是 Spring 整合了 Quartz。 同时感谢大家一路来的支持，也希望大家能提出宝贵意见，或有问题拿出来共同探讨。另外，每篇译章都有到达我的博客上 所对应页面的链接，所以若有疑问可点击页面上方或下方的的 按钮进入到博客对应页面来对本篇进行评论，或阅读他人的相关评论。]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-sche00pkk/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］- 中文版 CHM 文件发布</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-chinese</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-chinese#comments</comments>
		<pubDate>Sun, 24 Aug 2008 14:26:41 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4</guid>
		<description><![CDATA[Quartz Job Scheduling Framework 中 文 版 Chuck Cavaness 著 Unmi(隔叶黄莺) 译 译者博客：http://unmi.cc/ 下载地址：Quartz Job Scheduling Framework 中文版.chm 写在最前面的 以此篇权当译者序。再次翻看一下我的博客，最早的那篇《Quartz Job Scheduling Framwork》翻译是在 2007-10-17 02:17 ，距离今日那是一个造人的时间，足见这个翻译过程有多难产。一方面是源于语言水平，再者其间也发生了许多事情。 Quartz 是什么，大概不需多加说明，简单讲就是一个纯 Java 实现的作业调度工具，相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron，但 Quartz 可以把排程控制的更精细。也许大多数人听说 Quartz 是在学习或使用 Spring 的时候，也就是 Spring 整合了 Quartz。而我也不例外，同样是在春天里得悉了这块石英。 当初公司一个项目中有些定时候任务，原来是用 JDK 的 TaskTimer 来实现的，个人觉得比较笨拙－－未能跳开节假日，也不能依赖于其他的业务操作灵活安排计划。于是想起了 Spring 框架整合了一个作业调度框架 Quartz，其实一直没用过它，而且这回是要脱离 Spring 框架来使用 Quartz。于是就到网上找来 Quartz [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-chinese/feed</wfw:commentRss>
		<slash:comments>117</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第十四章. 工作流中使用 Quartz (第四部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-14-4</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-14-4#comments</comments>
		<pubDate>Tue, 19 Aug 2008 07:35:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%8d%81%e5%9b%9b%e7%ab%a0-%e5%b7%a5%e4%bd%9c%e6%b5%81%e4%b8%ad%e4%bd%bf%e7%94%a8-quartz-%e7%ac%ac%e5%9b%9b%e9%83%a8</guid>
		<description><![CDATA[四. 创建一个工作流 Job 最后，我们需要介绍启动工作流的 Quartz Job 。当 Scheduler 调用了它，Quartz Job 就查找工作流的名字，并启动、运行相应的工作流。如果没有在 JobDataMap 中配置工作流的名字，Job 就会直接退出。 代码 14.13 显示了 WorkflowJob. 代码 14.13. Quartz WorkflowJob 设计为调用一个 OSWorkflowJob public class WorkflowJob implements Job { static Log logger = LogFactory.getLog(WorkflowJob.class); /** * Called by the scheduler to execute a workflow */ public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap jobDataMap [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-14-4/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第十一章. Quartz 集群 (第四部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-11-4</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-11-4#comments</comments>
		<pubDate>Mon, 11 Aug 2008 17:29:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%8d%81%e4%b8%80%e7%ab%a0-quartz-%e9%9b%86%e7%be%a4-%e7%ac%ac%e5%9b%9b%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[四. 运行 Quartz 集群节点 在启动集群中的 Quartz 应用真的没什么差别。每个实例(或节点) 必须单独启动。启动时，实例连接到数据库，获取 Scheduler 信息，并开始部署 Job。 因为 Quartz 使用了一个随机的负载均衡算法，你将会看到 Job 以随机的行方式由不同的实例执行。没有固定的模式或预告定义的节点来执行特定的 Job。 下一节会讨论一些在处理集群环境中的 Quartz 较常见的问题和任务。 五. Quartz 集群 Cookbook 本节旨在为开发者便于解决 Quartz 集群的具体问题而提供了资源。 ·指派 Job 给集群中特定的实例 当前，还不存在一个方法来指派(钉住) 一个 Job 到集群中特定的节点。假如你需要这种行为，你可以创建一个非集群的 Quartz 应用与集群中的节点并行运行，并且要使用独立的一套数据库表或单独的 JobInitializationPlugin 用到的 XML 文件。 不要让非集群的实例指向到集群所用的同一套数据库表。不然你会得到莫名其妙的结果。 ·在集群中的每一个节点上运行 Job 正如前面所回答的，当前还没有一种方式能让某一个 Job 实例在集群中的每一个节点上都运行。最好的办法是使用一个非集群的实例与集群的每一个节点并行运行，并且要使用独立的一套数据库表或单独的 JobInitializationPlugin 和 RAMJobStore 用到的 XML 文件。 ·在不同的机器上运行节点 Quartz 实际并不关心你是在相同的还是不同的机器上运行节点。当集群是放置在不同的机器上时，通常称之为水平集群。节点是跑在同一台机器是，称之为垂直集群。对于垂直集群，存在着单点故障的问题。这对高可用性的应用来说是个坏消息，因为一旦机器崩溃了，所有的节点也就被有效的终止了。 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-11-4/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第十一章. Quartz 集群 (第三部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-11-3</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-11-3#comments</comments>
		<pubDate>Fri, 08 Aug 2008 08:51:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%8d%81%e4%b8%80%e7%ab%a0-quartz-%e9%9b%86%e7%be%a4-%e7%ac%ac%e4%b8%89%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[三. 配置 Quartz 使用集群 为 Quartz 配置集群环境的步骤比设置类似的 J2EE 集群环境容易的多： 1.  配置每个节点的 quartz.properties 文件。 2.  配置 JDBC JobStore。 3.  使用 Scheduler 信息(Job 和 Trigger) 装载数据库。 4.  启动每个 Quartz 节点。 ·配置节点的 quartz.properties 文件 就像是运行 Quartz 在非集群环境中那样，每个 Quartz 应用需要一个 quartz.properties 文件。在第三章，“Hello, Quartz” 中提到过，假如你不指定它，会使用默认的 quartz.properties 文件(存在于 quartz.jar 文件中)。最好是指定这个文件，因为你终究是需求修改一个或多个的设置项。 当使用 Quartz 的集群特性，你需要为每个节点修改 quartz.properties 文件。代码 11.1 显示了一个用于集群实例的 quartz.properties 文件的例子。属性将在之后讨论。 代码 11.1. [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-11-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第十一章. Quartz 集群 (第二部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-11-2</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-11-2#comments</comments>
		<pubDate>Wed, 06 Aug 2008 08:05:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%8d%81%e4%b8%80%e7%ab%a0-quartz-%e9%9b%86%e7%be%a4-%e7%ac%ac%e4%ba%8c%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[二. Quartz 中集群是如何工作的 一个 Quartz 集群中的每个节点是一个独立的 Quartz 应用，它又管理着其他的节点。意思是你必须对每个节点分别启动或停止。不像许多应用服务器的集群，独立的 Quartz 节点并不与另一其的节点或是管理节点通信。(将来的 Quartz 版本将会设计成让节点能与其他节点直接通信，而不是借助于数据库。) 取而代之的是，Quartz 应用是通过数据库表来感知到另一应用的。 Quartz 集群仅能使用 JDBC JobStore 工作因为集群中节点依赖于数据库来传播 Scheduler 实例的状态，你只能在使用 JDBC JobStore 时应用 Quartz 集群。这意味着你必须使用 JobStoreTX 或是 JobStoreCMT 作为 Job 存储；你不能在集群中使用 RAMJobStore 的。在将来的释放版中非常可能移除这个需求，节点也将能直接与另一节点直接通过网络协议，可能使用 JGroup 进行通信。 图 11.1 显示了每个节点直接与数据库通信，若离开数据库将对其他节点一无所知 图 11.1. Quartz 集群中的每个节点感知到其他实例只能经由数据库 ·Quartz Scheduler 在集群中的启动 Quartz Scheduler 自身是察觉不到被集群的，只有配置给 Scheduler 的 JDBC JobStore 才知道。当 Quartz [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-11-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第十一章. Quartz 集群 (第一部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-11-1</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-11-1#comments</comments>
		<pubDate>Wed, 06 Aug 2008 02:12:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%8d%81%e4%b8%80%e7%ab%a0-quartz-%e9%9b%86%e7%be%a4-%e7%ac%ac%e4%b8%80%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[第十一章. Quartz 集群 不可避免的，我们还是要说到集群。虽然单个 Quartz 实例能给予你很好的 Job 调度能力，但它不能令典型的企业需求，如可伸缩性、高可靠性满足。假如你需要故障转移的能力并能运行日益增多的 Job，Quartz 集群势必成为你方言的一部分了。本章就告诉你如何使用 Quartz 的集群能力来更好的支持你的业务需求，并且即使是其中一台机器在最糟的时间崩溃了也能确保所有的 Job 得到执行。 一. 集群对 Quartz 来说意味着什么？ 集群扮演着运行一个组件或应用的多个实例，它们以透明的方式提供服务。集群是企业范畴的事物，而不局限于 Java 的世界里。当部署 J2EE 应用时，例如，供应商为应用服务器提供了集群的能力，以便于像 EJB、JNDI 和 Web 组件能获得高可用性。然当客户端请求这些服务时候，它们就能更可靠的提供服务。 这和一些用户要求他们的 Quartz 应用的行为是完全一样的。用户希望构建并设定 Quartz 应用是当一个 Job 一定要执行时，它就要得到执行。随着你的 Quartz 应用变得更普及，还要安排不断增多的需求，Quartz 应用的集群将能让你安下心来，你能处理你的需求并确保一切按计划进行。而且你只需要付出很小的努力来搭建和维护便能得到这些好处。 ·Quartz 应用集群的好处 集群的 Quartz 应用比起非集群环境，能提供两个关键的好处     ·高可用性     ·伸缩性 ·高可用性 高可用性的应用是指能以高百分率的时间服务于客户。在某些情况下，可能就是一周 7 天，一天 24 小时。对于其他的应用，可能只是“尽量多的时间”。可用性通常表示为在 0 到 100 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-11-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第八章. 使用 Quartz 插件 (第五部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-8-5</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-8-5#comments</comments>
		<pubDate>Tue, 22 Jul 2008 13:45:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%85%ab%e7%ab%a0-%e4%bd%bf%e7%94%a8-quartz-%e6%8f%92%e4%bb%b6-%e7%ac%ac%e4%ba%94%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[五. Quartz 工具插件 Quartz 框架包括几个你能用于你的应用中的几个插件。本节简单描述它们和它们的用途。 ·JobInitializationPlugin 我们已经多次谈到过这个插件。它从一个 XML 文件中加载 Job 和 Trigger 信息(默认文件名是 quartz_jobs.xml) 。你可以通过在 quartz.properties 文件中为这个插件设定 filename 参数来配置文件名。假如你不需要数据库来存储你的 Job 或者是需要能快速测试特定 Job 的话，这个插件非常有帮助。 ·JobInitializationPluginMulitple 显然，由其相似的名字，JobInitializationPluginMultiple 类似于 JobInitializationPlugin。不同点在于它支持从多个 XML 文件加载而非只是一个。它也类似于代码 8.2 中的 JobLoaderPlugin，只是代码 8.2 的插件查找一个目录，而不是一系列的文件。 指定给 JobInitializationPluginMultiple 的文件是以逗分进行分隔，配置在 quartz.properties 文件中的。这个插件的一个最好的特征就是能定期的扫描是否有修改，当它们有改变时能重新加载 Job 信息。它是通过实现 org.quartz.jobs.FileScanListener 来加入这一行为的。扫描间隔(定义为秒) 可以在属性文件中指定。 ·LogginJobHistoryPlugin org.quartz.plugins.history.LogginJobHistoryPlugin 是用来记录 Job 历史的，应用的是 commons-logging 框架。这包括 Job 的执行还有任何 Job 被否决的日志。这个插件允许配置日志消息，但已提供了默认的消息格式。格式可以指定 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-8-5/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第八章. 使用 Quartz 插件 (第四部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-8-4</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-8-4#comments</comments>
		<pubDate>Mon, 21 Jul 2008 10:11:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%85%ab%e7%ab%a0-%e4%bd%bf%e7%94%a8-quartz-%e6%8f%92%e4%bb%b6-%e7%ac%ac%e5%9b%9b%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[四. 使用多个插件 你喜欢多少个，就可以在 quartz.properties 文件中注册多少个插件。然而，加载和初始化的顺序却不能保证，因为 Quartz 加载先把所有的属性到一个 Map 中，然后按照从 Map 中取出的顺序遍历插件。 为规避这一限制，你可以创建一个 Quartz 插件作为父插件，然后以给定的顺序加载其他多个插件。代码 8.6 显示了 ParentPlugin 长什么样子。 代码 8.6. ParentPlugin 能以特定的顺序加载子插件 package org.cavaness.quartzbook.chapter8; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.Scheduler; import org.quartz.SchedulerConfigException; import org.quartz.SchedulerException; import org.quartz.spi.SchedulerPlugin; public class ParentPlugin implements SchedulerPlugin { private static Log logger = LogFactory.getLog(ParentPlugin.class); // [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-8-4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第八章. 使用 Quartz 插件 (第三部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-8</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-8#comments</comments>
		<pubDate>Sun, 20 Jul 2008 12:21:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%85%ab%e7%ab%a0-%e4%bd%bf%e7%94%a8-quartz-%e6%8f%92%e4%bb%b6-%e7%ac%ac%e4%b8%89%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[三. 注册你的插件 当 SchedulerFactory 首次初始化的时候，会从 quartz.properties 文件中搜寻你所配置的 Quartz 插件。它会通过 java.lang.Class 的 newInstance() 方法创建插件的实例。你的插件必须有一个无参的构造方法，像代码中 JobLoaderPlugin 所做的那样。 要在 quartz.properties 文件中注册你的插件的话，需在 quartz.properties 文件中使用如下的格式创建一个属性： org.quartz.plugin.&#60;pluginName&#62;.class=&#60;fully_qualified_class_name_of_plugin&#62; Quartz 找寻属性文件中所有含这个关键词的项： org.quartz.plugin.&#60;pluginName&#62;.class 接着会试图创建等号右边的类的实例，并假定它是一个插件。你通过为 &#60;pluginName&#62; 字段提供一个唯一的名字来命你这个插件。 代码 8.3 展示了一个使用 JobLoaderPlugin 的 quartz.properties 文件。 代码 8.3. 在 quartz.properties 文件中注册 JobLoaderPlugin #=============================================================== # Configure Main Scheduler Properties #=============================================================== org.quartz.scheduler.instanceName = QuartzScheduler org.quartz.scheduler.instanceId = AUTO #=============================================================== # [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-8/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第八章. 使用 Quartz 插件 (第二部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-8-2</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-8-2#comments</comments>
		<pubDate>Sun, 20 Jul 2008 02:29:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%85%ab%e7%ab%a0-%e4%bd%bf%e7%94%a8-quartz-%e6%8f%92%e4%bb%b6-%e7%ac%ac%e4%ba%8c%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[二. 创建 Quartz 插件 创建一个新的插件很简单。你所有要做的就是创建一个 Java 类(或重用一个现有的类)，让它实现 org.quartz.spi.SchedulerPlugin 接口。Scheduler 将会在启动期间创建这个插件的实例。这个插必须有一个无参的构造方法，很显然它不能是抽象的。 ·JobInitializationPlugin   Quartz 框架有一个用来从 XML 文件中加载 Job 和 Trigger 信息的插件。这个插件就是 org.quartz.plugins.xml.JobInitializationPlugin，并且它在前面第三章 "Hello, Quartz" 中简略的讨论过。当你使用这个插件的时候，Quartz 框架就会搜寻一个叫做 quartz_jobs.xml 的文件并试图从中加载 Job 和 Trigger 信息。 改变 JobInitializtionPlugin 加载的 XML 文件 插件允许你改变它要查找来加载 Job 和 Trigger 信息的文件的名字。你可以通过在 quartz.properties 文件中设置一个别的文件名。我们会在本章后续中讲到更多的关于设置插件参数的内容。 如第三章所解释的，这个插件在你的应用需求不涉及到从数据库中加载 Job 信息时是很方便的。它在开发和测试期间也是很有用的，因为你可以快速的配置哪些 Job 和 Trigger 要被触发。就是说，无可争辩的，修改一个 XML 总比一系列的数据库表要简单。 对于从一个 XML 文件中加载 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-8-2/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第八章. 使用 Quartz 插件 (第一部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-8-1</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-8-1#comments</comments>
		<pubDate>Sat, 19 Jul 2008 04:46:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e5%85%ab%e7%ab%a0-%e4%bd%bf%e7%94%a8-quartz-%e6%8f%92%e4%bb%b6-%e7%ac%ac%e4%b8%80%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[第八章. 使用 Quartz 插件 Quartz 框架提供了几种用于扩展平台能力的方式。通过使用各种 "钩子" (通常指的就是扩展点)，Quartz 变得很容易被扩展和定制化来适应你的需要。其中一个最简单的扩展框架的方法就是使用 Quartz 插件。本章就来看看如何使用插件机制让 Quartz 进入到之前 Quartz 用户没去过的领域。 一. 什么是插件？ 假如你使用过其他的开源框架，例如 Apache Struts，你应该已经熟悉了插件的概念和它们的用法。非常简单，一个 Quartz 插件就是一个实现了 org.quartz.spi.SchedulerPlugin 接口的 Java 类，并且被作为插件注册给了 Scheduler。这个插件接口包含了三个方法，显示在代码 8.1 中。 代码 8.1. Quartz 插件必须实现的 SchedulerPlugin 接口 public interface SchedulerPlugin { public void initialize(String name, Scheduler scheduler) throws SchedulerException; public void start(); public void shutdown(); } SchedulerPlugin [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-8-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Job Scheduling Framework［翻译］第七章. 实现 Quartz 监听器 (第七部分)</title>
		<link>http://unmi.cc/quartz-job-scheduling-framework-7-7</link>
		<comments>http://unmi.cc/quartz-job-scheduling-framework-7-7#comments</comments>
		<pubDate>Sat, 12 Jul 2008 10:39:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Quartz]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/quartz-job-scheduling-framework%ef%bc%bb%e7%bf%bb%e8%af%91%ef%bc%bd%e7%ac%ac%e4%b8%83%e7%ab%a0-%e5%ae%9e%e7%8e%b0-quartz-%e7%9b%91%e5%90%ac%e5%99%a8-%e7%ac%ac%e4%b8%83%e9%83%a8%e5%88%86</guid>
		<description><![CDATA[八. 监听器中的线程使用 你看到了监听器接口中的方法后，你或许想知道是线程在调用监听器方法中饰演着什么样的角色。基实监听器方法是存在一个时序的，正如你看到方法名能想像到的那样。在一个 Job 执行的生命周期中，调用监听器方法以的顺序通常是固定的。图 7.2 描绘了监听方法的调用顺序和所涉及到的工作者线程。 图 7.2. 监听器方法按某一特定的时序被调用调用监听器方法的时序是固定的。如图 7.2 所示，在 Job 的执行前后，调用 Job 的 execute() 方法相同的线程被用于调用 JobListener 和 TriggerListener 的方法。假如你使用任何类类型的第三方线程管理工具或者打算实现你自己的线程池管理，知道这一点是很重要的。假如你在监听方法中实现了一个长运行逻辑时，这也会带来对性能上的负面影响。因为调用监听方法的线程和执行 Job 是同一个工作者线程，你不应该把监听方法实现的太复杂并要花费较长时间才能完成。保持它们的执行时间尽可能短。 九. Quartz 监听器的使用 了解了这所有的知识之后，那你能拿这些监听器做什么呢？实际上，你可以做相当多的事情。首先，值得注意的是，在内部，Quartz 使用这些监听器来帮助管理 Scheduler 和你的 Job 和 Trigger。框架还包含两个实现了监听器接口的插件，它们记录所有 Job 的日志和触发历史：分别为 org.quartz.plugins.history.LoggingJobHistoryPlugin 和 org.quartz.plugins.history.LogginTriggerHistoryPlugin。我们在下一章讲到 Quartz 插件。 这里有一些监听的使用：     ·捕获错过触发和重新的部署     ·成功执行完一个 Job 后发送一个 e-mail     ·基于数据库中设置的标记否决 Job 的执行     ·基于一个 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/quartz-job-scheduling-framework-7-7/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 18/73 queries in 0.038 seconds using disk: basic
Object Caching 5590/5713 objects using disk: basic

Served from: unmi.cc @ 2012-02-23 07:41:27 -->
