近日,工作需要將升級後的版本從Windows遷移到Linux。升級的版本在本地Windows反覆測試都沒問題,但是當部署到Linux的時候,這怪病一個接一個的。所幸的是,經過努力還是將一道道困難排除,成功部署了。
  這其中遇到的一個問題是無法獲得Weblogic的上下文環境。始終得不到Context。

  javax.naming.NoInitialContextException:
  java.lang.NoSuchMethodError: weblogic.management.configuration.KernelMBean.getRefreshClientRuntimeDescriptor()

 
  首先不要被後半部分迷惑:weblogic.management.configuration.KernelMBean.getRefreshClientRuntimeDescriptor()
問題的重點是前半部分java.lang.NoSuchMethodError。
 
丟擲java.lang.NoSuchMethodError:表示無法找到某一特定方法時。
 
這樣,就一下定位到了問題的大方向。接下來可以分析weblogic.management.configuration.KernelMBean.getRefreshClientRuntimeDescriptor()。
原來問題出在weblogic.jar。這樣,問題迎刃而解。工程中引用的weblogic相關jar版本有問題。

解決方案:
工程中引用了weblogic.jar、xbean.jar、wljmsclient.jar3個weblogic相關的jar包。
將Linux伺服器上,Weblogic目錄下 %weblogic%bea/weblogic92/server/lib/的相關jar包替換了工程中引用到的jar包後就成功了。
 
總結:
解決問題的過程,也就那那麼幾分鐘的事情,複製-替換-編譯-打包-部署-測試。可是,在解決的過程中,著實浪費了不少的時間。  
即使,將來遇到什麼更怪的沒見過的也都沒問題java.lang.NoSuchMethodError : XXXXX.XXXXX.XXXXX.XXXXX.XXXXX 任他變成什麼、變的多麼奇怪都無所謂。

遇到問題不要慌,應該仔細分析分析,這樣會比漫步目的在網上搜效果好的多。要培養獨立分析解決問題的能力。