隔叶黄莺 The Blog of Unmi

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

BlogJava 首页 新随笔 联系 聚合 管理
  209 Posts :: 84 Stories :: 392 Comments :: 0 Trackbacks

2008年5月17日 #

     摘要: 七. 使用 JobStoreTX

我们首先要讨论的持久性 JobStore 是 JobStoreTX。名字中的 "TX" 代表着 "事物"。我们在前面提过,JobStoreTX 是设计用于想要 Quartz 来管理事物的环境中。例如,假如你正构建一个 J2EE 应用,并且不使用到应用服务器,如 WebLogic 或者 JBoss 等,那么 JobStoreTX 会是持久性 JobStore 正确的选择。

在之前章节中,我们看到配置 RAMJobStore 是多么的容易。我们提到 RAMJobStore 的其中一个优点就是易于配置。我们已经讨论过让数据库准备就绪该做的事情;现在我们讲述使 Quartz 应用支持 JDBC JobStore 需要对它配置些什么。

·配置 JobStoreTX

要告诉 Quartz 运行环境你想使用一个别的 JobStore 而不是默认的 RAMJobStore,你必须配置几个属性。配置它们的顺序无关紧要,只要保证在第一次运行程序之前都做了设置。  阅读全文
posted @ 2008-05-17 12:03 隔叶黄莺 阅读(221) | 评论 (0)编辑 收藏

     摘要: 如有 index.jsp 页,当出现后服务器端异常时要转向到 errorPage.jsp,并在 errorPage.jsp 中把对应错误信息显示出来。我们需要在这两个页面分别加上指令 errorPage="errorPage.jsp" 和 isErrorPage="true"。

当 index.jsp 有异常时则转向到 errorPage.jsp,在 errorPage.jsp 则可从内置变量 exception 获悉到异常内容、原因。那么它的内部实现机制是什么呢?本文先从 Tomcat 对 jsp 生成的 java 源码进行分析。

掌握原理后,就可适时的应用它,如 Servlet、Filter、Struts 的 RequestProcessor 或 Struts Action 中出现异常设置某个属,并转向到 errorPage.jsp,并能复用原来的 errorPage.jsp 中显示错误信息的代码。最后切换了应用服务器,在 WAS 环境下实际印证了同样做法也是可行的,其他应用服务器上未经实验,原理是一致的,可能有细微的差别。  阅读全文
posted @ 2008-05-17 00:42 隔叶黄莺 阅读(502) | 评论 (2)编辑 收藏

2008年5月15日 #

     摘要: 在使用了 Struts2 框架的系统中,对于处理像下面这种表单上传文件时:

自然而然的想法就是在 Action 中声明变量 File upload 和 String desc,请求提交到这个 Action 后,在 execute() 方法中就能直接使用 upload 和 desc 了,它们已被 Struts2 框架(org.apache.struts2.interceptor.FileUploadInterceptor 监听器) 赋上了相应的值了。

因为维护的是一个古老的项目,请求都是直接提交给 jsp。在这个项目中套上了 Struts2 已是不易了。原来项目是用的 jspSmartUpload 来处理上传文件的,Struts2 一上 jspSmartUpload 便不能正常工作了,因为 Struts2 的过滤器 org.apache.struts2.dispatcher.FilterDispatcher 拦截的是所有的请求,在交把请求交给 jspSmartUpload 之前请求 request 就已被处理过了,即使是把 struts2-core-2  阅读全文
posted @ 2008-05-15 17:16 隔叶黄莺 阅读(798) | 评论 (2)编辑 收藏

2008年5月13日 #

     摘要: 本文侧重于发现问题及解决问题的过程,过程中才有乐趣,但对于务实重效率的人固然是看了会眼花。因此最后还是总结一下吧:

WAS 下的 Web 应用,如果要更新 web.xml 文件,该替换哪一个 web.xml 呢?

·非集群环境要更新 WAS_HOME/config/cells/[unmi]/applications/[Prod_war.ear]/deployments/[Prod_war]/[Prod.war]/WEB-INF/ 中的 web.xml 文件

·集群环境则,只是做了上一步,重启应用后确实有效果,但若要在 DM 重启后仍然有效的话,还需更新
DM_HOME/config/cells/[unmiNetwork]/applications/[Prod_war.ear]/deployments/[Prod_war]/[Prod.war]/WEB-INF 中的 web.xml 文件

·如果只更新 WAS_HOME/installedApps/[unmi]/[Prod_war.ear]/[Pro  阅读全文
posted @ 2008-05-13 23:38 隔叶黄莺 阅读(872) | 评论 (3)编辑 收藏

2008年5月11日 #

     摘要: 四. 使用持久性的 JobStore

在很多方面,JobStore 有用内存来存储的,还有些使用某种能长期持久的方式来共享相拟的特征。这不该有什么惊奇的,因为他们都服务于同一目的。

和 RAMJobStore 一样,特久性的 JobStore 有优点也有其缺点。在你选择持久性的 JobStore 之前应该认真理解其利与弊。这节就来解释它们的区别,以及在什么情况下你会希望使用持久性的 JobStore。

目前,Quartz 提供了两种类型的持久性 JobStore,每一种类型都有其独特的持久化机制。

持久性 JobStore = JDBC + 关系型数据库

尽管有几种不同的持久化机制可被 Quartz 用于持久化 Scheduler 信息,Quartz 依赖于一个关系型数据库管理系统(RDMS) 来持久化存储。假如你想用某种别的而不是数据库来持久化存储,那么你必须通过实现 JobStore 接口自己构建它。假定你想用文件系统来持久化存储。你可以创建一个类,这个类要实现 J  阅读全文
posted @ 2008-05-11 20:54 隔叶黄莺 阅读(745) | 评论 (0)编辑 收藏

2008年5月10日 #

     摘要: 第六章. Job 存储和持久化

Quartz 用 JobStores 对 Job、Trigger、calendar 和 Schduler 数据提供一种存储机制。Scheduler 应用已配置的 JobStore 来存储和获取到部署信息,并决定正被触发执行的 Job 的职责。所有的关于哪个 Job 要执行和以什么时间表来执行他们的信息都来自于 JobStore。本章就来看 Quartz 中可用的各种类型的 JobStore,和如何使用他们,以及哪一个能适应你的需求。

"罗马非一日建成"

道格拉斯.亚当斯,《宇宙环游指南》

一. Job 存储

在前面章节中,我们未曾花过任何时间来讨论 Scheduler 的 Job 和 Trigger 是保存在哪儿的。我们也许已经实现了,然而,当你停止了 Scheduler 后,那些有关哪些 Job 已经运行和哪些 Job 没有运行的信息就会丢失掉。实际上,所有的关于正在运行中的 Job 的信息也被销毁。

  阅读全文
posted @ 2008-05-10 20:24 隔叶黄莺 阅读(932) | 评论 (0)编辑 收藏

     摘要: 上有所好,下必甚之。君不见屠宰场的墙头“以三个代表指导我们的屠宰工作!” 发挥到极致;近来更是“和谐”泛滥,褒贬难分,诸如“创建人水和谐” 等比比皆是。程序开发更需要务实,任凭天花乱坠都糊弄不了梗直的机器。

1. 初见 Struts2 的表单标签有 tooltip 以及 tooltipConfig 下的 tooltipBgColor 等属性,有一种砰然心动的感,本能的以为例如一个输入框,鼠标悬停其中便出现一个 JS Tip 层,还可控制这个层的样式。用了才知道头脑其实有点过热,不过是在输入框前加下图标,鼠标要放在那个图标上才显示 tooltip 指定的内容,而且如果不给 form 加上 tooltipConfig="#{'jsTooltipEnabled':'true'}",也就用 alt/title 来实现,没什么新意。加了tooltipConfig="#{'jsTooltipEnabled':'true'}" 的话还要人命的是 JS 提示层会出来,alt/title 也会迸出来,产生重叠。同时还必须加上 否则出现 dojo 的错误,即使 jsT  阅读全文
posted @ 2008-05-10 11:59 隔叶黄莺 阅读(820) | 评论 (0)编辑 收藏

2008年5月5日 #

     摘要: 我的环境是 Tomcat 5.0.28 + Struts2.0.6 (web.xml 配置的是支持 Servlet 2.4),testTooltip.jsp 页面里用了 tooltip 和 tooltipConfig 属性。

打开浏览器,浏览那页面时鼠标移到输入框前面那个图标上稍呆会儿的效果有些意外:

1) 出现一个 JS 的提示层,在下方,然后又出现一个图片的 alt/title 属性的提示。两种提示产生了重叠,十分难看。
2) 我明明设置了 tooltipConfig="#{'tooltipFontColor':'#ff0000'}",JS 的提示层文字应为红色,可不是那么回事。

初见 Struts2 的 Tooltip ,对它抱过很大的期望。曾以为它可以实现鼠标悬停在输入框上时用层提示,可不尽然。只是在输入框前面多出一个 Tip 图标,鼠标放上去倒也会出现一个提示层,倒也罢,可偏偏那个图片的 alt/title 奈不住寂寞的跳了出来。  阅读全文
posted @ 2008-05-05 23:59 隔叶黄莺 阅读(1127) | 评论 (3)编辑 收藏

2008年5月3日 #

     摘要:
本程序是基于 dp.SyntaxHighlighter 写的代码语法着色的工具。支持的语言有

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

可以加入更多语种的支持,本程序就是在 dp.SyntaxHighlighter 的基础上扩展了对 Perl 语言的支持,网上可以找到相应语法的  阅读全文
posted @ 2008-05-03 17:39 隔叶黄莺 阅读(798) | 评论 (7)编辑 收藏

     摘要: 和 GTK、QT、SWT、SWING 一样,wxWidgets 也是一种开源跨平台的 GUI 框架。因 wxWidgets 和 MFC 有些渊源,有些亲近,故要体验一番 wxWidgets。现在最新版是 2.8.7。wxWidgets 程序还可运行于 Windows CE、Palm OS。不但包括 GUI,还有 Media、Socket、ODBC 等库。

详情请见 wxWidgets 的官方网站是:http://www.wxwidgets.org

本篇介绍 VC++6.0 下如何搭建 wxWidgets 的开发环境,包括编译 wxWidgets 源码和配置 VC 环境。所用 wxWidgets 的版本是 2.8.7。

第一步:下载并安装 wxWidgets  阅读全文
posted @ 2008-05-03 02:20 隔叶黄莺 阅读(169) | 评论 (1)编辑 收藏

2008年5月1日 #

     摘要: 六. 介绍 Quartz Web 程序

早期的 Quartz 框架开发者意识到一个 GUI 对于某类用户群体是必需的。几年前,一个 Web 应用被创立,它可用于管理 Quartz 框架。虽说是历经了几年有相当投入的开发,但不得不说的,总是时断时续的。

近来出现有更多的要求对这个应用的更新与支持,因而又重新吸引了新的开发者自愿的工作并使之保持不断更新。这个应用就是知名的 Quartz Web 程序。(译者注:实际上这个应用程序基本驻步不前,当前版本还是 RC-1 2004-06-26 22:00 的,仅作参考来应用)

·Quartz Web 程序的截屏

Quartz Web 程序主界面的左上方展示了它所拥有的特征列表(看 图 13.4)。  阅读全文
posted @ 2008-05-01 22:50 隔叶黄莺 阅读(1258) | 评论 (2)编辑 收藏

     摘要: 五. 使用 ServletContextListener

很值得一提的是你可以配置和集成 Quartz 到 Web 应用的另一种方式。从 2.3 版本的 Servlet API 开始,你能创建监听器,由容器在其生命周期中的某个特定时间回调。其中的一个监听器接口叫做 java.servlet.ServletContextListener,它包括有两个方法:

public void contextInitialized(ServletContextEvent sce);
public void contextDestroyed(ServeltContextEvent sce);

容器会在启动和关闭的时候相应的调用这两个方法。这就可以在 contextInitialized() 方法中初始化 Quartz Scheduler,并通过 contextDestroyed() 方法关闭它。代码 13.5 描述了这种用法:  阅读全文
posted @ 2008-05-01 16:38 隔叶黄莺 阅读(1042) | 评论 (1)编辑 收藏

2008年4月30日 #

     摘要: 四. QuartzInitializerServlet 可谓救命草

Quartz 框架包括一个叫做 org.quartz.ee.servlet.QuartzInitializerServlet 的 Java 类,它继承自标准的 HttpServlet。你可应用这个 servlet 于你的 Web 应用中,它将会创建一个 StdSchedulerFactory 实例并在你的程序后续中一直可用。通常的,它就是做了命令行版本的 Quartz 程序的 main() 方法所做的事性。

QuartzInitializerServlet 在 Quartz 1.5 中有所改变

在 Quartz 的 1.5 发布版中,QuartzInitializerServlet 被修改为会存储 StdSchedulerFactory 实例到 Web 应用的 ServletContext 中。这就允许你的程序在任何地方都能访问到 Scheduler 实例,只要获取到了 HttpServletRequest 或 HttpSessi  阅读全文
posted @ 2008-04-30 01:26 隔叶黄莺 阅读(850) | 评论 (1)编辑 收藏

2008年4月29日 #

     摘要: 你尽可以做个良民,为群体效率而本份的遵循个人秩序,然而事与愿违,非但不能因此提升群体的效率,而你势必失去诸多的机会,不会有人褒奖你,更得不到同情,只得自觉的天真。

1. 模板目录->主题目录->主题(模板文件) 这是模板/主题的目录组织方式。以实际为例,打开 struts2-core-2.x.x.jar 可以看到里面有一个 template,在 template 下有5个目录 ajax、css_xhtml、simple、xhtml 和 archive,其中前四个分别是 ajax、css_xhtml、simple、xhtml 主题的目录,每个主题目录中有各自的模板文件,主要是 ftl 文件,还有 css 和 js 文件。最后一个 archive 是归档的主题目录,其下又有 ajax、simple、xhtml、模板文件是 .vm 文件。由此可知 Struts2 大力推荐的模板语言是 FreeMarker,而不是 Velocity,以后要好好看看 FreeMarker,只知道 FreeMarkder 更 XML 化。

2. 上面看到模板目录名是 templ  阅读全文
posted @ 2008-04-29 00:46 隔叶黄莺 阅读(1048) | 评论 (5)编辑 收藏

2008年4月25日 #

     摘要: 三. 在 Struts 框架中使用 Quartz

第一步就是要下载 Apache Struts 并创建好你的 Web 应用的目录结构。Struts 框架可从 Apache Struts 站点 http://struts.apache.org 上找到。也很欢迎你直接抓取到源代码来编译它,尽管你能够及时下载到最新版本的二进制版。

因为 Quartz 不直接依赖于 Struts 框架,所以你也就不必为该使用哪一版本的 Struts 而忧心。只管下载到当前的最新版本就是了。不过,你应该认识到,Struts 和 Quartz 框架共同依赖了一些第三方的包。实际上,在前面列出的 Quartz 所需要的库也是 Struts 框架所必须的。就是要留心混在一起不同的版本,如在最后一节的警告所注明的。

·创建你的 Web 应用目录结构

下载到了 Struts 之后,你就可以创建你的目录结构并引入必须的文件。作为例子,我们将创建一个虚构的 Web 应用,叫做 Job 管理控制台。因为这仅是一个假想的应用,我们  阅读全文
posted @ 2008-04-25 23:47 隔叶黄莺 阅读(1050) | 评论 (3)编辑 收藏

仅列出标题  下一页