Quartz Job Scheduling Framework[翻译]- 中文版 CHM v1.0.0 文件发布

Quartz Job Scheduling Framework_2.jpg Quartz Job Scheduling Framework
中 文 版

Chuck Cavaness 著 Unmi(隔叶黄莺) 译

译者博客:http://yanbin.blog/

下载地址:Quartz Job Scheduling Framework 中文版.chm

写在最前面的

这一次的版本更新主要是因为创立了自己的独立博客 http://unmi.cc,从 blogjava.net 上脱离了开来,所以原来可以点击 comment.jpg 进行探讨的链接全都更新到这个博客来了,因为原链接已无效了。还有稍稍改了点原文中的一些差错。

Quartz 是什么,大概不需多加说明,简单讲就是一个纯 Java 实现的作业调度工具,相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细。也许大多数人听说 Quartz 是在学习或使用 Spring 的时候,也就是 Spring 整合了 Quartz。

同时感谢大家一路来的支持,也希望大家能提出宝贵意见,或有问题拿出来共同探讨。另外,每篇译章都有到达我的博客上 所对应页面的链接,所以若有疑问可点击页面上方或下方的的 comment.jpg 按钮进入到博客对应页面来对本篇进行评论,或阅读他人的相关评论

简单例子演示如何进行类的热加载(Hot Deployment)

应用服务器一般都支持热部署(Hot Deployment),更新代码时把新编译的确类替换旧的就行,后面的程序就执行新类中的代码。这也是由各种应用服务器的独有的类加载器层次实现的。那如何在我们的程序中也实现这种热加载功能呢?即要在虚拟机不关闭的情况下(比如一个),换个类,JVM 就知道加载这个新类,执行新类中的逻辑呢?下面就简单演示这样一个热加载的例子,首先大致了解一下类加载器。

标准 Java 启动器的类加载器层次

1. 引导类加载器(bootstrap):   加载内核 API,如 rt.jar(java.lang、java.io 等)
2. 扩展类加载器(extension):   加载的默认扩展来自于 jre/lib/ext
3. 系统类加载器(system):       类路径上的类,如 com.unmi.*

说明:这只是标准 Java 启动器运行程序时的类加载器层次,像应用服务器中的类加载器通常会多一两层,也是在这个基础上的延伸。上面的类加载层次存在自上而下的委托关系,委托加载不在这里细讲。 阅读全文 >>

有关于 JVM 的垃圾收集(一)

Java 中使用 new、newarray、anewarray 和 multianewarray 指令来创建的对象,当这些对象不再使用时由垃圾收集来释放。那么 反序列化等都是间接使用了前面的某个指令, clone()  是个本地方法?

JVM 规范不需要任何特定的垃圾收集技术,甚至也没要求有垃圾收集机制。大概只是说不需要手工释放内存,具体怎么实现各 JVM 自行决定。

GC 除了释放不再被引用的对象,还要处理堆碎片,整理出连续的空闲空间才能放得下新的对象。不至于出现总的空闲空间足够,但碎片太多而报出 "Out of Memory" 的异常。

GC 有两个好处:一个是提高了生产率,不用埋头于 Memory Link 的有时甚至是逐行的检查;二,GC 也是 Java 安全策略的一部分,有了它不至于因错误的释放内存而导至 JVM 崩溃。但是 GC 的一个潜在缺陷影响了程序的性能,它需要一直在后台不时的做些事情,而且实时性也有所欠缺。 阅读全文 >>

Maven 开发者手册翻译进行中......

看到 Maven 不断的演进, 著名的  Appfuse 也摒弃了 Ant 而采用了 Maven 作为它的构建管理工具,各个 Java IDE 对于 Maven 的支持也是纷纷上马,所以急迫的感觉对于 Maven 的出现是不容忽视了。Ant 纵然是能满足于我们的需求,不过 Ant 的 build.xml 脚本总那么臃肿不堪,不利于阅读。

而 Maven 与 Ant 同出一族,为 Apache 门下的师兄弟。既然 Apache 会再发明这样一个新轮子,相比于 Ant 确有它的许多独到之处。Maven 依赖了 ant-x.x.x 包,但要说是建立在 Maven 之上的话恐有不太合适。

关于 Maven 与 Ant 之间比较的文章在网上能找到不少,如 maven和ant的比较。具体的不细说,略表几个 Maven 关键之处:1. 对依赖包的处理十分优雅;2. 有大量可用的插件支持;3. 便于与其他工具的支持;4. 适合于多项目的开发。本人也是接触不久,还有许多有待发掘。 阅读全文 >>

Maven 1 的 Unknown error downloading; status code was: 301 错误解决

现在早已是 Maven 2 了,可还是有机会用了一下 Maven 1,所用的版本是 Maven 1.0.2,刚开始尝试的时候出现以下两个问题:

1. 执行 maven genapp 时产生如下异常:

???????? commons-jelly-tags-interaction-20030211.143817.jar????
Error retrieving artifact from [http://www.ibiblio.org/maven/commons-jelly/jars/commons-jelly-tags-interaction-20030211.143817.jar]: java.net.ConnectException: Connection timed out: connect
?????? commons-jelly-tags-interaction-20030211.143817.jar ?????§°???
???????????????±???????¨??????????

commons-jelly-tags-interaction-20030211.143817.jar 阅读全文 >>

Spring 学习点滴,《Spring in Action》笔记(七)

  1. Spring MVC 还提供了一个特别点的 Controller 类型就是 ThrowawayController,它自成一个接口,ThrowawayController 和 Controller 的关系是平行的。什么叫做 ThrowawayController 呢,中文叫做一次性控制器,也就像一次性筷子那样用完即丢,下次要用又拿新的。表现在实例上就是相应 Bean 配置为 singleton="false",每次初始化一个新实例。与其他 Controller 的区别完全就是 WebWork 或 Struts2 的 Action 与 Struts1 的 Action 的区别。因为它是多例的,所以可以用实例变量来接受请求参数,执行方法无参数;而不像其他的 Controller ,因为共享实例,所以需要通过执行方法的来传递请求参数以保证线程安全(P273)

92. 在《Spring in Action》第一版 274 页说 DispatcherServlet 使用缺省 ControllerHandlerAdapter 时只会把控制权分发给 Controller 接口类型的类,而要配置 ThrowawayControllerHandlerAdapter 后,Dispatcherservlet 就把控制权分发给 ThrowawayController,配置如下: 阅读全文 >>

Spring MVC 中的 MultiActionController 用法详解

Spring MVC 中 Controller 的层次实在是多,有些眼花缭乱了。在单个的基础上,再新加两三个叫做丰富,再多就未必是好事,反而会令人缩手新闻片脚,无从定夺。多数 Controller 都是只完成一个任务,不过也有一个像 Struts 的 DispatchAction 的那样的 Conntroller,org.springframework.web.servlet.mvc.multiaction.MultiActionController,意即在一个 Controller 中处理多个动作,如同一个业务的增、删、改可以放在一起了。不至于增、删、改各自为政,造成代码混乱、重复难以维护。

本文中的 web.xml 的 org.springframework.web.servlet.DispatcherServlet 所处理的 url-pattern 是 *.html,如何搭建 Spring MVC 项目不细加说明,可参考我前面同系列的文章。

例如,下面的 UserController,有两个签名一样的 updateUser() 和 deleteUser() 方法 阅读全文 >>

Unmi 学习 Groovy 之模板

提起模板,在 Java 领域中无疑会让人想起 Velocity 和 FreeMarker,可也不要忽略了,和我们最早打交道的 JSP 其实也是一种模板。模板一般都用来作为数据显示分离的显示部分,即 MV 的 V。比如说我目前在 Web 展示和发送邮件时较多的用到模板。通常模板用占位符创建的一个文本,或者串文本、输入流等。这些占位符可以用自己的流程控制代码,所以相应的就有的各种模板语言,例如 VTL(Velocity Template Language)、FTL(FreeMarker Template Language)、自然 JSP 也有算上。

有了模板,再把模型数据和模板进行归并就能得到我们真正想要的数据展现了,这当中的工作就是叫做模板引擎的干的。Groovy 中包含了抽象的 groovy.text.TemplateEngine 类和 groovy.text.Template 接口。可见 Groovy 表现的很开放,它们使得将任何模板引擎插入到 Groovy 中成为可能,比如 Velocity 或者 FreeMarker 引擎,可惜现在还没有。 阅读全文 >>

为 JDOM 解析 XML 文件成 Document 加速

本篇讲述在 XML 中使用了 DTD 的情况下,用 JDOM 解析时如何加速,使用 Schema 验证 XML 的不在讨论之中。所用的是一个 Struts 1.3 的配置文件,大小为 102 K。

我们用 JDOM 解析 XML 最简单的代码莫过于以下两行代码,不过为了测试我们在其前后加上记录执行时间的代码:

在这个 struts-config.xml 中的 DTD 声明如下: 阅读全文 >>

Unmi 学习 Groovy 之 Groovlet

在 Java 领域中我们结识过多个 XXXlet 的东西,比如 Applet、Servlet、Scriptlet,这里的 let 作为一个后缀,代表小的意思,或者引申为简短、精巧。

Applet  ---- Application let 小应用程序
Servlet  ---- Service let 小服务程序
Scriptlet ---- Script let  一小段脚本,在 jsp 中用这样的标签 <jsp:scriptlet>

另外还有一种叫做 text/x-scriptlet 的 MIME 类型。

而本篇所要介绍的角色也用了 let 后缀,叫做 Groovlet,不能简单识作为 Groovy let ---- 小 Groovy 程序。不尽对,确切来说它是 GroovyServlet、进一步 Groovy Service let 的简称,没错,它实质上也是一个 Servlet,也就是 Servlet 的扩展。简单讲就是用 Groovy 脚本替代 Java 语言来写 Servlet 程序,再明白点讲就是:比如我们在浏览器中用 http://localhost:8080/groovlet/hello.groovy 访问某个脚本就像访问某个 php/perl 一样的效果。 阅读全文 >>