Weblogic允許在wls運行時部署組件的新版本。這個過程被稱作熱部署。因為java classloader沒有任何一種機制來卸下一系列存在的類,也不能用類的新版本來替換老版本,為了在一個運行的虛擬機中更新相關的 類,classloader必須被替換掉。當它被替換時,它所裝載的所有類以及衍生的子classloader也要被重新裝載。這些類的所有實例也必需被 重新裝載。在wls中,每一個應用組件都有一個層次化的classloaders,它們都是system classloader的子類,這種結構有助於每個應用或應用的一部分能被單獨重新加載,而不會影響其它的組件。所以我們只要理解這個原理,類似的困惑也 就迎刃而解了。
最近調試缺陷比較多,每次調試修改一點點代碼就要重新啟動weblogic。
大量的時間浪費在修改--編譯--重啟服務上面,讓人感覺很煩躁。最終找到解決方法,就是在weblogic下面進行熱部署設置了。
以下為weblogic熱部署設置方法,建議在開發過程中使用:
1. startWebLogic.cmd:
set STARTMODE=false 設置為開發模式,true為產品模式
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:
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<session-descriptor>
<session-param>
<param-name>TimeoutSecs</param-name>
<param-value>1800</param-value>
</session-param>
</session-descriptor>
<jsp-descriptor>
<jsp-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</jsp-param>
<jsp-param>
<param-name>pageCheckSeconds</param-name>
<param-value>1</param-value>
</jsp-param>
</jsp-descriptor>
<container-descriptor>
<servlet-reload-check-secs>1</servlet-reload-check-secs>
</container-descriptor>
<context-root>/your-web</context-root>
</weblogic-web-app>
pageCheckSecond的默認值是1,表示每隔1秒對JSP頁面進行檢查,檢查JSP頁面是否被修改、是否需要重新編譯。
系 統上線后,需要對該默認值修改為-1,表示永不檢查。修改為-1的一個缺點是:對於頁面的修改需要重新部署整個WEB應用。servlet- reload-check-secs該參數的默認值也是1,每隔1秒檢查servlet是否被修改並需要重新編譯。這里建議修改為-1,表示永不檢查。
注意:在發布生產時,需要把這兩個值設置為-1,否則會影響效率。
4.Make sure that your servlet classes are not in your classpathwhich can cause this problem.
5.在WLS console中,在該web app的Files頁中,把<Reload Period>設為1
