web|原始碼
看過許多遠端偵錯的例子,大多數都是針對tomcat或者jboss伺服器的,很少能搜尋到weblogic伺服器的遠端偵錯例子和文章,前些天在項目開發的時候嘗試了一下,感覺十分得不錯,拿出來跟大家分享一下,不過我要多羅嗦幾句。
遠端偵錯的好處:我們現在開發的模式大多是本機用eclipse整合source管理環境,整合ant的編譯環境,用weblogic外掛程式整合運行環境,基本上一個eclipse又當爹又當媽的,這樣的好處就是開發環境配置集中,普通的程式員只要按步驟做就可以了,開發步驟簡單,對整個項目是一件好事。那麼站在普通的程式員角度?什麼也沒有學到,就是在模仿而已,如果原生硬體設定如果很低的話,意味著開發效率的降低,同時一點開發樂趣都沒有,就是在實現業務而已,是很難瞭解工具本身的特點。遠端偵錯的好處就是把集中的配置分散開來,讓資源分派在不同的機器上,降低本機資源的使用。換一句話,就是將運行環境和開發環境的徹底的分離出來,對於那些即時對應和保守的程式員來說,簡直就是一個福音,使用者環境一旦出現什麼bug的話,你個人可以在最短的時間內再現和調試,而不用運行原生測試環境。
遠端偵錯的準備知識:使用Java 平台調試架構,Java Platform Debugger Architecture,簡稱JPDA,具體的可以參照API文檔裡面的Tool Support裡面的Java Platform Debugger Architecture (JPDA)(我的jdk文檔是1.42的,如果是別的版本,你搜尋一下jpda就可以找到相關的資料)。換一句話,我們藉助於這個平台來debug應用程式,其實我們也會看到eclipse裡面也有debug的,那麼它們是不是一回事呢?我倒是搜尋了一下,基本上eclpse的調試就是使用和擴充這個工具平台的,只不過遠端偵錯需要我們自己手動設定而已,而你在本地調試的時候,那些配置都是外掛程式幫你完成的,你本人就是一個使用者而已,所以沒有關心的那麼多。
具體的實現步驟:設定管理員的啟動參數,如果熟悉weblogic的話,會發現weblogic更多是用java實現的。對於我們來說,如果是windows使用者的話,你只需要修改domain
裡面的startWebLogic.cmd批次檔,你在這個檔案裡設定一個系統變數,
白話就是你添加一行set JAVA_DEBUG=-Xdebug -Xnoagent -Xrunjdwp: transport=dt_socket,address=4000,server=y,suspend=n。這樣是不夠的,你還需要將這句話添加到%JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server裡
修改後的結果%JAVA_HOME%\bin\java %JAVA_VM% %JAVA_DEBUG% %MEM_ARGS% %JAVA_OPTIONS%weblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server
這樣做的目的就是讓你啟動weblogic的同時,把JPDA也啟動起來,至於你的weblogic的實際啟動參數是不是和我一樣,我就不知道了,反正這麼寫的目的就是讓JPDA的參數也載入到你的啟動參數列表裡,啟動weblogic的同時也將JPDA啟動起來,具體的修改還是根據自己的實際情況來定,但是目的是相同的。
配置用戶端:這邊使用的用戶端工具自然就是eclipse了,原先你在本地的工程配置保持不變,換一句話說你也必須把自己的工程import到你的eclipse,使用和操作上和本地的沒有任何的變化。但是你需要建立一個remote java Application,讓後配置一下就可以了(可惜我不會在jr裡上穿圖片,否則抓一下圖,一看就明白了)。簡單地說,在你的debug裡有java application,java applet,junit等等,當然那裡也有remote java Application,你建立一個就可以了,簡單配置一下遠程主機的地址和監聽連接埠(就是你在伺服器配置過程指定的4000),選擇一下你的工程,然後給這個remote java Application起個名字之類。
需要注意的地方:在你debug的時候,一定要保證你本地的source和伺服器上啟動並執行環境上的跑的class一致,換一句話說一定要及時更新source,否則debug的結果就是莫名其妙的。還有你把自己的source編譯後的jar包或者檔案夾放到伺服器上,一定要每次都發布一遍,如果你偶爾忘記一次,那麼雖然你伺服器上跑的class和本地的source一致,由於你沒有發布,那麼debug的結果,也不一致了,所以保持一致性是兩重的含義。
小結
其實配置遠程debug並不困難,基本的原理很簡單,伺服器端在啟動的伺服器的同時,也把JPDA明確的啟動起來,分配一個連接埠號碼,那麼你在用戶端只要串連上JPDA服務(sun稱為工具平台,我個人稱為服務)便能測試了,給我的感覺更像是一個socket編程實現的服務。至於其他的伺服器的遠端偵錯?原理一定是一樣的,只不過你需要根據它們提供的文檔,相應的修改遠端偵錯的參數而已。同時聲明一下,我個人的水平也是很一般,在認識和經驗上也有一定的欠缺,如果本貼子有什麼不妥和不對的地方,請大家指出和共同學習。