论坛首页 综合技术论坛

在我们的项目架构中,如何解决热部署的问题呢?

浏览 7576 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-08  
我们的项目原来在Eclipse中分为两个Project。
一个是Base的,里面只放了基础的代码。
另外一个是Web,里面放了特定这个项目的代码,以及相关的页面jsp,js之类的。

一直采用MyEclipse部署,这个情况下,修改页面jsp or js 会自动同步到tomcat部署下的app。然后刷新页面就能看到最新修改后的页面了。


但是慢慢的,项目越来越大。我们就按照业务模块,拆分了多个Project。

譬如分成了4个。

Base Project
Web Project
这两个和以前的含义差不多。

但是又多出了两个
公文 Project
Email Project
这两个Project里面就只包含了和他们特定的业务相关代码和页面。

然后采用ant来进行build,deploy。

开始觉得这样子更好。可以采用部署不同的特定业务组件,来进行模块定制。


但是,后来慢慢又有了新问题。就是前台抱怨修改页面之后,不能直接看到效果。比如shutdown server,ant build deploy.restart server.然后再查看修改后的页面。

而这样子就很繁琐,随着项目越来越大。每次server启动的时间都越来越长。以及变得不堪忍受了。

而我暂时还想不到更好的解决方案。


所以,希望听听大家的看法,能不能基于目前的这种情况出现一种解决方案,支持修改页面之后自动同步到server下的app。

如果大家都觉得这样子不可行或难度太大。我也希望大家谈谈在自己的项目开发中,如何保证项目结构清晰。以及热部署,加快前台开发速度的。
   发表时间:2007-03-08  
我是根本不部署。直接在我的Eclipse项目里面引入jetty的jar,然后自己写一个Main类启动jetty,换句话说就是把jetty嵌入到我的Eclipse项目里面来。
0 请登录后投票
   发表时间:2007-03-08  
robbin 写道
我是根本不部署。直接在我的Eclipse项目里面引入jetty的jar,然后自己写一个Main类启动jetty,换句话说就是把jetty嵌入到我的Eclipse项目里面来。


那你一定是用的单个Project吧。如果有更多的Project,也只能在主Project中放页面,其他的Porjct只能放代码,然后主工程引用其他的工程。

在我这里有点不好办,譬如我这里有两个“公文”Project,对应两个不同的项目,业务逻辑基本上是一样的,就是页面不太一样。

目前在我这里通过ant,build的时候可以选择控制部署哪个“公文”Project进来。

我如果都合成一个的话,采用jetty的话。就得每个特定的项目都需要一整套的代码,页面了。
0 请登录后投票
   发表时间:2007-03-08  
冉翔 写道
robbin 写道
我是根本不部署。直接在我的Eclipse项目里面引入jetty的jar,然后自己写一个Main类启动jetty,换句话说就是把jetty嵌入到我的Eclipse项目里面来。


那你一定是用的单个Project吧。如果有更多的Project,也只能在主Project中放页面,其他的Porjct只能放代码,然后主工程引用其他的工程。

在我这里有点不好办,譬如我这里有两个“公文”Project,对应两个不同的项目,业务逻辑基本上是一样的,就是页面不太一样。

目前在我这里通过ant,build的时候可以选择控制部署哪个“公文”Project进来。

我如果都合成一个的话,采用jetty的话。就得每个特定的项目都需要一整套的代码,页面了。


有两个办法搞定:
1、办法一,把业务逻辑放在一个单独的project里面。两个公文project放各自的页面,共同引用业务逻辑project。每个公文project各自启动各自的jetty,互不干扰。

2、办法二,把两个公文project合并为一个project,不同的页面放在不同的目录下面,写两个jetty启动类,一个启动公文web1,一个启动公文web2。

我过去做过一个项目,是多个二级域名,每个二级域名都是独立的webapp,但是底层业务逻辑和持久层是共同的,但每个webapp的页面,URL映射要完全分离开。一般人可能就会分成n个项目了,一个公用项目放所有底层业务逻辑,每个独立webapp项目放各自的web目录,然后大家都引用公用项目。

但这样做,重构的时候很不方便。我采取的办法就是统统合并在一个项目里面。每个webapp在项目里面有自己的webapp目录,然后给每个webapp写一个jetty启动类,指定到这个目录加载整个webapp。另外xwork.xml也不能放在默认的classpath下面了,必须每个webapp单独指定自己的xwork.xml。所以我扩展了webwork的configure类,改成去各自webapp的Servlet路径下加载xwork.xml。

如果每个webapp不是独立二级域名,而是不同的URL子目录的话,你甚至可以写一个同时启动所有webapp的jetty启动类,在启动jetty的时候,初始化所有的webapp,统一连调。
0 请登录后投票
   发表时间:2007-03-08  
我记得IBM的WSAD(基于Eclipse)支持多项目,且热替换代码的。

研究一下,估计就是配置一下项目属性就可以了,我还没有试过。
用ANT不是一个好办法,特别是开发时候,经过它一阵搞,很难使用JDK的hot swap特性了(即不用重起服务器即看到结果)。
0 请登录后投票
   发表时间:2007-03-08  
Lucas Lee 写道
我记得IBM的WSAD(基于Eclipse)支持多项目,且热替换代码的。

研究一下,估计就是配置一下项目属性就可以了,我还没有试过。
用ANT不是一个好办法,特别是开发时候,经过它一阵搞,很难使用JDK的hot swap特性了(即不用重起服务器即看到结果)。
正在看,.....
0 请登录后投票
   发表时间:2007-03-22  
Clever Jetty Hack: Dynamically Merging Directories Inside a Web Applicatin Context

http://www.theserverside.com/tt/blogs/showblog.tss?id=JettyHack
0 请登录后投票
   发表时间:2007-04-12  
我用Maven构建项目,在pom.xml中配置了一个Jetty的插件,可以嵌入方式启动jetty,自动找到源码编译到target目录,省略了打war包的步骤,不知道能否实现修改xwork.xml,不停止jetty动态reload配置文件
或者有没有什么方法可以不停机重新构建WebWork的ActionMapper,就好像rails开发那样~~
0 请登录后投票
   发表时间:2007-04-12  
tomcat应该是支持热部署的呀,不过反映好像不太及时。

我都是在manager页面reload一下修改的哪个webapp的,不需要重启server
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics