从Tomcat 5.5.x迁移到6.0.x.

时间:2009-11-19 21:08:08

标签: java tomcat servlets migration

我正在将成熟的应用程序从Tomcat 5.5.x迁移到6.0.x.我需要确定哪些要点才能确定?

我使用了一些我怀疑需要调整的Tomcat服务......

  1. 日志记录机制:我更改了conf / logging.properties以包含我的webapp。
  2. type =“javax.sql.DataSource”的资源:我使用它连接到Oracle。
  3. 编辑我从一些Tomcat文档中看到,而不是使用$ TOMCAT_HOME / conf的server.xml和logging.properties,这些属于应用程序的context.xml和WEB-INF。也许6.0坚持这个?

    注意:在serverfault.com上发布了交叉。

    编辑-2 :以下是localhost.YYYY-MM-DD.log中记录的异常......

    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)
    

3 个答案:

答案 0 :(得分:1)

Apache Tomcat网站有一个Migration Guide您可能想要检查。您可以在其中找到一些有用的信息,因为您知道您的应用程序使用的内容比SO读者更好:)

Matt Raible在this post报告了更多反馈:

  • 他能够毫无问题地复制XML文件(conf/server.xmlconf/Catalina/**),
  • 他必须在某个webapp中包含commons-logging.jar,因为它已经重命名,
  • 他必须为JSF删除el-api.jar

关于您所做的具体更改,我猜您将不得不再次应用它们。但我不确定他们是否需要调整。

但实际上,我想知道为什么要迁移成熟应用程序。您打算使用Servlet 2.5和JSP 2.1 API吗?你对其他improvements感兴趣吗?

答案 1 :(得分: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文件。每当webapp部署在不同品牌/版本的应用服务器上时,这将导致“无法解释的”ClassNotFoundExceptionNoClassDefFoundError问题。但如果webapp全部“干净”,那么我不会预见到真正的问题。

答案 2 :(得分:0)

当我们迁移到Tomcat 6.0时,我们的应用程序出现了一些问题,因为它随标准EE库一起提供,声明了javax.servlet和类似的东西 - 我现在不记得具体名称了。它在Tomcat 5.5中运行良好,但在Tomcat 6.0中不起作用。我们有一些理论为什么它不起作用:

  • Tomcat 5.5会在类加载器中忽略这些库,而Tomcat 6.0则不会;
  • 这些库与Tomcat 5.5的EE规范兼容,但与6.0不兼容。

这个项目是一个Maven构建。我们跟踪了依赖关系,排除了包含这些库的人,并将正确的库添加到我们使用的tomcat版本中,但是作为“提供”,这意味着在打包应用程序时不会发送它们。然后它奏效了。

除此之外,我不记得有任何问题。但是这个很难找到。在他们为Tomcat 5.5提供支持时,我不会迁移到Tomcat 6.0。