还是在一年前翻译完 Quartz Job Scheduling Framework 这篇手册、并做成了 CHM 文档,见此:Quartz Job Scheduling Framework[翻译]- 中文版 CHM 文件发布。
Quartz Job Scheduling Framework 中文 PDF 版下载地址:http://www.scalaworks.com/index.php/download/documents/Quartz-Job-Scheduling-Framework-中文版-V0.9.5.pdf/-中文版-V0.9.5.pdf/
也应不少网友的要求,应该出一个 PDF 版本的文件来,一来可能多数人觉得 PDF 看着舒服,又适于打印;再则可能就是当初制作 CHM 文件时有几个问题未解决:
1. BlogJava 上所用的字符集是 UTF-8、而我的那些文章转成 GBK 的 HTML 文件,有此地方会乱码,且版面会不同阅读全文>
发表于 @ 2009年10月10日 02:58:00 | 评论( loading... ) | 举报| 收藏
文件下载给我们最直接的概念就是,给个文件链接点击就下载。似乎太简单,然而 Struts2 却把它作为一个独立的学问来对待,理由有四:1. 文件名为中文时,直接点击下载,链接可能会走样(某些浏览器,URL 编码的问题),致使无法下载。2. 不总是从下载实际的文件,文件内容有时候是动态生成的,如数据库中的内容。3. 对于知名的文件类型不让浏览器直接打开,而是出现下载对话框保存文件。例如,要下载的文件是 .txt 的,可能直接就在浏览器中显示其内容。4. 需要授权才能下载文件时StreamResult 的实现细节敬请阅读它的源代码,实现过程一言以蔽之就是:从 inputStream 获取内容,以相应的 contentType、contentDisposition 和 bufferSize 输出给浏览器,对 contentType 和 contentDisposition 的相应设置就能实现文件下载阅读全文>
发表于 @ 2009年06月17日 15:53:00 | 评论( loading... ) | 举报| 收藏
Oracle 中的存储过程在有些情况下会变成失效状态,在 PL/SQL Developer 中该存储过程的图标左上角显示一把小红叉叉。比如储过程所引用的对象失效,dblink 出问题啦都可能引起用到它的存储过程失效。再就我的存储过程经常会变成无效,至今原因都未查明。查询 dba_dependencies 视图可以看到存储过程所引用的对象,再就在 dba_objects 视图中可以看到对象的 created 和 last_ddl_time 时间。上面的那种无效的存储程,只要不是语法上有问题,重新编译一下又是可用的了。总不能每次发现时人工去编译的,所以要实现自动化,有以下两种方法(网上找到的所有的 在Oracle中重新编译所有无效的存储过程 代码排版都很混乱,所以主要是重新整理了):阅读全文>
发表于 @ 2009年01月14日 09:12:00 | 评论( loading... ) | 举报| 收藏
一. 认识闭包
将代码块作为方法参数进行传递,这种机制就叫做闭包。闭包可以引用在创建闭包的范围中可见的变量。最近关于闭包的讨论也比较多,闭包能使语言更具灵动性,在动态脚本语言中较广泛的支持,如 Perl、Python、Ruby、JavaScript,还有我们的 Groovy。
有些语言能把函数作为参数传递,如 JavaScript 的回调函数,Python,甚至是 C++ 的函数指针。而 Java 在这方面又略逊一筹,需搬动一个匿名的内部类来实现类似的功能,内部类只能访问外部声明为 final 的变量。不过有呼声要在 Java SE 7 中增加闭包特性,让我们试目以待吧。
Groovy 这回大概是从 Ruby 那儿偷得闭包的语法。前面说这么多,其实你看到了就会发现,其实闭包很简单的,不信,请看:阅读全文>
发表于 @ 2008年11月16日 10:35:00 | 评论( loading... ) | 举报| 收藏
一提到 Perl,很多人对它啧啧称道的就是它那强大的正则表达式。一段富含正则表达式的 Perl 代码能让人觉得眼花缭乱,不过一旦习惯了就会对此爱不释手。而 Java 是在 1.4(在之前的版本需要依靠 jakarta-oro 库来提供对正则表式的支持--也是参考了 Perl) 中才加入了正则表达式,但它的相关操作还是略显古板。
当从 Java 分化出 Groovy 脚本语言一支,在处理正则表达式时也不想落后,从 Perl 那里学来了一些更为紧凑的语法,使用起来方便多了。虽相比 Perl 还有些差距,基本还是能知足了。下面来介绍 Groovy 中如何使用正则表达式,还是从 Java 的正式表达式说开,好有个对比。
比如在 Groovy 中要完成一个匹配判断只要写成 "abababab" ==~ "(ab)*" 就行了,不需要像 Java 里那样 Pattern->Matcher->matchs()。阅读全文>
发表于 @ 2008年10月29日 21:54:00 | 评论( loading... ) | 举报| 收藏
应用服务器一般都支持热部署(Hot Deployment),更新代码时把新编译的确类替换旧的就行,后面的程序就执行新类中的代码。这也是由各种应用服务器的独有的类加载器层次实现的。那如何在我们的程序中也实现这种热加载功能呢?即要在虚拟机不关闭的情况下(比如一个),换个类,JVM 就知道加载这个新类,执行新类中的逻辑呢?下面就简单演示这样一个热加载的例子,首先大致了解一下类加载器实际的例子演示热加载1. 建立工程,编写代码前面铺垫的应该够厚了,开始用个例子来说明感受类的热加载(又名热部署 Hot Deployment)。这个例子采用 Eclipse 来做,首先要建立两个普通的 Java 工程,分别是 TestHotDeployInf 和 TestHotDeployImpl。让 TestHotDeployImpl 依赖于 TestHotDeployInf 工程,即在 TestHotDeployImpl 的 Build Path 中,Projects 标签页里把 TestHotDeployInf 工程选进来,因为编译 TestHotD阅读全文>
发表于 @ 2008年10月27日 20:36:00 | 评论( loading... ) | 举报| 收藏
Groovy 中提供了一个减少输入的特性叫做命名参数(Named Parameter)。GroovyBean 可以通过在构造器调用中传递冒号隔开的属性名称和值进行构建。如:
car = new Car(model : "BMW", color : "black");
其实类似的用法早已有之,这有如 C++ 中的初始化成员列表,VB、Python、Transact-SQL 中的命名参数,JavaScript 中的 JSON 写法,Ruby 中提供的 syntax sugar用 hash 模拟所谓的 keyword argument。
我们先详细介绍 Groovy 的命名参数的用法与本质,然而再附上其他一些语言类似用法的实例,纵向贯通以加深印象。
注意 Groovy 的命名参数不能像 VB/Python/Transact-SQL 那样,调用方法时指示哪个参数是什么。Groovy 的命名参数是针对于类的属性(或者是 setter 方法)或 Map 的 Key。阅读全文>
发表于 @ 2008年10月23日 11:53:00 | 评论( loading... ) | 举报| 收藏
Spring MVC 中 Controller 的层次实在是多,有些眼花缭乱了。在单个的基础上,再新加两三个叫做丰富,再多就未必是好事,反而会令人缩手新闻片脚,无从定夺。多数 Controller 都是只完成一个任务,不过也有一个像 Struts 的 DispatchAction 的那样的 Conntroller,org.springframework.web.servlet.mvc.multiaction.MultiActionController,意即在一个 Controller 中处理多个动作,如同一个业务的增、删、改可以放在一起了。不至于增、删、改各自为政,造成代码混乱、重复难以维护。
本文介绍 MultiActionController 的使用,以及使用分别使用 InternalPathMethodNameResolver、ParameterMethodNameResolver、PropertiesMethodNameResolver 三种方法名解析器时的 Bean 配置和访问的 URL。 阅读全文>
发表于 @ 2008年10月21日 13:07:00 | 评论( loading... ) | 举报| 收藏
Groovy 对 java.io.File 进行了扩展,增加了一些接受闭包参数和简化文件操作的方法。作为对比,我们还是先来看看 java 中读取文件的两种常方法,分别是行读取和字节缓冲区读取:从上面可看到,采用 Java 传统方式来读取文件内容,不仅代码行多,而且还必须自己用 try/catch/finally 来处理异常和资源的关闭。现在马上来看看 Groovy 完成以上工作的代码是怎么的,只要一行代码:text = new File("foo.txt").getText();不需要 Reader 或 Inputstream、不用关闭语名和异常处理。我们所要做的就是编写业务逻辑,剩下的工作 Groovy 会帮你料理的。当然,如果文件找不到,也是会出现 java.io.FileNotFoundException 异常的。你可以捕获这个要处理的异常,但仍然不必担心资源的释放。阅读全文>
发表于 @ 2008年10月18日 19:27:00 | 评论( loading... ) | 举报| 收藏
如果要体验集群环境的WEB应用开发采用Apache+Tomcat进行轻量级集群配置是个很经济的选择,不妨也能动手配置一下,非常简单。
一:软件环境
1. Apache: apache 2.0.55 (由http://httpd.apache.org/进入下载)(点击下载apache 2.0.55)
2. Tomcat: Tomcat 5.5.25 (由http://tomcat.apache.org/进入下载)(点击下载Tomcat 5.5.25 zip版)
3. mod_jk: 在页面 http://tomcat.apache.org/ Download 标题下找到 Tomcat Connectors 链接进入),(点击下载 mod_jk-apache-2.0.55.so)
二:负载均衡
用Apache进行分流,把请求按照权重以及当时负荷分tomcat1,tomcat2...去处理
1. 安装apache,tomcat
我把Apache安装在D:\Apache 阅读全文>
发表于 @ 2008年10月15日 20:36:00 | 评论( loading... ) | 举报| 收藏