練功房推薦書單

  • 猛虎出柙雙劍合璧版--最新 OCA / OCP Java SE 7 Programmer 專業認證 (電子書)
  • 流浪教師存零股存到3000萬(全新增修版)(書+DVD)
  • 開始在關西自助旅行(京都‧大阪‧神戶‧奈良)(全新增訂版)
  • 不敗教主的300張股票存股術

從Tomcat 5.5 升到 Tomcat6.0 出現找不到 JNDI Naming 的問題 RSS feed
討論區首頁 » Application Server
發表人 內容
jhliang

十級學員

註冊時間: 2007/1/3
文章: 9
離線
從Tomcat 5.5 升級到 Tomcat 6.0時, 將${CATAINA_HOME}/common/lib 底下的jar檔copy到${CATAINA_HOME}/lib後, 若當初有設定使用Tomcat的 dbcp 來管理Database Connection Pool , 那麼在Run 的時候會出現 Name java:comp is not bound in this Connection 的錯誤, 這時透過修改 server.xml 及 context.xml 檔都沒用

後來上網查了一下, 發現原因是有 jar 檔重覆了!!

因為Tomcat 6.0 把之前5.5.x版本的某些jar重整, 而與naming有關的三個jar檔被包入6.0版的兩個jar內
1. naming-factory.jar naming-resources.jar
=> 被包在 catalina.jar
2. naming-factory-dbcp.jar
=> 被 tomcat-dbcp.jar 取代

所以把上面3個 naming-xxxx.jar 移掉應該就可正常使用dbcp了


ps. 在google時也找到了下面這個說法~
if you have appache commons naming jars in your webapp libraries, tomcat tomcat does not initialise jndi context for your resources in your web.xml. remove these jars

a)naming-common.jar,
b) naming-factory.jar
c) naming-resources.jar from you web app libraries


參考網址:http://forums.sun.com/thread.jspa?threadID=5117657
andowson

七段學員
[Avatar]

註冊時間: 2007/1/2
文章: 711
來自: 台北
離線
要避免這種升級Tomcat到新版本時多複製不同檔名但功能相同的舊版函式庫,就要先閱讀一下RELEASE-NOTESChange Log

另外,我們可以實際分別下載一份Tomcat 5.5.27和Tomcat 6.0.18的壓縮檔,解壓縮後深入去瞭解一下可以發現:
Tomcat 5.5.27的函式庫包含:
${tomcat5.5_install_dir}/common/lib
-rw-r--r-- 1 root root 112341 8月 29 2008 commons-el.jar
-rw-r--r-- 1 root root 408842 8月 29 2008 jasper-compiler.jar
-rw-r--r-- 1 root root 1395272 8月 29 2008 jasper-compiler-jdt.jar
-rw-r--r-- 1 root root 77185 8月 29 2008 jasper-runtime.jar
-rw-r--r-- 1 root root 49889 8月 29 2008 jsp-api.jar
-rw-r--r-- 1 root root 198057 8月 29 2008 naming-factory-dbcp.jar
-rw-r--r-- 1 root root 37296 8月 29 2008 naming-factory.jar
-rw-r--r-- 1 root root 48147 8月 29 2008 naming-resources.jar
-rw-r--r-- 1 root root 93538 8月 29 2008 servlet-api.jar

${tomcat5.5_install_dir}/common/i18n
-rw-r--r-- 1 root root 51208 8月 29 2008 tomcat-i18n-en.jar
-rw-r--r-- 1 root root 42276 8月 29 2008 tomcat-i18n-es.jar
-rw-r--r-- 1 root root 38618 8月 29 2008 tomcat-i18n-fr.jar
-rw-r--r-- 1 root root 44527 8月 29 2008 tomcat-i18n-ja.jar

${tomcat5.5_install_dir}/server/lib
-rw-r--r-- 1 root root 27202 8月 29 2008 catalina-ant.jar
-rw-r--r-- 1 root root 24178 8月 29 2008 catalina-ant-jmx.jar
-rw-r--r-- 1 root root 227651 8月 29 2008 catalina-cluster.jar
-rw-r--r-- 1 root root 667864 8月 29 2008 catalina.jar
-rw-r--r-- 1 root root 116032 8月 29 2008 catalina-optional.jar
-rw-r--r-- 1 root root 63285 8月 29 2008 catalina-storeconfig.jar
-rw-r--r-- 1 root root 112005 8月 29 2008 commons-modeler-2.0.1.jar
-rw-r--r-- 1 root root 20298 8月 29 2008 servlets-cgi.renametojar
-rw-r--r-- 1 root root 19306 8月 29 2008 servlets-default.jar
-rw-r--r-- 1 root root 6010 8月 29 2008 servlets-invoker.jar
-rw-r--r-- 1 root root 52914 8月 29 2008 servlets-ssi.renametojar
-rw-r--r-- 1 root root 23519 8月 29 2008 servlets-webdav.jar
-rw-r--r-- 1 root root 168936 8月 29 2008 tomcat-ajp.jar
-rw-r--r-- 1 root root 25902 8月 29 2008 tomcat-apr.jar
-rw-r--r-- 1 root root 19392 8月 29 2008 tomcat-coyote.jar
-rw-r--r-- 1 root root 89473 8月 29 2008 tomcat-http.jar
-rw-r--r-- 1 root root 31801 8月 29 2008 tomcat-jkstatus-ant.jar
-rw-r--r-- 1 root root 266690 8月 29 2008 tomcat-util.jar

Tomcat 6.0.18的函式庫包含:
${tomcat6_install_dir}/lib
-rw-r--r-- 1 root root 10805 7月 22 2008 annotations-api.jar
-rw-r--r-- 1 root root 49145 7月 22 2008 catalina-ant.jar
-rw-r--r-- 1 root root 123115 7月 22 2008 catalina-ha.jar
-rw-r--r-- 1 root root 1129912 7月 22 2008 catalina.jar
-rw-r--r-- 1 root root 228471 7月 22 2008 catalina-tribes.jar
-rw-r--r-- 1 root root 27690 7月 22 2008 el-api.jar
-rw-r--r-- 1 root root 102282 7月 22 2008 jasper-el.jar
-rw-r--r-- 1 root root 511634 7月 22 2008 jasper.jar
-rw-r--r-- 1 root root 1395264 7月 22 2008 jasper-jdt.jar
-rw-r--r-- 1 root root 72183 7月 22 2008 jsp-api.jar
-rw-r--r-- 1 root root 83787 7月 22 2008 servlet-api.jar
-rw-r--r-- 1 root root 742085 7月 22 2008 tomcat-coyote.jar
-rw-r--r-- 1 root root 197443 7月 22 2008 tomcat-dbcp.jar
-rw-r--r-- 1 root root 45686 7月 22 2008 tomcat-i18n-es.jar
-rw-r--r-- 1 root root 42702 7月 22 2008 tomcat-i18n-fr.jar
-rw-r--r-- 1 root root 49019 7月 22 2008 tomcat-i18n-ja.jar

由Release Notes我們可以大致的瞭解這些jar檔的功能:
A standard installation of Tomcat 6.0 makes all of the following APIs available
for use by web applications (by placing them in "lib"):
* annotations-api.jar (Annotations package)
* catalina.jar (Tomcat Catalina implementation)
* catalina-ant.jar (Tomcat Catalina Ant tasks)
* catalina-ha.jar (High availability package)
* catalina-tribes.jar (Group communication)
* el-api.jar (EL 2.1 API)
* jasper.jar (Jasper 2 Compiler and Runtime)
* jasper-el.jar (Jasper 2 EL implementation)
* jasper-jdt.jar (Eclipse JDT 3.3 Java compiler)
* jsp-api.jar (JSP 2.1 API)
* servlet-api.jar (Servlet 2.5 API)
* tomcat-coyote.jar (Tomcat connectors and utility classes)
* tomcat-dbcp.jar (package renamed database connection pool based on Commons DBCP)

所以簡單來說,如果直接把${tomcat5.5_install_dir}/common/lib下的jar檔全部複製到${tomcat6_install_dir}/lib下,就可能會出現版本錯亂的問題。一些原本該使用Tomcat 6.0版本的jar檔變成了Tomcat 5.5版本的jar檔,這就是問題發生的主因了。

對於升級Tomcat 5.5到Tomcat 6.0,我的建議作法是,
1.先在一部測試機上安裝Tomcat 6
2.將原先的webapp程式碼複製過去
3.設定Tomcat server.xml或context.xml
4.起動Tomcat 6.0
5.開啟瀏覽器瀏覽網頁,並檢查是否有出現找不到的類別之類的錯誤訊息,再將需要的函式庫一一補上,此外,將這些新增的函式庫檔案記錄下來。
6.測試正常後,即可在上線機器上正式部署此webapp。

分享經驗 累積智慧
[WWW]
 
討論區首頁 » Application Server
前往:   
行動版