weblogic 做為商用中間件在(EJB、jndi 資料來源、日誌管理、記憶體管理、資源配置管理...) 是一些開源免費小型容器無法望其項背的。
weblogic 最早由 weblogic Inc. 開發,後併入 BEA 公司,最後 BEA 公司又併入 Oracle 公司。
weblogic 是用於開發、整合、部署和管理大型分散式 Web 應用、網路應用和資料庫應用的 Java 應用伺服器。
因此 weblogic 一般做為專案上線發布和部署的伺服器,而本地研發時大多會選用 Tomcat/Jetty.... 小型容器。
這樣難免會出現問題,本地運作良好的 web 程序,部署在 weblogic 時會出現這樣或那樣的問題。
絕大一部分問題都是因為 weblogic 所依賴的 jar 與專案中的 jar 衝突(相同 jar 不同版本)或 weblogic 不支持專案 jar 所導致的。
當部署weblogic 出現問題時(自己總結三板斧頭):
1. 確認公司使用的weblogic 版本並翻閱官網對應weblogic版本所支援的標準;
2. 對照weblogic 出錯日誌確定衝突jar 或確定該webloigc 不支援的jar;
3.對於出現衝突的jar 在專案WEB-INFO 目錄下新增weblogic.xml 設定文件,其中申明要預先載入的專案jar;
4. 對於出現該webloigc 版本不支援的jar,升級weblogic 版本,或降低專案使用的jar 版本。
知已知彼才能百戰不殆,因 weblogic 小版本較多且版本之間差異較大。
查看 weblogic 版本有很多方法,最直接方式是詢問安裝 weblogic 的同事,或是登入 linux 像下面這樣。
得知部署的版本後,去瞅瞅oracle weblogic 官網,那裡的文檔資料是最全面也是最權威的。
找出對應版本點view Library 跳轉進去,在裡面是整個版本的概覽,咱們的關注點應該是該 weblogic 版本支援的標準。
裡面有詳細的該weblogic 支援的java、web Service、一些雜七雜八的標準,例如JDK、EL、 Servlet、JAX-RS、JAX-WS....
## 有了上述具體的支援標準,配合部署報錯的具體類別和方法,就可以對症下藥。
以下列舉部署weblogic 時常見的幾個錯誤錯誤例外(還有很多遇到在補充):
java. lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0 (weblogic Jdk 版本與專案jdk 版本不一致)
##request.getRealPath request.getRealPath() 為api. jar 本機和weblogic 有差異,使用類別載入 Thread.currentThread().getContextClassLoader() 取得相對路徑)
## ClassNotFoundException:org.hibernate.hql.ast .HqlToken (weblogic 已依賴較早版本的antlr.jar)
# 解決此類問題的方式大體有三種,遇到部署問題時也可以自己都實踐一下。
###a. 刪除weblogic 下衝突jar 資料夾:
(1)刪除/bea/weblogic12.1.3/server/lib/weblogic.jar中的衝突的資料夾;
(2)copy 衝突的XXX.ja r到/bea/weblogic12.1.3/server/lib, 重啟weblogic。
b. 透過修改啟動腳本來優先載入某些jar
(1)將衝突的jar 套件拷貝到${DOMAIN_HOME} /lib 目錄下。
(2)${DOMAIN_HOME}/bin 下找到startWeblogic.sh 檔案用文字編輯器將其打開,並在裡面加入如下內容:
export first_classpath=${DOMAIN_HOME}/lib/xxxx.jar SAVE_CLASSPATH="${first_classpath}:${CLASSPATH}"
c. 在應用程式中透過weblogic .xml 的配置,優先載入應用的jar
因weblogic 版本不用,weblogic 的設定項會有差異,不要盲目從網上copy。
官網版本說明(其他版本將1213換一下即可):
注意其中的 prefer-application-resources/prefer-application -packages(預先載入應用對應jar ) 節點的配置:
<?xml version="1.0" encoding="UTF-8"?><weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"><container-descriptor><prefer-web-inf-classes>false</prefer-web-inf-classes><prefer-application-packages><package-name>预先加载项目 lib 中的包名,支持通配符</package-name><package-name>com.sun.faces.*</package-name><package-name>com.bea.faces.*</package-name></prefer-application-packages></container-descriptor></weblogic-web-app>
解決方案a/b/c 中, c 方案無異是最優解,做為生產環境的weblogic 可能會部署多個應用,不太可能讓你隨便重啟。
方案 a,b 會破壞 weblogic 的整體性,可能導致其他部署在 weblogic 上的應用程式出現問題。
#
以上是部署 weblogic出現問題時要怎麼解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!