weblogic classes里面的一个class修改,热部署

原创 2004年10月22日 16:33:00
一下措施可以保证这一点,建议在开发过程中使用:

1. startWebLogic.cmd:
set STARTMODE=false

2. web.xml:
<servlet-mapping>
<servlet-name>loginA</servlet-name>
<url-pattern>/servlet/loginCheckA</url-pattern>
<load-on-startup>0</load-on-startup>
</servlet-mapping>

3. weblogic.xml:
<jsp-param>
<param-name>pageCheckSeconds</param-name>
<param-value>0</param-value>
</jsp-param>
4.Make sure that your servlet classes are not in your classpath which can cause this problem.
5.在WLS console中,在该web app的Files页中,把<Reload Period>设为1

----------------------------
呵呵,我来说说原理吧。weblogic允许在wls运行时部署组件的新版本。这个过程被称作热部署。因为java classloader没有任何一种机制来卸下一系列存在的类,也不能用类的新版本来替换老版本,为了在一个运行的虚拟机中更新相关的类,classloader必须被替换掉。当它被替换时,它所装载的所有类以及衍生的子classloader也要被重新装载。这些类的所有实例也必需被重新装载。在wls中,每一个应用组件都有一个层次化的classloaders,它们都是system classloader的子类,这种结构有助于每个应用或应用的一部分能被单独重新加载,而不会影响其它的组件。所以我们只要理解这个原理,类似的困惑也就迎刃而解了。 :-)
-------------------------------------
多谢斑竹的回答。
既然你说到原理,我就想问点深入的问题,你说“为了在一个运行的虚拟机中更新相关的类,classloader必须被替换掉。”你只说出了结果,没有说出原因。classloader是每次运行这个class时候就替换掉呢,还是判断被修改以后,才替换掉呢?
比如jsp 都会编译成servlet,我把jsp修改了,可能weblogic会比较现在的jsp与它编译的servlet是否一致,如果不一致,重新编译(我猜的,请指正)。但class不一样,比如我一个class修改了,我直接把它拷贝过来把原来的覆盖掉,它拿什么做比较呢。是按照时间或者看有没有人修改过它,我知道我们修改redeploy那个文件的话,weblogic会自动部署。
还有一个问题,比如我们做的项目的servlet里面去解析了一个xml,如果我的xml添加了一些新东西,我想如果不启动的话,weblogic不会重新去解析这个xml吧。

有点钻牛角尖,请斑竹指点。
----------------------------------------
to:zhouhg
你说的第4点:
4.Make sure that your servlet classes are not in your classpath which can cause this problem. (翻译为:如果你的servlet类不在你的classpath 路径里面也可能引起这种问题)

不知道翻译的对否。没有看明白,你说的classpath 是那个,是weblogic启动时的
classpath 吗?如果是的话,为什么需要放在那里,不是放在web.xml里面,weblogic启动会加载这个servlet,
能否具体说明。
多谢!
-----------------------------------
第一个问题:原因不是有吗?
“因为java classloader没有任何一种机制来卸下一系列存在的类,也不能用类的新版本来替换老版本。”
这是由JVM本身的规范而决定的。
第二个问题:servlet的动态装载原理如下
当一个servlet响应http请求时,wls首先检查这个servlet类的时间戳,把它和内存里servlet类的时间戳作比较。一旦发现是一个新的版本,wls将会自动重新装载当前这个webapp所有的servlet类,我们可以通过Servlet Reload属性来设置wls检查时间戳的间隔时间。如果设置为-1则从不检查(用于产品模式),设置为0则在每次请求时都会检查。
第三个问题:当然不会啦。xml数据源变化自然不会影响classloader
----------------------------------
再次解释一下:
我说的第一点和第四点是前提,第二点是针对servlet的,第三点是针对jsp的,
第五点正好包容了,第二、三点,即针对jsp和servlet。
----------------------------------
因为jsp/servlet的class所在的位置是由wls启动后动态添加到CLASSPATH的最后的,如果jsp/servlet的class的目录已被你添加到CLASSPATH里了,那么你就丧失了动态更新的能力,因为wls已经在静态的CLASSPATH里找到了这个class,它当然不会自己再去load一次了。
关于更新的问题,基本上是你理解了也无解。正像yanglf911说的,JVM classloader已经决定了这个局限性。不过有2种解决的可能性,一种是全部依赖wls的hot deploy,也就是web application和ejb的hot deploy。你只做jsp/servlet + javabean的实现,或者用ejb的client-jar把你的ejb所需的class全部一起打包发布。一种是基于协同开发,就像你用jdk,或者用log4j,这些东西都是相对稳定的,版本变更不会很多,也就不会引起你的系统频繁重起。而设计自己的系统的时候,也要管理好系统的模块和层次,不要随心所欲的更新,把接口预先设计好,多运用一些自己的分析设计能力,变更一定先在自己的测试环境测试好,形成稳定版本再发布给其他系统、模块使用。这样也能解决部分问题。我们现在用的就是第二种。
---------------------------

weblogic classes里面的一个class修改,热部署

一下措施可以保证这一点,建议在开发过程中使用:1. startWebLogic.cmd: set STARTMODE=false 2. web.xml: loginA /servlet/loginC...
  • stonelu
  • stonelu
  • 2004年10月22日 16:33
  • 3881

weblogic的热部署

大家在进行web开发的时候,都希望自己修改的内容在不手动编译、不重启服务的时候立即生效,这样可以极大的方便开发和调试。这个就是我今天要讲的weblogic的热部署。       Weblogic能实...
  • z69183787
  • z69183787
  • 2012年10月25日 14:11
  • 16541

idea 热部署问题

我用JETTY作为web 容器,用Spring MVC框架开发网站。 修改Spring bean,比如Controller Service,是无法自动热部署的,比如重新启动,加载才行。请问这种情况下...
  • xwq911
  • xwq911
  • 2016年04月09日 16:44
  • 2697

weblogic配置修改java代码后不需要重启热部署方式

我用的是weblogic8.x 在项目的WEB-INFO中创建weblogic.xml --------以下内容复制到weblogic.xml中------------ Tim...
  • itmyhome
  • itmyhome
  • 2013年11月14日 22:23
  • 4739

Java Class的热替换 自定义ClassLoader加载.class

本文是java热替换的实验,参考了 Java 类的热替换 —— 概念、设计与实现http://www.ibm.com/developerworks/cn/java/j-lo-hotswapcls...
  • z69183787
  • z69183787
  • 2014年06月07日 21:08
  • 5540

如何动态更新JVM中的class文件

转载于:http://java.chinaitlab.com/Jvm/793556.html 在一个运营系统中,如果出现业务方法变更,而我们使用的应用服务器不支持热部署的话,那么重启可能是更新的唯一选...
  • zgmzyr
  • zgmzyr
  • 2010年11月27日 23:33
  • 1400

weblogic10.3 如何实现热部署

在J2EE的项目中,容器给我们提供的热部署功能使得我们不用重启动容器而修改我们的代码。比如使用Weblogic,我们可以在Weblogic-application.xml中配置是否支持热部署Servl...
  • e_wsq
  • e_wsq
  • 2013年09月08日 16:11
  • 1468

如何实现weblogic的热部署

> http://bijian1013.iteye.com/blog/2292192 1、为什么要热部署大家在进行web开发的时候,都希望自己修改的内容在不手动编译、不重启服务的时候立即生效,这样可以...
  • lzh657083979
  • lzh657083979
  • 2017年09月02日 14:24
  • 1155

【转】精通IntelliJ Idea之热部署

原文:http://blog.buyihanshe.com/20090606/mastering-intellij-idea-hot-deploy.htm 部署在项目开发过程中是常有的事,特别是de...
  • wag2765
  • wag2765
  • 2016年01月25日 16:27
  • 5400

java项目部署到weblogic后,class文件夹为空的原因

项目在eclipse中打包时,class文件夹是存在的,并且不为空。 但是当项目部署到weblogic时,是打成war包的,这时src目录就已经消失了,classes目录在部署到weblogic中时...
  • yushilengmu
  • yushilengmu
  • 2017年09月15日 10:50
  • 1190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:weblogic classes里面的一个class修改,热部署
举报原因:
原因补充:

(最多只允许输入30个字)