【问题标题】:How do I upgrade this embedded tomcat?如何升级这个嵌入式 tomcat?
【发布时间】:2011-05-31 12:11:22
【问题描述】:

我想基本上升级我的 tomcat 版本(在 RHEL 上)。

总是在我的 war 文件将被转储到 */webapps 的环境中工作,在重新启动 tomcat 时,war 文件会扩展,其余的都是历史记录。

现在,我正在使用的系统具有完全不同的文件夹结构。

类似这样的:

[root@bliss ~]# ls /usr/local/blah/blu-app/WEB-INF/
accounts      faces-reports.xml  logging.properties             web-app_2_3.dtd
bin           faces-syscfg.xml   logging.properties-production  web-app_2_4.xsd
buildnum.txt  framework2007      perl                           web.xml
classes       host.xsd           settings                       work
deploy-root   java.policy        tags
events.xsd    lib                tld
[root@bliss ~]#

我可以在这里看到一些与tomcat相关的jar:

/usr/local/blah/blu-app/WEB-INF/lib/tomcat-http.jar
/usr/local/blah/blu-app/WEB-INF/lib/tomcat-util.jar
/usr/local/blah/blu-app/WEB-INF/lib/tomcat-coyote.jar

更新

所以我确实发现 tomcat 是嵌入的,因为我发现以下代码开始它:

tomcat = new Embedded();
tomcat.setCatalinaHome(targetPath);

Host host = tomcat.createHost("localhost", targetPath);
Context rootCtx = tomcat.createContext("", targetPath);
((StandardContext)rootCtx).setWorkDir("WEB-INF/work"); 
ServletContext servletContext = rootCtx.getServletContext();
servletContext.setAttribute("version", version);
ApplRealm realm = new ApplRealm(servletContext);
tomcat.setRealm(realm);

rootCtx.setPrivileged(true);

Engine engine = tomcat.createEngine();
engine.setName("tomcat");
engine.setDefaultHost("localhost");
host.addChild(rootCtx);
engine.addChild(host);
tomcat.addEngine(engine);

LOG.debug("starting tomcat");
tomcat.start();
LOG.debug("tomcat started");
// clear out any old sessions: see bug 17882
Session[] sessions = rootCtx.getManager().findSessions();
for (int i = 0; i < sessions.length; i++)
{
    sessions[i].expire();
}

ServerSocket socket = null;
socket = new ServerSocket(CmcUtils.getControlPort(), 2, InetAddress.getByName("127.0.0.1"));
socket.accept();

LOG.info("Received shutdown command. Exiting !");

tomcat.stop();

那么问题来了,这个tomcat怎么升级成Tomcat6呢?

用 WEB-INF/lib 中的最新 jar 替换?哪个都是罐子?

【问题讨论】:

    标签: java tomcat embed upgrade


    【解决方案1】:

    这取决于。它可以是嵌入式 tomcat,但也可以是高度定制的 tomcat 配置。

    检查启动脚本以确定正在调用哪个类。如果它是通常的 catalina 它没有嵌入它只是他们将配置更改为指向另一个文件夹而不是 webapps。

    如果它确实是嵌入的,那​​么要升级你需要用新的替换 tomcat jar。

    【讨论】:

    • 感谢 jbx,它确实是嵌入的。更新了问题。你能看一下吗?
    • 因此,您需要替换所有相关的罐子。在此处查看此链接。它适用于 Tomcat 7.0,但会给您一个好主意。 nileshk.com/2010/08/25/emdedding-apache-tomcat-7-0.html
    • 在尝试此操作时我会非常小心。您无法保证 Tomcat 人员不会重构类并更改类名、包名或方法名,这可能会破坏应用程序的代码。您是否有需要升级的具体原因?
    • 主要是因为'客户要求我们;)。但认真对待更高版本附带的所有安全修复程序。
    • 好的,所以尝试更换罐子并祈祷没有任何损坏。 Servlet 规范没有定义嵌入式 servlet 引擎,因此如果应用程序使用的来自 tomcat jar 的任何类/包/方法在最新版本中发生更改,应用程序代码也需要更改。希望没有任何改变,但要彻底测试并在引擎启动时注意那些模糊的异常。
    【解决方案2】:

    在 tomcat 中我们可以创建虚拟主机,即让 tomcat 识别部署在外部文件夹中的应用程序。

    可以在此处找到更多信息。 http://tomcat.apache.org/tomcat-5.5-doc/config/host.html

    在您给定的场景中,尝试在 server.xml 中查找,该文件通常位于 tomcat home 的 conf 文件夹中。

    【讨论】:

    • 我找不到 server.xml!所以没有tomcat home,所以这是嵌入的?
    • 您是否进行了系统范围的搜索?
    • 这条路你走得很远。从你知道的事情开始。检查用于启动应用程序的脚本。如果它看起来像一个普通的 tomcat startup.sh 或 catalina.sh 它不是嵌入的。嵌入式意味着您的应用程序以编程方式启动 tomcat。
    • 是的,我进行了系统范围的搜索,更新了问题。感谢您对拉特纳的关注。
    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2013-03-27
    • 1970-01-01
    • 2019-02-24
    • 2023-03-13
    相关资源
    最近更新 更多