Quartz Job Scheduling Framework[翻译]第十四章. 工作流中使用 Quartz (第一部分)

第十四章. 工作流中使用 Quartz

Quartz 可以执行一个难以置信的 Job,来完成预计的任务。不幸的是,用来运行一个业务的 Job 经常比单一的 Job 或任务要稍稍复杂。每年百万计的美金花费到理解、设计和构建组织的业务流程。Quartz 框架包含一些设施用于把多个 Job 链接起来构建一个简单的业务流程模型 。本章讨论你能如何用 Quartz 连接 Job。为获得实际的工作流可操作性,你还需要一些来自于 Quartz 框架的东西。本章就来看为实现你的 Job 所构成的工作流可以如何扩展 Quartz 框架。

一. 什么是工作流

Web 上聚集了个人或团体关于工作流的定义和实例。有人定义工作流为“自动化的后台管理系统”。另一些人使用“业务流程建模” 一语,并收取许多的咨询费用向你解释这个概念。对于本章的要义,我们使用如下的工作流定义: 阅读全文 >>

Quartz Job Scheduling Framework[翻译]第十一章. Quartz 集群 (第四部分)

四. 运行 Quartz 集群节点

在启动集群中的 Quartz 应用真的没什么差别。每个实例(或节点) 必须单独启动。启动时,实例连接到数据库,获取 Scheduler 信息,并开始部署 Job。

因为 Quartz 使用了一个随机的负载均衡算法,你将会看到 Job 以随机的行方式由不同的实例执行。没有固定的模式或预告定义的节点来执行特定的 Job。

下一节会讨论一些在处理集群环境中的 Quartz 较常见的问题和任务。

五. Quartz 集群 Cookbook

本节旨在为开发者便于解决 Quartz 集群的具体问题而提供了资源。 阅读全文 >>

Perl 语言概览,高屋建瓴、欲招人之耳目(四)

1.6 流程控制

1.6.1 什么是真

  ·除了””和”0”,所有字符串为真
  ·除了 0,所有数字为真
  ·所有引用为真
  ·所有未定义的值为假.

1.6.2 If 和 unless 语句

   if (case1) {...} elsif (case2) {...} elsif (case3) {...}  else {...}

为节约版面,全写在一行了。if/elsif/else 后的大括号是必须的,这和 C/Java中不一样,elsif 同 pl/sql 的写法。

象在英语中说“如果这不是真的,就做某事”,你可以使用 unless 语句: 阅读全文 >>

Perl 语言概览,高屋建瓴、欲招人之耳目(三)

1.4 文件句柄

文件句柄只是你给文件,设备,网络套接字或管道起的一个名字,这样可以帮助你分清你正在和那个文件或设备通讯,同时掩藏了如缓冲等复杂性。

你可以使用 open 创建并关联一个文件。open 函数需要至少两个参数:文件句柄和你希望与文件句柄关联的文件名。Perl 也给你一些预定义(并且预先打开)的文件句柄。STDIN 是我们程序的标准输入,

STDOUT 是标准输出。STDERR 标准错误输出。

因为你可以用 open 函数创建用于不同用途(输入,输出,管道)的文件句柄,因此你必须指定你需要哪种类型。 阅读全文 >>

Perl 语言概览,高屋建瓴、欲招人之耳目(二)

1.2.4 复杂数据结构

$wife{"Jacob"} = ("Leah", "Rachel", "Bilhah", "Zilpah");   # 错误

$wife{"Jacob"} = ["Leah", "Rachel", "Bilhah", "Zilpah"];   # 正确

用[] 中括弧来将一个列表转换成一个标量。

$wife[0] = ["Leah", "Rachel", "Bilhah", "Zilpah"];  #正确

$wife = ["Leah", "Rachel", "Bilhah", "Zilpah"]; #错误

左边要写成 $wife{"Jacob"} 或 $wife[0] 表明 wife 是一个数组或散列,只有对数组或散列才能这样赋值。

访问方式用 $wife{"Jacob"}[0] 或 $wife[0][0] 阅读全文 >>

Perl 语言概览,高屋建瓴、欲招人之耳目(一)

1. 使用帮助手册

如果你是在 Linux/Unix 下,那么 Man 给我们准备好了各色点心,用 man 加上下面中的类别名就能查阅到对应的帮助,如 man perldata 

手册页 内容
perl 有些什么 perl 手册页
perldata 数据类型
perlsyn 语法
perlop 操作符和优先级
perlre 正则表达式
perlvar 预定义变量
perlsub 子过程
prelfunc 内建函数
perlmod 如何令 Perl 模块工作
perlref 参考手册
perlobj 对象
perlipc 进程间通讯
perlrun 如何运行 Perl 命令,以及命令行开关
perldebug 调试
perldiag 诊断信息
手册页 内容
perlfaq1 关于 Perl 的通用信息
perlfaq2 获取和学习 Perl
perlfaq3 编程工具
perlfaq4 数据操作
perlfaq5 文件和格式
perlfaq6 正则表达式
perlfaq7 通用 Perl 语言信息
perlfaq8 系统交互
perlfaq9 网络

或分 FAQ 来分类手册,还能在手册中搜索内容,如

man perlfunc split      --- 搜索 split 函数的使用

man perlvar ARGV   --- 内置变量 ARGV 的帮助信息

阅读全文 >>

Quartz Job Scheduling Framework[翻译]第十一章. Quartz 集群 (第二部分)

二. Quartz 中集群是如何工作的

一个 Quartz 集群中的每个节点是一个独立的 Quartz 应用,它又管理着其他的节点。意思是你必须对每个节点分别启动或停止。不像许多应用服务器的集群,独立的 Quartz 节点并不与另一其的节点或是管理节点通信。(将来的 Quartz 版本将会设计成让节点能与其他节点直接通信,而不是借助于数据库。) 取而代之的是,Quartz 应用是通过数据库表来感知到另一应用的。

Quartz 集群仅能使用 JDBC JobStore 工作因为集群中节点依赖于数据库来传播 Scheduler 实例的状态,你只能在使用 JDBC JobStore 时应用 Quartz 集群。这意味着你必须使用 JobStoreTX 或是 JobStoreCMT 作为 Job 存储;你不能在集群中使用 RAMJobStore 的。在将来的释放版中非常可能移除这个需求,节点也将能直接与另一节点直接通过网络协议,可能使用 JGroup 进行通信。

图 11.1 显示了每个节点直接与数据库通信,若离开数据库将对其他节点一无所知 阅读全文 >>

DB2 登录数据库时的代码页转换错误 SQL0332N

客户端连接到另一台机器上的 DB2 数据库,用 DB2 的控制中心连接没问题,但是用 Quest Central for DB2 来连接,输入用户名和密码,确定,出现提示窗口:

[IBM][CLI Driver] SQL0332N  没有从源代码页 "86" 至目标代码页 "819" 的转换。原因代码是 "DB2INST1"。  SQLSTATE=01539

无法登录,原因是本机的代码页(codepage) 与数据库的代码页不相符且无符完成又向转换。

解决办法是在命令行下执行 db2set DB2CODEPAGE=819

dos> db2set DB2CODEPAGE=819

然后,再次用 Quest Central for DB2 来连接数据库就 OK 啦

参考:1. SQL0332N Reason Code 1

Quartz Job Scheduling Framework[翻译]第十一章. Quartz 集群 (第一部分)

第十一章. Quartz 集群

不可避免的,我们还是要说到集群。虽然单个 Quartz 实例能给予你很好的 Job 调度能力,但它不能令典型的企业需求,如可伸缩性、高可靠性满足。假如你需要故障转移的能力并能运行日益增多的 Job,Quartz 集群势必成为你方言的一部分了。本章就告诉你如何使用 Quartz 的集群能力来更好的支持你的业务需求,并且即使是其中一台机器在最糟的时间崩溃了也能确保所有的 Job 得到执行。

一. 集群对 Quartz 来说意味着什么?

集群扮演着运行一个组件或应用的多个实例,它们以透明的方式提供服务。集群是企业范畴的事物,而不局限于 Java 的世界里。当部署 J2EE 应用时,例如,供应商为应用服务器提供了集群的能力,以便于像 EJB、JNDI 和 Web 组件能获得高可用性。然当客户端请求这些服务时候,它们就能更可靠的提供服务。 阅读全文 >>