weblogic classes里面的一个class修改,热部署
来源:互联网 发布:java图形界面教程 编辑:程序博客网 时间:2024/05/22 13:42
一下措施可以保证这一点,建议在开发过程中使用:
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,这些东西都是相对稳定的,版本变更不会很多,也就不会引起你的系统频繁重起。而设计自己的系统的时候,也要管理好系统的模块和层次,不要随心所欲的更新,把接口预先设计好,多运用一些自己的分析设计能力,变更一定先在自己的测试环境测试好,形成稳定版本再发布给其他系统、模块使用。这样也能解决部分问题。我们现在用的就是第二种。
---------------------------
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修改,热部署
- weblogic的热部署
- weblogic的热部署
- 如何实现weblogic的热部署
- weblogic 9.1 热部署
- weblogic热部署
- Weblogic热部署
- Weblogic中的热部署——修改JSP、java类无需重启Weblogic
- eclipse里面配置热部署
- 修改jar包里面的class文件
- 修改markdown里面的class标签
- Weblogic中的热部署——修改JSP、java类无需重启(转)
- Weblogic中的热部署——修改JSP、java类无需重启
- Java Class的热替换 自定义ClassLoader加载.class(java热部署实现 )
- 一个可以实现热部署的插件
- classes目录中没有class文件的一个原因
- weblogic 生产环境*.jar 部署后程序class的路径
- 使用jreloader实现tomcat中class文件的热部署
- 漫谈SQL Server中的标识列(二)
- 智能客户端技术总结(二)
- 经典正则表达式
- tomcat管理界面常用设置 -- 设定URI 编码
- 取得TBitMap图像缓冲区
- weblogic classes里面的一个class修改,热部署
- 数据库设计方法、规范与技巧(推荐)
- 对windows消息驱动的重新认识
- 顾城别恋
- 为Junit虚拟Jsp Container的数据库连接池
- Unija应用开发
- 智能客户端
- [原创]修改了StedyMenu为js版的可动态增加,如图,并赋上JS代码
- 长安古意