2009-11-19 146 views
1

我正在將一個成熟的應用程序從Tomcat 5.5.x遷移到6.0.x.我需要確保我的地址有什麼棘手的問題?從Tomcat 5.5.x遷移到6.0.x

我用一對夫婦的Tomcat的服務,我懷疑將需要調整......

  1. 日誌機制:我改變了的conf/logging.properties,包括我的web應用程序。
  2. 資源的類型=「javax.sql.DataSource」:我用它來連接到Oracle。

編輯我從一些Tomcat文檔中看到,與其使用的server.xml和$ TOMCAT_HOME/conf目錄的logging.properties,這些都屬於在應用程序的context.xml中和WEB-INF。也許6.0堅持這個?

備註:交叉發表於serverfault.com

編輯-2:這裏是

Nov 19, 2009 12:29:31 PM org.apache.catalina.core.ApplicationContext log 
INFO: [gov.llnl.tox.toxServlet]@20091119122931.231 - initialized tox version: 1.5 build 0 with verbose logging 
Nov 19, 2009 12:29:38 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet jsp threw exception 
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
    at org.apache.commons.httpclient.HttpMethodBase.<clinit>(HttpMethodBase.java:104) 
    at gov.llnl.tox.util.tag.doPost(tag.java:37) 
    at gov.llnl.tox.util.tag.doAfterBody(tag.java:66) 
    at org.apache.jsp.test_jsp._jspx_meth_tox_005ftoxTalk_005f0(test_jsp.java:241) 
    at org.apache.jsp.test_jsp._jspService(test_jsp.java:90) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Thread.java:595) 
Nov 19, 2009 12:35:58 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet jsp threw exception 
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
    at org.apache.commons.httpclient.HttpMethodBase.<clinit>(HttpMethodBase.java:104) 
    at gov.llnl.tox.util.tag.doPost(tag.java:37) 
    at gov.llnl.tox.util.tag.doAfterBody(tag.java:66) 
    at org.apache.jsp.test_jsp._jspx_meth_tox_005ftoxTalk_005f0(test_jsp.java:241) 
    at org.apache.jsp.test_jsp._jspService(test_jsp.java:90) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Thread.java:595) 

回答

0

當我們遷移到Tomcat 6.0,我們有一些問題,我們的應用程序記錄在localhost.YYYY-MM-DD.log例外...因爲它隨標準EE庫一起發佈,所以聲明javax.servlet和類似的東西 - 我現在不記得具體的名稱。它在Tomcat 5.5中運行正常,但在Tomcat 6.0中不起作用。我們有一些理論爲什麼它不工作:

  • Tomcat 5.5會簡單地忽略類加載器中的這些庫,而Tomcat 6.0不會;
  • 這些庫與Tomcat 5.5的EE規範兼容,但不兼容6.0。

這個項目是一個Maven版本。我們跟蹤依賴關係,排除包含這些庫的人,並將正確的庫添加到我們正在使用的tomcat版本中,但是作爲「provided」,這意味着它們在應用程序打包時不會發貨。然後它工作。

除此之外,我不記得任何問題。但是這個很難找到。當他們提供對Tomcat 5.5的支持時,我不會遷移到Tomcat 6.0。

+1

我的應用程序不包含任何包含javax。*或java。*的jar。 – dacracot 2009-11-19 23:24:39

+0

在web應用程序中包含應用程序服務器特定庫是一種不好的做法。僅僅因爲那些不友好的問題。 – BalusC 2009-11-19 23:47:40

+0

@BalusC它來自我們添加的其他一些依賴項。當我們注意到這個問題時,我們回顧了我們的依賴關係,以確保沒有任何不需要的東西被攜帶。 – 2009-11-20 03:22:03

1

Apache Tomcat網站有一個Migration Guide,你可能想檢查。您可能會發現它的一些有用的信息,你知道你的應用程序使用比SO讀者做:)

馬特Raible報告中this post一些更多的反饋更好:

  • 他能夠複製XML文件沒有任何問題(超過conf/server.xmlconf/Catalina/**
  • 他必須包括commons-logging.jar在一些web應用程序,因爲它已經被打包改名,
  • 他不得不刪除el-api.jar的JSF。

關於您所做的具體更改,我想您必須再次應用它們。但我不確定他們需要調整。

但實際上,我想知道爲什麼你遷移你的成熟的應用程序。你打算使用Servlet 2.5和JSP 2.1 API嗎?你對另一個improvements感興趣嗎?

+0

我看了一下「移民指南」...說實話...它的跛腳。只有270個字,沒有說什麼。 – dacracot 2009-11-19 23:54:45

+0

哦,以及遷移的原因......我們正在考慮使用顯然依賴於6.0.x的Liferay,並且我們不想維護兩個版本的Tomcat。 – dacracot 2009-11-19 23:59:01

1

將Tomcat 5.5升級到6並沒有什麼大不了的。基本上你只需要重新配置/conf的東西就好了。

一個重要的細節是,Tomcat的6有一個/lib文件夾中的所有默認庫,而Tomcat的5.x的他們已經遍佈/lib/shared/common及其子文件夾。驗證是否沒有刪除可能需要複製到Tomcat 6的額外的非特定於應用程序服務器的JAR文件。通常,這些僅僅是容器管理的數據源和其他資源所需的JDBC驅動程序和其他JAR文件。此外,Tomcat 6的/conf/catalina.properties也有新屬性shared.loadercommon.loader其中您可以自己指定這些類型的路徑。用於外部化webapp屬性文件,xslt文件,i18n文件等。

將Web應用程序遷移到另一臺服務器是另一回事。類路徑中會出現最大的問題。可能發生的情況是,開發者已經以某種方式丟棄了/WEB-INF/lib中的一些特定於應用服務器的JAR文件。如果web應用程序部署在不同make /版本的應用程序服務器上,會導致「無法解釋」ClassNotFoundExceptionNoClassDefFoundError問題。但是如果Web應用程序都是「乾淨的」,那麼我就不會遇到真正的問題。

+0

我遇到了您所描述的問題,「無法解釋的」ClassNotFoundException。 My/WEB-INF/lib由orai18n.jar,saxon9.jar和我自己的tox.jar組成。老實說,不記得爲什麼orai18n在那裏。也許這是一個起點。 另外,你是什麼意思的「乾淨」的Web應用程序? – dacracot 2009-11-20 16:18:02

+0

首先,失蹤班的名字是什麼?如果它是應用服務器應該默認提供的Java EE類之一,那麼這意味着'WEB-INF/lib'是髒的(參見第3段)。如果它涉及appserver默認提供的另一個類,那麼驗證應該複製到Tomcat 6的Tomcat 5.5的庫路徑中是否沒有任何JAR(請參閱第2段)。 – BalusC 2009-11-20 16:27:13

+0

它是前者...應該是tomcat的一部分的日誌記錄機制被報告爲失蹤。但我仍不清楚你的意思是「骯髒」。我的應用程序的WEB-INF/lib中只有三個罐子。我的罐子是「乾淨的」。我當然相信saxon9.jar。也許oracle orai18n.jar是個問題? – dacracot 2009-11-20 16:33:52