隔叶黄莺 The Blog of Unmi

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

BlogJava 首页 新随笔 联系 聚合 管理
  269 Posts :: 87 Stories :: 764 Comments :: 0 Trackbacks

置顶随笔 #

     摘要: 写在最前面的

再次翻看一下我的博客,最早的那篇《Quartz Job Scheduling Framwork》翻译是在 2007-10-17 02:17 ,距离今日那是一个造人的时间,足见这个翻译过程有多难产。一方面是源于语言水平,再者其间也发生了许多事情。

现把本人博客上零零散散,顺序错乱的各篇译章汇集成册,做成了一个 《Quartz Job Scheduling Framework 中文版.chm 》文件与各位分享,以方便大家的阅读。同时感谢大家一路来的支持,也希望大家能提出宝贵意见,或有问题拿出来共同探讨。另外,每篇译章都有到达我的博客上所对应页面的链接,所以若有疑问可点击页面上方或下方的的“我要评论” 按钮进入到博客对应页面来对本篇进行评论,或阅读他人的相关评论。  阅读全文
posted @ 2008-08-24 22:26 隔叶黄莺 阅读(1325) | 评论 (27)编辑 收藏

2008年9月4日 #

     摘要: 一. 认识闭包

将代码块作为方法参数进行传递,这种机制就叫做闭包。闭包可以引用在创建闭包的范围中可见的变量。最近关于闭包的讨论也比较多,闭包能使语言更具灵动性,在动态脚本语言中较广泛的支持,如 Perl、Python、Ruby、JavaScript,还有我们的 Groovy。
有些语言能把函数作为参数传递,如 JavaScript 的回调函数,Python,甚至是 C++ 的函数指针。而 Java 在这方面又略逊一筹,需搬动一个匿名的内部类来实现类似的功能,内部类只能访问外部声明为 final 的变量。不过有呼声要在 Java SE 7 中增加闭包特性,让我们试目以待吧。
Groovy 这回大概是从 Ruby 那儿偷得闭包的语法。前面说这么多,其实你看到了就会发现,其实闭包很简单的,不信,请看:
  阅读全文
posted @ 2008-09-04 01:04 隔叶黄莺 阅读(732) | 评论 (0)编辑 收藏

2008年9月3日 #

     摘要: 一提到 Perl,很多人对它啧啧称道的就是它那强大的正则表达式。一段富含正则表达式的 Perl 代码能让人觉得眼花缭乱,不过一旦习惯了就会对此爱不释手。而 Java 是在 1.4(在之前的版本需要依靠 jakarta-oro 库来提供对正则表式的支持--也是参考了 Perl) 中才加入了正则表达式,但它的相关操作还是略显古板。
当从 Java 分化出 Groovy 脚本语言一支,在处理正则表达式时也不想落后,从 Perl 那里学来了一些更为紧凑的语法,使用起来方便多了。虽相比 Perl 还有些差距,基本还是能知足了。下面来介绍 Groovy 中如何使用正则表达式,还是从 Java 的正式表达式说开,好有个对比。

比如在 Groovy 中要完成一个匹配判断只要写成 "abababab" ==~ "(ab)*" 就行了,不需要像 Java 里那样 Pattern->Matcher->matchs()。  阅读全文
posted @ 2008-09-03 10:03 隔叶黄莺 阅读(709) | 评论 (4)编辑 收藏

2008年9月2日 #

     摘要: Java 相比于 C++ 语法来说去除了指针及显式内存释放,受到不少赞誉,的确避免很多的出错的可能性,提高了生产率。可是把操作符重载也拿掉了,也没了条件编译。这两项特性在 C# 是有的。操作符在 C++ 中似乎不是很好理解,它可以带来很大的灵活性,和操作的直观性。Java 大约想的是过宽的灵活性怕带来过度的滥用,在大型项目会有所不利。

因此由 Java 所衍生的 Groovy 脚本像 Perl、Python、Ruby 一样又有了操作符重载,脚本基于其应用领域需要更多的灵活性和自由度。

Groovy 中对操作的操作比起 C++ 中来说更简单,Groovy 中是把操作符映射到对应命名方法的调用,你只要重载了该命名方法便是重载了相应的操作符,比如说加号+ 映射到 plus(obj) 方法,你只要重载了 plus(obj) 即改变了加号+ 的形为。对于其他符号也是一样的。  阅读全文
posted @ 2008-09-02 18:32 隔叶黄莺 阅读(594) | 评论 (5)编辑 收藏

     摘要: 由于与 Java 渊源,所以还是打算把 Groovy 作比较细致的了解。还是在 IBM developerWorks 上找到一份初级的 Groovy 教程,名之曰《精通 Groovy》,实则一份入门教程。为大家阅读方便--免去了在线,还要一个 IBM ID 登陆后一页一页的翻,所以我把那些页面收集一下,制作成一个 CHM 文件,共享给大家。

原始教程地址在:https://www6.software.ibm.com/developerworks/cn/education/java/j-groovy/index.html

CHM 文件 Master Groovy.chm 下载地址:http://www.blogjava.net/Files/Unmi/Master%20Groovy.chm.rar

得承认 Ruby 在动态脚本语言领域很有其过人之处,只是本人一直不怎么情愿接受它。现在好了,终于觅得了几乎能与 Ruby 相媲美的 Groovy,应该可让其在某些时候大显身手的。  阅读全文
posted @ 2008-09-02 00:45 隔叶黄莺 阅读(926) | 评论 (7)编辑 收藏

2008年9月1日 #

     摘要: 本程序是基于 dp.SyntaxHighlighter 写的代码语法着色的工具。支持的语言有
java/xml/sql/jscript/groovy/css/cpp/c#/python/vb/perl/php/ruby/delphi。

可方便用于你的博客中粘贴代码,只要自定相应的样式 (highlight.css 的内容,.Text 支持自定义样式或在模板里加上语法样式),然后复制用这个工具生成的 HTML 代码就能让你的代码着高亮显示。

可以加入更多语种的支持,本程序就是在 dp.SyntaxHighlighter 的基础上扩展了对 Perl 和 Groovy 语言的支持,网上可以找到相应语法的 JS 代码和 CSS。语言扩展支持通过在 shCore.js 和 highlight.css 加入相应代码即可。  阅读全文
posted @ 2008-09-01 10:57 隔叶黄莺 阅读(671) | 评论 (2)编辑 收藏

2008年8月28日 #

     摘要: 前面写过一个因为 Oracle 驱动版太低引起的一在题:Oracle 驱动版本引起的显示字段奇怪编码问题。今天又遇着一个。

本地写好的一段连接数据库的程序,一放到正式服务器上又不能正常工作了,原来的代码中没有打印出异常栈,都看不出什么问题来,后来加上异常栈输出,得到如下信息:

Fail to convert to internal representation
java.sql.SQLException: Fail to convert to internal representation
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
  阅读全文
posted @ 2008-08-28 19:05 隔叶黄莺 阅读(79) | 评论 (2)编辑 收藏

2008年8月26日 #

     摘要: 由本人翻译并制作的《Quartz Job Scheduling Framework 中文版》CHM 文件更新为 V0.9.0 版,上一版本是 V0.8.2。

更新的特性有以下三点:

1. 在原来版本的基础上加上了全文检索功能,方便于快速查找某个参考配置和定位到所关心的内容

2. 去除了多余的索引标签,因为它和目录标签的内容就是雷同的

3. 加上了书签页,方便阅读时记录下所关注的主题

关键是克服了原来字符集方面的问题才得已把搜索功能加上,不然在搜索标签页中显示的主题是乱码。

V0.9.0版的压缩包大小为 1.11 MB,CHM 文件大小为 1.12 MB,仍是通过原来的链接下载  阅读全文
posted @ 2008-08-26 01:59 隔叶黄莺 阅读(1267) | 评论 (8)编辑 收藏

2008年8月25日 #

     摘要: 用过 XML 的人都知道可用 DTD(Document Type Definition) 来验证语法,不过微软主导了新一代验证语法的 XML Schema,并且风头正劲,大有一统江湖之势。看看我们身边的几个变化就明白了。

web.xml 从 web-app_2_3.dtd 到 web-app_2_4.xsd
spring 配置文件从 spring-beans.dtd 到 spring-beans-2.0.dtd 到 spring-beans-2.0.xsd,直至灵活的自定义 Schema
quartz_jobs.xml 配置文件从 job_scheduling_data_1_5.dtd 到 job_scheduling_data_1_5.xsd

XML Schema 简介

XML Schema 是一个比 DTD 具有更细致描述语法功能的验证技术,并且它本身也是一个 XML 文件,不像 DTD 用是是独有的语法。

既然 XML Schema 和 DTD 都是用来验证 XML 的,并能大抢  阅读全文
posted @ 2008-08-25 17:20 隔叶黄莺 阅读(1009) | 评论 (0)编辑 收藏

2008年8月22日 #

     摘要: 对于 XML 文件中不带命名空间(NameSpace) 的节点,如

< blog_Content>

用 JDOM 的 XPath 来搜索这个节点时可用下面之中任一代码:

① List elements = XPath.selectNodes(document,"//blog_Content");

② XPath xpath = XPath.newInstance("//blog_Content");
List elements = xpath.selectNodes(document);

但是如果是查找带命名空间的节点,如

< blogns:blog_Content xmlns:blogns="x-schema:#Schema2">
< blogns:Title>Quartz Job Scheduling Framework[翻译]第一章. 企业应用中的作业调度 阅读全文
posted @ 2008-08-22 14:14 隔叶黄莺 阅读(917) | 评论 (0)编辑 收藏

2008年8月19日 #

     摘要: 四. 创建一个工作流 Job

最后,我们需要介绍启动工作流的 Quartz Job 。当 Scheduler 调用了它,Quartz Job 就查找工作流的名字,并启动、运行相应的工作流。如果没有在 JobDataMap 中配置工作流的名字,Job 就会直接退出。

代码 14.13 显示了 WorkflowJob.

代码 14.13. Quartz WorkflowJob 设计为调用一个 OSWorkflowJob  阅读全文
posted @ 2008-08-19 15:35 隔叶黄莺 阅读(973) | 评论 (3)编辑 收藏

2008年8月18日 #

     摘要: 四. Quartz 与 OSWorkflow 的集成

OSWorkflow 与 Quartz 集成的第一步是要改变关于 Job 的思维方式。当把 OSWorkflow 引入到你的 Quartz 应用时你需要以完全不同的方式来思考。那也不是说你当前的想法就是糟糕的或不正确的,只是与 Quartz 一同用工作流强迫你生发一些关于是什么组成 Job 的新的思维。你过去概念中的 Job 现成变成了一个 OSWorkflow 函数。你可以认为是你原有 Job 实质上存在的逻辑作为工作流中的步骤。你仍然需要使用 Quartz 的 Job,但是,当与 Quartz 框架集成工作流时,一个 Quartz Job 将用来初始化工作流。在工作流运行时,这个 Job 将会等待它直至结束。

在本章前面部分,当我们谈到串联 Job 时,每个 Job 代表了一个独立的任务。Jox X 执行后并完成一个任务,接着通知 Job Y 去执行一个有点关联却是独立的任务。在这两个任务间必须有一些依赖关系,否则你不能把它们链接在一起。  阅读全文
posted @ 2008-08-18 21:22 隔叶黄莺 阅读(1047) | 评论 (0)编辑 收藏

     摘要: 三. OSWorkflow 快速入门

像 Quartz 一样,OSWorkflow 是一个完全由 Java 构建的开源项目,而且也是 OpenSymphony 家族项目的成员。还有许多的工作流项目,商业的或是开源的。OSworkflow 在设计上与 Quartz 有很多相似性,所以把这两个框架进行集成不用太费我们的心思。

OSWorkflow 工作在有限状态机的原则之上。一个工作流由一系列状态组成,包括一个开始状态和一个或多个结束状态。从某一状态迁移到另一状态,需要发生一次转换。实际上从某一特定状态可能会有多种转换,你也可以在同一时间从某一状态发生多种转换。选择什么转换依赖于环境,对状态的输入,和一些我们将在后面讨论的条件信息。  阅读全文
posted @ 2008-08-18 11:00 隔叶黄莺 阅读(1203) | 评论 (0)编辑 收藏

2008年8月17日 #

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

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

一. 什么是工作流

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

工作流是出现在某一特定时序中的一系列互为依懒的任务。

在我们进一步深入到本章内容后,该定义将变得越发明淅。  阅读全文
posted @ 2008-08-17 00:24 隔叶黄莺 阅读(1278) | 评论 (3)编辑 收藏

2008年8月12日 #

     摘要: 四. 运行 Quartz 集群节点

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

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

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

五. Quartz 集群 Cookbook

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

·指派 Job 给集群中特定的实例

当前,还不存在一个方法来指派(钉住) 一个 Job 到集群中特定的节点。假如你需要这种行为,你可以创建一个非集群的 Quartz 应用与集群中的节点并行运行,并且要使用独立的一套数据库表或单独的 JobInitializationPlugin 用到的 X  阅读全文
posted @ 2008-08-12 01:29 隔叶黄莺 阅读(1140) | 评论 (1)编辑 收藏

2008年8月11日 #

     摘要: 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 语句:

unless ($destination eq $home) { print "I'm not going home.\en"; }   阅读全文
posted @ 2008-08-11 16:25 隔叶黄莺 阅读(101) | 评论 (2)编辑 收藏

仅列出标题  下一页