﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-CONAN ZONE-文章分类-GlassFish</title><link>http://www.blogjava.net/conans/category/32365.html</link><description>你越挣扎我就越兴奋</description><language>zh-cn</language><lastBuildDate>Thu, 19 Jun 2008 16:38:42 GMT</lastBuildDate><pubDate>Thu, 19 Jun 2008 16:38:42 GMT</pubDate><ttl>60</ttl><item><title>用 GlassFish v2 替换 Tomcat 5.x</title><link>http://www.blogjava.net/conans/articles/209282.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Thu, 19 Jun 2008 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209282.html</guid><description><![CDATA[<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">1. 背景</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true">用了很多年的Tomcat, 无论开发环境还是生产环境, 应该说, 大家对它还是基本满意的.<br _extended="true" />
不过, 也不是一点问题没有. 从开发人员的角度来说, Tomcat主要的缺点就是较弱的热部署<br _extended="true" />
(hot deploy)能力. 修改一个Java类, 保存后, Tomcat会重新加载这个类, 但不久就要重<br _extended="true" />
新启动Tomcat才能继续开发. 在企业关键应用的场景下, 若发生急迫的程序缺陷更正, 让众多的用户<br _extended="true" />
停止手头的工作, 等待服务器重新启动, 显然十分不便.</font></p>
<p _extended="true"><font face="Arial" _extended="true">类似RubyOnRails的技术框架, 其方便之处就是脚本语言不要编译, 保存后直接可以使用.<br _extended="true" />
Java社区显然看到了这个问题, GlassFish v2 的热部署能力就是其主要的一个受大家欢迎的<br _extended="true" />
特性. 这也是我们要用 GlassFish v2 替换 Tomcat 5.x 的主要理由.</font></p>
<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">2. 使用环境</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true">本文假设你使用下面所述的开发环境.<br _extended="true" />
<font face="Arial" _extended="true">(1) JDK 1.5 或 1.6<br _extended="true" />
(2) Eclipse IDE for Java EE Developers (3.3.1.1 M20071023-1652)<br _extended="true" />
(3) 使用 com.sysdeo.eclipse.tomcat_3.2.1 插件<br _extended="true" />
</font></font></p>
<p _extended="true"><font face="Arial" _extended="true">如果你没有使用 Eclipse 3.3.1.1 Java EE 版本, 而是正在使用其他版本, 也不影响本文所述的所有操作和效果, 只是不能借助Eclipse 启动和停止 GlassFish v2, 只能自己通过命令行进行操作.</font></p>
<p _extended="true"><font face="Arial" _extended="true">有关用 Eclipse 3.3.1.1 Java EE 版本操作 GlassFish v2 的详细说明, 请参见</font> <font face="Arial" color="#000000" _extended="true"><a href="https://glassfishplugins.dev.java.net/eclipse33/index.html" _extended="true">Eclipse 3.3 and GlassFish Java EE 5 integration.</a></font></p>
<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">3. 下载并安装 GlassFish v2</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true"><font face="Arial" _extended="true">这方面的资料已经很容易从网上找到, 比较好的文章如下:<br _extended="true" />
(1) <a href="http://jeffreyhsu.javaeye.com/blog/86953" _extended="true"><font color="#000000">在Glassfish上部署web应用<br _extended="true" />
</font></a>(2) <a href="http://tamino.javaeye.com/blog/140550" _extended="true"><font color="#000000">Glassfish初试</font></a><br _extended="true" />
(3) <a href="http://www.javaeye.com/topic/135653" _extended="true"><font color="#000000">从tomcat到glashfish(glassfish的安装启动笔记)</font></a></font></font></p>
<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">4. 创建 Tomcat 项目</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true">相信你一定也知道如何创建 Tomcat 项目. 本文假设你创建的 Tomcat 项目:<br _extended="true" />
(1) 位于 D:/Sample 目录.<br _extended="true" />
(2) Context name 为 Sample.</font></p>
<p _extended="true"><font face="Arial" _extended="true">其他采用默认设置.</font></p>
<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">5. 为测试 GlassFish v2 的热部署能力, 创建首页JSP和Servlet Java类.</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true">第1步: 在根目录中创建 index.jsp 文件<br _extended="true" />
第2步: 在 WEB-INF\src 中, 创建一个简单的 servlet 类 SampleServlet.java,<br _extended="true" />
第3步: 配置web.xml文件.</font></p>
<p _extended="true"><font face="Arial" _extended="true">完整的Sample项目, 请参见附件.</font></p>
<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">6. 什么是 GlassFish v2 的目录部署?</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true">用Tomcat开发时, JSP/HTML/JS/CSS 等文件, 都是修改后保存, 刷新浏览器就可以使用.<br _extended="true" />
为了使 GlassFish v2 达到同样的效果, 需要使用其目录部署(directory deployment)特性.</font></p>
<p _extended="true"><font face="Arial" _extended="true">这个特性不太容易找, 因为使用象GlassFish这样的全功能应用服务器的开发人员,习惯了<br _extended="true" />
"编辑、编译、部署、运行"这样的步骤. 一开始, 我按照</font> <font face="Arial" color="#000000" _extended="true"><a href="https://glassfishplugins.dev.java.net/eclipse33/index.html" _extended="true">Eclipse 3.3 and GlassFish Java EE 5 integration.</a></font></p>
<p _extended="true"><font face="Arial" _extended="true"><font face="Arial" _extended="true">一文的指引, 发现修改JSP文件后,仍然要经历上面的部署过程. 虽然Eclipse会通过自动检测<br _extended="true" />
文件版本的变化, 触发Ant任务实现部署, 但仍然很浪费时间. 我们需要找到跳过"部署"的方法.<br _extended="true" />
在GlassFish官方论坛上发了几个帖子, 答复者的回帖没有起到什么作用, 但通过搜索论坛基本<br _extended="true" />
知道这个问题已经得到了解决.</font></font></p>
<p _extended="true"><font face="Arial" _extended="true">下面的文章引导我朝着正确的方向前进了一大步(非常感谢该文作者):<br _extended="true" />
<a href="https://glassfishplugins.dev.java.net/eclipse33/index.html" _extended="true"><font color="#000000">GlassFish Auto Deployment and Hot Deployment</font></a></font></p>
<p _extended="true"><font face="Arial" _extended="true"><font face="Arial" _extended="true">关于目录部署的详细说明,参见:<br _extended="true" />
Sun Java System Application Server Platform Edition 9.0 Application Deployment Guide<br _extended="true" />
Chapter 1 中 <a href="https://glassfish.dev.java.net/javaee5/docs/ADG/beact.html" _extended="true"><font color="#000000">Deployment for Development</font></a> 一节</font></font></p>
<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">7. GlassFish v2 的目录部署实战</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true">第1步: 启动 GlassFish v2.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第2步: 部署 Sample 项目到 GlassFish v2, DOS窗口下执行命令:<br _extended="true" />
</font></p>
<p class="alt" _extended="true">&nbsp;</p>
<table style="border-right: #999 1px solid; border-top: #999 1px solid; font-size: 12px; border-left: #999 1px solid; width: 88.12%; border-bottom: #999 1px solid; height: 26px" align="center" _extended="true">
    <tbody _extended="true">
        <tr _extended="true">
            <td _extended="true"><span _extended="true"><span _extended="true">GLASS_FISH_HOME/bin/asadmin deploydir D:/Sample</span></span></td>
        </tr>
    </tbody>
</table>
<p _extended="true"><font face="Arial" _extended="true">其中 GLASS_FISH_HOME 是 GlassFish 的安装目录, 命令执行完毕后,可以看到成功部署信息.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第3步: 打开浏览器, 输入<a href="http://localhost:8080/Sample/index.jsp" _extended="true"><font color="#000000">http://localhost:8080/Sample/index.jsp</font></a>, 看到页面内容.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第4步: 打开浏览器, 输入 <a href="http://localhost:8080/Sample/servlet/Sample" _extended="true"><font color="#000000">http://localhost:8080/Sample/servlet/Sample</font></a>, 看到页面内容.</font></p>
<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">8. 体验 GlassFish v2 的热部署特性</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true">第1步: 修改 index.jsp 文件内容, 保存后, 刷新浏览器, 你就能马上看到新的内容.<br _extended="true" />
( <a href="http://localhost:8080/Sample/index.jsp" _extended="true"><font color="#000000">http://localhost:8080/Sample/index.jsp</font></a>)</font></p>
<p _extended="true"><font face="Arial" _extended="true">第2步: 修改 SampleServlet.java, 保存后, 等待片刻, Eclipse 已经自动编译这个类, 但 GlassFish v2 控制台中没有任何提示, 刷新浏览器, 看不到新的内容.<br _extended="true" />
( <a href="http://localhost:8080/Sample/servlet/Sample" _extended="true"><font color="#000000">http://localhost:8080/Sample/servlet/Sample</font></a>)</font></p>
<p _extended="true"><font face="Arial" _extended="true">第3步: 现在, 在 Sample 项目根目录中创建文件名为".reload"的文件(内容为空).</font></p>
<p _extended="true"><font face="Arial" _extended="true">第4步: 观察GlassFish v2 控制台, 可以看到重新加载信息,刷新浏览器<br _extended="true" />
<a href="http://localhost:8080/Sample/servlet/Sample" _extended="true"><font color="#000000">(http://localhost:8080/Sample/servlet/Sample</font></a>)<br _extended="true" />
看到了新的内容.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第5步: 再次修改 SampleServlet.java 的内容, 保存后, 遇到和第2步同样的问题.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第6步: 再次打开 .reload 文件, 输入任意内容, 然后保存.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第7步: 再次出现与第4步同样的效果.</font></p>
<p _extended="true"><font face="Arial" _extended="true">总结上述操作, GlassFish v2 对于非Java类的加载, 达到了和Tomcat同样的效果, 但Java类的<br _extended="true" />
加载, 需要通过 .reload 文件的时间戳来控制. 这种做法对开发有好处, 在调试改错时, 可以修改<br _extended="true" />
多个 Java 类文件, 然后让 GlassFish v2 一次加载全部修过的类.</font></p>
<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">9. 自动化 .reload 文件时间戳刷新</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true">上一节中, 手工打开 .reload 文件, 通过修改其内容刷新其时间戳, 这种做法太麻烦.</font></p>
<p _extended="true"><font face="Arial" _extended="true">在 unix/linux 平台下, 通过命令 touch 刷新 .reload 文件的时间戳. 在 Window 平台, 也有<br _extended="true" />
人实现了 touch. 我在 CodeProject 网站找到一个 touch.exe:</font> <font face="Arial" _extended="true"><a href="http://www.codeproject.com/tools/touch_win.asp" _extended="true"><font color="#000000">Touch for Windows - The Code Project - Free Tools</font></a>,</font><font face="Arial" _extended="true">很好用, 并且可以集成到 Eclipse 的工具条按钮中来执行 touch 命令(</font><font face="Arial" _extended="true">touch.exe 已经包括在附件中)</font><font face="Arial" _extended="true">.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第1步: 拷贝下载的 touch.exe 到 Sample 项目根目录.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第2步: 在 Eclipse 下, 选择 Run &gt; External Tools &gt; Open External Tools Dialog.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第3步: 选中左侧 Program 节点, 右击, 选择New菜单项.</font></p>
<p _extended="true"><font face="Arial" _extended="true">第4步: 在右侧出现的对话框中, 填入下面的内容<br _extended="true" />
Name: SampleTouch<br _extended="true" />
Main[页面]<br _extended="true" />
Localtion: ${workspace_loc:/Sample/touch.exe}<br _extended="true" />
Working Directory: ${workspace_loc:/Sample}<br _extended="true" />
Arguments: .reload<br _extended="true" />
Common[页面]<br _extended="true" />
Display in favorites menu: 选中External Tools<br _extended="true" />
<br _extended="true" />
保存后, 你可以在Eclipse的Run工具条按钮中看到新创建的项.</font></p>
<p _extended="true"><font face="Arial" _extended="true"><strong _extended="true">10. 结语</strong></font></p>
<p _extended="true"><font face="Arial" _extended="true">用 GlassFish v2 可以完全替换 Tomcat 5.x, 在开发中它保留了 Tomcat 好的特性的<br _extended="true" />
同时,给我们带来了强壮的热部署功能, 显著地提高了开发效率.</font></p>
<p _extended="true"><font face="Arial" _extended="true">感谢GlassFish v2, 感谢为之付出心血的Java社区成员, 是他们让我们感受到了技术<br _extended="true" />
进步的喜悦.<br _extended="true" />
</font></p>
      <img src ="http://www.blogjava.net/conans/aggbug/209282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-19 23:06 <a href="http://www.blogjava.net/conans/articles/209282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>