博威---云架构决胜云计算

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3047|回复: 2

用 GlassFish v2 替换 Tomcat 5.x

[复制链接]
发表于 2010-4-9 10:00:29 | 显示全部楼层 |阅读模式
用 GlassFish v2 替换 Tomcat 5.x
1. 背景

用了很多年的Tomcat, 无论开发环境还是生产环境, 应该说, 大家对它还是基本满意的.
不过, 也不是一点问题没有. 从开发人员的角度来说, Tomcat主要的缺点就是较弱的热部署
(hot deploy)能力. 修改一个Java类, 保存后, Tomcat会重新加载这个类, 但不久就要重
新启动Tomcat才能继续开发. 在企业关键应用的场景下, 若发生急迫的程序缺陷更正, 让众多的用户停止手头的工作, 等待服务器重新启动, 显然十分不便.


类似RubyOnRails的技术框架, 其方便之处就是脚本语言不要编译, 保存后直接可以使用.
Java社区显然看到了这个问题, GlassFish v2 的热部署能力就是其主要的一个受大家欢迎的
特性. 这也是我们要用 GlassFish v2 替换 Tomcat 5.x 的主要理由.


2. 使用环境

本文假设你使用下面所述的开发环境.
(1) JDK 1.5 或 1.6
(2) Eclipse IDE for Java EE Developers (3.3.1.1 M20071023-1652)
(3) 使用 com.sysdeo.eclipse.tomcat_3.2.1 插件


如果你没有使用 Eclipse 3.3.1.1 Java EE 版本, 而是正在使用其他版本, 也不影响本文所述的所有操作和效果, 只是不能借助Eclipse 启动和停止 GlassFish v2, 只能自己通过命令行进行操作.

有关用 Eclipse 3.3.1.1 Java EE 版本操作 GlassFish v2 的详细说明, 请参见 Eclipse 3.3 and GlassFish Java EE 5 integration.

3. 下载并安装 GlassFish v2

这方面的资料已经很容易从网上找到, 比较好的文章如下:
(1) 在Glassfish上部署web应用
(2) Glassfish初试
(3) 从tomcat到glashfish(glassfish的安装启动笔记)


4. 创建 Tomcat 项目

相信你一定也知道如何创建 Tomcat 项目. 本文假设你创建的 Tomcat 项目:
(1) 位于 D:/Sample 目录.
(2) Context name 为 Sample.


其他采用默认设置.

5. 为测试 GlassFish v2 的热部署能力, 创建首页JSP和Servlet Java类.

第1步: 在根目录中创建 index.jsp 文件


第2步: 在 WEB-INF\src 中, 创建一个简单的 servlet 类 SampleServlet.java,


第3步: 配置web.xml文件.

完整的Sample项目, 请参见附件.

6. 什么是 GlassFish v2 的目录部署?

用Tomcat开发时, JSP/HTML/JS/CSS 等文件, 都是修改后保存, 刷新浏览器就可以使用.
为了使 GlassFish v2 达到同样的效果, 需要使用其目录部署(directory deployment)特性.

这个特性不太容易找, 因为使用象GlassFish这样的全功能应用服务器的开发人员,习惯了
"编辑、编译、部署、运行"这样的步骤. 一开始, 我按照
Eclipse 3.3 and GlassFish Java EE 5 integration.
一文的指引, 发现修改JSP文件后,仍然要经历上面的部署过程. 虽然Eclipse会通过自动检测
文件版本的变化, 触发Ant任务实现部署, 但仍然很浪费时间. 我们需要找到跳过"部署"的方法.
在GlassFish官方论坛上发了几个帖子, 答复者的回帖没有起到什么作用, 但通过搜索论坛基本
知道这个问题已经得到了解决.


下面的文章引导我朝着正确的方向前进了一大步(非常感谢该文作者):
GlassFish Auto Deployment and Hot Deployment


关于目录部署的详细说明,参见:
Sun Java System Application Server Platform Edition 9.0 Application Deployment Guide
Chapter 1 中 Deployment for Development 一节


7. GlassFish v2 的目录部署实战

第1步: 启动 GlassFish v2.

第2步: 部署 Sample 项目到 GlassFish v2, DOS窗口下执行命令:Java代码

  • GLASS_FISH_HOME/bin/asadmin deploydir D:/Sample  

GLASS_FISH_HOME/bin/asadmin deploydir D:/Sample  
其中 GLASS_FISH_HOME 是 GlassFish 的安装目录, 命令执行完毕后,可以看到成功部署信息.

第3步: 打开浏览器, 输入http://localhost:8080/Sample/index.jsp, 看到页面内容.

第4步: 打开浏览器, 输入 http://localhost:8080/Sample/servlet/Sample, 看到页面内容.

8. 体验 GlassFish v2 的热部署特性

第1步: 修改 index.jsp 文件内容, 保存后, 刷新浏览器, 你就能马上看到新的内容.
( http://localhost:8080/Sample/index.jsp)


第2步: 修改 SampleServlet.java, 保存后, 等待片刻, Eclipse 已经自动编译这个类, 但 GlassFish v2 控制台中没有任何提示, 刷新浏览器, 看不到新的内容.
( http://localhost:8080/Sample/servlet/Sample)


第3步: 现在, 在 Sample 项目根目录中创建文件名为".reload"的文件(内容为空).

第4步: 观察GlassFish v2 控制台, 可以看到重新加载信息,刷新浏览器

(http://localhost:8080/Sample/servlet/Sample)

到了新的内容.

第5步: 再次修改 SampleServlet.java 的内容, 保存后, 遇到和第2步同样的问题.

第6步: 再次打开 .reload 文件, 输入任意内容, 然后保存.

第7步: 再次出现与第4步同样的效果.

总结上述操作, GlassFish v2 对于非Java类的加载, 达到了和Tomcat同样的效果, 但Java类的
加载, 需要通过 .reload 文件的时间戳来控制. 这种做法对开发有好处, 在调试改错时, 可以修改
多个 Java 类文件, 然后让 GlassFish v2 一次加载全部修过的类.


9. 自动化 .reload 文件时间戳刷新

上一节中, 手工打开 .reload 文件, 通过修改其内容刷新其时间戳, 这种做法太麻烦.
在 unix/linux 平台下, 通过命令 touch 刷新 .reload 文件的时间戳. 在 Window 平台, 也有
人实现了 touch. 我在 CodeProject 网站找到一个 touch.exe:
Touch for Windows - The Code Project - Free Tools,很好用, 并且可以集成到 Eclipse 的工具条按钮中来执行 touch 命令(touch.exe 已经包括在附件中).

第1步: 拷贝下载的 touch.exe 到 Sample 项目根目录.

第2步: 在 Eclipse 下, 选择 Run > External Tools > Open External Tools Dialog.

第3步: 选中左侧 Program 节点, 右击, 选择New菜单项.

第4步: 在右侧出现的对话框中, 填入下面的内容

Name: SampleTouch
Main[页面]
Localtion: ${workspace_loc:/Sample/touch.exe}
Working Directory: ${workspace_loc:/Sample}
Arguments: .reload
Common[页面]
Display in favorites menu: 选中External Tools

保存后, 你可以在Eclipse的Run工具条按钮中看到新创建的项.


10. 结语

用 GlassFish v2 可以完全替换 Tomcat 5.x, 在开发中它保留了 Tomcat 好的特性的
同时,给我们带来了强壮的热部署功能, 显著地提高了开发效率.


感谢GlassFish v2, 感谢为之付出心血的Java社区成员, 是他们让我们感受到了技术
进步的喜悦.
 楼主| 发表于 2010-4-9 10:16:54 | 显示全部楼层
GlassFish 社区实现了开源 Java EE 5 应用服务器。GlassFish 是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发、部署和重新分发。
GlassFish 是用于构建 Java EE 5 应用服务器的开源开发项目的名称。它基于 Sun Microsystems 提供的 Sun Java System Application Server PE 9 的源代码以及 Oracle 贡献的 TopLink 持久性代码。该项目提供了开发高质量应用服务器的结构化过程,以前所未有的速度提供新的功能。这是对希望能够获得源代码并为开发 Sun 的下一代应用服务器(基于 GlassFish)作出贡献的 Java 开发者作出的回应。该项目旨在促进 Sun 和 Oracle 工程师与社区之间的交流,它将使得所有开发者都能够参与到应用服务器的开发过程中来。
GlassFish 开发社区正处于起步阶段,虽然规模较小,但正在迅速发展。目前,已有超过 100 名贡献者签约。目前,参与开发该产品的 Sun 和 Oracle 工程师的人数与其他应用服务器开发者社区的工程师人数相当。
可以从http://glassfish.dev.java.net访问 GlassFish 项目。
在遵守通用开发和发布许可 (Common Development and Distribution License, CDDL) 版本 1.0 的前提下,开发者可以免费获得源代码,还可以对代码进行更改(只要他们认为合适)。要申请 Java Compatibility,商业分发的开发者需要签署 Java Developer License (JDL),并在重新分发代码前验证代码已通过兼容性测试套件 (compatibility test suite, CTS) 的测试。任何人均可签署分发协议,对代码进行审阅以贡献更改、错误修复和功能。
GlassFish 的更新版本将于每晚发布在 glassfish.dev.java.net 上。发布的代码已经过了非常基本的测试以确保它们能够进行构建并执行,但这些代码并没有象产品发行版那样经过完整测试。
GlassFish 将实现最新版本的 Java EE 平台 Java EE 5,这两者将大约同时成为最终版本。同时,Sun 还将基于 GlassFish 发行最终的受支持的兼容 Sun Java System Application Server PE 9.0。
在 2005 年 6 月,Sun 将 GlassFish 项目的 Web 站点向公众开放,从而发布了 GlassFish 项目。开发者可以访问源代码、每晚构建、讨论组和电子邮件列表。这是开发者首次能够了解并参与应用服务器的开发过程。最初,访问仅限于 Web 层,随着 GlassFish 的开发,访问也将扩大到其他模块。
GlassFish 项目将 Java EE 呈现在更多爱好者面前,这些人最终将成为 Java EE 许可证持有者的客户。GlassFish 不会更改许可证持有者的任何许可证条款。在遵守其许可证条款的前提下,许可证持有者仍可以销售或分发代码,并对已通过 TCK 的产品使用 Java Compatibility 品牌。在遵守授予开发者的 CDDL 许可证条款的前提下,他们可以使用、编辑、更改代码,并可以分发代码或将其用于生产。但他们没有得到使用 CTS 的许可,也不能使用 Java Compatibility 品牌。
GlassFish历史
GlassFish十年前它诞生在一个叫KIVA的软件公司,叫KIVA服务器,后来 NESCAPE收购了KIVA公司,改名叫NESCAPE服务器,再后来SUN跟NESCAPE合作,就改名叫IPLANET服务器,后来SUN跟 NESCAPE分家了,就改名叫SUN服务器,后来随着开源热潮滚滚而来,就改名叫GLASSFISH
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|boway Inc. ( 冀ICP备10011147号 )

GMT+8, 2024-11-22 10:35 , Processed in 0.163317 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表